::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
class Io.Stream.Public public Gilda: Utilities for text files
type Stream.In &Read from a string or file.
is &Read from a string as a Stream.
- Source string, &The source string.
- In = 0 word, &Initially 0 for closed; else one-based string index.
- Mark = 0 word, &A saved index. See MARK.INDEX, REPLACE.SCAN.VALUE, MACRO.PARAMETER
File, &File Id when reading from a file.
Open => $File`Open :NYI: Open => AT(@File.Id) \/ In ~= 0
import Reader(Stream.In)
:
:...............................................................................
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
method READER..Reader..Stream.In: Initializes a Reader.
change Reader..Stream.In
:
: EXCEPTIONS: The file containing Root does not exist.
: The file containing Root is already open.
:...............................................................................
:
method OPEN..Reader..Stream.In: Opens a file for reading and initializes READER.
exit Reader..Stream.In
entry Source string :Source file OS path or a source string.
:
:...............................................................................
:
method OPEN.TEXT..Reader..Stream.In: Opens a file for reading and initializes READER.
exit Reader..Stream.In
entry Source string :Source string.
:
:...............................................................................
:
method CLOSE..Reader..Stream.In: Close a file that is open for reading with Read.Ch.
change Reader..Stream.In
:
: Note: Read will automatically close a file at Eof. This method only
: needs to be called when a file is partially read.
:..............................................................................
:
method LINE..Reader..Stream.In: Reads the rest of a line from a string.
change Reader..Stream.In
exit Line string, &Remainder of the current line.
Next byte :First character of the next line.
:
:...............................................................................
:
method NEXT..Reader..Stream.In: Reads the current and next characters from a file.
change Reader..Stream.In
exit C byte, &The current character.
Next byte :The next character.
precondition
$Next ~= Peof; ERROR: Attempt to read characters past EOF.
.
: Exit: C = ( C* Eol )* Eof Peof+
:
: Assert: The file, Read.Id, is not open for sequential input.
: Attempt to read past end of file. If the assertion is not
: invoked, the PEOF character will be returned in C and Next.
:...............................................................................
:
method REPLACE..Reader..Stream.In: Replace the last token scanned with another.
change Reader..Stream.In
entry Mark word, &Index to the first character to replace.
Value = "" string :The replacement value.
:
: Usage: OPEN Stream.In
: MARK Stream.In, Mark; Save the beginning of this token.
: SCREEN Stream.In, TOken, Emit; Read in one or more tokens.
: REPLACE Stream.In, Mark, Value; Replace the tokens.
: SCREEN Stream.In, TOken, Emit; Read the first token in the replaced value.
:...............................................................................
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
method CLOSE..Stream.In: Clears the string; sets closed status (optional).
change Stream.In
:
:...............................................................................
:
method DRAIN..Stream.In: Clears the string; sets closed status (optional).
change Stream.In
:
:...............................................................................
:
method LINE..Stream.In: Reads the next line from a file.
change Stream.In
exit Line string
:
:...............................................................................
:
method MARK..Stream.In: Mark the beginning of a token while scanning a string.
change Stream.In :Stream opened for string reads.
exit Mark word :Save this index and pass it to Replace.
:On a file read -Eof is returned (not allowed).
:
:...............................................................................
:
method NEXT..Stream.In: Reads the current from a line of text.
change Stream.In
exit C byte :Next character (0 extended); Eol; Eof; Peof; 0 (closed).
:
: Exit: C -> (<c>* <delimiters> )* Eof Peof
:...............................................................................
:
method OPEN..Stream.In: Initialize reading from a single text line or file.
exit Stream.In
entry Source string, &Line of text or a relative file OS path.
Text = 0 Bit :0 - Source is a file path; 1 - a text string.
:
: The text is raw. The contents does not impact the status.
:...............................................................................
:
method REPLACE..Stream.In: Replace a segment of text with another.
change Stream.In :Stream opened for string reads and marked.
entry Mark word, &Index to the first character to replace.
Value = "" string :The replacement value.
:
: swap = $; Swap into a file.
: OPEN.STREAM.STRING $, value; Open a text string read.
:...............................................................................
:
method SEEK..Stream.In: Position within the line.
change Stream.In :Open stream.
entry Index word :Zero-based index into the stream data.
precondition
Index; ERROR: Seek index is zero.
.
:...............................................................................
:
method STATUS..Stream.In: Status of the next string read.
entry Stream.In :An open or closed stream.
exit Status byte :I/O status; 0 if closed.
:
:...............................................................................
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:
method OPEN..Stream..string: Initialize reading from a single text line.
exit Stream..string
entry Source string, &Line of text to read.
Text = 0 Bit :Ingnored; included for stream.in compatability.
:
: The text is raw. The contents does not impact the status.
: The Text parameter should always be 1. We could check this???
:...............................................................................
:
method CLOSE..Stream..string: Clears the string; sets closed status (optional).
change Stream..string
:
:...............................................................................
:
method DRAIN..Stream..string: Clears the string; sets closed status (optional).
change Stream..string
:
:...............................................................................
:
method LINE..Stream..string: Reads the rest of a line from a string.
change Stream..string
exit Line string
:
: This returns all of the line and does not stop at embedded CR/LF delimiters???
:...............................................................................
:
method MARK..Stream..string: Mark the beginning of a token while scanning a string.
change Stream..string
exit Mark word :Save this index and pass it to Replace.
:
:...............................................................................
:
method NEXT..Stream..string: Reads the current from a line of text.
change Stream..string
exit C byte :Next character (0 extended); Eof; Peof; 0 (closed).
:
: Exit: Returns the next character or 0 if the stream is closed.
:...............................................................................
:
method REPLACE..Stream..string: Replace a substring being read with another.
change Stream..string
entry Mark word, &Index to the first character to replace.
Value = "" string :The replacement value.
:
: Usage: MARK Stream.In, Mark; Save the beginning of this token.
: SCREEN Stream.In, Token, Emit; Read in one or more tokens.
: REPLACE Stream.In, Mark, Value; Replace the tokens.
: SCREEN Stream.In, Token, Emit; Read the first token in the replaced value.
:...............................................................................
:
method SEEK..Stream..string: Position within the line.
change Stream..string
entry Index word :Zero-based index into the string.
:
:...............................................................................
:
method STATUS..Stream..string: Status of the next string read.
entry Stream..string
exit Status byte :Stream status; 0 if closed.
:
:...............................................................................
end