DIRECTORY Imager USING [Context], Rope USING [ROPE], TextNode USING [Location, Ref, Span], TEditDocument USING [Selection, SelectionGrain, SelectionId, SelectionPoint, TEditDocumentData], ViewerClasses USING [ModifyProc, Viewer]; TEditSelection: CEDAR DEFINITIONS = BEGIN OPEN TEditDocument; ROPE: TYPE ~ Rope.ROPE; Viewer: TYPE ~ ViewerClasses.Viewer; pSel: READONLY Selection; sSel: READONLY Selection; fSel: READONLY Selection; oldSel: READONLY Selection; nilSel: READONLY Selection; Create: PROC RETURNS [Selection]; Alloc: PROC RETURNS [Selection]; Free: PROC [Selection]; Copy: PROC [source, dest: Selection]; PushOrExchangeSelections: PROC; MakePrimary: PROC; MakeSecondary: PROC; CancelPrimary: PROC; CancelSecondary: PROC; CancelFeedback: PROC; CallWithSelAndDocAndTddLocks: PROC [viewer: Viewer, id: SelectionId _ primary, proc: PROC [tdd: TEditDocumentData, tSel: Selection]]; UnlockDocAndPSel: PROC [root: TextNode.Ref]; LockSel: PROC [selection: SelectionId, who: ROPE]; UnlockSel: PROC [selection: SelectionId]; LockBothSelections: PROC [who: ROPE]; -- locks primary, then secondary UnlockBothSelections: PROC; MakeSelection: PROC [new: Selection _ NIL, selection: SelectionId _ primary, startValid, endValid: BOOL _ FALSE, forkPaint: BOOL _ TRUE]; CaretVisible: PROC RETURNS [BOOL]; IsDown: PROC [id: SelectionId] RETURNS [BOOL]; ForceDown: PROC [id: SelectionId]; ShowSelection: PROC [id: SelectionId, self: Viewer, context: Imager.Context]; TakeDownForRedisplay: PROC [id: SelectionId, self: Viewer, context: Imager.Context]; FixUpAfterDisplay: PROC [id: SelectionId, self: Viewer, context: Imager.Context, caret: BOOL]; AdjustSelStates: PROC [self: Viewer]; TakeSelectionDown: PROC [id: SelectionId, self: Viewer, context: Imager.Context]; PutSelectionUp: PROC [id: SelectionId, self: Viewer, context: Imager.Context]; FakeSecondary: PROC [sel: Selection]; -- change sSel without showing it Deselect: PROC [selection: SelectionId _ primary]; MarkSelection: PROC [dc: Imager.Context, viewer: Viewer, selection: Selection, id: SelectionId]; ExtendSelection: PROC [dc: Imager.Context, viewer: Viewer, old, new: Selection, id: SelectionId, updateEnd: BOOL]; CannotFindIt: ERROR; ComputeSpanLines: PROC [viewer: Viewer, span: TextNode.Span] RETURNS [start, end: INTEGER, startClipped, endClipped: BOOL]; ComputePosLine: PROC [ viewer: Viewer, pos: TextNode.Location, firstLine: INTEGER _ 0] RETURNS [line: INTEGER, clipped: BOOL]; ComputePosPoint: PROC [ viewer: Viewer, pos: TextNode.Location, firstLine: INTEGER _ 0, lineOnly: BOOL _ FALSE] RETURNS [sp: SelectionPoint]; FixupSelection: PROC [selection: Selection, viewer: Viewer, start, end: BOOL _ TRUE]; FixupCaret: PROC [selection: Selection]; KillSelection: PROC; -- including resetting inputFocus MakePointSelection: PROC [selection: Selection, pos: TextNode.Location]; InputModify: ViewerClasses.ModifyProc; SelectEverything: PROC; -- expand to include everything GrowSelectionToBlanks: PROC; GrowSelectionToSomething: PROC [left, right: PROC [CHAR] RETURNS [BOOL]]; GrowSelection: PROC; PendingDeleteSelection: PROC; NotPendingDeleteSelection: PROC; CaretBeforeSelection: PROC; CaretAfterSelection: PROC; SelectProc: TYPE = PROC [viewer: Viewer, tdd: TEditDocumentData, x, y: INTEGER, sel: SelectionId, pDel: BOOL]; SelectPoint: SelectProc; SelectChar: SelectProc; SelectWord: SelectProc; SelectNode: SelectProc; SelectBranch: SelectProc; Update: SelectProc; LevelChange: TYPE = {reduce, expand, same}; Extend: PROC [viewer: Viewer, tdd: TEditDocumentData, x, y: INTEGER, sel: SelectionId, pDel: BOOL, changeLevel: LevelChange, saveEnds: BOOL]; SelectionRoot: PROC [s: Selection _ pSel] RETURNS [root: TextNode.Ref]; InsertionPoint: PROC [s: Selection _ pSel] RETURNS [ip: TextNode.Location]; GetSelectionGrain: PROC [sel: Selection] RETURNS [SelectionGrain]; Position: PROC [viewer: Viewer]; FindWhere: TYPE = { forwards, backwards, anywhere }; Find: PROC [ viewer: Viewer, findWhere: FindWhere _ anywhere, def, word: BOOL _ FALSE, id: SelectionId _ primary, case: BOOL _ TRUE -- case => case of characters is significant -- ]; FindRope: PROC [viewer: Viewer, rope: ROPE, findWhere: FindWhere _ anywhere, def, word: BOOL _ FALSE, id: SelectionId _ primary, case: BOOL _ TRUE -- case => case of characters is significant -- ]; DoFind: PROC [viewer: Viewer, rope: ROPE, findWhere: FindWhere _ anywhere, def, word: BOOL _ FALSE, id: SelectionId _ primary, case: BOOL _ TRUE -- case => case of characters is significant -- ] RETURNS [found: BOOL]; SetSelLooks: PROC [sel: Selection]; ShowPosition: PROC[viewer: Viewer, skipCommentNodes: BOOL _ TRUE]; END. €TEditSelection.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Edited by Paxton on December 29, 1982 10:31 am Doug Wyatt, April 2, 1985 2:52:40 pm PST Selection Access and Allocating pSel and sSel are the global primary and secondary selections fSel is the global feedback selection oldSel is old secondary selection saved for Repeats nilSel is for deselecting to create a selection record gets it from a small cache returns it to the cache. ok if fail to return. disaster if return twice the approved way to access selection records No one should do pSel^ _ tSel^ or vice versa ... call Copy instead. It's monitored. Selection Display and Control lock the selection so that no other process can change it give up lock on the selection start and end valid are if metrics were precomputed and can be trusted by the selection display code. forkPaint is false for selection display code; true for edit ops and others. Take down the selection without giving up the input focus. can be raised by ComputeSpanLines, ComputePosLine, or ComputePosPoint grows until procs return true. Making and Extending selections Misc functions Κ˜codešœ™Kšœ Οmœ1™K˜—š œžœ˜Kšœ3žœ˜?Kšžœžœ žœ˜'K˜—š œžœ˜K˜'Kšœ žœžœžœ˜/Kšžœ˜K˜—Kš œžœ4žœžœ˜UK˜Kš  œžœ˜(K˜Kš  œžœ‘!˜6K˜š œžœ0˜HK˜—Kš  œ˜&K˜Kš œžœ‘˜7K˜Kš œžœ˜K˜š  œžœžœžœžœžœ˜IK™—K˜Kš  œžœ˜K˜Kš œžœ˜K˜Kš œžœ˜ K˜Kš œžœ˜K˜Kš œžœ˜K˜—™š œ žœžœ1žœžœ˜oK˜—K˜Kš  œ ˜Kš  œ ˜Kš  œ ˜Kš  œ ˜Kš  œ ˜Kš œ ˜K˜šœ žœ˜+K˜—š  œžœ1žœžœ'žœ˜K˜——šœ™Kš  œžœžœ˜GK˜Kš œžœžœ˜KK˜Kš œžœžœ˜BK˜Kš œžœ˜ K˜Kšœ žœ%˜4K˜š œžœ˜ Kšœ0˜0Kšœ žœžœ˜K˜Kšœžœžœ‘/œ˜DK˜—š œžœžœ˜+Kšœ ˜ Kšœ žœžœ˜K˜Kšœžœžœ‘/œ˜DK˜—š œžœžœ˜)Kšœ ˜ Kšœ žœžœ˜K˜Kšœžœžœ‘/œ˜CKšžœ žœ˜K˜—š  œžœ˜#K˜—š  œžœ#žœžœ˜BK˜——K˜Kšžœ˜—…—TΫ