<<-- TEditInputOps.mesa, Edited by Paxton on December 31, 1982 2:16 pm>> DIRECTORY Rope USING [ROPE], TextEdit USING [CapChange, Ref], TextLooks USING [Look, Looks], TextNode USING [Location, Ref, RefTextNode, Offset], TEditDocument USING [Selection, SelectionGrain, SelectionId], TEditLocks USING [Access]; TEditInputOps: CEDAR DEFINITIONS = BEGIN OPEN TEditDocument; CallWithLocks: PROC [ proc: PROC [root: TextEdit.Ref, tSel: Selection], access: TEditLocks.Access _ write]; CallWithBothLocked: PROC [ proc: PROC [ sourceRoot, destRoot: TextEdit.Ref, tSel, srcSel, targetSel: Selection], targetSel, srcSel: Selection, sourceAccess: TEditLocks.Access]; InsertChar: PROC [char: CHARACTER] ; <<-- Inserts a character in the document at the primary selection and repaints>> InsertRope: PROC [rope: Rope.ROPE]; <<-- like InsertChar, but for entire rope>> InsertLineBreak: PROC; <<-- insert a CR and then copies blanks from front of previous line>> BufferedInsertChar: PROC [char: CHARACTER] ; <<-- Exactly as InsertChar, but returns immediately, forking a repaint process. This is>> <<-- intended for use with user type-in. See TEditBufferedInputImpl>> BufferedInsertText: PROC [text: Rope.ROPE] ; <<-- Exactly as InsertChar, but returns immediately, forking a repaint process. This is>> <<-- intended for use with user type-in. See TEditBufferedInputImpl>> WaitForInsertToFinish: PROCEDURE; -- returns after buffered input has completed BackSpace: PROC [count: INT _ 1]; <<-- Deletes the character preceeding the insertion point and repaints the document>> BackWord: PROC [count: INT _ 1]; <<-- Deletes the word preceeding the insertion point and repaints the document>> DeleteNextChar: PROC [count: INT _ 1]; <<-- Deletes the character after the insertion point and repaints the document>> DeleteNextWord: PROC [count: INT _ 1]; <<-- Deletes the word after the insertion point and repaints the document>> GoToNextChar, GoToPreviousChar, GoToNextWord, GoToPreviousWord, GoToNextNode, GoToPreviousNode: PROC [count: INT _ 1]; <<-- commands for moving caret>> FindPrevWord: PROC [node: TextNode.RefTextNode, offset: TextNode.Offset] RETURNS [nChars: CARDINAL]; FindNextWord: PROC [node: TextNode.RefTextNode, start: TextNode.Offset] RETURNS [nChars: CARDINAL]; MakeControlCharacter, UnMakeControlCharacter: PROC ; MakeOctalCharacter, UnMakeOctalCharacter: PROC ; DoPendingDelete: PROC ; Delete: PROC [saveForPaste: BOOLEAN _ TRUE] ; <<-- Deletes the primary selection>> Paste: PROC; <<-- insert the last deletion at current insertion point>> SaveForPaste: PROC; <<-- save the selection for future Paste>> SaveSpanForPaste: PROC [ startLoc, endLoc: TextNode.Location, grain: TEditDocument.SelectionGrain]; <<-- like SaveForPaste, but saves the given span rather than the selection>> <<>> Break: PROC; <<-- break node at current insertion point>> Join: PROC; <<-- copies text of current insertion point node to end of previous node>> <<-- then deletes node and makes point selection at place where joined them>> Nest: PROC; <<-- move the selection to a deeper nesting level in the tree>> UnNest: PROC; <<-- move the selection to a shallower nesting level in the tree>> Move: PROC [target: SelectionId _ primary] ; <<-- Move the contents of the other selection to the target selection>> CheckReadonly: PROC [targetSel: Selection] RETURNS [BOOL]; Copy: PROC [target: SelectionId _ primary] ; <<-- Copy the contents of the other selection to the target selection>> CopyLooks: PROC [target: SelectionId _ primary] ; <<-- Copy the looks of the other selection to the target selection>> CopyType: PROC [target: SelectionId _ primary] ; <<-- Copy the type of the other selection to the target selection>> Transpose: PROC [target: SelectionId _ primary] ; <<-- Transpose the contents of the primary and secondary selections>> TransposeLooks: PROC [target: SelectionId _ primary] ; <<-- Transpose the looks of the primary and secondary selections>> TransposeType: PROC [target: SelectionId _ primary] ; <<-- Transpose the types of the primary and secondary selections>> InsertBrackets: PROC [left, right: CHAR]; <<-- insert left char at start of selection, right char after selection>> SelectMatchingBrackets: PROC [left, right: CHAR]; <<-- extend selection until includes matching left and right brackets>> DoSelectMatchingBrackets: PROC [left, right: CHAR] RETURNS [found: BOOL]; <<-- extend selection until includes matching left and right brackets>> NextViewer: PROC [forward: BOOLEAN] ; <<-- move selection to next viewer in left-right, top-bottom order>> DoNextViewer: PROC [forward: BOOLEAN] RETURNS [found: BOOL]; FindPlaceholders: PROCEDURE [next: BOOLEAN]; DoFindPlaceholders: PROCEDURE [next, gotoend: BOOL, startBoundaryNode, endBoundaryNode: TextNode.Ref _ NIL, startBoundaryOffset: TextNode.Offset _ 0, endBoundaryOffset: TextNode.Offset _ LAST[TextNode.Offset]] RETURNS [found, wenttoend: BOOL]; Find: PROC; <<-- find next instance of selected text>> Position: PROC; <<-- find location corresponding to selected number>> InsertTime: PROC; <<-- insert the current date and time>> Capitalise: PROC [flavor: TextEdit.CapChange] ; <<-- Perform the capitalisation operation on the target selection>> ModifyLook: PROC [look: TextLooks.Look, op: ModifyOp] ; <<-- change the looks of a selection>> ModifyCaretLook: PROC [look: TextLooks.Look, op: ModifyOp] ; <<-- change the looks of a selection caret>> ModifyOp: TYPE = {add, remove} ; ChangeLooks: PROC [add, remove: TextLooks.Looks] ; <<-- wholesale change of the selection looks>> ChangeCaretLooks: PROC [add, remove: TextLooks.Looks] ; <<-- wholesale change of the caret looks>> SetStyle: PROC ; <<-- sets style of caret node to word before caret>> SetStyleName: PROC [name: Rope.ROPE, node: TextNode.Ref _ NIL]; <<-- sets style of caret node to given name>> <<-- if node is nil, sets style for caret node>> ReloadStyle: PROC ; <<-- reloads style of caret node>> ReloadStyleName: PROC [name: Rope.ROPE]; <<-- reloads named style>> SetType: PROC ; <<-- sets type of caret node to word before caret>> GetType: PROC ; <<-- inserts type of caret node>> SetTypeName: PROC [name: Rope.ROPE, node: TextNode.Ref _ NIL]; <<-- sets type of caret node to given name>> <<-- if node is nil, sets type for caret node>> SetCommentProp: PROC [flag: BOOLEAN]; RegisterAbbrevFailedProc: PROC [proc: PROC RETURNS [BOOL]]; <<-- called if ExpandAbbreviation finds an unknown key>> <<-- call with NIL to unregister>> <<-- only one proc registered at a time>> ExpandAbbreviation: PROC; <<-- expand abbreviation at insertion point>> LoadAbbreviations: PROC [dictName: Rope.ROPE]; <<-- abbreviatiions files are loaded automatically>> <<-- can call this to force reloading after have changed contents>> EditFailed: PROC [msg: Rope.ROPE _ NIL]; END.