<<>> <> <> <> <> <> <> <> <> <<>> DIRECTORY Tioga USING [Node, Location, Span], Rope USING [ROPE], Rosary USING [ROSARY]; EditNotify: CEDAR DEFINITIONS = BEGIN ROPE: TYPE ~ Rope.ROPE; ROSARY: TYPE ~ Rosary.ROSARY; Node: TYPE ~ Tioga.Node; ChangeType: TYPE = { ChangingText, ChangingProp, ChangingSpanForPaste, MovingNodes, NodeNesting, InsertingNode, ChangingView }; Change: TYPE = RECORD [SELECT kind: ChangeType FROM ChangingText => [ text: Node, start, newlen, oldlen: INT, oldRope: ROPE, oldRuns: ROSARY, oldCharSets: ROSARY, oldCharProps: ROSARY ], ChangingProp => [ node: Node, name: ATOM, newval, oldval: REF ], ChangingSpanForPaste => [ span: Tioga.Span ], MovingNodes => [ dest, first, last, pred: Node, nesting: INTEGER, afterDest: BOOL ], <> <> NodeNesting => [ -- change nesting of nodes [first..last] first, last: Node, change: INTEGER ], InsertingNode => [ -- insert new node after dest new, dest: Node ], ChangingView => [ view: REF, old: Tioga.Location ], 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.