<<>> <> <> <> <> <> <<>> <> DIRECTORY Atom USING [PropList], Imager USING [Box, Context, Font, Transformation, VEC, XChar], NodeStyle USING [Style, StyleKind], Real USING [LargestNumber], Rope USING [ROPE], Tioga USING [Location]; TiogaImager: CEDAR DEFINITIONS ~ BEGIN <> <<>> <> <<>> Box: TYPE ~ REF BoxRep; BoxRep: TYPE ~ RECORD [ nChars: INT, bounds: Imager.Box, expansion: Imager.VEC, -- factor applied to stretch or shrink of component boxes escapement: Imager.VEC, stretch: Imager.VEC, shrink: Imager.VEC, class: Class, duplicate: BOOL ¬ FALSE, data: REF, props: Atom.PropList ¬ NIL ]; <> FormatLine: PROC [start: Tioga.Location, lineWidth: REAL, style: NodeStyle.Style] RETURNS [Box]; FilterProc: TYPE ~ PROC [node: Tioga.Location, level: INT, position: Imager.VEC] RETURNS [skip: BOOL ¬ FALSE, stop: BOOL ¬ FALSE, maxLineLength: REAL ¬ Real.LargestNumber]; InsertID: TYPE ~ {nil, head, top, normal, bottom, foot}; SepProc: TYPE ~ PROC [InsertID] RETURNS [LIST OF Box]; FormattedNodes: TYPE ~ RECORD [box: Box, resume: Tioga.Location]; FormatNodes: PROC [start: Tioga.Location, bounds: Imager.VEC, styleKind: NodeStyle.StyleKind ¬ print, filter: FilterProc ¬ NIL, sep: SepProc ¬ NIL] RETURNS [FormattedNodes]; Marks: TYPE ~ Atom.PropList; FormattedPage: TYPE ~ RECORD [ box: Box, <> nextLoc: Tioga.Location, <> marks: Marks, <> pageFigure: INT <> ]; FormatPage: PROC [pageCounter: INT, startLoc: Tioga.Location, filter: FilterProc ¬ NIL, marks: Marks ¬ NIL, styleKind: NodeStyle.StyleKind ¬ print] RETURNS [FormattedPage]; <> EmptyBox: PROC [escapement: Imager.VEC ¬ [0,0], stretch: Imager.VEC ¬ [0,0], shrink: Imager.VEC ¬ [0,0]] RETURNS [Box]; BoxFromChar: PROC [font: Imager.Font, char: CHAR] RETURNS [Box]; BoxFromXChar: PROC [font: Imager.Font, xchar: Imager.XChar] RETURNS [Box]; BoxFromRope: PROC [font: Imager.Font, rope: Rope.ROPE] RETURNS [Box]; BoxFromList: PROC [list: LIST OF Box, xFix, yFix: Fix ¬ []] RETURNS [Box]; Fix: TYPE ~ RECORD [ what: {expansion, size} ¬ expansion, value: REAL ¬ 0.0 ]; Overlay: PROC [base, new: Box, offset: Imager.VEC] RETURNS [Box]; <> <> <> <> Composite: PROC [box: Box] RETURNS [BOOL]; <> UnBox: PROC [box: Box] RETURNS [LIST OF Box]; ModifyBox: PROC [box: Box, m: Imager.Transformation] RETURNS [Box]; Render: PROC [box: Box, context: Imager.Context, position: Imager.VEC]; <> Resolve: PROC [box: Box, p: Imager.VEC] RETURNS [Tioga.Location]; <> <> FirstLocWithin: PROC [box: Box] RETURNS [Tioga.Location]; Destroy: PROC [box: Box]; <> <<>> Duplicate: PROC [box: Box]; <> <<>> <> Boxes: TYPE ~ RECORD [ list: LIST OF Box ¬ NIL, last: LIST OF Box ¬ NIL ]; AppendList: PROC [boxes: Boxes, list: LIST OF Box] RETURNS [Boxes]; <> AppendBox: PROC [boxes: Boxes, box: Box] RETURNS [Boxes]; <> <> Class: TYPE ~ REF ClassRep; ClassRep: TYPE ~ RECORD [ Composite: PROC [box: Box] RETURNS [BOOL], UnBox: PROC [box: Box] RETURNS [LIST OF Box], Render: PROC [box: Box, context: Imager.Context, position: Imager.VEC], Resolve: PROC [box: Box, p: Imager.VEC] RETURNS [Tioga.Location], FirstLocWithin: PROC [box: Box] RETURNS [Tioga.Location], Destroy: PROC [box: Box] ]; <<>> END.