Home | History | Annotate | Download | only in xml
      1 <?xml version="1.0" encoding="UTF-8"?>
      2 
      3 <grammar xmlns="http://relaxng.org/ns/structure/1.0"
      4          datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
      5 
      6   <start>
      7     <choice>
      8       <!-- Everything else not explicitly mentioned below. -->
      9       <ref name="Other" />
     10 
     11       <ref name="Function" />
     12       <ref name="Class" />
     13       <ref name="Variable" />
     14       <ref name="Namespace" />
     15       <ref name="Typedef" />
     16       <ref name="Enum" />
     17     </choice>
     18   </start>
     19 
     20   <define name="Other">
     21     <element name="Other">
     22       <ref name="attrSourceLocation" />
     23       <ref name="Name" />
     24       <optional>
     25         <ref name="USR" />
     26       </optional>
     27       <optional>
     28         <ref name="Headerfile" />
     29       </optional>
     30       <optional>
     31         <ref name="Declaration" />
     32       </optional>
     33       <optional>
     34         <ref name="Abstract" />
     35       </optional>
     36       <optional>
     37         <ref name="TemplateParameters" />
     38       </optional>
     39       <optional>
     40         <ref name="Parameters" />
     41       </optional>
     42       <optional>
     43         <ref name="ResultDiscussion" />
     44       </optional>
     45       <optional>
     46         <ref name="Discussion" />
     47       </optional>
     48     </element>
     49   </define>
     50 
     51   <define name="Function">
     52     <element name="Function">
     53       <optional>
     54         <attribute name="templateKind">
     55           <choice>
     56             <value>template</value>
     57             <value>specialization</value>
     58           </choice>
     59         </attribute>
     60       </optional>
     61       <ref name="attrSourceLocation" />
     62 
     63       <optional>
     64         <attribute name="isInstanceMethod">
     65           <data type="boolean" />
     66         </attribute>
     67       </optional>
     68       <optional>
     69         <attribute name="isClassMethod">
     70           <data type="boolean" />
     71         </attribute>
     72       </optional>
     73 
     74       <ref name="Name" />
     75       <optional>
     76         <ref name="USR" />
     77       </optional>
     78       <optional>
     79         <ref name="Headerfile" />
     80       </optional>
     81       <optional>
     82         <ref name="Declaration" />
     83       </optional>
     84       <optional>
     85         <ref name="Abstract" />
     86       </optional>
     87       <optional>
     88         <ref name="TemplateParameters" />
     89       </optional>
     90       <optional>
     91         <ref name="Parameters" />
     92       </optional>
     93       <optional>
     94         <ref name="Exceptions" />
     95       </optional>
     96       <zeroOrMore>
     97         <ref name="Availability" />
     98       </zeroOrMore>
     99       <zeroOrMore>
    100         <ref name="Deprecated" />
    101       </zeroOrMore>
    102       <zeroOrMore>
    103         <ref name="Unavailable" />
    104       </zeroOrMore>
    105       <optional>
    106         <ref name="ResultDiscussion" />
    107       </optional>
    108       <optional>
    109         <ref name="Discussion" />
    110       </optional>
    111     </element>
    112   </define>
    113 
    114   <define name="Class">
    115     <element name="Class">
    116       <optional>
    117         <attribute name="templateKind">
    118           <choice>
    119             <value>template</value>
    120             <value>specialization</value>
    121             <value>partialSpecialization</value>
    122           </choice>
    123         </attribute>
    124       </optional>
    125       <ref name="attrSourceLocation" />
    126 
    127       <ref name="Name" />
    128       <optional>
    129         <ref name="USR" />
    130       </optional>
    131       <optional>
    132         <ref name="Headerfile" />
    133       </optional>
    134       <optional>
    135         <ref name="Declaration" />
    136       </optional>
    137       <optional>
    138         <ref name="Abstract" />
    139       </optional>
    140       <optional>
    141         <ref name="TemplateParameters" />
    142       </optional>
    143 
    144       <!-- Parameters and results don't make sense for classes, but the user
    145            can specify \param or \returns in a comment anyway. -->
    146       <optional>
    147         <ref name="Parameters" />
    148       </optional>
    149       <optional>
    150         <ref name="ResultDiscussion" />
    151       </optional>
    152 
    153       <optional>
    154         <ref name="Discussion" />
    155       </optional>
    156     </element>
    157   </define>
    158 
    159   <define name="Variable">
    160     <element name="Variable">
    161       <ref name="attrSourceLocation" />
    162       <ref name="Name" />
    163       <optional>
    164         <ref name="USR" />
    165       </optional>
    166       <optional>
    167         <ref name="Headerfile" />
    168       </optional>
    169       <optional>
    170         <ref name="Declaration" />
    171       </optional>
    172       <optional>
    173         <ref name="Abstract" />
    174       </optional>
    175 
    176       <!-- Template parameters, parameters and results don't make sense for
    177             variables, but the user can specify \tparam \param or \returns
    178             in a comment anyway. -->
    179       <optional>
    180         <ref name="TemplateParameters" />
    181       </optional>
    182       <optional>
    183         <ref name="Parameters" />
    184       </optional>
    185       <optional>
    186         <ref name="ResultDiscussion" />
    187       </optional>
    188 
    189       <optional>
    190         <ref name="Discussion" />
    191       </optional>
    192     </element>
    193   </define>
    194 
    195   <define name="Namespace">
    196     <element name="Namespace">
    197       <ref name="attrSourceLocation" />
    198       <ref name="Name" />
    199       <optional>
    200         <ref name="USR" />
    201       </optional>
    202       <optional>
    203         <ref name="Headerfile" />
    204       </optional>
    205       <optional>
    206         <ref name="Declaration" />
    207       </optional>
    208       <optional>
    209         <ref name="Abstract" />
    210       </optional>
    211 
    212       <!-- Template parameters, parameters and results don't make sense for
    213            namespaces, but the user can specify \tparam, \param or \returns
    214            in a comment anyway. -->
    215       <optional>
    216         <ref name="TemplateParameters" />
    217       </optional>
    218       <optional>
    219         <ref name="Parameters" />
    220       </optional>
    221       <optional>
    222         <ref name="ResultDiscussion" />
    223       </optional>
    224 
    225       <optional>
    226         <ref name="Discussion" />
    227       </optional>
    228     </element>
    229   </define>
    230 
    231   <define name="Typedef">
    232     <element name="Typedef">
    233       <ref name="attrSourceLocation" />
    234       <ref name="Name" />
    235       <optional>
    236         <ref name="USR" />
    237       </optional>
    238       <optional>
    239         <ref name="Headerfile" />
    240       </optional>
    241       <optional>
    242         <ref name="Declaration" />
    243       </optional>
    244       <optional>
    245         <ref name="Abstract" />
    246       </optional>
    247 
    248       <optional>
    249         <ref name="TemplateParameters" />
    250       </optional>
    251 
    252       <!-- Parameters and results might make sense for typedefs if the type is
    253            a function pointer type. -->
    254       <optional>
    255         <ref name="Parameters" />
    256       </optional>
    257       <optional>
    258         <ref name="ResultDiscussion" />
    259       </optional>
    260 
    261       <optional>
    262         <ref name="Discussion" />
    263       </optional>
    264     </element>
    265   </define>
    266 
    267   <define name="Enum">
    268     <element name="Enum">
    269       <ref name="attrSourceLocation" />
    270       <ref name="Name" />
    271       <optional>
    272         <ref name="USR" />
    273       </optional>
    274       <optional>
    275         <ref name="Headerfile" />
    276       </optional>
    277       <optional>
    278         <ref name="Declaration" />
    279       </optional>
    280       <optional>
    281         <ref name="Abstract" />
    282       </optional>
    283 
    284       <!-- Template parameters, parameters and results don't make sense for
    285             enums, but the user can specify \tparam \param or \returns in a
    286             comment anyway. -->
    287       <optional>
    288         <ref name="TemplateParameters" />
    289       </optional>
    290       <optional>
    291         <ref name="Parameters" />
    292       </optional>
    293       <optional>
    294         <ref name="ResultDiscussion" />
    295       </optional>
    296 
    297       <optional>
    298         <ref name="Discussion" />
    299       </optional>
    300     </element>
    301   </define>
    302 
    303   <define name="attrSourceLocation">
    304     <optional>
    305       <attribute name="file">
    306         <!-- Non-empty text content. -->
    307         <data type="string">
    308           <param name="pattern">.*\S.*</param>
    309         </data>
    310       </attribute>
    311     </optional>
    312     <optional>
    313       <attribute name="line">
    314         <data type="positiveInteger" />
    315       </attribute>
    316       <attribute name="column">
    317         <data type="positiveInteger" />
    318       </attribute>
    319     </optional>
    320   </define>
    321 
    322   <define name="Name">
    323     <element name="Name">
    324       <!-- Non-empty text content. -->
    325       <data type="string">
    326         <param name="pattern">.*\S.*</param>
    327       </data>
    328     </element>
    329   </define>
    330 
    331   <define name="USR">
    332     <element name="USR">
    333       <!-- Non-empty text content. -->
    334       <data type="string">
    335         <param name="pattern">.*\S.*</param>
    336       </data>
    337     </element>
    338   </define>
    339 
    340   <define name="Abstract">
    341     <element name="Abstract">
    342       <zeroOrMore>
    343         <ref name="TextBlockContent" />
    344       </zeroOrMore>
    345     </element>
    346   </define>
    347 
    348   <define name="Declaration">
    349     <element name="Declaration">
    350       <!-- Non-empty text content. -->
    351       <data type="string"/>
    352     </element>
    353   </define>
    354 
    355   <define name="Headerfile">
    356     <element name="Headerfile">
    357       <oneOrMore>
    358         <ref name="TextBlockContent" />
    359       </oneOrMore>
    360     </element>
    361   </define>
    362 
    363   <define name="Discussion">
    364     <element name="Discussion">
    365       <zeroOrMore>
    366         <ref name="TextBlockContent" />
    367       </zeroOrMore>
    368     </element>
    369   </define>
    370 
    371   <define name="TemplateParameters">
    372     <element name="TemplateParameters">
    373       <!-- Parameter elements should be sorted according to position. -->
    374       <oneOrMore>
    375         <element name="Parameter">
    376           <element name="Name">
    377             <!-- Non-empty text content. -->
    378             <data type="string">
    379               <param name="pattern">.*\S.*</param>
    380             </data>
    381           </element>
    382           <optional>
    383             <!-- This is index at depth 0.  libclang API can return more
    384                  information about position, but we expose only essential
    385                  information here, since "Parameter" elements are already
    386                  sorted.
    387 
    388                  "Position" element could be added in future if needed.  -->
    389             <element name="Index">
    390               <data type="nonNegativeInteger" />
    391             </element>
    392           </optional>
    393           <!-- In general, template parameters with whitespace discussion
    394                should not be emitted.  Schema might be more strict here. -->
    395           <element name="Discussion">
    396             <ref name="TextBlockContent" />
    397           </element>
    398         </element>
    399       </oneOrMore>
    400     </element>
    401   </define>
    402 
    403   <define name="Parameters">
    404     <element name="Parameters">
    405       <!-- Parameter elements should be sorted according to index. -->
    406       <oneOrMore>
    407         <element name="Parameter">
    408           <element name="Name">
    409             <!-- Non-empty text content. -->
    410             <data type="string">
    411               <param name="pattern">.*\S.*</param>
    412             </data>
    413           </element>
    414           <optional>
    415             <choice>
    416               <element name="Index">
    417                 <data type="nonNegativeInteger" />
    418               </element>
    419               <element name="IsVarArg">
    420                 <empty />
    421               </element>
    422             </choice>
    423           </optional>
    424           <element name="Direction">
    425             <attribute name="isExplicit">
    426               <data type="boolean" />
    427             </attribute>
    428             <choice>
    429               <value>in</value>
    430               <value>out</value>
    431               <value>in,out</value>
    432             </choice>
    433           </element>
    434           <!-- In general, template parameters with whitespace discussion
    435                should not be emitted, unless direction is explicitly specified.
    436                Schema might be more strict here. -->
    437           <element name="Discussion">
    438             <ref name="TextBlockContent" />
    439           </element>
    440         </element>
    441       </oneOrMore>
    442     </element>
    443   </define>
    444 
    445   <define name="Exceptions">
    446     <element name="Exceptions">
    447       <oneOrMore>
    448         <ref name="TextBlockContent" />
    449       </oneOrMore>
    450     </element>
    451   </define>
    452 
    453   <define name="Availability">
    454     <element name="Availability">
    455       <attribute name="distribution">
    456         <data type="string" />
    457       </attribute>
    458       <optional>
    459         <element name="IntroducedInVersion">
    460           <data type="string">
    461             <param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param>
    462           </data>
    463         </element>
    464       </optional>
    465       <optional>
    466         <element name="DeprecatedInVersion">
    467           <data type="string">
    468             <param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param>
    469           </data>
    470         </element>
    471       </optional>
    472       <optional>
    473         <element name="RemovedAfterVersion">
    474           <data type="string">
    475             <param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param>
    476           </data>
    477         </element>
    478       </optional>
    479       <optional>
    480         <element name="DeprecationSummary">
    481           <data type="string" />
    482         </element>
    483       </optional>
    484       <optional>
    485         <ref name="Unavailable" />
    486       </optional>
    487     </element>
    488   </define>
    489 
    490   <define name="Deprecated">
    491     <element name="Deprecated">
    492       <optional>
    493         <data type="string" />
    494       </optional>
    495     </element>
    496   </define>
    497 
    498   <define name="Unavailable">
    499     <element name="Unavailable">
    500       <optional>
    501         <data type="string" />
    502       </optional>
    503     </element>
    504   </define>
    505 
    506   <define name="ResultDiscussion">
    507     <element name="ResultDiscussion">
    508       <zeroOrMore>
    509         <ref name="TextBlockContent" />
    510       </zeroOrMore>
    511     </element>
    512   </define>
    513 
    514   <define name="TextBlockContent">
    515     <choice>
    516       <element name="Para">
    517         <optional>
    518           <attribute name="kind">
    519             <choice>
    520               <value>attention</value>
    521               <value>author</value>
    522               <value>authors</value>
    523               <value>bug</value>
    524               <value>copyright</value>
    525               <value>date</value>
    526               <value>invariant</value>
    527               <value>note</value>
    528               <value>post</value>
    529               <value>pre</value>
    530               <value>remark</value>
    531               <value>remarks</value>
    532               <value>sa</value>
    533               <value>see</value>
    534               <value>since</value>
    535               <value>todo</value>
    536               <value>version</value>
    537               <value>warning</value>
    538             </choice>
    539           </attribute>
    540         </optional>
    541         <zeroOrMore>
    542           <ref name="TextInlineContent" />
    543         </zeroOrMore>
    544       </element>
    545       <element name="Verbatim">
    546         <attribute name="xml:space">
    547           <value>preserve</value>
    548         </attribute>
    549         <attribute name="kind">
    550           <!-- TODO: add all Doxygen verbatim kinds -->
    551           <choice>
    552             <value>code</value>
    553             <value>verbatim</value>
    554           </choice>
    555         </attribute>
    556         <text />
    557       </element>
    558     </choice>
    559   </define>
    560 
    561   <define name="TextInlineContent">
    562     <choice>
    563       <text />
    564       <element name="bold">
    565         <!-- Non-empty text content. -->
    566         <data type="string">
    567           <param name="pattern">.*\S.*</param>
    568         </data>
    569       </element>
    570       <element name="monospaced">
    571         <!-- Non-empty text content. -->
    572         <data type="string">
    573           <param name="pattern">.*\S.*</param>
    574         </data>
    575       </element>
    576       <element name="emphasized">
    577         <!-- Non-empty text content. -->
    578         <data type="string">
    579           <param name="pattern">.*\S.*</param>
    580         </data>
    581       </element>
    582       <element name="rawHTML">
    583         <optional>
    584           <!-- If not specified, the default value is 'false'. -->
    585           <!-- The value 'false' or absence of the attribute does not imply
    586                that the HTML is actually well-formed. -->
    587           <attribute name="isMalformed">
    588             <data type="boolean" />
    589           </attribute>
    590         </optional>
    591         <!-- Non-empty text content. -->
    592         <data type="string">
    593           <param name="pattern">.*\S.*</param>
    594         </data>
    595       </element>
    596     </choice>
    597   </define>
    598 
    599 </grammar>
    600 
    601