<> <> <> <> <> <> <> <> DIRECTORY Rope USING [ROPE]; RopeEdit: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; MaxLen: INT = LAST[INT]; MaxNat: NAT = LAST[NAT]; <<**** Rope Editing Operations ****>> Substr: PROC [base: ROPE, start: INT _ 0, len: INT _ MaxLen] RETURNS [ROPE]; <<... returns a subrope of the base>> Concat: PROC [base, rest: ROPE, baseLen, restLen: INT _ MaxLen] RETURNS [ROPE]; <<... returns the concatenation of two ropes>> Replace: PROC [base: ROPE, start: INT _ 0, len: INT _ MaxLen, replace: ROPE _ NIL, baseSize, repSize: INT _ MaxLen] RETURNS [ROPE]; <<... returns a new rope with the given range replaced>> 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]; <<***** Character property information>> 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.