<> <> <> <> <> <> <<>> <> <<>> DIRECTORY TextNode USING [Node]; NodeAddrs: CEDAR DEFINITIONS = BEGIN Node: TYPE = TextNode.Node; RefAddrs: TYPE = REF Body; Body: TYPE = RECORD [addrs: Pair]; Pair: TYPE = REF PairBody; PairBody: TYPE = RECORD [ next: Pair, pinned: BOOL _ FALSE, -- if true, then don't modify location when edits take place addr: REF, movedTo: Node, -- NIL if hasn't been moved location: INT ]; AddrsProp: PROC RETURNS [ATOM]; PutTextAddr: PROC [n: Node, addr: REF, location: INT]; <> <> <> RemTextAddr: PROC [n: Node, addr: REF]; <> <> PinTextAddr: PROC [n: Node, addr: REF]; <> UnpinTextAddr: PROC [n: Node, addr: REF]; UnpinAll: PROC [n: Node]; MoveTextAddr: PROC [from, to: Node, addr: REF, location: INT]; <> <> GetTextAddr: PROC [n: Node, addr: REF] RETURNS [node: Node, location: INT]; <> <> TryGetTextAddr: PROC [n: Node, addr: REF] RETURNS [found: BOOL, node: Node, location: INT]; TextAddrNotFound: ERROR; MapTextAddrs: PROC [n: Node, action: TextAddrsAction] RETURNS [BOOL]; <> <> <> TextAddrsAction: TYPE = PROC [addr: REF, location: INT] RETURNS [BOOL]; <> AddNotifyProc: PROC [proc: AddrNotifyProc]; RemoveNotifyProc: PROC [proc: AddrNotifyProc]; AddrNotifyProc: TYPE = PROC [node: Node, new: PROC [old: INT] RETURNS [INT]]; <> Replace: PROC [node: Node, start, len, newlen: INT]; <> <> <> <> AfterReplace: PROC [initLoc, start, len, newlen: INT] RETURNS [newLoc: INT]; END.