DIRECTORY Rope USING [ROPE]; RopeEdit: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; MaxLen: INT = LAST[INT]; MaxNat: NAT = LAST[NAT]; Substr: PROC [base: ROPE, start: INT _ 0, len: INT _ MaxLen] RETURNS [ROPE]; Concat: PROC [base, rest: ROPE, baseLen, restLen: INT _ MaxLen] RETURNS [ROPE]; Replace: PROC [base: ROPE, start: INT _ 0, len: INT _ MaxLen, replace: ROPE _ NIL, baseSize, repSize: INT _ MaxLen] RETURNS [ROPE]; Delete: PROC [base: ROPE, start, len, baseSize: INT] RETURNS [ROPE]; Insert: PROC [dest: ROPE, destLoc: INT _ 0, source: ROPE, destSize, sourceSize: INT _ MaxLen] RETURNS [ROPE]; Copy: PROC [dest: ROPE, destLoc: INT _ 0, source: ROPE, start: INT _ 0, len: INT _ MaxLen, destSize: INT _ MaxLen] RETURNS [ROPE]; ReplaceByChar: PROC [base: ROPE, char: CHAR, start: INT _ 0, len, baseSize: INT _ MaxLen] RETURNS [ROPE]; InsertChar: PROC [base: ROPE, char: CHAR, loc: INT _ 0, baseSize: INT _ MaxLen] RETURNS [ROPE]; AppendChar: PROC [base: ROPE, char: CHAR, baseSize: INT _ MaxLen] RETURNS [ROPE]; AppendByte: PROC [base: ROPE, x: [0..256), baseSize: INT _ MaxLen] RETURNS [ROPE] = INLINE { RETURN [AppendChar[base, VAL[x], baseSize]] }; ReplaceByTEXT: PROC [base: ROPE, text: REF READONLY TEXT, textStart: NAT _ 0, textSize: NAT _ MaxNat, start: INT _ 0, len, baseSize: INT _ MaxLen] RETURNS [new: ROPE]; Depth: PROC [rope: ROPE] RETURNS [depth: INTEGER]; CharProperty: TYPE = {white, alphaNumeric, punctuation, illegal}; CharPropertyTable: TYPE = PACKED ARRAY CHAR OF CharProperty; charPropertyTable: REF READONLY CharPropertyTable; BlankChar: PROC [char: CHAR] RETURNS [BOOLEAN] = INLINE { RETURN [charPropertyTable[char] = white] }; AlphaNumericChar: PROC [char: CHAR] RETURNS [BOOLEAN] = INLINE { RETURN [charPropertyTable[char] = alphaNumeric] }; PunctuationChar: PROC [char: CHAR] RETURNS [BOOLEAN] = INLINE { RETURN [charPropertyTable[char] = punctuation] }; IllegalChar: PROC [char: CHAR] RETURNS [BOOLEAN] = INLINE { RETURN [charPropertyTable[char] = illegal] }; TestCharProp: PROC [char: CHAR, property: CharProperty] RETURNS [BOOLEAN] = INLINE { RETURN [charPropertyTable[char] = property] }; GetCharProp: PROC [char: CHAR] RETURNS[property: CharProperty] = INLINE { RETURN [charPropertyTable[char]] }; UpperCase: PROC [c: CHAR] RETURNS [CHAR] = INLINE { RETURN [IF c IN ['a..'z] THEN c-40B ELSE c] }; LowerCase: PROC [c: CHAR] RETURNS [CHAR] = INLINE { RETURN [IF c IN ['A..'Z] THEN c+40B ELSE c] }; END. (RopeEdit.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. written by Bill Paxton, February 1981 Paxton, August 24, 1982 9:53 am Maxwell, January 5, 1983 11:51 am Russ Atkinson, July 21, 1983 7:27 pm Michael Plass, March 1, 1985 3:00:28 pm PST This module provides editing operations for ropes. **** Rope Editing Operations **** ... returns a subrope of the base ... returns the concatenation of two ropes ... returns a new rope with the given range replaced ***** Character property information Returns TRUE iff char has property=white. Returns TRUE iff char has property=alphaNumeric. Returns TRUE iff char has property=punctuation. Returns TRUE iff char has property=illegal. Returns TRUE iff char has property. Returns property {white, alphaNumeric, punctuation, illegal} for char. ÊÒ˜šœ ™ Icodešœ Ïmœ1™J˜—š Ÿœžœžœžœžœ˜4Jšœ/™/Jšœžœžœ+˜=J˜—š Ÿ œžœžœžœžœ˜0Jšœ+™+Jšœžœžœ'˜9J˜—š Ÿ œžœžœžœžœ˜IJšœ#™#Jšœžœžœ(˜:J˜—šŸ œžœžœžœ˜>JšœF™FJšœžœžœ˜.J˜—š Ÿ œžœžœžœžœ˜(Jš œžœžœžœžœ žœžœ˜9J˜—š Ÿ œžœžœžœžœ˜(Jš œžœžœžœžœ žœžœ˜9J˜—Jšžœ˜—J˜—…— ®¨