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: BOOL _ FALSE, wordSearch: BOOL _ FALSE, leftBracketSeen, rightBracketSeen: BOOL _ FALSE, firstPatternCharIsNormal, lastPatternCharIsNormal: BOOL _ FALSE ]; END. τ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 Κ¦˜codešœ™KšœH™HKšœ3™3K™,K™-—K˜šΟk ˜ Kšœ œ ˜Kšœœœ˜Kšœ œ ˜—K˜šΠblœœ ˜"Kšœ˜K˜Kšœœœ˜KšœœΟc˜9K˜Kšœ$˜$Kšœ"˜"Kšœ#˜#Kšœ&˜&Kšœ#˜#Kšœ&˜&Kšœ#˜#Kšœ&˜&Kšœ#˜#Kšœ&˜&Kšœ'˜'Kšœ(˜(Kšœ(˜(Kšœ)˜)Kšœ%˜%Kšœ$˜$Kšœ'˜'Kšœ$˜$Kšœ'˜'Kšœ˜Kšœ˜K˜Kšœœ˜K˜Kš œœœœ œœœ˜BKš œœœœ œœœ˜EKš œ œœœ œœ˜JKš œ œœ œ œœ ˜BKš œ œœœ œ˜LKš œœœœ œœ ˜Bšœœœœ˜(Kšœ˜Kšœ˜Kšœœ˜Kšœœ˜Kš˜Kšœ˜K˜—K˜;K˜9K˜?K˜9K˜?K˜AK˜CK˜*K˜š Οnœœœ œœœ˜9K˜—š œœœœ˜+Kšœœœœ ˜PK˜—š œœ œ˜2Kš œœœœœœ˜N—K˜šœœœ˜Kšœ œ˜Kšœœ˜'Kšœœ˜!Kšœœ˜!Kšœœ˜Kšœœ˜Kšœœ ˜Kšœ œ ˜KšœK˜KKšœ œœ˜K˜Kšœ œœ˜Kšœ œœ˜Kšœ#œœ˜0Kšœ3œ˜?K˜K˜—Kšœ˜——…— –0