609 lines
16 KiB
XML
609 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
|
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
|
|
|
<start>
|
|
<choice>
|
|
<!-- Everything else not explicitly mentioned below. -->
|
|
<ref name="Other" />
|
|
|
|
<ref name="Function" />
|
|
<ref name="Class" />
|
|
<ref name="Variable" />
|
|
<ref name="Namespace" />
|
|
<ref name="Typedef" />
|
|
<ref name="Enum" />
|
|
</choice>
|
|
</start>
|
|
|
|
<define name="Other">
|
|
<element name="Other">
|
|
<ref name="attrSourceLocation" />
|
|
<ref name="Name" />
|
|
<optional>
|
|
<ref name="USR" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Headerfile" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Declaration" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Abstract" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="TemplateParameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Parameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="ResultDiscussion" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Discussion" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Function">
|
|
<element name="Function">
|
|
<optional>
|
|
<attribute name="templateKind">
|
|
<choice>
|
|
<value>template</value>
|
|
<value>specialization</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<ref name="attrSourceLocation" />
|
|
|
|
<optional>
|
|
<attribute name="isInstanceMethod">
|
|
<data type="boolean" />
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="isClassMethod">
|
|
<data type="boolean" />
|
|
</attribute>
|
|
</optional>
|
|
|
|
<ref name="Name" />
|
|
<optional>
|
|
<ref name="USR" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Headerfile" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Declaration" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Abstract" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="TemplateParameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Parameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Exceptions" />
|
|
</optional>
|
|
<zeroOrMore>
|
|
<ref name="Availability" />
|
|
</zeroOrMore>
|
|
<zeroOrMore>
|
|
<ref name="Deprecated" />
|
|
</zeroOrMore>
|
|
<zeroOrMore>
|
|
<ref name="Unavailable" />
|
|
</zeroOrMore>
|
|
<optional>
|
|
<ref name="ResultDiscussion" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Discussion" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Class">
|
|
<element name="Class">
|
|
<optional>
|
|
<attribute name="templateKind">
|
|
<choice>
|
|
<value>template</value>
|
|
<value>specialization</value>
|
|
<value>partialSpecialization</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<ref name="attrSourceLocation" />
|
|
|
|
<ref name="Name" />
|
|
<optional>
|
|
<ref name="USR" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Headerfile" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Declaration" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Abstract" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="TemplateParameters" />
|
|
</optional>
|
|
|
|
<!-- Parameters and results don't make sense for classes, but the user
|
|
can specify \param or \returns in a comment anyway. -->
|
|
<optional>
|
|
<ref name="Parameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="ResultDiscussion" />
|
|
</optional>
|
|
|
|
<optional>
|
|
<ref name="Discussion" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Variable">
|
|
<element name="Variable">
|
|
<ref name="attrSourceLocation" />
|
|
<ref name="Name" />
|
|
<optional>
|
|
<ref name="USR" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Headerfile" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Declaration" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Abstract" />
|
|
</optional>
|
|
|
|
<!-- Template parameters, parameters and results don't make sense for
|
|
variables, but the user can specify \tparam \param or \returns
|
|
in a comment anyway. -->
|
|
<optional>
|
|
<ref name="TemplateParameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Parameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="ResultDiscussion" />
|
|
</optional>
|
|
|
|
<optional>
|
|
<ref name="Discussion" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Namespace">
|
|
<element name="Namespace">
|
|
<ref name="attrSourceLocation" />
|
|
<ref name="Name" />
|
|
<optional>
|
|
<ref name="USR" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Headerfile" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Declaration" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Abstract" />
|
|
</optional>
|
|
|
|
<!-- Template parameters, parameters and results don't make sense for
|
|
namespaces, but the user can specify \tparam, \param or \returns
|
|
in a comment anyway. -->
|
|
<optional>
|
|
<ref name="TemplateParameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Parameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="ResultDiscussion" />
|
|
</optional>
|
|
|
|
<optional>
|
|
<ref name="Discussion" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Typedef">
|
|
<element name="Typedef">
|
|
<ref name="attrSourceLocation" />
|
|
<ref name="Name" />
|
|
<optional>
|
|
<ref name="USR" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Headerfile" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Declaration" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Abstract" />
|
|
</optional>
|
|
|
|
<optional>
|
|
<ref name="TemplateParameters" />
|
|
</optional>
|
|
|
|
<!-- Parameters and results might make sense for typedefs if the type is
|
|
a function pointer type. -->
|
|
<optional>
|
|
<ref name="Parameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="ResultDiscussion" />
|
|
</optional>
|
|
|
|
<optional>
|
|
<ref name="Discussion" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Enum">
|
|
<element name="Enum">
|
|
<ref name="attrSourceLocation" />
|
|
<ref name="Name" />
|
|
<optional>
|
|
<ref name="USR" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Headerfile" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Declaration" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Abstract" />
|
|
</optional>
|
|
|
|
<!-- Template parameters, parameters and results don't make sense for
|
|
enums, but the user can specify \tparam \param or \returns in a
|
|
comment anyway. -->
|
|
<optional>
|
|
<ref name="TemplateParameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="Parameters" />
|
|
</optional>
|
|
<optional>
|
|
<ref name="ResultDiscussion" />
|
|
</optional>
|
|
|
|
<optional>
|
|
<ref name="Discussion" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="attrSourceLocation">
|
|
<optional>
|
|
<attribute name="file">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="line">
|
|
<data type="positiveInteger" />
|
|
</attribute>
|
|
<attribute name="column">
|
|
<data type="positiveInteger" />
|
|
</attribute>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name="Name">
|
|
<element name="Name">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="USR">
|
|
<element name="USR">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Abstract">
|
|
<element name="Abstract">
|
|
<zeroOrMore>
|
|
<ref name="TextBlockContent" />
|
|
</zeroOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Declaration">
|
|
<element name="Declaration">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string"/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Headerfile">
|
|
<element name="Headerfile">
|
|
<oneOrMore>
|
|
<ref name="TextBlockContent" />
|
|
</oneOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Discussion">
|
|
<element name="Discussion">
|
|
<zeroOrMore>
|
|
<ref name="TextBlockContent" />
|
|
</zeroOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="TemplateParameters">
|
|
<element name="TemplateParameters">
|
|
<!-- Parameter elements should be sorted according to position. -->
|
|
<oneOrMore>
|
|
<element name="Parameter">
|
|
<element name="Name">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</element>
|
|
<optional>
|
|
<!-- This is index at depth 0. libclang API can return more
|
|
information about position, but we expose only essential
|
|
information here, since "Parameter" elements are already
|
|
sorted.
|
|
|
|
"Position" element could be added in future if needed. -->
|
|
<element name="Index">
|
|
<data type="nonNegativeInteger" />
|
|
</element>
|
|
</optional>
|
|
<!-- In general, template parameters with whitespace discussion
|
|
should not be emitted. Schema might be more strict here. -->
|
|
<element name="Discussion">
|
|
<ref name="TextBlockContent" />
|
|
</element>
|
|
</element>
|
|
</oneOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Parameters">
|
|
<element name="Parameters">
|
|
<!-- Parameter elements should be sorted according to index. -->
|
|
<oneOrMore>
|
|
<element name="Parameter">
|
|
<element name="Name">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</element>
|
|
<optional>
|
|
<choice>
|
|
<element name="Index">
|
|
<data type="nonNegativeInteger" />
|
|
</element>
|
|
<element name="IsVarArg">
|
|
<empty />
|
|
</element>
|
|
</choice>
|
|
</optional>
|
|
<element name="Direction">
|
|
<attribute name="isExplicit">
|
|
<data type="boolean" />
|
|
</attribute>
|
|
<choice>
|
|
<value>in</value>
|
|
<value>out</value>
|
|
<value>in,out</value>
|
|
</choice>
|
|
</element>
|
|
<!-- In general, template parameters with whitespace discussion
|
|
should not be emitted, unless direction is explicitly specified.
|
|
Schema might be more strict here. -->
|
|
<element name="Discussion">
|
|
<ref name="TextBlockContent" />
|
|
</element>
|
|
</element>
|
|
</oneOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Exceptions">
|
|
<element name="Exceptions">
|
|
<oneOrMore>
|
|
<ref name="TextBlockContent" />
|
|
</oneOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Availability">
|
|
<element name="Availability">
|
|
<attribute name="distribution">
|
|
<data type="string" />
|
|
</attribute>
|
|
<optional>
|
|
<element name="IntroducedInVersion">
|
|
<data type="string">
|
|
<param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param>
|
|
</data>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name="DeprecatedInVersion">
|
|
<data type="string">
|
|
<param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param>
|
|
</data>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name="RemovedAfterVersion">
|
|
<data type="string">
|
|
<param name="pattern">\d+|\d+\.\d+|\d+\.\d+.\d+</param>
|
|
</data>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name="DeprecationSummary">
|
|
<data type="string" />
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<ref name="Unavailable" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Deprecated">
|
|
<element name="Deprecated">
|
|
<optional>
|
|
<data type="string" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="Unavailable">
|
|
<element name="Unavailable">
|
|
<optional>
|
|
<data type="string" />
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="ResultDiscussion">
|
|
<element name="ResultDiscussion">
|
|
<zeroOrMore>
|
|
<ref name="TextBlockContent" />
|
|
</zeroOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="TextBlockContent">
|
|
<choice>
|
|
<element name="Para">
|
|
<optional>
|
|
<attribute name="kind">
|
|
<choice>
|
|
<value>attention</value>
|
|
<value>author</value>
|
|
<value>authors</value>
|
|
<value>bug</value>
|
|
<value>copyright</value>
|
|
<value>date</value>
|
|
<value>invariant</value>
|
|
<value>note</value>
|
|
<value>post</value>
|
|
<value>pre</value>
|
|
<value>remark</value>
|
|
<value>remarks</value>
|
|
<value>sa</value>
|
|
<value>see</value>
|
|
<value>since</value>
|
|
<value>todo</value>
|
|
<value>version</value>
|
|
<value>warning</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<zeroOrMore>
|
|
<ref name="TextInlineContent" />
|
|
</zeroOrMore>
|
|
</element>
|
|
<element name="Verbatim">
|
|
<attribute name="xml:space">
|
|
<value>preserve</value>
|
|
</attribute>
|
|
<attribute name="kind">
|
|
<!-- TODO: add all Doxygen verbatim kinds -->
|
|
<choice>
|
|
<value>code</value>
|
|
<value>verbatim</value>
|
|
</choice>
|
|
</attribute>
|
|
<text />
|
|
</element>
|
|
</choice>
|
|
</define>
|
|
|
|
<define name="TextInlineContent">
|
|
<choice>
|
|
<text />
|
|
<element name="bold">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</element>
|
|
<element name="monospaced">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</element>
|
|
<element name="emphasized">
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</element>
|
|
<element name="anchor">
|
|
<attribute name="id">
|
|
<data type="string">
|
|
<!-- Non-empty text content without whitespace. -->
|
|
<param name="pattern">\S+</param>
|
|
</data>
|
|
</attribute>
|
|
</element>
|
|
<element name="rawHTML">
|
|
<optional>
|
|
<!-- If not specified, the default value is 'false'. -->
|
|
<!-- The value 'false' or absence of the attribute does not imply
|
|
that the HTML is actually well-formed. -->
|
|
<attribute name="isMalformed">
|
|
<data type="boolean" />
|
|
</attribute>
|
|
</optional>
|
|
<!-- Non-empty text content. -->
|
|
<data type="string">
|
|
<param name="pattern">.*\S.*</param>
|
|
</data>
|
|
</element>
|
|
</choice>
|
|
</define>
|
|
|
|
</grammar>
|
|
|