<> <> <> DIRECTORY Pipal, PipalEdit, PipalInt, PipalInteractiveEdit, PipalReal; PipalTextEditor: CEDAR DEFINITIONS = BEGIN <> <> <> pipalTextClass: Pipal.Class; PipalText: TYPE = REF PipalTextRec; PipalTextRec: TYPE = RECORD [ rope: Pipal.ROPE _ NIL, size: PipalReal.Size _ PipalReal.emptySize]; Location: TYPE = INT; CreatePipalText: PROC [rope: Pipal.ROPE, size: PipalReal.Size _ PipalReal.emptySize] RETURNS [text: PipalText]; GetSelectionInterval: PROC [text: PipalText, position: PipalReal.Position, grain: SelectionGrain] RETURNS [interval: PipalInt.Interval, closerRight: BOOL]; <> <> textEditorClass: Pipal.Class; TextEditor: TYPE = REF TextEditorRec; TextEditorRec: TYPE = RECORD [ selections: ARRAY Selections OF Selection, paste: Pipal.ROPE _ NIL]; Selections: TYPE = {primary, secondary}; Selection: TYPE = RECORD [ valid: BOOL _ FALSE, interval: PipalInt.Interval, pendingDelete: BOOL _ FALSE, caretAfter: BOOL _ FALSE, granularity: SelectionGrain]; SelectionGrain: TYPE = {char, word}; <> Create: PROC [text: PipalText] RETURNS [editor: PipalEdit.Editor]; <> <<>> <> InsertRope: PROC [editor: PipalEdit.Editor, characters: Pipal.ROPE]; <> <> InsertChar: PROC [editor: PipalEdit.Editor, character: CHAR]; <> <> Move: PROC [editor: PipalEdit.Editor]; <> <> Copy: PROC [editor: PipalEdit.Editor]; <> <> Transpose: PROC [editor: PipalEdit.Editor]; <> <> Delete: PROC [editor: PipalEdit.Editor]; <> <> Paste: PROC [editor: PipalEdit.Editor]; <> <> Erase: PROC [editor: PipalEdit.Editor]; <> <> <> SetSelection: PROC [editor: PipalEdit.Editor, interval: PipalInt.Interval, selection: Selections _ primary, pendingDelete: BOOL _ FALSE, caretAfter: BOOL _ FALSE, granularity: SelectionGrain _ char]; CancelSelection: PROC [editor: PipalEdit.Editor, selection: Selections _ primary]; <> <> InteractiveEditor: PROC [size: PipalReal.Size] RETURNS [viewerData: PipalInteractiveEdit.ViewerData]; <> END.