<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?>
<!DOCTYPE interface-description SYSTEM 'file:///usr/pkgsrc/lang/oo2c/work.macaroon/oo2c_32-2.0.11/rsrc/OOC/xml/interface-description.dtd'>
<interface-description name='XML:Basic:Element' id=''>
  <import-decl name='DTD' id='DTD' export='no' module='XML:DTD'/>
  <import-decl name='Locator' id='Locator' export='no' module='XML:Locator'/>
  <import-decl name='Writer' id='Writer' export='no' module='XML:Writer'/>
  <type-decl name='String' id='String' export='yes'>
    <type>
      <type-name module='DTD' name='String' href='XML:DTD#String'/>
    </type>
  </type-decl>
  <type-decl name='StringVar' id='StringVar' export='yes'>
    <type>
      <type-name module='DTD' name='StringVar' href='XML:DTD#StringVar'/>
    </type>
  </type-decl>
  <type-decl name='CharPos' id='CharPos' export='yes'>
    <type>
      <type-name module='DTD' name='CharPos' href='XML:DTD#CharPos'/>
    </type>
  </type-decl>
  <type-decl name='AttValue' id='AttValue' export='yes'>
    <type>
      <type-name module='DTD' name='AttValue' href='XML:DTD#AttValue'/>
    </type>
  </type-decl>
  <type-decl name='FactoryFunction' id='FactoryFunction' export='yes'>
    <type>
      <formal-parameters>
        <result-type>
          <type-name name='Element' href='#Element'/>
        </result-type>
      </formal-parameters>
    </type>
  </type-decl>
  <procedure name='NewString' id='NewString' export='yes'>
    <formal-parameters>
      <parameter-decl name='value' id='NewString.value' export='no' variable-parameter='no'>
        <type>
          <type-name name='StringVar' href='#StringVar'/>
        </type>
      </parameter-decl>
      <result-type>
        <type-name name='String' href='#String'/>
      </result-type>
    </formal-parameters>
  </procedure>
  <import-decl name='-RT0' id='-RT0' export='no' module='RT0'/>
  <import-decl name='-Object' id='-Object' export='no' module='Object'/>
  <import-decl name='-Exception' id='-Exception' export='no' module='Exception'/>
  <class name='StringBuffer'>
    <type-decl name='StringBuffer' id='StringBuffer' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='StringBufferDesc' href='#StringBufferDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='StringBufferDesc' id='StringBufferDesc' export='no'>
      <type>
        <record>
          <field-decl name='length' id='StringBufferDesc.length' export='read-only'>
            <type>
              <type-name module='#predef' name='LONGINT'/>
            </type>
          </field-decl>
          <field-decl name='array' id='StringBufferDesc.array' export='read-only'>
            <type>
              <type-name name='String' href='#String'/>
            </type>
          </field-decl>
        </record>
      </type>
    </type-decl>
    <procedure name='NewStringBuffer' id='NewStringBuffer' export='yes'>
      <formal-parameters>
        <parameter-decl name='value' id='NewStringBuffer.value' export='no' variable-parameter='no'>
          <type>
            <type-name name='StringVar' href='#StringVar'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='StringBuffer' href='#StringBuffer'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='AddCharacters' id='StringBufferDesc.AddCharacters' export='yes'>
      <formal-parameters>
        <receiver-decl name='sb' id='StringBufferDesc.AddCharacters.sb' export='no' variable-parameter='no'>
          <type>
            <type-name name='StringBuffer' href='#StringBuffer'/>
          </type>
        </receiver-decl>
        <parameter-decl name='chars' id='StringBufferDesc.AddCharacters.chars' export='no' variable-parameter='yes'>
          <type>
            <type-name name='StringVar' href='#StringVar'/>
          </type>
        </parameter-decl>
        <parameter-decl name='charsStart' id='StringBufferDesc.AddCharacters.charsStart' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='CharPos'/>
          </type>
        </parameter-decl>
        <parameter-decl name='charsEnd' id='StringBufferDesc.AddCharacters.charsEnd' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='CharPos'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
  </class>
  <class name='Element'>
    <type-decl name='Element' id='Element' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='ElementDesc' href='#ElementDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='ElementDesc' id='ElementDesc' export='yes'>
      <type>
        <record>
          <field-decl name='next' id='ElementDesc.next' export='read-only'>
            <type>
              <type-name name='Element' href='#Element'/>
            </type>
          </field-decl>
        </record>
      </type>
    </type-decl>
    <procedure name='InitElement' id='InitElement' export='yes'>
      <formal-parameters>
        <parameter-decl name='elem' id='InitElement.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='SetLocator' id='ElementDesc.SetLocator' export='yes'>
      <oberon-doc>
        <summary>Using the locator <oberon-param href='#ElementDesc.SetLocator.l'>l</oberon-param>, the context of the element and its attributes can be determined.</summary>
        <p pad-after='yes' no-indent='yes'>Using the locator <oberon-param href='#ElementDesc.SetLocator.l'>l</oberon-param>, the context of the element and its attributes can be determined.  This can be used to get the base URI relative to which an URI attribute value should be expanded.  This method is called after an element has been created, and before any attribute or content data is passed on to it.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.SetLocator.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <parameter-decl name='l' id='ElementDesc.SetLocator.l' export='no' variable-parameter='no'>
          <type>
            <type-name module='Locator' name='Locator' href='XML:Locator#Locator'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='IsChildName' id='ElementDesc.IsChildName' export='yes'>
      <oberon-doc>
        <summary>Determines if <oberon-param href='#ElementDesc.IsChildName.localName'>localName</oberon-param> is a valid name for a child element of <oberon-param href='#ElementDesc.IsChildName.elem'>elem</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Determines if <oberon-param href='#ElementDesc.IsChildName.localName'>localName</oberon-param> is a valid name for a child element of <oberon-param href='#ElementDesc.IsChildName.elem'>elem</oberon-param>.  If result is <code>FALSE</code>, the parser will generate an appropriate error message.  By default, all child names are rejected.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.IsChildName.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <parameter-decl name='localName' id='ElementDesc.IsChildName.localName' export='no' variable-parameter='no'>
          <type>
            <type-name name='String' href='#String'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='NewChild' id='ElementDesc.NewChild' export='yes'>
      <oberon-doc>
        <summary>Creates a new instance of the child element if the child can appear at the current place in the element.</summary>
        <p pad-after='yes' no-indent='yes'>Creates a new instance of the child element if the child can appear at the current place in the element.  Otherwise, it returns <code>NIL</code>.  The default implementation always returns <code>NIL</code>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.NewChild.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <parameter-decl name='localName' id='ElementDesc.NewChild.localName' export='no' variable-parameter='no'>
          <type>
            <type-name name='String' href='#String'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Element' href='#Element'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='MissingChild' id='ElementDesc.MissingChild' export='yes'>
      <oberon-doc>
        <summary>Called at the end of an XML element to determine if any required child elements are missing.</summary>
        <p pad-after='yes' no-indent='yes'>Called at the end of an XML element to determine if any required child elements are missing.  Result is the name of one of the missing childs, or <code>NIL</code> if all required child elements are present.  By default, <code>NIL</code> is returned.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.MissingChild.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name name='String' href='#String'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='AddChild' id='ElementDesc.AddChild' export='yes'>
      <oberon-doc>
        <summary>Adds the parsed child element <oberon-param href='#ElementDesc.AddChild.child'>child</oberon-param> to <oberon-param href='#ElementDesc.AddChild.elem'>elem</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Adds the parsed child element <oberon-param href='#ElementDesc.AddChild.child'>child</oberon-param> to <oberon-param href='#ElementDesc.AddChild.elem'>elem</oberon-param>.  The object <oberon-param href='#ElementDesc.AddChild.child'>child</oberon-param> was previously created with <oberon-proc href='#ElementDesc.NewChild'>Element.NewChild</oberon-proc>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.AddChild.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <parameter-decl name='child' id='ElementDesc.AddChild.child' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='IsAttributeName' id='ElementDesc.IsAttributeName' export='yes'>
      <oberon-doc>
        <summary>Determines if <oberon-param href='#ElementDesc.IsAttributeName.localName'>localName</oberon-param> is a valid name for an attribute of <oberon-param href='#ElementDesc.IsAttributeName.elem'>elem</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Determines if <oberon-param href='#ElementDesc.IsAttributeName.localName'>localName</oberon-param> is a valid name for an attribute of <oberon-param href='#ElementDesc.IsAttributeName.elem'>elem</oberon-param>.  If result is <code>FALSE</code>, the parser will generate an appropriate error message.  By default, all attribute names are rejected.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.IsAttributeName.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <parameter-decl name='localName' id='ElementDesc.IsAttributeName.localName' export='no' variable-parameter='no'>
          <type>
            <type-name name='String' href='#String'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='AddAttribute' id='ElementDesc.AddAttribute' export='yes'>
      <oberon-doc>
        <summary>Adds the attribute <oberon-param href='#ElementDesc.AddAttribute.localName'>localName</oberon-param> to the element <oberon-param href='#ElementDesc.AddAttribute.elem'>elem</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Adds the attribute <oberon-param href='#ElementDesc.AddAttribute.localName'>localName</oberon-param> to the element <oberon-param href='#ElementDesc.AddAttribute.elem'>elem</oberon-param>.  If the attribute value <oberon-param href='#ElementDesc.AddAttribute.value'>value</oberon-param> is valid, result is <code>TRUE</code>.  Otherwise, this functions returns <code>FALSE</code> and the parser will generate an appropriate error message.  The default implementation always returns <code>FALSE</code>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.AddAttribute.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <parameter-decl name='localName' id='ElementDesc.AddAttribute.localName' export='no' variable-parameter='no'>
          <type>
            <type-name name='String' href='#String'/>
          </type>
        </parameter-decl>
        <parameter-decl name='value' id='ElementDesc.AddAttribute.value' export='no' variable-parameter='no'>
          <type>
            <type-name name='AttValue' href='#AttValue'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='MissingAttribute' id='ElementDesc.MissingAttribute' export='yes'>
      <oberon-doc>
        <summary>Called at the end of the attribute list of a start tag to determine if any required attributes are missing.</summary>
        <p pad-after='yes' no-indent='yes'>Called at the end of the attribute list of a start tag to determine if any required attributes are missing.  Result is the name of one of the missing attributes, or <code>NIL</code> if all required attributes are present.  The default behavious is to return <code>NIL</code>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.MissingAttribute.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name name='String' href='#String'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='HasMixedContent' id='ElementDesc.HasMixedContent' export='yes'>
      <oberon-doc>
        <summary>Returns <code>TRUE</code>, if element <oberon-param href='#ElementDesc.HasMixedContent.elem'>elem</oberon-param> containes mixed content.</summary>
        <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code>, if element <oberon-param href='#ElementDesc.HasMixedContent.elem'>elem</oberon-param> containes mixed content.  In this case, the element may contain character data other than whitespace.  For element that has only element content, <oberon-proc href='#ElementDesc.AddCharacters'>Element.AddCharacters</oberon-proc> is not called, and an error is signalled if the element content includes non-whitespace characters.  By default, element-only content is assumed.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.HasMixedContent.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='AddCharacters' id='ElementDesc.AddCharacters' export='yes'>
      <oberon-doc>
        <summary>Adds character data to the content of element <oberon-param href='#ElementDesc.AddCharacters.elem'>elem</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Adds character data to the content of element <oberon-param href='#ElementDesc.AddCharacters.elem'>elem</oberon-param>.  The new characters are in the character interval <samp><oberon-param href='#ElementDesc.AddCharacters.chars'>chars</oberon-param>[<oberon-param href='#ElementDesc.AddCharacters.charsStart'>charsStart</oberon-param>..<oberon-param href='#ElementDesc.AddCharacters.charsEnd'>charsEnd</oberon-param>-1]</samp>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.AddCharacters.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <parameter-decl name='chars' id='ElementDesc.AddCharacters.chars' export='no' variable-parameter='yes'>
          <type>
            <type-name name='StringVar' href='#StringVar'/>
          </type>
        </parameter-decl>
        <parameter-decl name='charsStart' id='ElementDesc.AddCharacters.charsStart' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='CharPos'/>
          </type>
        </parameter-decl>
        <parameter-decl name='charsEnd' id='ElementDesc.AddCharacters.charsEnd' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='CharPos'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='CheckElement' id='ElementDesc.CheckElement' export='yes'>
      <oberon-doc>
        <summary>Called at the very end of an XML element (after <oberon-proc href='#ElementDesc.MissingChild'>Element.MissingChild</oberon-proc>) to perform consistency checks on the whole element.</summary>
        <p pad-after='yes' no-indent='yes'>Called at the very end of an XML element (after <oberon-proc href='#ElementDesc.MissingChild'>Element.MissingChild</oberon-proc>) to perform consistency checks on the whole element.  For example, this method makes sure that the combination of attributes and content does not violate any rules of the application.</p>
        <p pad-after='yes' no-indent='no'>Result is an error message if some part of the element is invalid, and <code>NIL</code> on success.  By default, <code>NIL</code> is returned.</p>
        <p pad-after='yes' no-indent='no'>Any code that should be evaluted if an element is completed, should be placed in this method.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.CheckElement.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name name='String' href='#String'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Write' id='ElementDesc.Write' export='yes'>
      <oberon-doc>
        <summary>Serializes the object <oberon-param href='#ElementDesc.Write.elem'>elem</oberon-param> into an XML element.</summary>
        <p pad-after='yes' no-indent='yes'>Serializes the object <oberon-param href='#ElementDesc.Write.elem'>elem</oberon-param> into an XML element.  The data is generated with the writer <oberon-param href='#ElementDesc.Write.writer'>writer</oberon-param>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='elem' id='ElementDesc.Write.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </receiver-decl>
        <parameter-decl name='writer' id='ElementDesc.Write.writer' export='no' variable-parameter='no'>
          <type>
            <type-name module='Writer' name='Writer' href='XML:Writer#Writer'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
  </class>
  <class name='PCData'>
    <type-decl name='PCData' id='PCData' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='PCDataDesc' href='#PCDataDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='PCDataDesc' id='PCDataDesc' export='no'>
      <type>
        <record>
          <field-decl name='chars' id='PCDataDesc.chars' export='read-only'>
            <type>
              <type-name name='StringBuffer' href='#StringBuffer'/>
            </type>
          </field-decl>
        </record>
      </type>
    </type-decl>
    <procedure name='InitPCData' id='InitPCData' export='yes'>
      <formal-parameters>
        <parameter-decl name='pcdata' id='InitPCData.pcdata' export='no' variable-parameter='no'>
          <type>
            <type-name name='PCData' href='#PCData'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='NewPCData' id='NewPCData' export='yes'>
      <formal-parameters>
        <result-type>
          <type-name name='PCData' href='#PCData'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='AddCharacters' id='PCDataDesc.AddCharacters' export='yes'>
      <doc-inherited-from module='XML:Basic:Element' name='AddCharacters' class='Element' href='#ElementDesc.AddCharacters'/>
      <oberon-doc>
        <summary>Adds character data to the content of element <oberon-param href='#PCDataDesc.AddCharacters.pcdata'>pcdata</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Adds character data to the content of element <oberon-param href='#PCDataDesc.AddCharacters.pcdata'>pcdata</oberon-param>.  The new characters are in the character interval <samp><oberon-param href='#PCDataDesc.AddCharacters.chars'>chars</oberon-param>[<oberon-param href='#PCDataDesc.AddCharacters.charsStart'>charsStart</oberon-param>..<oberon-param href='#PCDataDesc.AddCharacters.charsEnd'>charsEnd</oberon-param>-1]</samp>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='pcdata' id='PCDataDesc.AddCharacters.pcdata' export='no' variable-parameter='no'>
          <type>
            <type-name name='PCData' href='#PCData'/>
          </type>
        </receiver-decl>
        <parameter-decl name='chars' id='PCDataDesc.AddCharacters.chars' export='no' variable-parameter='yes'>
          <type>
            <type-name name='StringVar' href='#StringVar'/>
          </type>
        </parameter-decl>
        <parameter-decl name='charsStart' id='PCDataDesc.AddCharacters.charsStart' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='CharPos'/>
          </type>
        </parameter-decl>
        <parameter-decl name='charsEnd' id='PCDataDesc.AddCharacters.charsEnd' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='CharPos'/>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='XML:Basic:Element' name='AddCharacters' class='Element' href='#ElementDesc.AddCharacters'/>
    </procedure>
    <procedure name='Write' id='PCDataDesc.Write' export='yes'>
      <doc-inherited-from module='XML:Basic:Element' name='Write' class='Element' href='#ElementDesc.Write'/>
      <oberon-doc>
        <summary>Serializes the object <oberon-param href='#PCDataDesc.Write.pcdata'>pcdata</oberon-param> into an XML element.</summary>
        <p pad-after='yes' no-indent='yes'>Serializes the object <oberon-param href='#PCDataDesc.Write.pcdata'>pcdata</oberon-param> into an XML element.  The data is generated with the writer <oberon-param href='#PCDataDesc.Write.writer'>writer</oberon-param>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='pcdata' id='PCDataDesc.Write.pcdata' export='no' variable-parameter='no'>
          <type>
            <type-name name='PCData' href='#PCData'/>
          </type>
        </receiver-decl>
        <parameter-decl name='writer' id='PCDataDesc.Write.writer' export='no' variable-parameter='no'>
          <type>
            <type-name module='Writer' name='Writer' href='XML:Writer#Writer'/>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='XML:Basic:Element' name='Write' class='Element' href='#ElementDesc.Write'/>
    </procedure>
    <procedure name='Normalize' id='PCDataDesc.Normalize' export='yes'>
      <formal-parameters>
        <receiver-decl name='pcdata' id='PCDataDesc.Normalize.pcdata' export='no' variable-parameter='no'>
          <type>
            <type-name name='PCData' href='#PCData'/>
          </type>
        </receiver-decl>
        <parameter-decl name='stripLeadingWS' id='PCDataDesc.Normalize.stripLeadingWS' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='BOOLEAN'/>
          </type>
        </parameter-decl>
        <parameter-decl name='stripTrailingWS' id='PCDataDesc.Normalize.stripTrailingWS' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='BOOLEAN'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <base-class module='XML:Basic:Element' class='Element' href='#Element'>
      <inherited-method module='XML:Basic:Element' name='AddAttribute' class='Element' href='#ElementDesc.AddAttribute'/>
      <inherited-method module='XML:Basic:Element' name='AddCharacters' class='Element' href='#ElementDesc.AddCharacters'/>
      <inherited-method module='XML:Basic:Element' name='AddChild' class='Element' href='#ElementDesc.AddChild'/>
      <inherited-method module='XML:Basic:Element' name='CheckElement' class='Element' href='#ElementDesc.CheckElement'/>
      <inherited-method module='XML:Basic:Element' name='HasMixedContent' class='Element' href='#ElementDesc.HasMixedContent'/>
      <inherited-method module='XML:Basic:Element' name='IsAttributeName' class='Element' href='#ElementDesc.IsAttributeName'/>
      <inherited-method module='XML:Basic:Element' name='IsChildName' class='Element' href='#ElementDesc.IsChildName'/>
      <inherited-method module='XML:Basic:Element' name='MissingAttribute' class='Element' href='#ElementDesc.MissingAttribute'/>
      <inherited-method module='XML:Basic:Element' name='MissingChild' class='Element' href='#ElementDesc.MissingChild'/>
      <inherited-method module='XML:Basic:Element' name='NewChild' class='Element' href='#ElementDesc.NewChild'/>
      <inherited-method module='XML:Basic:Element' name='SetLocator' class='Element' href='#ElementDesc.SetLocator'/>
      <inherited-method module='XML:Basic:Element' name='Write' class='Element' href='#ElementDesc.Write'/>
      <inherited-field module='XML:Basic:Element' name='next' class='Element' href='#ElementDesc.next'/>
    </base-class>
  </class>
  <class name='List'>
    <type-decl name='List' id='List' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='ListDesc' href='#ListDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='ListDesc' id='ListDesc' export='no'>
      <type>
        <record>
          <field-decl name='head' id='ListDesc.head' export='read-only'>
            <type>
              <type-name name='Element' href='#Element'/>
            </type>
          </field-decl>
          <field-decl name='tail' id='ListDesc.tail' export='read-only'>
            <type>
              <type-name name='Element' href='#Element'/>
            </type>
          </field-decl>
        </record>
      </type>
    </type-decl>
    <procedure name='NewList' id='NewList' export='yes'>
      <formal-parameters>
        <result-type>
          <type-name name='List' href='#List'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Append' id='ListDesc.Append' export='yes'>
      <formal-parameters>
        <receiver-decl name='list' id='ListDesc.Append.list' export='no' variable-parameter='no'>
          <type>
            <type-name name='List' href='#List'/>
          </type>
        </receiver-decl>
        <parameter-decl name='elem' id='ListDesc.Append.elem' export='no' variable-parameter='no'>
          <type>
            <type-name name='Element' href='#Element'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='IsEmpty' id='ListDesc.IsEmpty' export='yes'>
      <formal-parameters>
        <receiver-decl name='list' id='ListDesc.IsEmpty.list' export='no' variable-parameter='no'>
          <type>
            <type-name name='List' href='#List'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Write' id='ListDesc.Write' export='yes'>
      <formal-parameters>
        <receiver-decl name='list' id='ListDesc.Write.list' export='no' variable-parameter='no'>
          <type>
            <type-name name='List' href='#List'/>
          </type>
        </receiver-decl>
        <parameter-decl name='w' id='ListDesc.Write.w' export='no' variable-parameter='no'>
          <type>
            <type-name module='Writer' name='Writer' href='XML:Writer#Writer'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
  </class>
  <class name='ElementFactory'>
    <type-decl name='ElementFactory' id='ElementFactory' export='no'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='ElementFactoryDesc' href='#ElementFactoryDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='ElementFactoryDesc' id='ElementFactoryDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
  </class>
  <class name='RootFactory'>
    <type-decl name='RootFactory' id='RootFactory' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='RootFactoryDesc' href='#RootFactoryDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='RootFactoryDesc' id='RootFactoryDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='NewRootFactory' id='NewRootFactory' export='yes'>
      <formal-parameters>
        <result-type>
          <type-name name='RootFactory' href='#RootFactory'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='AddFactory' id='RootFactoryDesc.AddFactory' export='yes'>
      <formal-parameters>
        <receiver-decl name='rf' id='RootFactoryDesc.AddFactory.rf' export='no' variable-parameter='no'>
          <type>
            <type-name name='RootFactory' href='#RootFactory'/>
          </type>
        </receiver-decl>
        <parameter-decl name='name' id='RootFactoryDesc.AddFactory.name' export='no' variable-parameter='no'>
          <type>
            <type-name name='StringVar' href='#StringVar'/>
          </type>
        </parameter-decl>
        <parameter-decl name='gen' id='RootFactoryDesc.AddFactory.gen' export='no' variable-parameter='no'>
          <type>
            <type-name name='FactoryFunction' href='#FactoryFunction'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='NewElement' id='RootFactoryDesc.NewElement' export='yes'>
      <oberon-doc>
        <summary>Called with the name of the root element of an XML document.</summary>
        <p pad-after='yes' no-indent='yes'>Called with the name of the root element of an XML document.  Result is a new instance of the element if the name is valid, or <code>NIL</code> otherwise.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='rf' id='RootFactoryDesc.NewElement.rf' export='no' variable-parameter='no'>
          <type>
            <type-name name='RootFactory' href='#RootFactory'/>
          </type>
        </receiver-decl>
        <parameter-decl name='name' id='RootFactoryDesc.NewElement.name' export='no' variable-parameter='no'>
          <type>
            <type-name name='String' href='#String'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Element' href='#Element'/>
        </result-type>
      </formal-parameters>
    </procedure>
  </class>
  <module-ref name='XML:DTD'>
    <ref-target type='html' relative-uri='../DTD.html'/>
  </module-ref>
  <module-ref name='XML:Locator'>
    <ref-target type='html' relative-uri='../Locator.html'/>
  </module-ref>
  <module-ref name='XML:Writer'>
    <ref-target type='html' relative-uri='../Writer.html'/>
  </module-ref>
</interface-description>
