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="Abstract" />
     29       </optional>
     30       <optional>
     31         <ref name="TemplateParameters" />
     32       </optional>
     33       <optional>
     34         <ref name="Parameters" />
     35       </optional>
     36       <optional>
     37         <ref name="ResultDiscussion" />
     38       </optional>
     39       <optional>
     40         <ref name="Discussion" />
     41       </optional>
     42     </element>
     43   </define>
     44 
     45   <define name="Function">
     46     <element name="Function">
     47       <optional>
     48         <attribute name="templateKind">
     49           <choice>
     50             <value>template</value>
     51             <value>specialization</value>
     52           </choice>
     53         </attribute>
     54       </optional>
     55       <ref name="attrSourceLocation" />
     56 
     57       <optional>
     58         <attribute name="isInstanceMethod">
     59           <data type="boolean" />
     60         </attribute>
     61       </optional>
     62       <optional>
     63         <attribute name="isClassMethod">
     64           <data type="boolean" />
     65         </attribute>
     66       </optional>
     67 
     68       <ref name="Name" />
     69       <optional>
     70         <ref name="USR" />
     71       </optional>
     72       <!-- TODO: Add exception specification. -->
     73       <optional>
     74         <ref name="Abstract" />
     75       </optional>
     76       <optional>
     77         <ref name="TemplateParameters" />
     78       </optional>
     79       <optional>
     80         <ref name="Parameters" />
     81       </optional>
     82       <optional>
     83         <ref name="ResultDiscussion" />
     84       </optional>
     85       <optional>
     86         <ref name="Discussion" />
     87       </optional>
     88     </element>
     89   </define>
     90 
     91   <define name="Class">
     92     <element name="Class">
     93       <optional>
     94         <attribute name="templateKind">
     95           <choice>
     96             <value>template</value>
     97             <value>specialization</value>
     98             <value>partialSpecialization</value>
     99           </choice>
    100         </attribute>
    101       </optional>
    102       <ref name="attrSourceLocation" />
    103 
    104       <ref name="Name" />
    105       <optional>
    106         <ref name="USR" />
    107       </optional>
    108       <optional>
    109         <ref name="Abstract" />
    110       </optional>
    111       <optional>
    112         <ref name="TemplateParameters" />
    113       </optional>
    114 
    115       <!-- Parameters and results don't make sense for classes, but the user
    116            can specify \param or \returns in a comment anyway. -->
    117       <optional>
    118         <ref name="Parameters" />
    119       </optional>
    120       <optional>
    121         <ref name="ResultDiscussion" />
    122       </optional>
    123 
    124       <optional>
    125         <ref name="Discussion" />
    126       </optional>
    127     </element>
    128   </define>
    129 
    130   <define name="Variable">
    131     <element name="Variable">
    132       <ref name="attrSourceLocation" />
    133       <ref name="Name" />
    134       <optional>
    135         <ref name="USR" />
    136       </optional>
    137       <optional>
    138         <ref name="Abstract" />
    139       </optional>
    140 
    141       <!-- Template parameters, parameters and results don't make sense for
    142             variables, but the user can specify \tparam \param or \returns
    143             in a comment anyway. -->
    144       <optional>
    145         <ref name="TemplateParameters" />
    146       </optional>
    147       <optional>
    148         <ref name="Parameters" />
    149       </optional>
    150       <optional>
    151         <ref name="ResultDiscussion" />
    152       </optional>
    153 
    154       <optional>
    155         <ref name="Discussion" />
    156       </optional>
    157     </element>
    158   </define>
    159 
    160   <define name="Namespace">
    161     <element name="Namespace">
    162       <ref name="attrSourceLocation" />
    163       <ref name="Name" />
    164       <optional>
    165         <ref name="USR" />
    166       </optional>
    167       <optional>
    168         <ref name="Abstract" />
    169       </optional>
    170 
    171       <!-- Template parameters, parameters and results don't make sense for
    172            namespaces, but the user can specify \tparam, \param or \returns
    173            in a comment anyway. -->
    174       <optional>
    175         <ref name="TemplateParameters" />
    176       </optional>
    177       <optional>
    178         <ref name="Parameters" />
    179       </optional>
    180       <optional>
    181         <ref name="ResultDiscussion" />
    182       </optional>
    183 
    184       <optional>
    185         <ref name="Discussion" />
    186       </optional>
    187     </element>
    188   </define>
    189 
    190   <define name="Typedef">
    191     <element name="Typedef">
    192       <ref name="attrSourceLocation" />
    193       <ref name="Name" />
    194       <optional>
    195         <ref name="USR" />
    196       </optional>
    197       <optional>
    198         <ref name="Abstract" />
    199       </optional>
    200 
    201       <optional>
    202         <ref name="TemplateParameters" />
    203       </optional>
    204 
    205       <!-- Parameters and results might make sense for typedefs if the type is
    206            a function pointer type. -->
    207       <optional>
    208         <ref name="Parameters" />
    209       </optional>
    210       <optional>
    211         <ref name="ResultDiscussion" />
    212       </optional>
    213 
    214       <optional>
    215         <ref name="Discussion" />
    216       </optional>
    217     </element>
    218   </define>
    219 
    220   <define name="Enum">
    221     <element name="Enum">
    222       <ref name="attrSourceLocation" />
    223       <ref name="Name" />
    224       <optional>
    225         <ref name="USR" />
    226       </optional>
    227       <optional>
    228         <ref name="Abstract" />
    229       </optional>
    230 
    231       <!-- Template parameters, parameters and results don't make sense for
    232             enums, but the user can specify \tparam \param or \returns in a
    233             comment anyway. -->
    234       <optional>
    235         <ref name="TemplateParameters" />
    236       </optional>
    237       <optional>
    238         <ref name="Parameters" />
    239       </optional>
    240       <optional>
    241         <ref name="ResultDiscussion" />
    242       </optional>
    243 
    244       <optional>
    245         <ref name="Discussion" />
    246       </optional>
    247     </element>
    248   </define>
    249 
    250   <define name="attrSourceLocation">
    251     <optional>
    252       <attribute name="file">
    253         <!-- Non-empty text content. -->
    254         <data type="string">
    255           <param name="pattern">.*\S.*</param>
    256         </data>
    257       </attribute>
    258     </optional>
    259     <optional>
    260       <attribute name="line">
    261         <data type="positiveInteger" />
    262       </attribute>
    263       <attribute name="column">
    264         <data type="positiveInteger" />
    265       </attribute>
    266     </optional>
    267   </define>
    268 
    269   <define name="Name">
    270     <element name="Name">
    271       <!-- Non-empty text content. -->
    272       <data type="string">
    273         <param name="pattern">.*\S.*</param>
    274       </data>
    275     </element>
    276   </define>
    277 
    278   <define name="USR">
    279     <element name="USR">
    280       <!-- Non-empty text content. -->
    281       <data type="string">
    282         <param name="pattern">.*\S.*</param>
    283       </data>
    284     </element>
    285   </define>
    286 
    287   <define name="Abstract">
    288     <element name="Abstract">
    289       <zeroOrMore>
    290         <ref name="TextBlockContent" />
    291       </zeroOrMore>
    292     </element>
    293   </define>
    294 
    295   <define name="Discussion">
    296     <element name="Discussion">
    297       <oneOrMore>
    298         <ref name="TextBlockContent" />
    299       </oneOrMore>
    300     </element>
    301   </define>
    302 
    303   <define name="TemplateParameters">
    304     <element name="TemplateParameters">
    305       <!-- Parameter elements should be sorted according to position. -->
    306       <oneOrMore>
    307         <element name="Parameter">
    308           <element name="Name">
    309             <!-- Non-empty text content. -->
    310             <data type="string">
    311               <param name="pattern">.*\S.*</param>
    312             </data>
    313           </element>
    314           <optional>
    315             <!-- This is index at depth 0.  libclang API can return more
    316                  information about position, but we expose only essential
    317                  information here, since "Parameter" elements are already
    318                  sorted.
    319 
    320                  "Position" element could be added in future if needed.  -->
    321             <element name="Index">
    322               <data type="nonNegativeInteger" />
    323             </element>
    324           </optional>
    325           <!-- In general, template parameters with whitespace discussion
    326                should not be emitted.  Schema might be more strict here. -->
    327           <element name="Discussion">
    328             <ref name="TextBlockContent" />
    329           </element>
    330         </element>
    331       </oneOrMore>
    332     </element>
    333   </define>
    334 
    335   <define name="Parameters">
    336     <element name="Parameters">
    337       <!-- Parameter elements should be sorted according to index. -->
    338       <oneOrMore>
    339         <element name="Parameter">
    340           <element name="Name">
    341             <!-- Non-empty text content. -->
    342             <data type="string">
    343               <param name="pattern">.*\S.*</param>
    344             </data>
    345           </element>
    346           <optional>
    347             <element name="Index">
    348               <data type="nonNegativeInteger" />
    349             </element>
    350           </optional>
    351           <element name="Direction">
    352             <attribute name="isExplicit">
    353               <data type="boolean" />
    354             </attribute>
    355             <choice>
    356               <value>in</value>
    357               <value>out</value>
    358               <value>in,out</value>
    359             </choice>
    360           </element>
    361           <!-- In general, template parameters with whitespace discussion
    362                should not be emitted, unless direction is explicitly specified.
    363                Schema might be more strict here. -->
    364           <element name="Discussion">
    365             <ref name="TextBlockContent" />
    366           </element>
    367         </element>
    368       </oneOrMore>
    369     </element>
    370   </define>
    371 
    372   <define name="ResultDiscussion">
    373     <element name="ResultDiscussion">
    374       <zeroOrMore>
    375         <ref name="TextBlockContent" />
    376       </zeroOrMore>
    377     </element>
    378   </define>
    379 
    380   <define name="TextBlockContent">
    381     <choice>
    382       <element name="Para">
    383         <zeroOrMore>
    384           <ref name="TextInlineContent" />
    385         </zeroOrMore>
    386       </element>
    387       <element name="Verbatim">
    388         <attribute name="xml:space">
    389           <value>preserve</value>
    390         </attribute>
    391         <attribute name="kind">
    392           <!-- TODO: add all Doxygen verbatim kinds -->
    393           <choice>
    394             <value>code</value>
    395             <value>verbatim</value>
    396           </choice>
    397         </attribute>
    398         <text />
    399       </element>
    400     </choice>
    401   </define>
    402 
    403   <define name="TextInlineContent">
    404     <choice>
    405       <text />
    406       <element name="bold">
    407         <!-- Non-empty text content. -->
    408         <data type="string">
    409           <param name="pattern">.*\S.*</param>
    410         </data>
    411       </element>
    412       <element name="monospaced">
    413         <!-- Non-empty text content. -->
    414         <data type="string">
    415           <param name="pattern">.*\S.*</param>
    416         </data>
    417       </element>
    418       <element name="emphasized">
    419         <!-- Non-empty text content. -->
    420         <data type="string">
    421           <param name="pattern">.*\S.*</param>
    422         </data>
    423       </element>
    424       <element name="rawHTML">
    425         <!-- Non-empty text content. -->
    426         <data type="string">
    427           <param name="pattern">.*\S.*</param>
    428         </data>
    429       </element>
    430     </choice>
    431   </define>
    432 
    433 </grammar>
    434 
    435