Newer
Older
ade-outils-xml / dtd / Wileyml3gv20-rng / mathml3-presentation.rng
@niederle niederle on 29 Dec 2015 55 KB 1er commit
<?xml version="1.0" encoding="UTF-8"?>
<!--
      This is the Mathematical Markup Language (MathML) 3.0, an XML
      application for describing mathematical notation and capturing
      both its structure and content.
  
      Copyright 1998-2010 W3C (MIT, ERCIM, Keio)
  
      Use and distribution of this code are permitted under the terms
      W3C Software Notice and License
      http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
-->
<grammar ns="http://www.w3.org/1998/Math/MathML" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <define name="MathExpression" combine="choice">
    <ref name="PresentationExpression"/>
  </define>
  <define name="ImpliedMrow">
    <zeroOrMore>
      <ref name="MathExpression"/>
    </zeroOrMore>
  </define>
  <define name="TableRowExpression">
    <choice>
      <ref name="mtr"/>
      <ref name="mlabeledtr"/>
    </choice>
  </define>
  <define name="TableCellExpression">
    <ref name="mtd"/>
  </define>
  <define name="MstackExpression">
    <choice>
      <ref name="MathExpression"/>
      <ref name="mscarries"/>
      <ref name="msline"/>
      <ref name="msrow"/>
      <ref name="msgroup"/>
    </choice>
  </define>
  <define name="MsrowExpression">
    <choice>
      <ref name="MathExpression"/>
      <ref name="none"/>
    </choice>
  </define>
  <define name="MultiScriptExpression">
    <choice>
      <ref name="MathExpression"/>
      <ref name="none"/>
    </choice>
    <choice>
      <ref name="MathExpression"/>
      <ref name="none"/>
    </choice>
  </define>
  <define name="mpadded-length">
    <data type="string">
      <param name="pattern">\s*([\+\-]?[0-9]*(\.[0-9]*)?\s*((%?\s*(height|depth|width)?)|e[mx]|in|cm|mm|p[xtc]|((negative)?((very){0,2}thi(n|ck)|medium)mathspace)))\s*</param>
    </data>
  </define>
  <define name="linestyle">
    <choice>
      <value>none</value>
      <value>solid</value>
      <value>dashed</value>
    </choice>
  </define>
  <define name="verticalalign">
    <choice>
      <value>top</value>
      <value>bottom</value>
      <value>center</value>
      <value>baseline</value>
      <value>axis</value>
    </choice>
  </define>
  <define name="columnalignstyle">
    <choice>
      <value>left</value>
      <value>center</value>
      <value>right</value>
    </choice>
  </define>
  <define name="notationstyle">
    <choice>
      <value>longdiv</value>
      <value>actuarial</value>
      <value>radical</value>
      <value>box</value>
      <value>roundedbox</value>
      <value>circle</value>
      <value>left</value>
      <value>right</value>
      <value>top</value>
      <value>bottom</value>
      <value>updiagonalstrike</value>
      <value>downdiagonalstrike</value>
      <value>verticalstrike</value>
      <value>horizontalstrike</value>
      <value>madruwb</value>
    </choice>
  </define>
  <define name="idref">
    <text/>
  </define>
  <define name="unsigned-integer">
    <data type="unsignedLong"/>
  </define>
  <define name="integer">
    <data type="integer"/>
  </define>
  <define name="number">
    <data type="decimal"/>
  </define>
  <define name="character">
    <data type="string">
      <param name="pattern">\s*\S\s*</param>
    </data>
  </define>
  <define name="color">
    <data type="string">
      <param name="pattern">\s*((#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?)|[aA][qQ][uU][aA]|[bB][lL][aA][cC][kK]|[bB][lL][uU][eE]|[fF][uU][cC][hH][sS][iI][aA]|[gG][rR][aA][yY]|[gG][rR][eE][eE][nN]|[lL][iI][mM][eE]|[mM][aA][rR][oO][oO][nN]|[nN][aA][vV][yY]|[oO][lL][iI][vV][eE]|[pP][uU][rR][pP][lL][eE]|[rR][eE][dD]|[sS][iI][lL][vV][eE][rR]|[tT][eE][aA][lL]|[wW][hH][iI][tT][eE]|[yY][eE][lL][lL][oO][wW])\s*</param>
    </data>
  </define>
  <define name="group-alignment">
    <choice>
      <value>left</value>
      <value>center</value>
      <value>right</value>
      <value>decimalpoint</value>
    </choice>
  </define>
  <define name="group-alignment-list">
    <list>
      <oneOrMore>
        <ref name="group-alignment"/>
      </oneOrMore>
    </list>
  </define>
  <define name="group-alignment-list-list">
    <data type="string">
      <param name="pattern">(\s*\{\s*(left|center|right|decimalpoint)(\s+(left|center|right|decimalpoint))*\})*\s*</param>
    </data>
  </define>
  <define name="positive-integer">
    <data type="positiveInteger"/>
  </define>
  <define name="TokenExpression">
    <choice>
      <ref name="mi"/>
      <ref name="mn"/>
      <ref name="mo"/>
      <ref name="mtext"/>
      <ref name="mspace"/>
      <ref name="ms"/>
    </choice>
  </define>
  <define name="token.content">
    <choice>
      <ref name="mglyph"/>
      <ref name="malignmark"/>
      <text/>
    </choice>
  </define>
  <define name="mi">
    <element name="mi">
      <ref name="mi.attributes"/>
      <zeroOrMore>
        <ref name="token.content"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mi.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <ref name="TokenAtt"/>
  </define>
  <define name="mn">
    <element name="mn">
      <ref name="mn.attributes"/>
      <zeroOrMore>
        <ref name="token.content"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mn.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <ref name="TokenAtt"/>
  </define>
  <define name="mo">
    <element name="mo">
      <ref name="mo.attributes"/>
      <zeroOrMore>
        <ref name="token.content"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mo.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <ref name="TokenAtt"/>
    <optional>
      <attribute name="form">
        <choice>
          <value>prefix</value>
          <value>infix</value>
          <value>postfix</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="fence">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="separator">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="lspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="stretchy">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="symmetric">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="maxsize">
        <choice>
          <ref name="length"/>
          <value>infinity</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="minsize">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="largeop">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="movablelimits">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="accent">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="linebreak">
        <choice>
          <value>auto</value>
          <value>newline</value>
          <value>nobreak</value>
          <value>goodbreak</value>
          <value>badbreak</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="lineleading">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="linebreakstyle">
        <choice>
          <value>before</value>
          <value>after</value>
          <value>duplicate</value>
          <value>infixlinebreakstyle</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="linebreakmultchar"/>
    </optional>
    <optional>
      <attribute name="indentalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>auto</value>
          <value>id</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentshift">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="indenttarget">
        <ref name="idref"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentalignfirst">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>auto</value>
          <value>id</value>
          <value>indentalign</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentshiftfirst">
        <choice>
          <ref name="length"/>
          <value>indentshift</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentalignlast">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>auto</value>
          <value>id</value>
          <value>indentalign</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentshiftlast">
        <choice>
          <ref name="length"/>
          <value>indentshift</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="mtext">
    <element name="mtext">
      <ref name="mtext.attributes"/>
      <zeroOrMore>
        <ref name="token.content"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mtext.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <ref name="TokenAtt"/>
  </define>
  <define name="mspace">
    <element name="mspace">
      <ref name="mspace.attributes"/>
      <empty/>
    </element>
  </define>
  <define name="mspace.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <ref name="TokenAtt"/>
    <optional>
      <attribute name="width">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="depth">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="linebreak">
        <choice>
          <value>auto</value>
          <value>newline</value>
          <value>nobreak</value>
          <value>goodbreak</value>
          <value>badbreak</value>
          <value>indentingnewline</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="ms">
    <element name="ms">
      <ref name="ms.attributes"/>
      <zeroOrMore>
        <ref name="token.content"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="ms.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <ref name="TokenAtt"/>
    <optional>
      <attribute name="lquote"/>
    </optional>
    <optional>
      <attribute name="rquote"/>
    </optional>
  </define>
  <define name="mglyph">
    <element name="mglyph">
      <ref name="mglyph.attributes"/>
      <ref name="mglyph.deprecatedattributes"/>
      <empty/>
    </element>
  </define>
  <define name="mglyph.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="src">
        <data type="anyURI"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="valign">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="alt"/>
    </optional>
  </define>
  <define name="mglyph.deprecatedattributes">
    <optional>
      <attribute name="index">
        <ref name="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mathvariant">
        <choice>
          <value>normal</value>
          <value>bold</value>
          <value>italic</value>
          <value>bold-italic</value>
          <value>double-struck</value>
          <value>bold-fraktur</value>
          <value>script</value>
          <value>bold-script</value>
          <value>fraktur</value>
          <value>sans-serif</value>
          <value>bold-sans-serif</value>
          <value>sans-serif-italic</value>
          <value>sans-serif-bold-italic</value>
          <value>monospace</value>
          <value>initial</value>
          <value>tailed</value>
          <value>looped</value>
          <value>stretched</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="mathsize">
        <choice>
          <value>small</value>
          <value>normal</value>
          <value>big</value>
          <ref name="length"/>
        </choice>
      </attribute>
    </optional>
    <ref name="DeprecatedTokenAtt"/>
  </define>
  <define name="msline">
    <element name="msline">
      <ref name="msline.attributes"/>
      <empty/>
    </element>
  </define>
  <define name="msline.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="position">
        <ref name="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="length">
        <ref name="unsigned-integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="leftoverhang">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rightoverhang">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mslinethickness">
        <choice>
          <ref name="length"/>
          <value>thin</value>
          <value>medium</value>
          <value>thick</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="none">
    <element name="none">
      <ref name="none.attributes"/>
      <empty/>
    </element>
  </define>
  <define name="none.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
  </define>
  <define name="mprescripts">
    <element name="mprescripts">
      <ref name="mprescripts.attributes"/>
      <empty/>
    </element>
  </define>
  <define name="mprescripts.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
  </define>
  <define name="CommonPresAtt">
    <optional>
      <attribute name="mathcolor">
        <ref name="color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mathbackground">
        <choice>
          <ref name="color"/>
          <value>transparent</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="TokenAtt">
    <optional>
      <attribute name="mathvariant">
        <choice>
          <value>normal</value>
          <value>bold</value>
          <value>italic</value>
          <value>bold-italic</value>
          <value>double-struck</value>
          <value>bold-fraktur</value>
          <value>script</value>
          <value>bold-script</value>
          <value>fraktur</value>
          <value>sans-serif</value>
          <value>bold-sans-serif</value>
          <value>sans-serif-italic</value>
          <value>sans-serif-bold-italic</value>
          <value>monospace</value>
          <value>initial</value>
          <value>tailed</value>
          <value>looped</value>
          <value>stretched</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="mathsize">
        <choice>
          <value>small</value>
          <value>normal</value>
          <value>big</value>
          <ref name="length"/>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="dir">
        <choice>
          <value>ltr</value>
          <value>rtl</value>
        </choice>
      </attribute>
    </optional>
    <ref name="DeprecatedTokenAtt"/>
  </define>
  <define name="DeprecatedTokenAtt">
    <optional>
      <attribute name="fontfamily"/>
    </optional>
    <optional>
      <attribute name="fontweight">
        <choice>
          <value>normal</value>
          <value>bold</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="fontstyle">
        <choice>
          <value>normal</value>
          <value>italic</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="fontsize">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="color">
        <ref name="color"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="background">
        <choice>
          <ref name="color"/>
          <value>transparent</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="MalignExpression">
    <choice>
      <ref name="maligngroup"/>
      <ref name="malignmark"/>
    </choice>
  </define>
  <define name="malignmark">
    <element name="malignmark">
      <ref name="malignmark.attributes"/>
      <empty/>
    </element>
  </define>
  <define name="malignmark.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="edge">
        <choice>
          <value>left</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="maligngroup">
    <element name="maligngroup">
      <ref name="maligngroup.attributes"/>
      <empty/>
    </element>
  </define>
  <define name="maligngroup.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="groupalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>decimalpoint</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="PresentationExpression">
    <choice>
      <ref name="TokenExpression"/>
      <ref name="MalignExpression"/>
      <ref name="mrow"/>
      <ref name="mfrac"/>
      <ref name="msqrt"/>
      <ref name="mroot"/>
      <ref name="mstyle"/>
      <ref name="merror"/>
      <ref name="mpadded"/>
      <ref name="mphantom"/>
      <ref name="mfenced"/>
      <ref name="menclose"/>
      <ref name="msub"/>
      <ref name="msup"/>
      <ref name="msubsup"/>
      <ref name="munder"/>
      <ref name="mover"/>
      <ref name="munderover"/>
      <ref name="mmultiscripts"/>
      <ref name="mtable"/>
      <ref name="mstack"/>
      <ref name="mlongdiv"/>
      <ref name="maction"/>
    </choice>
  </define>
  <define name="mrow">
    <element name="mrow">
      <ref name="mrow.attributes"/>
      <zeroOrMore>
        <ref name="MathExpression"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mrow.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="dir">
        <choice>
          <value>ltr</value>
          <value>rtl</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="mfrac">
    <element name="mfrac">
      <ref name="mfrac.attributes"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
    </element>
  </define>
  <define name="mfrac.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="linethickness">
        <choice>
          <ref name="length"/>
          <value>thin</value>
          <value>medium</value>
          <value>thick</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="numalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="denomalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="bevelled">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="msqrt">
    <element name="msqrt">
      <ref name="msqrt.attributes"/>
      <ref name="ImpliedMrow"/>
    </element>
  </define>
  <define name="msqrt.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
  </define>
  <define name="mroot">
    <element name="mroot">
      <ref name="mroot.attributes"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
    </element>
  </define>
  <define name="mroot.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
  </define>
  <define name="mstyle">
    <element name="mstyle">
      <ref name="mstyle.attributes"/>
      <ref name="ImpliedMrow"/>
    </element>
  </define>
  <define name="mstyle.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <ref name="mstyle.specificattributes"/>
    <ref name="mstyle.generalattributes"/>
    <ref name="mstyle.deprecatedattributes"/>
  </define>
  <define name="mstyle.specificattributes">
    <optional>
      <attribute name="scriptlevel">
        <ref name="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="displaystyle">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="scriptsizemultiplier">
        <ref name="number"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="scriptminsize">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="infixlinebreakstyle">
        <choice>
          <value>before</value>
          <value>after</value>
          <value>duplicate</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="decimalpoint">
        <ref name="character"/>
      </attribute>
    </optional>
  </define>
  <define name="mstyle.generalattributes">
    <optional>
      <attribute name="accent">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="accentunder">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <choice>
          <value>left</value>
          <value>right</value>
          <value>center</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="alignmentscope">
        <list>
          <oneOrMore>
            <choice>
              <value>true</value>
              <value>false</value>
            </choice>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="bevelled">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="charalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="charspacing">
        <choice>
          <ref name="length"/>
          <value>loose</value>
          <value>medium</value>
          <value>tight</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="close"/>
    </optional>
    <optional>
      <attribute name="columnalign">
        <list>
          <oneOrMore>
            <ref name="columnalignstyle"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnlines">
        <list>
          <oneOrMore>
            <ref name="linestyle"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnspacing">
        <list>
          <oneOrMore>
            <ref name="length"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnspan">
        <ref name="positive-integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnwidth">
        <list>
          <oneOrMore>
            <choice>
              <value>auto</value>
              <ref name="length"/>
              <value>fit</value>
            </choice>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="crossout">
        <list>
          <zeroOrMore>
            <choice>
              <value>none</value>
              <value>updiagonalstrike</value>
              <value>downdiagonalstrike</value>
              <value>verticalstrike</value>
              <value>horizontalstrike</value>
            </choice>
          </zeroOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="denomalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="depth">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="dir">
        <choice>
          <value>ltr</value>
          <value>rtl</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="edge">
        <choice>
          <value>left</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="equalcolumns">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="equalrows">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="fence">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="form">
        <choice>
          <value>prefix</value>
          <value>infix</value>
          <value>postfix</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="frame">
        <ref name="linestyle"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="framespacing">
        <list>
          <ref name="length"/>
          <ref name="length"/>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="groupalign">
        <ref name="group-alignment-list-list"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="height">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>auto</value>
          <value>id</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentalignfirst">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>auto</value>
          <value>id</value>
          <value>indentalign</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentalignlast">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>auto</value>
          <value>id</value>
          <value>indentalign</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentshift">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentshiftfirst">
        <choice>
          <ref name="length"/>
          <value>indentshift</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indentshiftlast">
        <choice>
          <ref name="length"/>
          <value>indentshift</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="indenttarget">
        <ref name="idref"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="largeop">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="leftoverhang">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="length">
        <ref name="unsigned-integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="linebreak">
        <choice>
          <value>auto</value>
          <value>newline</value>
          <value>nobreak</value>
          <value>goodbreak</value>
          <value>badbreak</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="linebreakmultchar"/>
    </optional>
    <optional>
      <attribute name="linebreakstyle">
        <choice>
          <value>before</value>
          <value>after</value>
          <value>duplicate</value>
          <value>infixlinebreakstyle</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="lineleading">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="linethickness">
        <choice>
          <ref name="length"/>
          <value>thin</value>
          <value>medium</value>
          <value>thick</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="location">
        <choice>
          <value>w</value>
          <value>nw</value>
          <value>n</value>
          <value>ne</value>
          <value>e</value>
          <value>se</value>
          <value>s</value>
          <value>sw</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="longdivstyle">
        <choice>
          <value>lefttop</value>
          <value>stackedrightright</value>
          <value>mediumstackedrightright</value>
          <value>shortstackedrightright</value>
          <value>righttop</value>
          <value>left/\right</value>
          <value>left)(right</value>
          <value>:right=right</value>
          <value>stackedleftleft</value>
          <value>stackedleftlinetop</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="lquote"/>
    </optional>
    <optional>
      <attribute name="lspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mathsize">
        <choice>
          <value>small</value>
          <value>normal</value>
          <value>big</value>
          <ref name="length"/>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="mathvariant">
        <choice>
          <value>normal</value>
          <value>bold</value>
          <value>italic</value>
          <value>bold-italic</value>
          <value>double-struck</value>
          <value>bold-fraktur</value>
          <value>script</value>
          <value>bold-script</value>
          <value>fraktur</value>
          <value>sans-serif</value>
          <value>bold-sans-serif</value>
          <value>sans-serif-italic</value>
          <value>sans-serif-bold-italic</value>
          <value>monospace</value>
          <value>initial</value>
          <value>tailed</value>
          <value>looped</value>
          <value>stretched</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="maxsize">
        <choice>
          <ref name="length"/>
          <value>infinity</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="minlabelspacing">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="minsize">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="movablelimits">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="mslinethickness">
        <choice>
          <ref name="length"/>
          <value>thin</value>
          <value>medium</value>
          <value>thick</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="notation"/>
    </optional>
    <optional>
      <attribute name="numalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="open"/>
    </optional>
    <optional>
      <attribute name="position">
        <ref name="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rightoverhang">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowalign">
        <list>
          <oneOrMore>
            <ref name="verticalalign"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowlines">
        <list>
          <oneOrMore>
            <ref name="linestyle"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowspacing">
        <list>
          <oneOrMore>
            <ref name="length"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowspan">
        <ref name="positive-integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rquote"/>
    </optional>
    <optional>
      <attribute name="rspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="selection">
        <ref name="positive-integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="separator">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="separators"/>
    </optional>
    <optional>
      <attribute name="shift">
        <ref name="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="side">
        <choice>
          <value>left</value>
          <value>right</value>
          <value>leftoverlap</value>
          <value>rightoverlap</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="stackalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>decimalpoint</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="stretchy">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="subscriptshift">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="superscriptshift">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="symmetric">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="valign">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="length"/>
      </attribute>
    </optional>
  </define>
  <define name="mstyle.deprecatedattributes">
    <ref name="DeprecatedTokenAtt"/>
    <optional>
      <attribute name="veryverythinmathspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="verythinmathspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="thinmathspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="mediummathspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="thickmathspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="verythickmathspace">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="veryverythickmathspace">
        <ref name="length"/>
      </attribute>
    </optional>
  </define>
  <define name="math.attributes" combine="interleave">
    <ref name="CommonPresAtt"/>
  </define>
  <define name="math.attributes" combine="interleave">
    <ref name="mstyle.specificattributes"/>
  </define>
  <define name="math.attributes" combine="interleave">
    <ref name="mstyle.generalattributes"/>
  </define>
  <define name="merror">
    <element name="merror">
      <ref name="merror.attributes"/>
      <ref name="ImpliedMrow"/>
    </element>
  </define>
  <define name="merror.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
  </define>
  <define name="mpadded">
    <element name="mpadded">
      <ref name="mpadded.attributes"/>
      <ref name="ImpliedMrow"/>
    </element>
  </define>
  <define name="mpadded.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="height">
        <ref name="mpadded-length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="depth">
        <ref name="mpadded-length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <ref name="mpadded-length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="lspace">
        <ref name="mpadded-length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="voffset">
        <ref name="mpadded-length"/>
      </attribute>
    </optional>
  </define>
  <define name="mphantom">
    <element name="mphantom">
      <ref name="mphantom.attributes"/>
      <ref name="ImpliedMrow"/>
    </element>
  </define>
  <define name="mphantom.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
  </define>
  <define name="mfenced">
    <element name="mfenced">
      <ref name="mfenced.attributes"/>
      <zeroOrMore>
        <ref name="MathExpression"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mfenced.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="open"/>
    </optional>
    <optional>
      <attribute name="close"/>
    </optional>
    <optional>
      <attribute name="separators"/>
    </optional>
  </define>
  <define name="menclose">
    <element name="menclose">
      <ref name="menclose.attributes"/>
      <ref name="ImpliedMrow"/>
    </element>
  </define>
  <define name="menclose.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="notation"/>
    </optional>
  </define>
  <define name="msub">
    <element name="msub">
      <ref name="msub.attributes"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
    </element>
  </define>
  <define name="msub.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="subscriptshift">
        <ref name="length"/>
      </attribute>
    </optional>
  </define>
  <define name="msup">
    <element name="msup">
      <ref name="msup.attributes"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
    </element>
  </define>
  <define name="msup.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="superscriptshift">
        <ref name="length"/>
      </attribute>
    </optional>
  </define>
  <define name="msubsup">
    <element name="msubsup">
      <ref name="msubsup.attributes"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
    </element>
  </define>
  <define name="msubsup.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="subscriptshift">
        <ref name="length"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="superscriptshift">
        <ref name="length"/>
      </attribute>
    </optional>
  </define>
  <define name="munder">
    <element name="munder">
      <ref name="munder.attributes"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
    </element>
  </define>
  <define name="munder.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="accentunder">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <choice>
          <value>left</value>
          <value>right</value>
          <value>center</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="mover">
    <element name="mover">
      <ref name="mover.attributes"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
    </element>
  </define>
  <define name="mover.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="accent">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <choice>
          <value>left</value>
          <value>right</value>
          <value>center</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="munderover">
    <element name="munderover">
      <ref name="munderover.attributes"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
      <ref name="MathExpression"/>
    </element>
  </define>
  <define name="munderover.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="accent">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="accentunder">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="align">
        <choice>
          <value>left</value>
          <value>right</value>
          <value>center</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="mmultiscripts">
    <element name="mmultiscripts">
      <ref name="mmultiscripts.attributes"/>
      <ref name="MathExpression"/>
      <zeroOrMore>
        <ref name="MultiScriptExpression"/>
      </zeroOrMore>
      <optional>
        <ref name="mprescripts"/>
        <zeroOrMore>
          <ref name="MultiScriptExpression"/>
        </zeroOrMore>
      </optional>
    </element>
  </define>
  <define name="mmultiscripts.attributes">
    <ref name="msubsup.attributes"/>
  </define>
  <define name="mtable">
    <element name="mtable">
      <ref name="mtable.attributes"/>
      <zeroOrMore>
        <ref name="TableRowExpression"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mtable.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="align">
        <data type="string">
          <param name="pattern">\s*(top|bottom|center|baseline|axis)\s*[0-9]*</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowalign">
        <list>
          <oneOrMore>
            <ref name="verticalalign"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnalign">
        <list>
          <oneOrMore>
            <ref name="columnalignstyle"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="groupalign">
        <ref name="group-alignment-list-list"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="alignmentscope">
        <list>
          <oneOrMore>
            <choice>
              <value>true</value>
              <value>false</value>
            </choice>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnwidth">
        <list>
          <oneOrMore>
            <choice>
              <value>auto</value>
              <ref name="length"/>
              <value>fit</value>
            </choice>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="width">
        <choice>
          <value>auto</value>
          <ref name="length"/>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowspacing">
        <list>
          <oneOrMore>
            <ref name="length"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnspacing">
        <list>
          <oneOrMore>
            <ref name="length"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowlines">
        <list>
          <oneOrMore>
            <ref name="linestyle"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnlines">
        <list>
          <oneOrMore>
            <ref name="linestyle"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="frame">
        <ref name="linestyle"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="framespacing">
        <list>
          <ref name="length"/>
          <ref name="length"/>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="equalrows">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="equalcolumns">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="displaystyle">
        <choice>
          <value>true</value>
          <value>false</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="side">
        <choice>
          <value>left</value>
          <value>right</value>
          <value>leftoverlap</value>
          <value>rightoverlap</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="minlabelspacing">
        <ref name="length"/>
      </attribute>
    </optional>
  </define>
  <define name="mlabeledtr">
    <element name="mlabeledtr">
      <ref name="mlabeledtr.attributes"/>
      <oneOrMore>
        <ref name="TableCellExpression"/>
      </oneOrMore>
    </element>
  </define>
  <define name="mlabeledtr.attributes">
    <ref name="mtr.attributes"/>
  </define>
  <define name="mtr">
    <element name="mtr">
      <ref name="mtr.attributes"/>
      <zeroOrMore>
        <ref name="TableCellExpression"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mtr.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="rowalign">
        <choice>
          <value>top</value>
          <value>bottom</value>
          <value>center</value>
          <value>baseline</value>
          <value>axis</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnalign">
        <list>
          <oneOrMore>
            <ref name="columnalignstyle"/>
          </oneOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="groupalign">
        <ref name="group-alignment-list-list"/>
      </attribute>
    </optional>
  </define>
  <define name="mtd">
    <element name="mtd">
      <ref name="mtd.attributes"/>
      <ref name="ImpliedMrow"/>
    </element>
  </define>
  <define name="mtd.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="rowspan">
        <ref name="positive-integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnspan">
        <ref name="positive-integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="rowalign">
        <choice>
          <value>top</value>
          <value>bottom</value>
          <value>center</value>
          <value>baseline</value>
          <value>axis</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="columnalign">
        <ref name="columnalignstyle"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="groupalign">
        <ref name="group-alignment-list"/>
      </attribute>
    </optional>
  </define>
  <define name="mstack">
    <element name="mstack">
      <ref name="mstack.attributes"/>
      <zeroOrMore>
        <ref name="MstackExpression"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mstack.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="align">
        <data type="string">
          <param name="pattern">\s*(top|bottom|center|baseline|axis)\s*[0-9]*</param>
        </data>
      </attribute>
    </optional>
    <optional>
      <attribute name="stackalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
          <value>decimalpoint</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="charalign">
        <choice>
          <value>left</value>
          <value>center</value>
          <value>right</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="charspacing">
        <choice>
          <ref name="length"/>
          <value>loose</value>
          <value>medium</value>
          <value>tight</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="mlongdiv">
    <element name="mlongdiv">
      <ref name="mlongdiv.attributes"/>
      <ref name="MstackExpression"/>
      <ref name="MstackExpression"/>
      <oneOrMore>
        <ref name="MstackExpression"/>
      </oneOrMore>
    </element>
  </define>
  <define name="mlongdiv.attributes">
    <ref name="msgroup.attributes"/>
    <optional>
      <attribute name="longdivstyle">
        <choice>
          <value>lefttop</value>
          <value>stackedrightright</value>
          <value>mediumstackedrightright</value>
          <value>shortstackedrightright</value>
          <value>righttop</value>
          <value>left/\right</value>
          <value>left)(right</value>
          <value>:right=right</value>
          <value>stackedleftleft</value>
          <value>stackedleftlinetop</value>
        </choice>
      </attribute>
    </optional>
  </define>
  <define name="msgroup">
    <element name="msgroup">
      <ref name="msgroup.attributes"/>
      <zeroOrMore>
        <ref name="MstackExpression"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="msgroup.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="position">
        <ref name="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="shift">
        <ref name="integer"/>
      </attribute>
    </optional>
  </define>
  <define name="msrow">
    <element name="msrow">
      <ref name="msrow.attributes"/>
      <zeroOrMore>
        <ref name="MsrowExpression"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="msrow.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="position">
        <ref name="integer"/>
      </attribute>
    </optional>
  </define>
  <define name="mscarries">
    <element name="mscarries">
      <ref name="mscarries.attributes"/>
      <zeroOrMore>
        <choice>
          <ref name="MsrowExpression"/>
          <ref name="mscarry"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
  <define name="mscarries.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="position">
        <ref name="integer"/>
      </attribute>
    </optional>
    <optional>
      <attribute name="location">
        <choice>
          <value>w</value>
          <value>nw</value>
          <value>n</value>
          <value>ne</value>
          <value>e</value>
          <value>se</value>
          <value>s</value>
          <value>sw</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="crossout">
        <list>
          <zeroOrMore>
            <choice>
              <value>none</value>
              <value>updiagonalstrike</value>
              <value>downdiagonalstrike</value>
              <value>verticalstrike</value>
              <value>horizontalstrike</value>
            </choice>
          </zeroOrMore>
        </list>
      </attribute>
    </optional>
    <optional>
      <attribute name="scriptsizemultiplier">
        <ref name="number"/>
      </attribute>
    </optional>
  </define>
  <define name="mscarry">
    <element name="mscarry">
      <ref name="mscarry.attributes"/>
      <zeroOrMore>
        <ref name="MsrowExpression"/>
      </zeroOrMore>
    </element>
  </define>
  <define name="mscarry.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="location">
        <choice>
          <value>w</value>
          <value>nw</value>
          <value>n</value>
          <value>ne</value>
          <value>e</value>
          <value>se</value>
          <value>s</value>
          <value>sw</value>
        </choice>
      </attribute>
    </optional>
    <optional>
      <attribute name="crossout">
        <list>
          <zeroOrMore>
            <choice>
              <value>none</value>
              <value>updiagonalstrike</value>
              <value>downdiagonalstrike</value>
              <value>verticalstrike</value>
              <value>horizontalstrike</value>
            </choice>
          </zeroOrMore>
        </list>
      </attribute>
    </optional>
  </define>
  <define name="maction">
    <element name="maction">
      <ref name="maction.attributes"/>
      <oneOrMore>
        <ref name="MathExpression"/>
      </oneOrMore>
    </element>
  </define>
  <define name="maction.attributes">
    <ref name="CommonAtt"/>
    <ref name="CommonPresAtt"/>
    <optional>
      <attribute name="actiontype"/>
    </optional>
    <optional>
      <attribute name="selection">
        <ref name="positive-integer"/>
      </attribute>
    </optional>
  </define>
</grammar>