DIRECTORY EditSpan USING [NodeOrder, Place, Span], TextNode USING [Location, MaxLen, Node, nodeItself], UndoEvent USING [Event]; EditSpanSupport: CEDAR DEFINITIONS = BEGIN Node: TYPE = TextNode.Node; MaxLen: INT = TextNode.MaxLen; Location: TYPE = TextNode.Location; nodeItself: INT = TextNode.nodeItself; Event: TYPE = UndoEvent.Event; Span: TYPE = EditSpan.Span; Place: TYPE ~ EditSpan.Place; NodeOrder: TYPE ~ EditSpan.NodeOrder; Slice: TYPE = REF SliceArray; SliceArray: TYPE = RECORD [ next: Slice, -- for free list length: NAT _ 0, nodes: SEQUENCE maxLength: NAT OF Node ]; SliceKind: TYPE = { before, after }; GetSlice: PROC [len: NAT] RETURNS [slice: Slice]; FreeSlice: PROC [slice: Slice]; SliceLength: PROC [slice: Slice] RETURNS [NAT] = INLINE { RETURN [slice.length] }; SliceNode: PROC [slice: Slice, index: NAT] RETURNS [Node] = INLINE { RETURN [slice[index]] }; LastOfSlice: PROC [slice: Slice] RETURNS [Node] = INLINE { RETURN [slice[slice.length-1]] }; KindOfSlice: PROC [slice: Slice] RETURNS [SliceKind] = INLINE { RETURN [IF slice[0]#NIL THEN before ELSE after] }; Splice: PROC [before, after: Slice, beforeStart, afterStart: NAT _ 0]; ReplaceBand: PROC [before, after, top, bottom: Slice, nesting: INTEGER]; BadBand: ERROR; DescribeBand: PROC [first, last: Node] RETURNS [before, after, top, bottom: Slice, nesting: INTEGER, depth: NAT]; DeletePrefix: PROC [slice: Slice, depth: NAT]; DestSlices: PROC [dest: Node, where: Place] RETURNS [before, after: Slice, nesting: INTEGER]; CreateDest: PROC [depth: NAT] RETURNS [dest: Location]; CopySpan: PROC [span: Span] RETURNS [result: Span]; NeededNestingChange: TYPE = { needNest, needUnNest, ok }; NeedNestingChange: PROC [before, after, top, bottom: Slice, nesting: INTEGER, depth: NAT] RETURNS [NeededNestingChange]; CompareSliceOrder: PROC [s1, s2: Slice] RETURNS [order: NodeOrder]; DoSplits: PROC [alpha, beta: Span, event: Event] RETURNS [Span, Span]; DoSplits2: PROC [dest: Location, source: Span, where: Place, nesting: INTEGER, event: Event] RETURNS [Location, Span, Place, INTEGER]; UndoSplits: PROC [alpha, beta: Span, event: Event] RETURNS [Span, Span]; UndoSplits2: PROC [dest: Location, source: Span, event: Event] RETURNS [Location, Span]; ReMerge: PROC [alpha, beta: Span, merge: Node, event: Event, tail: BOOL _ FALSE] RETURNS [Span, Span]; SliceOrder: PROC [alpha, beta: Span, aBefore, aBottom, bBefore, bBottom: Slice] RETURNS [overlap: BOOL, head, tail: Span, startOrder, endOrder: NodeOrder]; ApplyProc: TYPE = PROC [node: Node, start, len: INT] RETURNS [stop: BOOL]; Apply: PROC [span: Span, proc: ApplyProc]; NodeSpan: PROC [span: Span] RETURNS [Span] = INLINE { RETURN[[[span.start.node, nodeItself], [span.end.node, nodeItself]]] }; NodeLoc: PROC [loc: Location] RETURNS [Location] = INLINE { RETURN [[loc.node, nodeItself]] }; ForwardLoc: PROC [loc: Location] RETURNS [new: Location]; BackLoc: PROC [loc: Location] RETURNS [new: Location]; END. <EditSpanSupport.mesa Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. written by Bill Paxton, June 1981 last edit by Bill Paxton, 17-Feb-82 9:53:04 last edit by Russ Atkinson, July 22, 1983 9:53 am Michael Plass, March 14, 1985 12:24:06 pm PST Doug Wyatt, September 10, 1986 6:35:56 pm PDT Êq˜codešœ™Kšœ Ïmœ7™BKšœ!™!Kšœ,™,Kšœ1™1K™-K™-—K˜šÏk ˜ Kšœ žœ˜(Kšœ žœ&˜4Kšœ žœ ˜—K˜KšÐblœžœž ˜"Kšœž˜K˜Kšœžœ˜Kšœžœ˜Kšœ žœ˜#Kšœ žœ˜&Kšœžœ˜K˜Kšœžœ˜Kšœžœ˜Kšœ žœ˜%K˜Kšœžœžœ ˜šœ žœžœ˜Kšœ Ïc˜Kšœžœ˜Kšœžœ žœžœ˜&K˜—šœ žœ˜$K˜—K˜šÏnœžœžœžœ˜1K˜—š¡ œžœ˜K˜—K˜š¡ œžœžœžœ˜.Kšœžœžœ˜#K˜—š¡ œžœžœžœ˜9Kšœžœžœ˜#K˜—š¡ œžœžœ˜/Kšœžœžœ˜,K˜—š¡ œžœžœ ˜4Kš œžœžœžœ žœžœžœ ˜=K˜—K˜š¡œžœ1žœ˜FK˜—š¡ œžœ.žœ˜HK˜—šœ žœ˜K˜—š ¡ œžœžœ.žœ žœ˜qK˜—š¡ œžœžœ˜.K˜—š¡ œžœžœ!žœ˜]K˜—š¡ œžœ žœžœ˜7K˜—š¡œžœžœ˜3K˜—K˜šœžœ ˜9K˜—š ¡œžœ/žœ žœžœ˜yK˜—K˜š¡œžœžœ˜CK˜—K˜š¡œžœ#žœ˜GK˜—š ¡ œžœ7žœžœžœ˜‡K˜—š¡ œžœ#žœ˜IK˜—š¡ œžœ.žœ˜YK˜—š ¡œžœ6žœžœžœ˜gK˜—š¡ œžœ@žœ žœ5˜œK˜—K˜š œ žœžœžœžœžœ˜JK˜—š¡œžœ˜*K˜—K˜š¡œžœžœ˜*KšœžœžœA˜RK˜—š¡œžœžœ ˜0Kšœžœžœ˜-K˜—š¡ œžœžœ˜9K˜—š¡œžœžœ˜6K˜—K˜Kšžœ˜—…— ®[