api/gen_c_header.ysl2
author Volker Birk <vb@pep-project.org>
Tue, 05 Feb 2019 22:10:26 +0100
branchgenerate_api
changeset 3261 508c634738d7
parent 3260 4c75d5513616
child 3262 62cdcfe4da1e
permissions -rw-r--r--
other comments
     1 // p≡p API version 2.0
     2 // C header generator
     3 
     4 // Copyleft (c) 2019, p≡p foundation
     5 
     6 // written by Volker Birk
     7 
     8 
     9 include yslt.yml2
    10 include ./config.yml2
    11 
    12 tstylesheet {
    13     include ./to_c.ysl2
    14 
    15     const "version" **version;
    16     const "copyleft" **copyleft;
    17 
    18     template "/package"
    19         apply "package", 0;
    20 
    21     template "package" document "{@name}_{@type}.h", "text" {
    22     ||
    23     // «../@name» «$version»
    24     // «@name»_«@type».h
    25 
    26     // «$copyleft»
    27 
    28     #pragma once
    29 
    30     #ifdef __cplusplus
    31     extern "C" {
    32     #endif
    33 
    34     ||
    35     apply "doc|enum|struct", 0;
    36     ||
    37 
    38     #ifdef __cplusplus
    39     } // extern "C"
    40     #endif
    41 
    42     ||
    43     }
    44 
    45     template "struct" {
    46     ||
    47     typedef struct _«func:name()» {
    48     ||
    49     apply "field";
    50     ||
    51     } «func:name()»;
    52 
    53     ||
    54     }
    55 
    56     template "field" | «@type» «@name»;
    57 
    58     template "enum" {
    59     ||
    60     typedef enum _«func:name()» {
    61     ||
    62     apply "item|doc";
    63     ||
    64     } «func:name()»;
    65 
    66     ||
    67     }
    68 
    69     template "doc"
    70     ||
    71 
    72     // «.»
    73 
    74     ||
    75 
    76     template "item" {
    77         0> «func:name()»`if "text()" { " = " value "." }``if "position()!=last()" > ,`
    78         choose {
    79             when "@doc" >  // «@doc»\n
    80             otherwise > \n
    81         }
    82     }
    83 }
    84