<> <> <> DIRECTORY ImagerFont USING [BYTE, XChar], Rope USING [ROPE], Rosary USING [ROSARY], TextLooks USING [Looks, allLooks, noLooks, Runs]; ImmutableTioga: CEDAR DEFINITIONS ~ BEGIN <> <> CharSet: TYPE ~ ImagerFont.BYTE; XChar: TYPE ~ ImagerFont.XChar; ROPE: TYPE ~ Rope.ROPE; ROSARY: TYPE ~ Rosary.ROSARY; Runs: TYPE ~ TextLooks.Runs; Looks: TYPE ~ TextLooks.Looks; noLooks: Looks ~ TextLooks.noLooks; allLooks: Looks ~ TextLooks.allLooks; <> Node: TYPE ~ REF NodeRep; NodeRep: TYPE ~ RECORD [ -- 4 words children: ROSARY --OF Node--, text: Text ]; Text: TYPE ~ REF TextRep; TextRep: TYPE ~ RECORD [ -- 10 words rope: ROPE, runs: Runs, charSets: ROSARY --OF REF CharSet--, charProps: ROSARY --OF PropList--, props: Props ]; Props: TYPE ~ REF PropsRep; PropsRep: TYPE ~ RECORD [ -- 5 words propList: PropList, formatName: ATOM _ NIL, -- name of format for the node comment: BOOL _ FALSE, -- true if node is a comment hasStyleDef: BOOL _ FALSE, -- true if node has StyleDef prop (accelerator) hasPrefix: BOOL _ FALSE, -- true if node has Prefix prop (accelerator) hasPostfix: BOOL _ FALSE, -- true if node has Postfix prop (accelerator) hasArtwork: BOOL _ FALSE -- true if node has Artwork prop (accelerator) ]; PropList: TYPE ~ LIST OF Prop; Prop: TYPE ~ REF PropRep; PropRep: TYPE ~ RECORD [name: ATOM, value: REF]; <> NodeIndex: TYPE ~ REF NodeIndexRep; NodeIndexRep: TYPE ~ RECORD [depth: NAT, seq: SEQUENCE size: NAT OF INT]; <> <> <> <> <> <> <<};>> <<>> maxLen: INT ~ INT.LAST; <<>> <> <<>> <> <= length of text means at end>> <> <> <> <<>> <> <<>> <> <<>> <> <> <<>> <> <<-- hack so t.start and t.end are uniformly usable>> <<>> <> <> <> <> <> <> <> <<>> <> <<>> <> <> <> <> <> <> <> <> <<>> <> <> <<>> <> <> <> <<>> <> <> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <> <<>> <> <> <<>> <> <> <> <<>> <> <<>> <> <<>> <> <<>> <> <<>> <> <<>> <> <> <> <<>> <> <> <> <<>> <> <> <> <> <> <> <<>> <> <> <> <> <<>> <> <> <> <> <<>> <> <> <> <<>> <> <> <<>> <> <> < location corresponding to count>> <> <> <<>> <> <> <<>> <> <> <> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <> <> <> <> <<>> <> <<>> <> <> <> <<>> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <> <<>> <> Size: PROC [text: Text] RETURNS [INT]; <<>> FetchChar: PROC [text: Text, index: INT] RETURNS [XChar]; <> <> <<>> FetchLooks: PROC [text: Text, index: INT] RETURNS [Looks]; <> <> <<>> Fetch: PROC [text: Text, index: INT] RETURNS [char: XChar, looks: Looks]; <> <> <<>> <> GetProp: PROC [text: Text, name: ATOM] RETURNS [REF]; <<>> GetComment: PROC [text: Text] RETURNS [BOOL]; <<>> GetFormat: PROC [text: Text] RETURNS [ATOM]; <<>> <> <<>> <> <<>> <> <> <> <> <> <<>> <> <> <<>> <> GetPropFromList: PROC [propList: PropList, key: ATOM] RETURNS [value: REF]; <<>> PutPropOnList: PROC [propList: PropList, key: ATOM, value: REF] RETURNS [PropList]; <<>> <> <<>> <> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <> <<>> <> <> <> <<>> <> <> <> <<>> <> <> <> <> <<>> <> <> <> <<>> <> <> ReplaceText: PROC [dest: Text, destStart: INT _ 0, destLen: INT _ maxLen, source: Text _ NIL, sourceStart: INT _ 0, sourceLen: INT _ maxLen] RETURNS [Text]; <> <> <> <<>> DeleteText: PROC [dest: Text, destStart: INT _ 0, destLen: INT _ maxLen] RETURNS [Text]; <> <> <<>> <> ReplaceByRope: PROC [dest: Text, destStart: INT, destLen: INT, rope: ROPE, inherit: BOOL, looks: Looks, charSet: CharSet] RETURNS [Text]; <<>> <> <> <> <> <> <> <> <> <<>> <> <> <> <<>> <> <<>> <> <<>> <> <> <<>> <> <> <<>> <> <> <> <> <> <<>> <> <> <> <<>> <> <> <> <<>> <> <<>> <> <> <> <> <<>> <> <<>> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> < style to end of node prefix>> <<>> <> <> <> <> <<>> <> <> <> <> <> <> <> <<>> <> <> <> <<>> <> <> <0 is deeper in the tree, change<0 is shallower>> <<>> <> <> <> <<>> <> <> <<>> <> <<>> <> <<>> <> <<>> END.