<?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:UnicodeCodec:Latin1' id=''>
  <import-decl name='UC' id='UC' export='no' module='XML:UnicodeCodec'/>
  <var-decl name='factory' id='factory' export='read-only'>
    <type>
      <type-name name='Factory' href='#Factory'/>
    </type>
  </var-decl>
  <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='Codec'>
    <type-decl name='Codec' id='Codec' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='CodecDesc' href='#CodecDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='CodecDesc' id='CodecDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='Decode' id='CodecDesc.Decode' export='yes'>
      <doc-inherited-from module='XML:UnicodeCodec' name='Decode' class='Codec' href='XML:UnicodeCodec#CodecDesc.Decode'/>
      <oberon-doc>
        <summary>Decodes the bytes in <samp><oberon-param href='#CodecDesc.Decode.source'>source</oberon-param>[<oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param>, <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param>[</samp> into the Unicode sequence <samp><oberon-param href='#CodecDesc.Decode.dest'>dest</oberon-param>[<oberon-param href='#CodecDesc.Decode.destStart'>destStart</oberon-param>, <oberon-param href='#CodecDesc.Decode.destEnd'>destEnd</oberon-param>[</samp>.</summary>
        <p pad-after='yes' no-indent='yes'>Decodes the bytes in <samp><oberon-param href='#CodecDesc.Decode.source'>source</oberon-param>[<oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param>, <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param>[</samp> into the Unicode sequence <samp><oberon-param href='#CodecDesc.Decode.dest'>dest</oberon-param>[<oberon-param href='#CodecDesc.Decode.destStart'>destStart</oberon-param>, <oberon-param href='#CodecDesc.Decode.destEnd'>destEnd</oberon-param>[</samp>.</p>
        <pre-cond pad-after='yes'>
          <itemize pad-after='no'>
            <itemize-mark><bullet/></itemize-mark>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param> &lt; <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param>, and the character sequence <samp><oberon-param href='#CodecDesc.Decode.source'>source</oberon-param>[<oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param>, <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param>[</samp> holds the characters that are to be decoded.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Decode.destEnd'>destEnd</oberon-param>-<oberon-param href='#CodecDesc.Decode.destStart'>destStart</oberon-param> &gt;= <oberon-const href='XML:UnicodeCodec#maxUCS2EncodingLength'>maxUCS2EncodingLength</oberon-const>.  In other words, there must be enough room in the destination sequence <samp><oberon-param href='#CodecDesc.Decode.dest'>dest</oberon-param>[<oberon-param href='#CodecDesc.Decode.destStart'>destStart</oberon-param>, <oberon-param href='#CodecDesc.Decode.destEnd'>destEnd</oberon-param>[</samp> to hold at least one UCS-4 character, possibly split into a high and low surrogate pair.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param> is the value of <oberon-param href='#CodecDesc.Decode.sourceDone'>sourceDone</oberon-param> of a previous call to this procedure (or <oberon-proc href='XML:UnicodeCodec#FactoryDesc.NewCodecBOM'>Factory.NewCodecBOM</oberon-proc>), <strong>or</strong> the address of <samp>source[sourceStart]</samp> is aligned on a 4-byte boundary.  This ensures, that the decoder functions can access the source sequence in chunks of 2 and 4 bytes, without needing to worry about the alignment of memory accesses.</p>
            </item>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param>-<oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param> &gt;= <oberon-const href='XML:UnicodeCodec#maxUTF8EncodingLength'>maxUTF8EncodingLength</oberon-const>, <strong>or</strong> <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param> designates the end of the byte sequence being decoded.  This means, that at least one complete character is encoded in the input sequence, or the input sequence ends with a possibly incomplete character.</p>
            </item>
          </itemize>
        </pre-cond>
        <post-cond pad-after='yes'>
          <itemize pad-after='no'>
            <itemize-mark><bullet/></itemize-mark>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param> &lt; <oberon-param href='#CodecDesc.Decode.sourceDone'>sourceDone</oberon-param> &lt;= <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param> and <oberon-param href='#CodecDesc.Decode.destStart'>destStart</oberon-param> &lt; <oberon-param href='#CodecDesc.Decode.destDone'>destDone</oberon-param> &lt;= <oberon-param href='#CodecDesc.Decode.destEnd'>destEnd</oberon-param>.  This means, that at least one character has been decoded.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Decode.sourceDone'>sourceDone</oberon-param> &gt; <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param>-<oberon-const href='XML:UnicodeCodec#maxUTF8EncodingLength'>maxUTF8EncodingLength</oberon-const> <emph>or</emph> <oberon-param href='#CodecDesc.Decode.destDone'>destDone</oberon-param> &gt; <oberon-param href='#CodecDesc.Decode.destEnd'>destEnd</oberon-param>-<oberon-const href='XML:UnicodeCodec#maxUCS2EncodingLength'>maxUCS2EncodingLength</oberon-const>.  This implies, that the decoding algorithm continues until it gets near the end of the source or destination buffer.  But the implementation of the decoding algorithm can be set up in such a way, that it stops when the input or output sequence of the next character <emph>may</emph> not fit into the buffers.  It must not decode the maximum number of bytes that fit into the buffers.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'>If the procedure was started with <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param>-<oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param> &lt; <oberon-const href='XML:UnicodeCodec#maxUTF8EncodingLength'>maxUTF8EncodingLength</oberon-const>, and if there is enough room in the destination buffer to store the whole result, then all remaining bytes in the source sequence have been decoded and <oberon-param href='#CodecDesc.Decode.sourceDone'>sourceDone</oberon-param> equals <oberon-param href='#CodecDesc.Decode.sourceEnd'>sourceEnd</oberon-param>.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'>Every malformed character, and every decoded character code that can not be mapped onto a Unicode character (i.e., one or two UCS-2 values), is replaced with <oberon-const href='XML:UnicodeCodec#decodeError'>decodeError</oberon-const>, and the counter <oberon-field href='XML:UnicodeCodec#CodecDesc.invalidChars'>codec.invalidChars</oberon-field> is incremented by one.  The output of the decoding function contains only valid characters.  That is, all surrogate codes are properly paired, and the character codes U+FFFE and U+FFFF are replaced with <oberon-const href='XML:UnicodeCodec#decodeError'>decodeError</oberon-const>.</p>
            </item>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'><samp><oberon-param href='#CodecDesc.Decode.dest'>dest</oberon-param>[<oberon-param href='#CodecDesc.Decode.destStart'>destStart</oberon-param>, <oberon-param href='#CodecDesc.Decode.destDone'>destDone</oberon-param>[</samp> holds the result of decoding <samp><oberon-param href='#CodecDesc.Decode.source'>source</oberon-param>[<oberon-param href='#CodecDesc.Decode.sourceStart'>sourceStart</oberon-param>, <oberon-param href='#CodecDesc.Decode.sourceDone'>sourceDone</oberon-param>[</samp>.</p>
            </item>
          </itemize>
        </post-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='codec' id='CodecDesc.Decode.codec' export='no' variable-parameter='no'>
          <type>
            <type-name name='Codec' href='#Codec'/>
          </type>
        </receiver-decl>
        <parameter-decl name='source' id='CodecDesc.Decode.source' export='no' variable-parameter='yes'>
          <type>
            <array>
              <element-type>
                <type-name module='#predef' name='CHAR'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceStart' id='CodecDesc.Decode.sourceStart' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceEnd' id='CodecDesc.Decode.sourceEnd' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='dest' id='CodecDesc.Decode.dest' export='no' variable-parameter='yes'>
          <type>
            <array>
              <element-type>
                <type-name module='#predef' name='LONGCHAR'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
        <parameter-decl name='destStart' id='CodecDesc.Decode.destStart' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='destEnd' id='CodecDesc.Decode.destEnd' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceDone' id='CodecDesc.Decode.sourceDone' export='no' variable-parameter='yes'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='destDone' id='CodecDesc.Decode.destDone' export='no' variable-parameter='yes'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='XML:UnicodeCodec' name='Decode' class='Codec' href='XML:UnicodeCodec#CodecDesc.Decode'/>
    </procedure>
    <procedure name='Encode' id='CodecDesc.Encode' export='yes'>
      <doc-inherited-from module='XML:UnicodeCodec' name='Encode' class='Codec' href='XML:UnicodeCodec#CodecDesc.Encode'/>
      <oberon-doc>
        <summary>Encodes the Unicode characters in <samp><oberon-param href='#CodecDesc.Encode.source'>source</oberon-param>[<oberon-param href='#CodecDesc.Encode.sourceStart'>sourceStart</oberon-param>, <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param>[</samp> into the byte sequence <samp><oberon-param href='#CodecDesc.Encode.dest'>dest</oberon-param>[<oberon-param href='#CodecDesc.Encode.destStart'>destStart</oberon-param>, <oberon-param href='#CodecDesc.Encode.destEnd'>destEnd</oberon-param>[</samp>.</summary>
        <p pad-after='yes' no-indent='yes'>Encodes the Unicode characters in <samp><oberon-param href='#CodecDesc.Encode.source'>source</oberon-param>[<oberon-param href='#CodecDesc.Encode.sourceStart'>sourceStart</oberon-param>, <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param>[</samp> into the byte sequence <samp><oberon-param href='#CodecDesc.Encode.dest'>dest</oberon-param>[<oberon-param href='#CodecDesc.Encode.destStart'>destStart</oberon-param>, <oberon-param href='#CodecDesc.Encode.destEnd'>destEnd</oberon-param>[</samp>.</p>
        <pre-cond pad-after='yes'>
          <itemize pad-after='no'>
            <itemize-mark><bullet/></itemize-mark>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Encode.sourceStart'>sourceStart</oberon-param> &lt; <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param>, and the Unicode character sequence <samp><oberon-param href='#CodecDesc.Encode.source'>source</oberon-param>[<oberon-param href='#CodecDesc.Encode.sourceStart'>sourceStart</oberon-param>, <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param>[</samp> holds the characters that are to be decoded.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Encode.destEnd'>destEnd</oberon-param>-<oberon-param href='#CodecDesc.Encode.destStart'>destStart</oberon-param> &gt;= <oberon-const href='XML:UnicodeCodec#maxUTF8EncodingLength'>maxUTF8EncodingLength</oberon-const>.  In other words, there must be enough room in the destination sequence <samp><oberon-param href='#CodecDesc.Encode.dest'>dest</oberon-param>[<oberon-param href='#CodecDesc.Encode.destStart'>destStart</oberon-param>, <oberon-param href='#CodecDesc.Encode.destEnd'>destEnd</oberon-param>[</samp> to hold at least one UCS-4 character, possibly encoded as a sequence of 6 bytes.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Encode.destStart'>destStart</oberon-param> is the value of <oberon-param href='#CodecDesc.Encode.destDone'>destDone</oberon-param> of a previous call to this procedure (or <oberon-proc href='XML:UnicodeCodec#FactoryDesc.NewCodecBOM'>Factory.NewCodecBOM</oberon-proc>), <strong>or</strong> the address of <samp>dest[destStart]</samp> is aligned on a 4-byte boundary.  This ensures, that the encoder functions can access the destination sequence in chunks of 2 and 4 bytes, without needing to worry about the alignment of memory accesses.</p>
            </item>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param>-<oberon-param href='#CodecDesc.Encode.sourceStart'>sourceStart</oberon-param> &gt;= <oberon-const href='XML:UnicodeCodec#maxUCS2EncodingLength'>maxUCS2EncodingLength</oberon-const>, <strong>or</strong> <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param> designates the end of the character sequence being decoded.  This means, that at least one complete character is in the input sequence, or the input sequence ends with a possibly incomplete character.</p>
            </item>
          </itemize>
        </pre-cond>
        <post-cond pad-after='yes'>
          <itemize pad-after='no'>
            <itemize-mark><bullet/></itemize-mark>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Encode.sourceStart'>sourceStart</oberon-param> &lt; <oberon-param href='#CodecDesc.Encode.sourceDone'>sourceDone</oberon-param> &lt;= <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param> and <oberon-param href='#CodecDesc.Encode.destStart'>destStart</oberon-param> &lt; <oberon-param href='#CodecDesc.Encode.destDone'>destDone</oberon-param> &lt;= <oberon-param href='#CodecDesc.Encode.destEnd'>destEnd</oberon-param>.  This means, that at least one character has been encoded.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><oberon-param href='#CodecDesc.Encode.sourceDone'>sourceDone</oberon-param> &gt; <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param>-<oberon-const href='XML:UnicodeCodec#maxUCS2EncodingLength'>maxUCS2EncodingLength</oberon-const> <emph>or</emph> <oberon-param href='#CodecDesc.Encode.destDone'>destDone</oberon-param> &gt; <oberon-param href='#CodecDesc.Encode.destEnd'>destEnd</oberon-param>-<oberon-const href='XML:UnicodeCodec#maxUTF8EncodingLength'>maxUTF8EncodingLength</oberon-const>.  This implies, that the encoding algorithm continues until it gets near the end of the source or destination buffer.  But the implementation of the encoding algorithm can be set up in such a way, that it stops when the input or output sequence of the next character <emph>may</emph> not fit into the buffers.  It must not decode the maximum number of bytes that fit into the buffers.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'>If the procedure was started with <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param>-<oberon-param href='#CodecDesc.Encode.sourceStart'>sourceStart</oberon-param> &lt; <oberon-const href='XML:UnicodeCodec#maxUCS2EncodingLength'>maxUCS2EncodingLength</oberon-const>, and if there is enough room in the destination buffer to store the whole result, then all remaining bytes in the source sequence have been encoded and <oberon-param href='#CodecDesc.Encode.sourceDone'>sourceDone</oberon-param> equals <oberon-param href='#CodecDesc.Encode.sourceEnd'>sourceEnd</oberon-param>.</p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'>Every malformed character, and every character code that can not be mapped onto a valid encoding, is replaced with <oberon-const href='XML:UnicodeCodec#encodeError'>encodeError</oberon-const>, and the counter <oberon-field href='XML:UnicodeCodec#CodecDesc.invalidChars'>codec.invalidChars</oberon-field> is incremented by one.  Out of range Unicode characters encoded as a (high, low) surrogate pair are recognized as a <emph>single</emph> invalid character.  The character codes U+FFFE and U+FFFF are also mapped to <oberon-const href='XML:UnicodeCodec#encodeError'>encodeError</oberon-const>.</p>
            </item>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'><samp><oberon-param href='#CodecDesc.Encode.dest'>dest</oberon-param>[<oberon-param href='#CodecDesc.Encode.destStart'>destStart</oberon-param>, <oberon-param href='#CodecDesc.Encode.destDone'>destDone</oberon-param>[</samp> holds the result of encoding <samp><oberon-param href='#CodecDesc.Encode.source'>source</oberon-param>[<oberon-param href='#CodecDesc.Encode.sourceStart'>sourceStart</oberon-param>, <oberon-param href='#CodecDesc.Encode.sourceDone'>sourceDone</oberon-param>[</samp>.</p>
            </item>
          </itemize>
        </post-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='codec' id='CodecDesc.Encode.codec' export='no' variable-parameter='no'>
          <type>
            <type-name name='Codec' href='#Codec'/>
          </type>
        </receiver-decl>
        <parameter-decl name='source' id='CodecDesc.Encode.source' export='no' variable-parameter='yes'>
          <type>
            <array>
              <element-type>
                <type-name module='#predef' name='LONGCHAR'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceStart' id='CodecDesc.Encode.sourceStart' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceEnd' id='CodecDesc.Encode.sourceEnd' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='dest' id='CodecDesc.Encode.dest' export='no' variable-parameter='yes'>
          <type>
            <array>
              <element-type>
                <type-name module='#predef' name='CHAR'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
        <parameter-decl name='destStart' id='CodecDesc.Encode.destStart' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='destEnd' id='CodecDesc.Encode.destEnd' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceDone' id='CodecDesc.Encode.sourceDone' export='no' variable-parameter='yes'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='destDone' id='CodecDesc.Encode.destDone' export='no' variable-parameter='yes'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='XML:UnicodeCodec' name='Encode' class='Codec' href='XML:UnicodeCodec#CodecDesc.Encode'/>
    </procedure>
    <base-class module='XML:UnicodeCodec' class='Codec' href='XML:UnicodeCodec#Codec'>
      <inherited-method module='XML:UnicodeCodec' name='Decode' class='Codec' href='XML:UnicodeCodec#CodecDesc.Decode'/>
      <inherited-method module='XML:UnicodeCodec' name='Encode' class='Codec' href='XML:UnicodeCodec#CodecDesc.Encode'/>
      <inherited-method module='XML:UnicodeCodec' name='EncodeBOM' class='Codec' href='XML:UnicodeCodec#CodecDesc.EncodeBOM'/>
      <inherited-field module='XML:UnicodeCodec' name='bom' class='Codec' href='XML:UnicodeCodec#CodecDesc.bom'/>
      <inherited-field module='XML:UnicodeCodec' name='invalidChars' class='Codec' href='XML:UnicodeCodec#CodecDesc.invalidChars'/>
    </base-class>
  </class>
  <class name='Factory'>
    <type-decl name='Factory' id='Factory' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='FactoryDesc' href='#FactoryDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='FactoryDesc' id='FactoryDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='NewCodec' id='FactoryDesc.NewCodec' export='yes'>
      <doc-inherited-from module='XML:UnicodeCodec' name='NewCodec' class='Factory' href='XML:UnicodeCodec#FactoryDesc.NewCodec'/>
      <oberon-doc>
        <summary>Creates a new codec from factory <oberon-param href='#FactoryDesc.NewCodec.f'>f</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Creates a new codec from factory <oberon-param href='#FactoryDesc.NewCodec.f'>f</oberon-param>.  This should not be called for factories with an <oberon-field href='XML:UnicodeCodec#FactoryDesc.bom'>Factory.bom</oberon-field> of <oberon-const href='XML:UnicodeCodec#bomOptional'>bomOptional</oberon-const> or <oberon-const href='XML:UnicodeCodec#bomRequired'>bomRequired</oberon-const>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='f' id='FactoryDesc.NewCodec.f' export='no' variable-parameter='no'>
          <type>
            <type-name name='Factory' href='#Factory'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name name='Codec' href='#Codec'/>
        </result-type>
      </formal-parameters>
      <redefined-method module='XML:UnicodeCodec' name='NewCodec' class='Factory' href='XML:UnicodeCodec#FactoryDesc.NewCodec'/>
    </procedure>
    <procedure name='NewCodecBOM' id='FactoryDesc.NewCodecBOM' export='yes'>
      <doc-inherited-from module='XML:UnicodeCodec' name='NewCodecBOM' class='Factory' href='XML:UnicodeCodec#FactoryDesc.NewCodecBOM'/>
      <oberon-doc>
        <summary>Creates a new codec from factoriy <oberon-param href='#FactoryDesc.NewCodecBOM.f'>f</oberon-param>, taking the byte order mark into account.</summary>
        <p pad-after='yes' no-indent='yes'>Creates a new codec from factoriy <oberon-param href='#FactoryDesc.NewCodecBOM.f'>f</oberon-param>, taking the byte order mark into account.  The exact behaviour of this procedure depends on the value of <oberon-field href='XML:UnicodeCodec#FactoryDesc.bom'>f.bom</oberon-field>.</p>
        <table pad-after='yes'>
          <table-row pad-after='yes'>
            <table-first-column pad-after='no'><oberon-const href='XML:UnicodeCodec#bomNotApplicable'>bomNotApplicable</oberon-const></table-first-column>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'>Any byte order mark is ignored, and <oberon-param href='#FactoryDesc.NewCodecBOM.sourceDone'>sourceDone</oberon-param> is set to <oberon-param href='#FactoryDesc.NewCodecBOM.sourceStart'>sourceStart</oberon-param>.</p>
            </item>
          </table-row>
          <table-row pad-after='yes'>
            <table-first-column pad-after='no'><oberon-const href='XML:UnicodeCodec#bomOptional'>bomOptional</oberon-const></table-first-column>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'>If the <oberon-param href='#FactoryDesc.NewCodecBOM.source'>source</oberon-param> begins with a byte order mark, it is removed from the input and the correspondig codec is returned, and the parameter <oberon-param href='#FactoryDesc.NewCodecBOM.sourceDone'>sourceDone</oberon-param> is set after the end of the byte order mark.  If there is no byte order mark, <oberon-param href='#FactoryDesc.NewCodecBOM.sourceDone'>sourceDone</oberon-param> is set to <oberon-param href='#FactoryDesc.NewCodecBOM.sourceStart'>sourceStart</oberon-param> and the default codec is returned.</p>
            </item>
          </table-row>
          <table-row pad-after='no'>
            <table-first-column pad-after='no'><oberon-const href='XML:UnicodeCodec#bomRequired'>bomRequired</oberon-const></table-first-column>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'>In the presence of a byte order mark, this is just like <oberon-const href='XML:UnicodeCodec#bomOptional'>bomOptional</oberon-const>, but without a byter order mark the returned codec's <oberon-field href='XML:UnicodeCodec#CodecDesc.invalidChars'>Codec.invalidChars</oberon-field> counter is set to one and <oberon-param href='#FactoryDesc.NewCodecBOM.sourceDone'>sourceDone</oberon-param> is set to <oberon-param href='#FactoryDesc.NewCodecBOM.sourceStart'>sourceStart</oberon-param>.</p>
            </item>
          </table-row>
        </table>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><oberon-param href='#FactoryDesc.NewCodecBOM.sourceEnd'>sourceEnd</oberon-param>-<oberon-param href='#FactoryDesc.NewCodecBOM.sourceStart'>sourceStart</oberon-param> &gt;= <oberon-const href='XML:UnicodeCodec#maxUTF8EncodingLength'>maxUTF8EncodingLength</oberon-const>, <strong>or</strong> <oberon-param href='#FactoryDesc.NewCodecBOM.sourceEnd'>sourceEnd</oberon-param> designates the end of the byte sequence being decoded.  This means, that at least one complete character is encoded in the input sequence, or the input sequence ends with a possibly incomplete character.</p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='f' id='FactoryDesc.NewCodecBOM.f' export='no' variable-parameter='no'>
          <type>
            <type-name name='Factory' href='#Factory'/>
          </type>
        </receiver-decl>
        <parameter-decl name='source' id='FactoryDesc.NewCodecBOM.source' export='no' variable-parameter='yes'>
          <type>
            <array>
              <element-type>
                <type-name module='#predef' name='CHAR'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceStart' id='FactoryDesc.NewCodecBOM.sourceStart' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceEnd' id='FactoryDesc.NewCodecBOM.sourceEnd' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='sourceDone' id='FactoryDesc.NewCodecBOM.sourceDone' export='no' variable-parameter='yes'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Codec' href='#Codec'/>
        </result-type>
      </formal-parameters>
      <redefined-method module='XML:UnicodeCodec' name='NewCodecBOM' class='Factory' href='XML:UnicodeCodec#FactoryDesc.NewCodecBOM'/>
    </procedure>
    <procedure name='GetEncodingName' id='FactoryDesc.GetEncodingName' export='yes'>
      <doc-inherited-from module='XML:UnicodeCodec' name='GetEncodingName' class='Factory' href='XML:UnicodeCodec#FactoryDesc.GetEncodingName'/>
      <oberon-doc>
        <summary>Returns the preferred MIME name for the factory's encoding.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the preferred MIME name for the factory's encoding.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='f' id='FactoryDesc.GetEncodingName.f' export='no' variable-parameter='no'>
          <type>
            <type-name name='Factory' href='#Factory'/>
          </type>
        </receiver-decl>
        <parameter-decl name='name' id='FactoryDesc.GetEncodingName.name' export='no' variable-parameter='yes'>
          <type>
            <array>
              <element-type>
                <type-name module='#predef' name='CHAR'/>
              </element-type>
            </array>
          </type>
        </parameter-decl>
      </formal-parameters>
      <redefined-method module='XML:UnicodeCodec' name='GetEncodingName' class='Factory' href='XML:UnicodeCodec#FactoryDesc.GetEncodingName'/>
    </procedure>
    <base-class module='XML:UnicodeCodec' class='Factory' href='XML:UnicodeCodec#Factory'>
      <inherited-method module='XML:UnicodeCodec' name='GetEncodingName' class='Factory' href='XML:UnicodeCodec#FactoryDesc.GetEncodingName'/>
      <inherited-method module='XML:UnicodeCodec' name='NewCodec' class='Factory' href='XML:UnicodeCodec#FactoryDesc.NewCodec'/>
      <inherited-method module='XML:UnicodeCodec' name='NewCodecBOM' class='Factory' href='XML:UnicodeCodec#FactoryDesc.NewCodecBOM'/>
      <inherited-field module='XML:UnicodeCodec' name='bom' class='Factory' href='XML:UnicodeCodec#FactoryDesc.bom'/>
    </base-class>
  </class>
  <module-ref name='XML:UnicodeCodec'>
    <ref-target type='html' relative-uri='../UnicodeCodec.html'/>
  </module-ref>
</interface-description>
