<> <> <> <> <> <> <> <> <<>> DIRECTORY TextNode USING [Location, Ref, RefTextNode, Span], TextLooks USING [Runs], Rope USING [ROPE], ViewerClasses USING [Viewer]; EditNotify: CEDAR DEFINITIONS = BEGIN Ref: TYPE = TextNode.Ref; RefTextNode: TYPE = TextNode.RefTextNode; Offset: TYPE = INT; ROPE: TYPE = Rope.ROPE; <<**** Change Record ****>> ChangeType: TYPE = { ChangingView, ChangingText, ChangingTextForPaste, ChangingSpanForPaste, ChangingFormat, ChangingProp, MovingNodes, NodeNesting, InsertingNode }; Change: TYPE = RECORD [SELECT kind: ChangeType FROM ChangingView => [ viewer: ViewerClasses.Viewer, old: TextNode.Location ], ChangingText => [ root: Ref, text: RefTextNode, start, newlen, oldlen: INT, oldRope: ROPE, oldRuns: TextLooks.Runs, oldCharSets: REF, oldCharProps: REF ], ChangingTextForPaste => [ rope: ROPE, runs: TextLooks.Runs, charSets: REF, charProps: REF, start, len: INT ], ChangingSpanForPaste => [ span: TextNode.Span ], ChangingFormat => [ -- change format for node root: Ref, node: Ref, newFormatName, oldFormatName: ATOM ], ChangingProp => [ -- change property for node root, node: Ref, propName: ROPE, propAtom: ATOM, newval, oldval: REF ], MovingNodes => [ destRoot, sourceRoot: Ref, dest, first, last, pred: Ref, nesting: INTEGER, afterDest: BOOL ], <> <> NodeNesting => [ -- change nesting of nodes [first..last] root, first, last: Ref, change: INTEGER ], InsertingNode => [ -- insert new node after dest root, new, dest: Ref ], ENDCASE ]; ChangeSet: TYPE = PACKED ARRAY ChangeType OF Flag; Flag: TYPE = BOOL _ FALSE; defaultChangeSet: ChangeSet = ALL[TRUE]; <<**** Notification Operations ****>> EditNotifyProc: TYPE = PROC [change: REF READONLY Change]; When: TYPE = { before, after }; <> Priority: TYPE = { high, normal, low }; <> <> <> <> AddNotifyProc: PROC [proc: EditNotifyProc, time: When _ after, priority: Priority _ normal, changeSet: ChangeSet _ defaultChangeSet]; <> <> <> <> RemoveNotifyProc: PROC [proc: EditNotifyProc, time: When _ after]; <> Notify: PROC [change: REF READONLY Change, time: When]; <> END.