<> <> <> <> <> <> <> <> <> <<>> DIRECTORY Basics USING [NonNegative], TextLooks USING [BaseRuns, FlatMax, Looks, MaxOffset, noLooks, Runs]; TextLooksSupport: CEDAR DEFINITIONS IMPORTS Basics SHARES TextLooks = BEGIN OPEN TextLooks; BaseRun: PROC [x: BaseRuns, index: INT, lower: NAT _ 0, upper: NAT _ LAST[NAT]] RETURNS [NAT]; ExtractRuns: PROC [base: BaseRuns, ref: Runs, start, len: INT, index: NAT _ 0] RETURNS [NAT]; -- value is next index CountRunsAfterChanges: PROC [ref: Runs, start, len: INT, limit: INT _ MaxOffset, remove, add: Looks, merge: BOOL _ FALSE, firstLooks: Looks _ noLooks ] RETURNS [count: NAT, nonempty: BOOL, lastLooks: Looks]; ExtractRunsAfterChanges: PROC [base: BaseRuns, ref: Runs, remove, add: Looks, start: INT, len: INT, index: NAT _ 0] RETURNS [NAT]; -- value is next index CopyRuns: PROC [to, from: BaseRuns, toLoc, fromLoc, nRuns: NAT]; MakeRun: PROC [len: INT] RETURNS [new: Runs]; TryFlatSubstr: PROC [base: Runs, start, len: INT, limit: INT _ FlatMax] RETURNS [BaseRuns]; TryFlatConcat: PROC [base, rest: Runs, baseLen, restLen: INT] RETURNS [new: BaseRuns]; TryFlatConcatRest: PROC [base, rest: Runs, baseLen, restLen, numRuns: INT, merge: BOOL, looks: Looks] RETURNS [BaseRuns]; ModifyLooks: PROC [old, remove, add: Looks] RETURNS [Looks]; <> MergeChanges: PROC [oldrem, oldadd, rem, add: Looks] RETURNS [newrem, newadd: Looks]; <<((lks & ~oldrem) v oldadd) & ~rem) v add ==>> <> <> LooksAND: PROC [looks1, looks2: Looks] RETURNS [Looks]; <> LooksOR: PROC [looks1, looks2: Looks] RETURNS [Looks]; <> LooksNOT: PROC [looks: Looks] RETURNS [Looks]; <> TbaseSize: PROC [x: BaseRuns] RETURNS [INT]; InsertRun: PROC [base: BaseRuns, len: INT, looks: Looks, index: NAT] RETURNS [NAT]; NewBase: PROC [runs: NAT] RETURNS [BaseRuns]; FindBaseRuns: PROC [x: BaseRuns, start, len: INT] RETURNS [first, last: NAT]; BaseRunLengths: PROC [x: BaseRuns, start, len: INT, first, last: NAT] RETURNS [firstLen, lastLen: INT]; Short: PROC [x: INT] RETURNS [NAT] = INLINE { RETURN[x] }; <> NonNeg: PROC [x: INT] RETURNS [INT] = INLINE { RETURN[Basics.NonNegative[x]] }; CheckLongSub: PROC [x, y: INT] RETURNS [INT] = INLINE { RETURN[NonNeg[x-y]] }; END.