TextFindPrivate.mesa
Copyright Ó 1985, 1986, 1988 by Xerox Corporation. All rights reserved.
last edit by Bill Paxton, February 23, 1983 3:46 pm
Michael Plass, March 21, 1985 2:39:08 pm PST
Doug Wyatt, February 17, 1988 10:28:46 am PST
DIRECTORY
ImagerFont USING [XChar],
Rope USING [ROPE],
TextLooks USING [Looks];
TextFindPrivate: CEDAR DEFINITIONS
= BEGIN
ROPE: TYPE = Rope.ROPE;
XChar: TYPE ~ ImagerFont.XChar; --[set: BYTE, code: BYTE]
anyStringPattern: XChar = [377B, 0];
oneCharPattern: XChar = [377B, 1];
oneBlankPattern: XChar = [377B, 2];
oneNonBlankPattern: XChar = [377B, 3];
anyBlankPattern: XChar = [377B, 4];
anyNonBlankPattern: XChar = [377B, 5];
oneAlphaPattern: XChar = [377B, 6];
oneNonAlphaPattern: XChar = [377B, 7];
anyAlphaPattern: XChar = [377B, 8];
anyNonAlphaPattern: XChar = [377B, 9];
leftBracketPattern: XChar = [377B, 10];
rightBracketPattern: XChar = [377B, 11];
leftBoundaryPattern: XChar = [377B, 12];
rightBoundaryPattern: XChar = [377B, 13];
maxStringPattern: XChar = [377B, 14];
maxBlankPattern: XChar = [377B, 15];
maxNonBlankPattern: XChar = [377B, 16];
maxAlphaPattern: XChar = [377B, 17];
maxNonAlphaPattern: XChar = [377B, 18];
nopPattern: XChar = [377B, 19];
nullChar: XChar = [377B, 377B];
MaxPatternLength: NAT = 1024;
TextStackArray: TYPE = RECORD[stack: SEQUENCE length: NAT OF INT];
PatternStackArray: TYPE = RECORD[stack: SEQUENCE length: NAT OF NAT];
LooksArray: TYPE = RECORD[looks: SEQUENCE length: NAT OF TextLooks.Looks];
NameArray: TYPE = RECORD [array: SEQUENCE length: NAT OF NameRec];
NameRec: TYPE = RECORD [name: ROPE, at, atEnd: INT, looks: TextLooks.Looks];
PatternArray: TYPE = RECORD [pat: SEQUENCE length: NAT OF PatRec];
PatRec: TYPE = RECORD [SELECT tag:* FROM
pattern => [char: XChar],
not => [char: XChar],
startname => [index: NAT],
endname => [index: NAT],
ENDCASE
];
anyStringPat: pattern PatRec = [pattern[anyStringPattern]];
anyAlphaPat: pattern PatRec = [pattern[anyAlphaPattern]];
anyNonAlphaPat: pattern PatRec = [pattern[anyNonAlphaPattern]];
anyBlankPat: pattern PatRec = [pattern[anyBlankPattern]];
anyNonBlankPat: pattern PatRec = [pattern[anyNonBlankPattern]];
leftBoundaryPat: pattern PatRec = [pattern[leftBoundaryPattern]];
rightBoundaryPat: pattern PatRec = [pattern[rightBoundaryPattern]];
nonPat: pattern PatRec = [pattern[[0,0]]];
IsWord: PROC [rope: ROPE, at, atEnd: INT] RETURNS [BOOL];
Boundary: PROC [char: XChar] RETURNS [BOOL]
= INLINE { RETURN [char = leftBoundaryPattern OR char = rightBoundaryPattern] };
Pat: PROC [p: PatRec] RETURNS [pp: pattern PatRec]
= INLINE { WITH p: p SELECT FROM pattern => pp ← p; ENDCASE => pp ← nonPat; };
FinderRecord: TYPE = RECORD [
stackSize: NAT ← 0,
patternPosStack: REF PatternStackArray,
textPosStack: REF TextStackArray,
textLenStack: REF TextStackArray,
patternArray: REF PatternArray,
length: NAT ← 0,
patternLooks: REF LooksArray,
nameArray: REF NameArray,
firstPatChar1, firstPatChar2, lastPatChar1, lastPatChar2: XChar ← nullChar,
textBuffer: REF TEXT,
looks: TextLooks.Looks,
looksOnly: BOOLFALSE,
wordSearch: BOOLFALSE,
leftBracketSeen, rightBracketSeen: BOOLFALSE,
firstPatternCharIsNormal, lastPatternCharIsNormal: BOOLFALSE
];
END.