<> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> DIRECTORY Atom USING [PropList], Rope USING [ROPE], TextLooks USING [allLooks, Looks, noLooks, Runs], TextNode USING [Ref], UndoEvent USING [Ref]; TextEdit: CEDAR DEFINITIONS = BEGIN RefTextNode: TYPE = TextNode.Ref; ROPE: TYPE = Rope.ROPE; Looks: TYPE = TextLooks.Looks; noLooks: Looks = TextLooks.noLooks; allLooks: Looks = TextLooks.allLooks; Offset: TYPE = INT; MaxLen, MaxOffset: INT = LAST[INT]; MaxNat: NAT = LAST[NAT]; Event: TYPE = UndoEvent.Ref; CharSet: TYPE ~ [0..256); -- for XNS 16-bit character set; use in conjunction with 8-bit CHAR <> <> FetchChar: PROC [text: RefTextNode, index: INT] RETURNS [charSet: CharSet, char: CHAR]; <> <> FetchLooks: PROC [text: RefTextNode, index: INT] RETURNS [Looks]; <> <> Fetch: PROC [text: RefTextNode, index: INT] RETURNS [charSet: CharSet, char: CHAR, looks: Looks]; <> <> GetRope: PROC [text: RefTextNode] RETURNS [ROPE]; GetRuns: PROC [text: RefTextNode] RETURNS [TextLooks.Runs]; Size: PROC [text: RefTextNode] RETURNS [INT]; Flatten: PROC [text: RefTextNode] RETURNS [BOOL]; <> <> <> FromRope: PROC [rope: ROPE] RETURNS [RefTextNode]; <> FromString: PROC [string: REF READONLY TEXT] RETURNS [RefTextNode]; <> DocFromNode: PROC [child: RefTextNode] RETURNS [root: RefTextNode]; <> <> <> ChangeLooks: PROC [root: RefTextNode, text: RefTextNode, remove, add: Looks, start: INT _ 0, len: INT _ MaxOffset, event: Event _ NIL]; <> AddLooks: PROC [root: RefTextNode, text: RefTextNode, add: Looks, start: INT _ 0, len: INT _ MaxOffset, event: Event _ NIL]; RemoveLooks: PROC [root: RefTextNode, text: RefTextNode, remove: Looks _ allLooks, start: INT _ 0, len: INT _ MaxOffset, event: Event _ NIL]; SetLooks: PROC [root: RefTextNode, text: RefTextNode, new: Looks, start: INT _ 0, len: INT _ MaxOffset, event: Event _ NIL]; ClearLooks: PROC [root: RefTextNode, text: RefTextNode, start: INT _ 0, len: INT _ MaxOffset, event: Event _ NIL]; <> GetCharProp: PROC [node: RefTextNode, index: INT, name: ATOM] RETURNS [value: REF]; PutCharProp: PROC [node: RefTextNode, index: INT, name: ATOM, value: REF, nChars: INT _ 1, event: Event _ NIL, root: RefTextNode _ NIL]; <> <> MapCharProps: PROC [node: RefTextNode, index: INT, action: MapPropsAction] RETURNS [quit: BOOL]; <> MapPropsAction: TYPE ~ PROC [name: ATOM, value: REF] RETURNS [quit: BOOL _ FALSE]; ModifyCharProps: PROC [node: RefTextNode, name: ATOM, index: INT _ 0, nChars: INT _ INT.LAST, action: ModifyPropsAction, event: Event _ NIL, root: RefTextNode _ NIL] RETURNS [quit: BOOL]; <> ModifyPropsAction: TYPE ~ PROC [value: REF, index: INT, nChars: INT] RETURNS [quit: BOOL _ FALSE, newValue: REF]; PropList: TYPE ~ Atom.PropList; <> <<>> GetCharPropList: PROC [node: RefTextNode, index: INT] RETURNS [PropList _ NIL]; PutCharPropList: PROC [node: RefTextNode, index: INT, propList: PropList, nChars: INT _ 1, event: Event _ NIL, root: RefTextNode _ NIL]; GetPropFromList: PROC [propList: PropList, key: ATOM] RETURNS [value: REF]; PutPropOnList: PROC [propList: PropList, key: ATOM, value: REF] RETURNS [new: PropList]; <> ChangeFormat: PROC [node: RefTextNode, formatName: ATOM, event: Event _ NIL, root: RefTextNode _ NIL]; ChangeStyle: PROC [node: RefTextNode, name: ROPE, event: Event _ NIL, root: RefTextNode _ NIL]; < style to end of node prefix>> PutProp: PROC [node: RefTextNode, name: ATOM, value: REF, event: Event _ NIL, root: RefTextNode _ NIL]; GetProp: PROC [node: RefTextNode, name: ATOM] RETURNS [value: REF]; <> <> TwoSpanProc: TYPE = PROC [destRoot, sourceRoot: RefTextNode, dest: RefTextNode, destStart: INT _ 0, destLen: INT _ MaxLen, source: RefTextNode, sourceStart: INT _ 0, sourceLen: INT _ MaxLen, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; DestSpanProc: TYPE = PROC [destRoot, sourceRoot: RefTextNode, dest: RefTextNode, destLoc: INT _ 0, source: RefTextNode, start: INT _ 0, len: INT _ MaxLen, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; OneSpanProc: TYPE = PROC [root: RefTextNode, text: RefTextNode, start: INT _ 0, len: INT _ MaxLen, event: Event _ NIL]; TransposeProc: TYPE = PROC [alphaRoot, betaRoot: RefTextNode, alpha: RefTextNode, alphaStart: INT _ 0, alphaLen: INT _ MaxLen, beta: RefTextNode, betaStart: INT _ 0, betaLen: INT _ MaxLen, event: Event _ NIL ] RETURNS [alphaResultStart, alphaResultLen, betaResultStart, betaResultLen: INT]; ReplaceText: TwoSpanProc; <> <> <> DeleteText: OneSpanProc; <> <> CopyText: DestSpanProc; <> <> MoveText: DestSpanProc; <> <> <> <> <> MoveTextOnto: TwoSpanProc; <> <> TransposeText: TransposeProc; <> <> <> <> ReplaceByChar: PROC [root: RefTextNode, dest: RefTextNode, char: CHAR, start: INT _ 0, len: INT _ MaxLen, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; <> <> <> <> < 0, then gets looks from previous char,>> <> ReplaceByString: PROC [root: RefTextNode, dest: RefTextNode, string: REF READONLY TEXT, stringStart: NAT _ 0, stringNum: NAT _ MaxNat, start: INT _ 0, len: INT _ MaxLen, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; ReplaceByRope: PROC [root: RefTextNode, dest: RefTextNode, rope: ROPE, start: INT _ 0, len: INT _ MaxLen, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; InsertChar: PROC [root: RefTextNode, dest: RefTextNode, char: CHAR, destLoc: INT _ 0, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; AppendChar: PROC [root: RefTextNode, dest: RefTextNode, char: CHAR, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; InsertString: PROC [root: RefTextNode, dest: RefTextNode, string: REF READONLY TEXT, stringStart: NAT _ 0, stringNum: NAT _ MaxNat, destLoc: INT _ 0, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; AppendString: PROC [root: RefTextNode, dest: RefTextNode, string: REF READONLY TEXT, stringStart: NAT _ 0, stringNum: NAT _ MaxNat, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; InsertRope: PROC [root: RefTextNode, dest: RefTextNode, rope: ROPE, destLoc: INT _ 0, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; AppendRope: PROC [root: RefTextNode, dest: RefTextNode, rope: ROPE, inherit: BOOL _ TRUE, looks: Looks _ noLooks, charSet: CharSet _ 0, event: Event _ NIL] RETURNS [resultStart, resultLen: INT]; <> CapChange: TYPE = {allCaps, allLower, initCaps, firstCap}; ChangeCaps: PROC [root: RefTextNode, dest: RefTextNode, start: INT _ 0, len: INT _ MaxLen, how: CapChange _ allCaps, event: Event _ NIL]; AllCaps: PROC [root: RefTextNode, dest: RefTextNode, start: INT_0, len: INT_MaxLen, event: Event_NIL]; <> AllLower: PROC [root: RefTextNode, dest: RefTextNode, start: INT_0, len: INT_MaxLen, event: Event_NIL]; <> InitialCaps: PROC [root: RefTextNode, dest: RefTextNode, start: INT _ 0, len: INT _ MaxLen, event: Event _ NIL]; <> END.