# XML:UnicodeBuffer

### Import List

        IO
        Msg
        XML:UnicodeCodec

Class List
Input |
Output |

Class Summary: Input [Detail]

      +--XML:UnicodeBuffer.Input

Field Summary
autoDetectedCodec-: BOOLEAN
chars-: CharArray Character data from input channel.
codec-: Codec
codecFactory-: Factory
discardable: CharPos The client can define here how many bytes that have been read into the buffer will not be inspected again later, and can therefore be discarded by Input.NextBlock.
endOfBuffer-: CharPos Number of valid characters in chars.
errList-: MsgList Error messages are appended to this list.
offsetFromPos0-: CharPos Offset of ``chars[0]`' from the beginning of the input text.
Constructor Summary
InitInput(Input, BOOLEAN, ByteChannel, Factory, MsgList)
NewInput(ByteChannel, Factory, MsgList): Input Create new input buffer for reader reader and try to read the first block of data from it.
Method Summary
Close() Closes the channel associated with buffer in.
NextBlock(): BOOLEAN Tries to read additional data from in's channel.
SetCodec(Factory, BOOLEAN)

Class Summary: Output [Detail]

      +--XML:UnicodeBuffer.Output

Field Summary
codec-: Codec Any encoding errors are signalled by incrementing Codec.Codec.invalidChars.
codecFactory-: Factory
error-: Error
writer-: ByteChannel
Constructor Summary
InitOutput(Output, BOOLEAN, ByteChannel, Factory, BOOLEAN)
NewOutput(ByteChannel, Factory, BOOLEAN): Output Creates new output buffer for writer writer.
Method Summary
Flush() Flushes the contents of the output buffer to the channel.
Write16(ARRAY OF Char)
Write16I(ARRAY OF Char, CharPos, CharPos)
Write8(ARRAY OF CHAR)
Write8I(ARRAY OF CHAR, CharPos, CharPos)

Type Summary
Char = LONGCHAR Character type used to represent the Unicode input data.
CharArray = POINTER TO ARRAY OF Char Character array of arbitrary length.
CharPos = LONGINT Character position for a channel.

Constant Summary
markerEOB This is the character value that is used to mark the end of the Unicode buffer.
markerEOD This character value marks the end of the document.
markerError This character is inserted into the processor output for characters that are not valid in XML.
sizeOfInputBuffer

Class Detail: Input

Field Detail

### autoDetectedCodec

    FIELD autoDetectedCodec-: BOOLEAN

### chars

    FIELD chars-: CharArray

> Character data from input channel.

### codec

    FIELD codec-: Codec

### codecFactory

    FIELD codecFactory-: Factory

### discardable

    FIELD discardable: CharPos

> The client can define here how many bytes that have been read into the buffer will not be inspected again later, and can therefore be discarded by Input.NextBlock. Possible values for this field are [0..endOfBuffer].

### endOfBuffer

    FIELD endOfBuffer-: CharPos

> Number of valid characters in chars. All index values in the range [0..endOfBuffer-1] hold valid characters. The value of ``chars[endOfBuffer]`' is markerEOB.

### errList

    FIELD errList-: MsgList

> Error messages are appended to this list.

### offsetFromPos0

    FIELD offsetFromPos0-: CharPos

> Offset of ``chars[0]`' from the beginning of the input text.

Constructor Detail

### InitInput

    PROCEDURE InitInput(input: Input;
                        new: BOOLEAN;
                        reader: ByteChannel;
                        codecFactory: Factory;
                        errList: MsgList)
      RAISES Error;

### NewInput

    PROCEDURE NewInput(reader: ByteChannel;
                       codecFactory: Factory;
                       errList: MsgList): Input
      RAISES Error;

> Create new input buffer for reader reader and try to read the first block of data from it. Returns an initialized input buffer with up to sizeOfInputBuffer characters of input.

Method Detail

### Close

    PROCEDURE (in: Input) Close()
      RAISES Error;

> Closes the channel associated with buffer in. Afterwards, no further operations are permitted on in, except for reading the field Input.errList.

### NextBlock

    PROCEDURE (in: Input) NextBlock(): BOOLEAN
      RAISES Error;

> Tries to read additional data from in's channel. If at least one character could be read, result is TRUE. FALSE means that not a single character was added to the buffer, either because the end of the file was reached, or because of a read error. In the latter case, an message is added to in's error list.

> A call to this buffer may change the fields Input.chars, Input.offsetFromPos0, and Input.endOfBuffer. If part of the buffer is discarded, Input.discardable is set to zero.

### SetCodec

    PROCEDURE (in: Input) SetCodec(cf: Factory;
                       autoDetect: BOOLEAN)
      RAISES Error;

Class Detail: Output

Field Detail

### codec

    FIELD codec-: Codec

> Any encoding errors are signalled by incrementing Codec.Codec.invalidChars.

### codecFactory

    FIELD codecFactory-: Factory

### error

    FIELD error-: Error

### writer

    FIELD writer-: ByteChannel

Constructor Detail

### InitOutput

    PROCEDURE InitOutput(out: Output;
                         new: BOOLEAN;
                         writer: ByteChannel;
                         codecFactory: Factory;
                         createBOM: BOOLEAN)

### NewOutput

    PROCEDURE NewOutput(writer: ByteChannel;
                        codecFactory: Factory;
                        createBOM: BOOLEAN): Output

> Creates new output buffer for writer writer.

Method Detail

### Flush

    PROCEDURE (out: Output) Flush()
      RAISES Error;

> Flushes the contents of the output buffer to the channel. Then, flush is called on the channel itself.

### Write16

    PROCEDURE (out: Output) Write16(str: ARRAY OF Char)

### Write16I

    PROCEDURE (out: Output) Write16I(str: ARRAY OF Char;
                       start: CharPos;
                       end: CharPos)

### Write8

    PROCEDURE (out: Output) Write8(str: ARRAY OF CHAR)

### Write8I

    PROCEDURE (out: Output) Write8I(str: ARRAY OF CHAR;
                      start: CharPos;
                      end: CharPos)

Type Detail

### Char

    TYPE Char = LONGCHAR

> Character type used to represent the Unicode input data.

### CharArray

    TYPE CharArray = POINTER TO ARRAY OF Char

> Character array of arbitrary length. This type is used for the character data of the input buffer.

### CharPos

    TYPE CharPos = LONGINT

> Character position for a channel. The very first byte that would be read from the channel has position 0.

Constant Detail

### markerEOB

    CONST markerEOB

> This is the character value that is used to mark the end of the Unicode buffer. It is the first non-input character after the last valid document character in the buffer. Because this character code is never produced by the Unicode decoders, testing against this character code gives a definitive answer. Calling Input.NextBlock will replace the character with a valid character from the input document, or with markerEOD.

### markerEOD

    CONST markerEOD

> This character value marks the end of the document. It is the first non-input character after the last valid document character in the buffer. This character is never emitted by the Unicode decoders, and it is never replaced with another value.

### markerError

    CONST markerError

> This character is inserted into the processor output for characters that are not valid in XML.

### sizeOfInputBuffer

    CONST sizeOfInputBuffer