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