DIRECTORY EditSpan USING [Span], TextNode USING [Location, Node, Runs], Rope USING [ROPE], Rosary USING [ROSARY]; EditNotify: CEDAR DEFINITIONS = BEGIN ROPE: TYPE ~ Rope.ROPE; ROSARY: TYPE ~ Rosary.ROSARY; Runs: TYPE ~ TextNode.Runs; Node: TYPE ~ TextNode.Node; Location: TYPE ~ TextNode.Location; Span: TYPE ~ EditSpan.Span; ChangeType: TYPE = { ChangingView, ChangingText, ChangingTextForPaste, ChangingSpanForPaste, ChangingFormat, ChangingProp, MovingNodes, NodeNesting, InsertingNode }; Change: TYPE = RECORD [SELECT kind: ChangeType FROM ChangingView => [ viewer: REF, old: Location ], ChangingText => [ root: Node, text: Node, start, newlen, oldlen: INT, oldRope: ROPE, oldRuns: Runs, oldCharSets: ROSARY, oldCharProps: ROSARY ], ChangingTextForPaste => [ rope: ROPE, runs: Runs, charSets: ROSARY, charProps: ROSARY, start, len: INT ], ChangingSpanForPaste => [ span: Span ], ChangingFormat => [ -- change format for node root: Node, node: Node, newFormatName, oldFormatName: ATOM ], ChangingProp => [ -- change property for node root, node: Node, propName: ROPE, propAtom: ATOM, newval, oldval: REF ], MovingNodes => [ destRoot, sourceRoot: Node, dest, first, last, pred: Node, nesting: INTEGER, afterDest: BOOL ], NodeNesting => [ -- change nesting of nodes [first..last] root, first, last: Node, change: INTEGER ], InsertingNode => [ -- insert new node after dest root, new, dest: Node ], ENDCASE ]; ChangeSet: TYPE = PACKED ARRAY ChangeType OF Flag; Flag: TYPE = BOOL _ FALSE; defaultChangeSet: ChangeSet = ALL[TRUE]; 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. 0EditNotify.mesa Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. written by Bill Paxton, March 1981 last edit by Bill Paxton, May 13, 1982 5:04 pm Last Edited by: Maxwell, January 5, 1983 8:42 am Rick Beach, March 27, 1985 1:11:24 pm PST Michael Plass, March 18, 1985 4:11:48 pm PST Doug Wyatt, September 5, 1986 3:04:01 pm PDT **** Change Record **** dest cannot be within nodes [first..last] pred is the node before first. pred and nesting used for undo **** Notification Operations **** indicates whether notify before or after the change has taken place high priority procs called before normal, and normal called before low e.g., might use high priority for clearing style cache, normal for redisplay, and low for saving replay info add new proc to list of notification procedures call proc before/after any edit in its changeSet use time=before for applications such as saving text for undo use time=after for applications such as reformat & redisplay remove proc from list of notification procedures call the appropriate edit notify procs Κ°˜codešœ™Kšœ Οmœ7™BKšœ"™"Kšœ.™.Kšœ0™0K™)K™,K™,—K™šΟk ˜ Kšœ žœ˜Kšœ žœ˜&Kšœžœžœ˜Kšœžœžœ˜—K˜KšΠbl œžœž ˜Kšœž˜K˜Kšžœžœžœ˜Kšžœžœ žœ˜Kšœžœ˜Kšœžœ˜Kšœ žœ˜#Kšœžœ˜K˜Kšœ™K˜šœ žœ˜K˜GKšœE˜EK˜K˜—Kšœžœžœžœž˜3˜˜Kšœžœ˜ K˜ K˜K˜—˜K˜Kšœžœ˜Kšœ žœ˜K˜Kšœ žœ˜Kšœž˜K˜K˜—˜Kšœžœ˜ K˜ Kšœ žœ˜Kšœ žœ˜Kšœ ž˜Kšœ˜K˜—˜K˜ K˜K˜—šœΟc˜-K˜Kšœž˜"K˜K˜—šœ ˜-Kšœžœ žœž˜EKšœ˜K˜—˜K˜Kšœ(žœ˜0Kšœ ž˜Kšœ˜Kšœ)™)šœ=™=K˜——šœ (˜9Kšœ!ž˜(Kšœ˜K˜—šœ ˜0K˜K˜K˜—Kšž˜Kšœ˜K˜—Kš œ žœžœžœ žœ˜2Kšœžœžœžœ˜šœžœžœ˜(K˜—K˜Kšœ!™!K˜š œžœžœ žœžœ ˜:K˜—šœžœ˜KšœC™CK˜—šœ žœ˜'KšœF™Fšœ7™7šœ™Kšœ™——K˜—K˜šΟn œžœs˜†Kšœ/™/šœ0™0Kšœ=™=Kšœ<™