<?xml version="1.0" encoding="UTF-8"?>
<!--
  /=====================================================================\ 
  |  LaTeXML-para.rnc                                                   |
  | RelaxNG model for LaTeXML generated documents                       |
  |=====================================================================|
  | Part of LaTeXML:                                                    |
  |  Public domain software, produced as part of work done by the       |
  |  United States Government & not subject to copyright in the US.     |
  |=====================================================================|
  | Bruce Miller <bruce.miller@nist.gov>                        #_#     |
  | http://dlmf.nist.gov/LaTeXML/                              (o o)    |
  \=========================================================ooo==U==ooo=/
-->
<grammar ns="http://dlmf.nist.gov/LaTeXML" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0">
  <define name="Para.class" combine="choice">
    <a:documentation>This module defines the following `logical' block elements.</a:documentation>
    <choice>
      <ref name="para"/>
      <ref name="logical-block"/>
      <ref name="theorem"/>
      <ref name="proof"/>
      <ref name="figure"/>
      <ref name="table"/>
      <ref name="float"/>
      <ref name="pagination"/>
    </choice>
  </define>
  <!-- allow pagination here, to avoid unnecessary extra para! -->
  <define name="Misc.class" combine="choice">
    <a:documentation>Additionally, it defines these miscellaneous elements that can appear
in both inline and block contexts.</a:documentation>
    <ref name="inline-logical-block"/>
  </define>
  <!-- ====================================================================== -->
  <define name="para">
    <element name="para">
      <a:documentation>A Logical paragraph. It has an \attr{id}, but not a \attr{label}.</a:documentation>
      <ref name="para_attributes"/>
      <ref name="para_model"/>
    </element>
  </define>
  <define name="para_attributes">
    <a:documentation>Attributes for \elementref{para}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="ID.attributes"/>
    <ref name="Positionable.attributes"/>
    <ref name="Backgroundable.attributes"/>
  </define>
  <define name="para_model">
    <a:documentation>Content model for \elementref{para}.</a:documentation>
    <ref name="Block.model"/>
  </define>
  <!-- ====================================================================== -->
  <define name="logical-block">
    <element name="logical-block">
      <a:documentation>A logical-block. Actually, like block can appear in inline or block mode, but
typesets its contents as para.</a:documentation>
      <ref name="logical-block_attributes"/>
      <ref name="logical-block_model"/>
    </element>
  </define>
  <define name="logical-block_attributes">
    <a:documentation>Attributes for \elementref{inline-logical-block}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="ID.attributes"/>
    <ref name="Positionable.attributes"/>
    <ref name="Backgroundable.attributes"/>
  </define>
  <define name="logical-block_model">
    <a:documentation>Content model for \elementref{logical-block}.</a:documentation>
    <ref name="Para.model"/>
  </define>
  <!-- ====================================================================== -->
  <define name="inline-logical-block">
    <element name="inline-logical-block">
      <a:documentation>An inline logical-block. Actually, can appear in inline or block mode, but
typesets its contents as para.</a:documentation>
      <ref name="inline-logical-block_attributes"/>
      <ref name="inline-logical-block_model"/>
    </element>
  </define>
  <define name="inline-logical-block_attributes">
    <a:documentation>Attributes for \elementref{inline-logical-block}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="ID.attributes"/>
    <ref name="Positionable.attributes"/>
    <ref name="Backgroundable.attributes"/>
  </define>
  <define name="inline-logical-block_model">
    <a:documentation>Content model for \elementref{inline-logical-block}.</a:documentation>
    <ref name="Para.model"/>
  </define>
  <!-- ====================================================================== -->
  <define name="theorem">
    <element name="theorem">
      <a:documentation>A theorem or similar object. The \attr{class} attribute can be used to distinguish
different kinds of theorem.</a:documentation>
      <ref name="theorem_attributes"/>
      <ref name="theorem_model"/>
    </element>
  </define>
  <define name="theorem_attributes">
    <a:documentation>Attributes for \elementref{theorem}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="Labelled.attributes"/>
    <ref name="Backgroundable.attributes"/>
  </define>
  <define name="theorem_model">
    <a:documentation>Content model for \elementref{theorem}.</a:documentation>
    <optional>
      <ref name="tags"/>
    </optional>
    <optional>
      <ref name="title"/>
    </optional>
    <ref name="Para.model"/>
  </define>
  <!-- ====================================================================== -->
  <define name="proof">
    <element name="proof">
      <a:documentation>A proof or similar object. The \attr{class} attribute can be used to distinguish
different kinds of proof.</a:documentation>
      <ref name="proof_attributes"/>
      <ref name="proof_model"/>
    </element>
  </define>
  <define name="proof_attributes">
    <a:documentation>Attributes for \elementref{proof}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="Labelled.attributes"/>
    <ref name="Backgroundable.attributes"/>
    <ref name="Data.attributes"/>
  </define>
  <define name="proof_model">
    <a:documentation>Content model for \elementref{proof}.</a:documentation>
    <optional>
      <ref name="tags"/>
    </optional>
    <optional>
      <ref name="title"/>
    </optional>
    <ref name="Para.model"/>
  </define>
  <!-- ====================================================================== -->
  <define name="Caption.class">
    <a:documentation>These are the additional elements representing figure and
table captions.
NOTE: Could title sensibly be reused here, instead?
Or, should caption be used for theorem and proof?</a:documentation>
    <choice>
      <ref name="caption"/>
      <ref name="toccaption"/>
    </choice>
  </define>
  <!-- ====================================================================== -->
  <define name="figure">
    <element name="figure">
      <a:documentation>A  figure, possibly captioned.</a:documentation>
      <ref name="figure_attributes"/>
      <ref name="figure_model"/>
    </element>
  </define>
  <define name="figure_attributes">
    <a:documentation>Attributes for \elementref{figure}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="Labelled.attributes"/>
    <ref name="Positionable.attributes"/>
    <ref name="Transformable.attributes"/>
    <ref name="Backgroundable.attributes"/>
    <ref name="Data.attributes"/>
    <optional>
      <attribute name="placement">
        <a:documentation>the vertical floating placement parameter that determines where the object is displayed.</a:documentation>
      </attribute>
    </optional>
  </define>
  <define name="figure_model">
    <a:documentation>Content model for \elementref{figure}; allow nested figures, etc for "sub" floats.</a:documentation>
    <zeroOrMore>
      <choice>
        <optional>
          <ref name="tags"/>
        </optional>
        <ref name="figure"/>
        <ref name="table"/>
        <ref name="float"/>
        <ref name="Block.model"/>
        <ref name="Caption.class"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- ====================================================================== -->
  <define name="table">
    <element name="table">
      <a:documentation>A  Table, possibly captioned. This is not necessarily a \elementref{tabular}.</a:documentation>
      <ref name="table_attributes"/>
      <ref name="table_model"/>
    </element>
  </define>
  <define name="table_attributes">
    <a:documentation>Attributes for \elementref{table}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="Labelled.attributes"/>
    <ref name="Positionable.attributes"/>
    <ref name="Transformable.attributes"/>
    <ref name="Backgroundable.attributes"/>
    <ref name="Data.attributes"/>
    <optional>
      <attribute name="placement">
        <a:documentation>the vertical floating placement parameter that determines where the object is displayed.</a:documentation>
      </attribute>
    </optional>
  </define>
  <define name="table_model">
    <a:documentation>Content model for \elementref{table}.</a:documentation>
    <zeroOrMore>
      <choice>
        <optional>
          <ref name="tags"/>
        </optional>
        <ref name="table"/>
        <ref name="figure"/>
        <ref name="float"/>
        <ref name="Block.model"/>
        <ref name="Caption.class"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- ====================================================================== -->
  <define name="float">
    <element name="float">
      <a:documentation>A generic float, possibly captioned, something other than a table or figure</a:documentation>
      <ref name="float_attributes"/>
      <ref name="float_model"/>
    </element>
  </define>
  <define name="float_attributes">
    <a:documentation>Attributes for \elementref{float}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="Labelled.attributes"/>
    <ref name="Positionable.attributes"/>
    <ref name="Transformable.attributes"/>
    <ref name="Backgroundable.attributes"/>
    <ref name="Data.attributes"/>
    <optional>
      <attribute name="role">
        <a:documentation>The kind of float; could be something like a listing, or some other thing</a:documentation>
      </attribute>
    </optional>
    <optional>
      <attribute name="placement">
        <a:documentation>the vertical floating placement parameter that determines where the object is displayed.</a:documentation>
      </attribute>
    </optional>
  </define>
  <define name="float_model">
    <a:documentation>Content model for \elementref{float}.</a:documentation>
    <zeroOrMore>
      <choice>
        <optional>
          <ref name="tags"/>
        </optional>
        <ref name="float"/>
        <ref name="figure"/>
        <ref name="table"/>
        <ref name="Block.model"/>
        <ref name="Caption.class"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- ====================================================================== -->
  <define name="caption">
    <element name="caption">
      <a:documentation>A caption for a \elementref{table} or \elementref{figure}.</a:documentation>
      <ref name="caption_attributes"/>
      <ref name="caption_model"/>
    </element>
  </define>
  <define name="caption_attributes">
    <a:documentation>Attributes for \elementref{caption}.</a:documentation>
    <ref name="Common.attributes"/>
    <ref name="Fontable.attributes"/>
    <ref name="Colorable.attributes"/>
    <ref name="Backgroundable.attributes"/>
  </define>
  <define name="caption_model">
    <a:documentation>Content model for \elementref{caption},
basically Inline.model with tag included (normally, but not necessarily, tag would come first).</a:documentation>
    <zeroOrMore>
      <choice>
        <ref name="tag"/>
        <text/>
        <ref name="Inline.class"/>
        <ref name="Misc.class"/>
        <ref name="Meta.class"/>
      </choice>
    </zeroOrMore>
  </define>
  <!-- ====================================================================== -->
  <define name="toccaption">
    <element name="toccaption">
      <a:documentation>A short form of \elementref{table} or \elementref{figure} caption,
used for lists of figures or similar.</a:documentation>
      <ref name="toccaption_attributes"/>
      <ref name="toccaption_model"/>
    </element>
  </define>
  <define name="toccaption_attributes">
    <a:documentation>Attributes for \elementref{toccaption}.</a:documentation>
    <ref name="Common.attributes"/>
  </define>
  <define name="toccaption_model">
    <a:documentation>Content model for \elementref{toccaption}.</a:documentation>
    <zeroOrMore>
      <choice>
        <ref name="tag"/>
        <text/>
        <ref name="Inline.class"/>
        <ref name="Misc.class"/>
        <ref name="Meta.class"/>
      </choice>
    </zeroOrMore>
  </define>
</grammar>
<!-- ====================================================================== -->
