<?xml version="1.0" encoding="UTF-8"?>
<!-- Auto-generated by mrdocs. Do not edit. -->
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <choice>
      <ref name="Mrdocs"/>
      <ref name="Tagfile"/>
    </choice>
  </start>
  <define name="Mrdocs">
    <element name="mrdocs">
      <optional>
        <attribute name="noNamespaceSchemaLocation" ns="http://www.w3.org/2001/XMLSchema-instance">
          <text/>
        </attribute>
      </optional>
      <zeroOrMore>
        <ref name="AnySymbol"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="Tagfile">
    <element name="tagfile">
      <oneOrMore>
        <ref name="TagCompound"/>
      </oneOrMore>
    </element>
  </define>
  <define name="TagCompound">
    <element name="compound">
      <attribute name="kind">
        <choice>
          <value>namespace</value>
          <value>class</value>
        </choice>
      </attribute>
      <element name="name">
        <text/>
      </element>
      <element name="filename">
        <text/>
      </element>
      <zeroOrMore>
        <choice>
          <ref name="TagClass"/>
          <ref name="TagMember"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="TagClass">
    <element name="class">
      <attribute name="kind">
        <value>class</value>
      </attribute>
      <text/>
    </element>
  </define>
  <define name="TagMember">
    <element name="member">
      <attribute name="kind">
        <value>function</value>
      </attribute>
      <element name="type">
        <text/>
      </element>
      <element name="name">
        <text/>
      </element>
      <element name="anchorfile">
        <text/>
      </element>
      <element name="anchor">
        <text/>
      </element>
      <element name="arglist">
        <text/>
      </element>
    </element>
  </define>
  <define name="SymbolID">
    <text/>
  </define>
  <define name="Bool">
    <value>1</value>
  </define>
  <define name="ExtractionMode">
    <choice>
      <value>regular</value>
      <value>see-below</value>
      <value>implementation-defined</value>
      <value>dependency</value>
    </choice>
  </define>
  <define name="FunctionClass">
    <choice>
      <value>normal</value>
      <value>constructor</value>
      <value>conversion</value>
      <value>destructor</value>
    </choice>
  </define>
  <define name="RecordKeyKind">
    <choice>
      <value>struct</value>
      <value>class</value>
      <value>union</value>
    </choice>
  </define>
  <define name="UsingClass">
    <choice>
      <value>normal</value>
      <value>typename</value>
      <value>enum</value>
    </choice>
  </define>
  <define name="AccessKind">
    <choice>
      <value>none</value>
      <value>public</value>
      <value>protected</value>
      <value>private</value>
    </choice>
  </define>
  <define name="ConstexprKind">
    <choice>
      <value>none</value>
      <value>constexpr</value>
      <value>consteval</value>
    </choice>
  </define>
  <define name="StorageClassKind">
    <choice>
      <value>none</value>
      <value>extern</value>
      <value>static</value>
      <value>auto</value>
      <value>register</value>
    </choice>
  </define>
  <define name="SymbolKind">
    <choice>
      <value>namespace</value>
      <value>record</value>
      <value>function</value>
      <value>overloads</value>
      <value>enum</value>
      <value>enum-constant</value>
      <value>typedef</value>
      <value>variable</value>
      <value>guide</value>
      <value>namespace-alias</value>
      <value>using</value>
      <value>concept</value>
    </choice>
  </define>
  <define name="NameKind">
    <choice>
      <value>identifier</value>
      <value>specialization</value>
    </choice>
  </define>
  <define name="TArgKind">
    <choice>
      <value>type</value>
      <value>constant</value>
      <value>template</value>
    </choice>
  </define>
  <define name="TParamKind">
    <choice>
      <value>type</value>
      <value>constant</value>
      <value>template</value>
    </choice>
  </define>
  <define name="TParamKeyKind">
    <choice>
      <value>class</value>
      <value>typename</value>
    </choice>
  </define>
  <define name="AdmonitionKind">
    <choice>
      <value>none</value>
      <value>note</value>
      <value>tip</value>
      <value>important</value>
      <value>caution</value>
      <value>warning</value>
    </choice>
  </define>
  <define name="ParamDirection">
    <choice>
      <value>none</value>
      <value>in</value>
      <value>out</value>
      <value>inout</value>
    </choice>
  </define>
  <define name="ListKind">
    <choice>
      <value>unordered</value>
      <value>ordered</value>
    </choice>
  </define>
  <define name="TableAlignmentKind">
    <choice>
      <value>none</value>
      <value>left</value>
      <value>center</value>
      <value>right</value>
    </choice>
  </define>
  <define name="BlockKind">
    <choice>
      <value>admonition</value>
      <value>brief</value>
      <value>code</value>
      <value>heading</value>
      <value>paragraph</value>
      <value>list</value>
      <value>definition-list</value>
      <value>quote</value>
      <value>thematic-break</value>
      <value>footnote-definition</value>
      <value>table</value>
      <value>math</value>
      <value>param</value>
      <value>postcondition</value>
      <value>precondition</value>
      <value>returns</value>
      <value>see</value>
      <value>throws</value>
      <value>t-param</value>
    </choice>
  </define>
  <define name="InlineKind">
    <choice>
      <value>reference</value>
      <value>copy-details</value>
      <value>link</value>
      <value>text</value>
      <value>soft-break</value>
      <value>line-break</value>
      <value>code</value>
      <value>emph</value>
      <value>strong</value>
      <value>image</value>
      <value>footnote-reference</value>
      <value>strikethrough</value>
      <value>math</value>
      <value>superscript</value>
      <value>subscript</value>
      <value>highlight</value>
    </choice>
  </define>
  <define name="NamedType">
    <element name="named">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyName"/>
      </optional>
      <optional>
        <element name="fundamental-type">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="DecltypeType">
    <element name="decltype">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <element name="operand">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="AutoType">
    <element name="auto">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyName"/>
      </optional>
    </element>
  </define>
  <define name="LValueReferenceType">
    <element name="l-value-reference">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyType"/>
      </optional>
    </element>
  </define>
  <define name="RValueReferenceType">
    <element name="r-value-reference">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyType"/>
      </optional>
    </element>
  </define>
  <define name="PointerType">
    <element name="pointer">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyType"/>
      </optional>
    </element>
  </define>
  <define name="MemberPointerType">
    <element name="member-pointer">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyType"/>
      </optional>
      <optional>
        <ref name="AnyType"/>
      </optional>
    </element>
  </define>
  <define name="ArrayType">
    <element name="array">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyType"/>
      </optional>
      <optional>
        <element name="bounds">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="FunctionType">
    <element name="function">
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="constraints">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyType"/>
      </optional>
      <zeroOrMore>
        <ref name="AnyType"/>
      </zeroOrMore>
      <optional>
        <element name="exception-spec">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="is-variadic">
          <ref name="Bool"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="AnyType">
    <choice>
      <ref name="NamedType"/>
      <ref name="DecltypeType"/>
      <ref name="AutoType"/>
      <ref name="LValueReferenceType"/>
      <ref name="RValueReferenceType"/>
      <ref name="PointerType"/>
      <ref name="MemberPointerType"/>
      <ref name="ArrayType"/>
      <ref name="FunctionType"/>
    </choice>
  </define>
  <define name="IdentifierName">
    <element name="identifier-name">
      <optional>
        <element name="kind">
          <ref name="NameKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="identifier">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="AnyName"/>
      </optional>
    </element>
  </define>
  <define name="SpecializationName">
    <element name="specialization-name">
      <optional>
        <element name="kind">
          <ref name="NameKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="identifier">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="AnyName"/>
      </optional>
      <zeroOrMore>
        <ref name="AnyTArg"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="AnyName">
    <choice>
      <ref name="IdentifierName"/>
      <ref name="SpecializationName"/>
    </choice>
  </define>
  <define name="TypeTParam">
    <element name="type-tparam">
      <optional>
        <element name="kind">
          <ref name="TParamKind"/>
        </element>
      </optional>
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="is-parameter-pack">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <ref name="AnyTArg"/>
      </optional>
      <optional>
        <element name="key-kind">
          <ref name="TParamKeyKind"/>
        </element>
      </optional>
      <optional>
        <ref name="AnyName"/>
      </optional>
    </element>
  </define>
  <define name="ConstantTParam">
    <element name="constant-tparam">
      <optional>
        <element name="kind">
          <ref name="TParamKind"/>
        </element>
      </optional>
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="is-parameter-pack">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <ref name="AnyTArg"/>
      </optional>
      <optional>
        <ref name="AnyType"/>
      </optional>
    </element>
  </define>
  <define name="TemplateTParam">
    <element name="template-tparam">
      <optional>
        <element name="kind">
          <ref name="TParamKind"/>
        </element>
      </optional>
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="is-parameter-pack">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <ref name="AnyTArg"/>
      </optional>
      <zeroOrMore>
        <ref name="AnyTParam"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="AnyTParam">
    <choice>
      <ref name="TypeTParam"/>
      <ref name="ConstantTParam"/>
      <ref name="TemplateTParam"/>
    </choice>
  </define>
  <define name="TypeTArg">
    <element name="type-targ">
      <optional>
        <element name="kind">
          <ref name="TArgKind"/>
        </element>
      </optional>
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <ref name="AnyType"/>
      </optional>
    </element>
  </define>
  <define name="ConstantTArg">
    <element name="constant-targ">
      <optional>
        <element name="kind">
          <ref name="TArgKind"/>
        </element>
      </optional>
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="value">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="TemplateTArg">
    <element name="template-targ">
      <optional>
        <element name="kind">
          <ref name="TArgKind"/>
        </element>
      </optional>
      <optional>
        <element name="is-pack-expansion">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="template">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="AnyTArg">
    <choice>
      <ref name="TypeTArg"/>
      <ref name="ConstantTArg"/>
      <ref name="TemplateTArg"/>
    </choice>
  </define>
  <define name="TemplateInfo">
    <element name="template">
      <zeroOrMore>
        <ref name="AnyTParam"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="AnyTArg"/>
      </zeroOrMore>
      <optional>
        <element name="requires">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="primary">
          <ref name="SymbolID"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="Param">
    <element name="param">
      <optional>
        <ref name="AnyType"/>
      </optional>
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="default">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="Location">
    <element name="location">
      <optional>
        <element name="short-path">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="source-path">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="line-number">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="column-number">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="documented">
          <ref name="Bool"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="SourceInfo">
    <element name="source">
      <optional>
        <ref name="Location"/>
      </optional>
      <zeroOrMore>
        <ref name="Location"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="BaseInfo">
    <element name="base">
      <optional>
        <ref name="AnyType"/>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="is-virtual">
          <ref name="Bool"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="FriendInfo">
    <element name="friend">
      <optional>
        <ref name="AnyType"/>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="NamespaceTranche">
    <element name="namespace-tranche">
      <zeroOrMore>
        <element name="namespaces">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="namespace-aliases">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="typedefs">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="records">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="enums">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="functions">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="variables">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="concepts">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="guides">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="usings">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
    </element>
  </define>
  <define name="RecordInterface">
    <element name="record-interface">
      <optional>
        <ref name="RecordTranche"/>
      </optional>
      <optional>
        <ref name="RecordTranche"/>
      </optional>
      <optional>
        <ref name="RecordTranche"/>
      </optional>
    </element>
  </define>
  <define name="RecordTranche">
    <element name="record-tranche">
      <zeroOrMore>
        <element name="namespace-aliases">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="typedefs">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="records">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="enums">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="functions">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="static-functions">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="variables">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="static-variables">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="concepts">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="guides">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <element name="usings">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
    </element>
  </define>
  <define name="Name">
    <element name="name">
      <optional>
        <element name="kind">
          <ref name="NameKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="identifier">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="AnyName"/>
      </optional>
    </element>
  </define>
  <define name="InlineContainer">
    <element name="inline-container">
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="ListItem">
    <element name="list-item">
      <zeroOrMore>
        <ref name="BlockNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="DefinitionListItem">
    <element name="definition-list-item">
      <zeroOrMore>
        <ref name="BlockNode"/>
      </zeroOrMore>
      <optional>
        <ref name="InlineContainer"/>
      </optional>
    </element>
  </define>
  <define name="TableRow">
    <element name="table-row">
      <optional>
        <element name="is-header">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="TableCell"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="TableCell">
    <element name="table-cell">
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="NamespaceSymbol">
    <element name="namespace">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <element name="is-inline">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-anonymous">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="Name"/>
      </zeroOrMore>
      <optional>
        <ref name="NamespaceTranche"/>
      </optional>
    </element>
  </define>
  <define name="RecordSymbol">
    <element name="record">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <element name="key-kind">
          <ref name="RecordKeyKind"/>
        </element>
      </optional>
      <optional>
        <ref name="TemplateInfo"/>
      </optional>
      <optional>
        <element name="is-type-def">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-final">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-final-destructor">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="BaseInfo"/>
      </zeroOrMore>
      <zeroOrMore>
        <element name="derived">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="RecordInterface"/>
      </optional>
      <zeroOrMore>
        <ref name="FriendInfo"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="FunctionSymbol">
    <element name="function">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <ref name="AnyType"/>
      </optional>
      <zeroOrMore>
        <ref name="Param"/>
      </zeroOrMore>
      <optional>
        <ref name="TemplateInfo"/>
      </optional>
      <optional>
        <element name="func-class">
          <ref name="FunctionClass"/>
        </element>
      </optional>
      <optional>
        <element name="noexcept">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="requires">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="is-variadic">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-defaulted">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-explicitly-defaulted">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-deleted">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-deleted-as-written">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-no-return">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="has-override-attr">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="has-trailing-return">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-nodiscard">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-explicit-object-member-function">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="constexpr">
          <ref name="ConstexprKind"/>
        </element>
      </optional>
      <optional>
        <element name="storage-class">
          <ref name="StorageClassKind"/>
        </element>
      </optional>
      <optional>
        <element name="is-record-method">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-virtual">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-virtual-as-written">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-pure">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-const">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-volatile">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-final">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="explicit">
          <text/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="attributes">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <element name="function-object-impl">
          <ref name="SymbolID"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="OverloadsSymbol">
    <element name="overloads">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <element name="func-class">
          <ref name="FunctionClass"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="members">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
      <optional>
        <ref name="AnyType"/>
      </optional>
    </element>
  </define>
  <define name="EnumSymbol">
    <element name="enum">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <element name="scoped">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <ref name="AnyType"/>
      </optional>
      <zeroOrMore>
        <element name="constants">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
    </element>
  </define>
  <define name="EnumConstantSymbol">
    <element name="enum-constant">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <element name="initializer">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="TypedefSymbol">
    <element name="typedef">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <ref name="AnyType"/>
      </optional>
      <optional>
        <element name="is-using">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <ref name="TemplateInfo"/>
      </optional>
    </element>
  </define>
  <define name="VariableSymbol">
    <element name="variable">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <ref name="AnyType"/>
      </optional>
      <optional>
        <ref name="TemplateInfo"/>
      </optional>
      <optional>
        <element name="initializer">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="storage-class">
          <ref name="StorageClassKind"/>
        </element>
      </optional>
      <optional>
        <element name="is-inline">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-constexpr">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-constinit">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-thread-local">
          <ref name="Bool"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="attributes">
          <text/>
        </element>
      </zeroOrMore>
      <optional>
        <element name="is-maybe-unused">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-deprecated">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="has-no-unique-address">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-record-field">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-mutable">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-variant">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="is-bitfield">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="bitfield-width">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="GuideSymbol">
    <element name="guide">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <ref name="AnyType"/>
      </optional>
      <optional>
        <ref name="TemplateInfo"/>
      </optional>
      <zeroOrMore>
        <ref name="Param"/>
      </zeroOrMore>
      <optional>
        <element name="explicit">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="NamespaceAliasSymbol">
    <element name="namespace-alias">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <ref name="IdentifierName"/>
      </optional>
    </element>
  </define>
  <define name="UsingSymbol">
    <element name="using">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <element name="class">
          <ref name="UsingClass"/>
        </element>
      </optional>
      <optional>
        <ref name="AnyName"/>
      </optional>
      <zeroOrMore>
        <element name="shadow-declarations">
          <ref name="SymbolID"/>
        </element>
      </zeroOrMore>
    </element>
  </define>
  <define name="ConceptSymbol">
    <element name="concept">
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <ref name="SourceInfo"/>
      </optional>
      <optional>
        <element name="kind">
          <ref name="SymbolKind"/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <element name="access">
          <ref name="AccessKind"/>
        </element>
      </optional>
      <optional>
        <element name="extraction">
          <ref name="ExtractionMode"/>
        </element>
      </optional>
      <optional>
        <element name="is-copy-from-inherited">
          <ref name="Bool"/>
        </element>
      </optional>
      <optional>
        <element name="parent">
          <ref name="SymbolID"/>
        </element>
      </optional>
      <optional>
        <ref name="DocComment"/>
      </optional>
      <optional>
        <ref name="TemplateInfo"/>
      </optional>
      <optional>
        <element name="constraint">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="AnySymbol">
    <choice>
      <ref name="NamespaceSymbol"/>
      <ref name="RecordSymbol"/>
      <ref name="FunctionSymbol"/>
      <ref name="OverloadsSymbol"/>
      <ref name="EnumSymbol"/>
      <ref name="EnumConstantSymbol"/>
      <ref name="TypedefSymbol"/>
      <ref name="VariableSymbol"/>
      <ref name="GuideSymbol"/>
      <ref name="NamespaceAliasSymbol"/>
      <ref name="UsingSymbol"/>
      <ref name="ConceptSymbol"/>
    </choice>
  </define>
  <define name="DocComment">
    <element name="doc-comment">
      <zeroOrMore>
        <ref name="BlockNode"/>
      </zeroOrMore>
      <optional>
        <ref name="BriefBlock"/>
      </optional>
      <zeroOrMore>
        <ref name="ReturnsBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="ParamBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="TParamBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="ThrowsBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="SeeBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="PreconditionBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="PostconditionBlock"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="ReferenceInline"/>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="ReferenceInline"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="AdmonitionBlock">
    <element name="admonition">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="BlockNode"/>
      </zeroOrMore>
      <optional>
        <element name="admonish">
          <ref name="AdmonitionKind"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="BriefBlock">
    <element name="brief">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
      <zeroOrMore>
        <element name="copied-from">
          <text/>
        </element>
      </zeroOrMore>
    </element>
  </define>
  <define name="CodeBlock">
    <element name="code">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <optional>
        <element name="literal">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="info">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="HeadingBlock">
    <element name="heading">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
      <optional>
        <element name="level">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="ParagraphBlock">
    <element name="paragraph">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="ListBlock">
    <element name="list">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="ListItem"/>
      </zeroOrMore>
      <optional>
        <element name="list-kind">
          <ref name="ListKind"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="DefinitionListBlock">
    <element name="definition-list">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="DefinitionListItem"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="QuoteBlock">
    <element name="quote">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="BlockNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="ThematicBreakBlock">
    <element name="thematic-break">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="FootnoteDefinitionBlock">
    <element name="footnote-definition">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="BlockNode"/>
      </zeroOrMore>
      <optional>
        <element name="label">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="TableBlock">
    <element name="table">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <element name="alignments">
          <ref name="TableAlignmentKind"/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="TableRow"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="MathBlock">
    <element name="math">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <optional>
        <element name="literal">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="ParamBlock">
    <element name="param">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="direction">
          <ref name="ParamDirection"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="PostconditionBlock">
    <element name="postcondition">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="PreconditionBlock">
    <element name="precondition">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="ReturnsBlock">
    <element name="returns">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="SeeBlock">
    <element name="see">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="ThrowsBlock">
    <element name="throws">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
      <optional>
        <ref name="ReferenceInline"/>
      </optional>
    </element>
  </define>
  <define name="TParamBlock">
    <element name="t-param">
      <optional>
        <element name="kind">
          <ref name="BlockKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
      <optional>
        <element name="name">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="BlockNode">
    <choice>
      <ref name="AdmonitionBlock"/>
      <ref name="BriefBlock"/>
      <ref name="CodeBlock"/>
      <ref name="HeadingBlock"/>
      <ref name="ParagraphBlock"/>
      <ref name="ListBlock"/>
      <ref name="DefinitionListBlock"/>
      <ref name="QuoteBlock"/>
      <ref name="ThematicBreakBlock"/>
      <ref name="FootnoteDefinitionBlock"/>
      <ref name="TableBlock"/>
      <ref name="MathBlock"/>
      <ref name="ParamBlock"/>
      <ref name="PostconditionBlock"/>
      <ref name="PreconditionBlock"/>
      <ref name="ReturnsBlock"/>
      <ref name="SeeBlock"/>
      <ref name="ThrowsBlock"/>
      <ref name="TParamBlock"/>
    </choice>
  </define>
  <define name="ReferenceInline">
    <element name="reference">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <optional>
        <element name="literal">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="CopyDetailsInline">
    <element name="copy-details">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <optional>
        <element name="string">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="id">
          <ref name="SymbolID"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="LinkInline">
    <element name="link">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
      <optional>
        <element name="href">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="TextInline">
    <element name="text">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <optional>
        <element name="literal">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="SoftBreakInline">
    <element name="soft-break">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="LineBreakInline">
    <element name="line-break">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
    </element>
  </define>
  <define name="CodeInline">
    <element name="code">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="EmphInline">
    <element name="emph">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="StrongInline">
    <element name="strong">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="ImageInline">
    <element name="image">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
      <optional>
        <element name="src">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="alt">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="FootnoteReferenceInline">
    <element name="footnote-reference">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <optional>
        <element name="label">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="StrikethroughInline">
    <element name="strikethrough">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="MathInline">
    <element name="math">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <optional>
        <element name="literal">
          <text/>
        </element>
      </optional>
    </element>
  </define>
  <define name="SuperscriptInline">
    <element name="superscript">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="SubscriptInline">
    <element name="subscript">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="HighlightInline">
    <element name="highlight">
      <optional>
        <element name="kind">
          <ref name="InlineKind"/>
        </element>
      </optional>
      <zeroOrMore>
        <ref name="InlineNode"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="InlineNode">
    <choice>
      <ref name="ReferenceInline"/>
      <ref name="CopyDetailsInline"/>
      <ref name="LinkInline"/>
      <ref name="TextInline"/>
      <ref name="SoftBreakInline"/>
      <ref name="LineBreakInline"/>
      <ref name="CodeInline"/>
      <ref name="EmphInline"/>
      <ref name="StrongInline"/>
      <ref name="ImageInline"/>
      <ref name="FootnoteReferenceInline"/>
      <ref name="StrikethroughInline"/>
      <ref name="MathInline"/>
      <ref name="SuperscriptInline"/>
      <ref name="SubscriptInline"/>
      <ref name="HighlightInline"/>
    </choice>
  </define>
</grammar>
