<> <> <> 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; <> Prop: TYPE ~ REF PropRep; PropRep: TYPE ~ RECORD [name: ATOM, value: REF]; PropList: TYPE ~ LIST OF Prop; MapPropsAction: TYPE ~ PROC [name: ATOM, value: REF] RETURNS [quit: BOOL _ FALSE]; <<>> <> Node: TYPE ~ REF NodeRep; -- immutable NodeRep: TYPE ~ RECORD [ text: Text, children: ROSARY --OF Node--, depth: INT ]; Text: TYPE ~ REF TextRep; -- immutable TextRep: TYPE ~ RECORD [ rope: ROPE, runs: Runs, charSets: ROSARY --OF REF CharSet--, charProps: ROSARY --OF PropList--, props: Props ]; Props: TYPE ~ REF PropsRep; -- immutable PropsRep: TYPE ~ RECORD [ propList: PropList _ NIL, formatName: ATOM _ NIL, -- value of $Format property comment: BOOL _ FALSE, -- value of $Comment property hasStyleDef: BOOL _ FALSE, -- true if propList has $StyleDef prop (accelerator) hasPrefix: BOOL _ FALSE, -- true if propList has $Prefix prop (accelerator) hasPostfix: BOOL _ FALSE, -- true if propList has $Postfix prop (accelerator) hasArtwork: BOOL _ FALSE -- true if propList has $Artwork prop (accelerator) ]; <> maxLen: INT ~ INT.LAST; <<>> <> <<>> <> <= length of text means at end>> <> <> <> <<>> <> <<>> <> <<>> <> <> <> <> <> <> <> <<>> <> <<>> <> <> <> <> <> <> <> <> <<>> <> <> <<>> <> <> <> <<>> <> <> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <> <<>> <> <> <<>> <> <> <> <<>> <> <<>> <> <<>> <> <<>> <> <<>> <> <<>> <> <> <> <> <> <> <> <<>> <> <> <> <> <<>> <> <> <> <> <<>> <> <> <> <<>> <> <> <<>> <> <> < location corresponding to count>> <> <> <<>> <> <> <<>> <> <> <> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <> <> <> <> <<>> <> <<>> <> <> NewText: PROC [props: Props _ NIL] RETURNS [Text]; <<>> TextFromRope: PROC [rope: ROPE, looks: Looks _ noLooks] RETURNS [Text]; <> <<>> <> <> <<>> <> <> <<>> <> <> <> <<>> <> PropListGet: PROC [propList: PropList, name: ATOM] RETURNS [value: REF]; <<>> PropListPut: PROC [propList: PropList, name: ATOM, value: REF] RETURNS [PropList]; <<>> PropListMap: PROC [propList: PropList, action: MapPropsAction] RETURNS [BOOL]; <<>> PropsGet: PROC [props: Props, name: ATOM] RETURNS [value: REF]; <<>> PropsPut: PROC [props: Props, name: ATOM, value: REF] RETURNS [Props]; <<>> PropsMap: PROC [props: Props, action: MapPropsAction] RETURNS [BOOL]; <<>> <> PropReader: TYPE ~ PROC [name: ATOM, specs: ROPE] RETURNS [value: REF]; <> <<>> PropWriter: TYPE ~ PROC [name: ATOM, value: REF] RETURNS [specs: ROPE]; <> <<>> ReadProp: PropReader; <> <> <<>> WriteProp: PropWriter; <> <> <<>> RegisterProp: PROC [name: ATOM, reader: PropReader, writer: PropWriter]; <> <> <<>> <> 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]; <<>> MapProps: PROC [node: Node, action: MapPropsAction] RETURNS [quit: BOOL]; <> <> <<>> GetCharProp: PROC [text: Text, index: INT, name: ATOM] RETURNS [value: REF]; <<>> GetCharPropList: PROC [text: Text, index: INT] RETURNS [PropList]; <<>> MapCharProps: PROC [node: Node, index: INT, action: MapPropsAction] RETURNS [BOOL]; <> <<>> <> <> 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 _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0] RETURNS [Text]; <<>> SetProp: PROC [text: Text, name: ATOM, value: REF] RETURNS [Text]; <<>> SetComment: PROC [text: Text, comment: BOOL] RETURNS [Text]; <> <<>> SetFormat: PROC [text: Text, formatName: ATOM] RETURNS [Text]; <> <<>> SetCharProp: PROC [text: Text, start: INT _ 0, len: INT _ maxLen, name: ATOM, value: REF] RETURNS [Text]; <> <> <<>> SetCharPropList: PROC [text: Text, start: INT _ 0, len: INT _ maxLen, propList: PropList] RETURNS [Text]; <<>> <> <<>> <> <> <<>> <> <> <> <> <> <> <> <> <<>> <> <> <> <<>> <> <<>> <> <<>> <> <> <<>> <> <> <<>> <> <> <> <> <> <<>> <> <> <> <<>> <> <> <> <<>> <> <<>> <> <> < style to end of node prefix>> <<>> <> <> <> <> <<>> <> <> <> <> <> <> <> <<>> <> <> <> <<>> <> <> <0 is deeper in the tree, change<0 is shallower>> <<>> <> <> <> <<>> <> <> <<>> <> <<>> <> <<>> <> <<>> END.