<<>> <> <> <> DIRECTORY IO, Rope, TextNode, TiogaFileOps; TiogaStreams: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; <> CreateInput: PROC [from: TextNode.Ref, commentHandling: CommentHandling ¬ [FALSE[]], levelPrefix: ROPE ¬ NIL] RETURNS [in: IO.STREAM]; <> <> <> CommentHandling: TYPE = RECORD [variant: SELECT see: BOOL FROM FALSE => [], TRUE => [prefix, suffix: ROPE ¬ NIL], ENDCASE]; <> CurInLoc: PROC [s: IO.STREAM] RETURNS [loc: TextNode.Location]; <> SkipChildren: PROC [s: IO.STREAM]; <> <> CreateOutput: PROC [to: TiogaFileOps.Ref, breakAtNewline: BOOL ¬ FALSE, levelPrefix, defaultFormat: ROPE ¬ NIL, flexilevel: BOOL ¬ FALSE, spacesPerTab, normalNestIndent, minFmtIndent: INT ¬ 0, maxFmtIndent: INT ¬ -1, commentHandling: CommentHandling ¬ [FALSE[]] ] RETURNS [out: IO.STREAM]; <> <> <> <0; nothing else is white.>> <> <0 AND maxFmtIndent> <= minFmtIndent, THEN each node whose amount of leading white space exceeds it parent's by N is created with format defaultFormat-N if N IN [minFmtIndent..maxFmtIndent], otherwise with format defaultFormat-M and a postfix property (M IN {minFmtIndent, maxFmtIndent}); normalNestIndent is indentation of children relative to parent.>> <> CurOutNode: PROC [s: IO.STREAM] RETURNS [n: TiogaFileOps.Ref]; <> EndNode: PROC [s: IO.STREAM, depthOp: DepthOp ¬ reset, idempotently: BOOLEAN ¬ FALSE]; <> DepthOp: TYPE = {same, reset}; SetFormat: PROC [of: IO.STREAM, format: ROPE]; <> ChangeDepth: PROC [s: IO.STREAM, deltaDepth: INTEGER ¬ 0, autoEndNode: BOOL ¬ TRUE, idempotently: BOOL ¬ FALSE]; <> <> <> <> NotNow: ERROR [s: IO.STREAM]; <> BadDepth: ERROR [s: IO.STREAM, depth: INT]; <> <> CallerBug: ERROR [s: IO.STREAM, message: ROPE]; <> <> IsATS: PROC [s: IO.STREAM] RETURNS [is: BOOLEAN]; <> CopyChildren: PROC [from: TextNode.Ref, to: TiogaFileOps.Ref]; END.