<> <> <> <> <> DIRECTORY BasicTime USING [GMT], PDFileFormat USING [Run], Scaled USING [Value], ImagerTransformation USING [Transformation], Rope USING [ROPE]; ImagerMaskCache: CEDAR DEFINITIONS ~ BEGIN <> <FontCache.dontDeleteMe". Normally at most one cache is in active use at any given time. The cache may be in one of the following states:>> <> <> <> <> <<>> <> <<>> <> <<>> <> <<[ fontID, transformation, charCode ]>> <> <> < device coordinates), together with a code describing the type of scan conversion used.>> <> <> <> Coefficients: TYPE ~ MACHINE DEPENDENT RECORD [a, b, c, d, e, f: REAL]; <> passwordValue: CARDINAL ~ 0FCACH; Header: TYPE ~ MACHINE DEPENDENT RECORD [ password: CARDINAL, numberOfEntries: LONG CARDINAL, numberOfWords: LONG CARDINAL, totalUsage: LONG CARDINAL ]; EntryType: TYPE ~ MACHINE DEPENDENT {trailer, unused, fontIDCode, transformationCode, mask}; EntryPrefix: TYPE ~ MACHINE DEPENDENT RECORD [ entryType: EntryType, entryLengthInWords: [0..8192) <> ]; FontIDCodeEntry: TYPE ~ MACHINE DEPENDENT RECORD [ codeValue: CARDINAL, createdTime: BasicTime.GMT, name: PACKED SEQUENCE chars: CARDINAL OF CHAR <> ]; TransformationCodeEntry: TYPE ~ MACHINE DEPENDENT RECORD [ codeValue: CARDINAL, coefficients: Coefficients, scanConversionType: ScanConversionType ]; ScanConversionType: TYPE ~ MACHINE DEPENDENT RECORD [ rasterAlignment: {unaligned, aligned} _ unaligned, tuning: {none, quick, slow, hand} _ none, sSpread, fSpread: [0..4) _ 0, spare: BOOLEAN _ FALSE, algorithmCode: CHAR _ '\000 ]; MaskRepresentation: TYPE ~ MACHINE DEPENDENT {raster, runs}; MaskEntry: TYPE ~ MACHINE DEPENDENT RECORD [ fontIDCode: CARDINAL, transformationCode: CARDINAL, charCode: INT, usage: CARDINAL, sWidth, fWidth: Scaled.Value, sMinBB, fMinBB: INTEGER, sSizeBB, fSizeBB: CARDINAL, flag: PACKED ARRAY [0..12) OF BOOLEAN, -- for padding and expansion amplified: BOOLEAN, correctSpace: BOOLEAN, correctMask: BOOLEAN, data: SELECT representation: MaskRepresentation FROM raster => [bits: SEQUENCE COMPUTED CARDINAL -- sSize*Ceiling[fSize/16.0] -- OF WORD], runs => [nRuns: CARDINAL, run: SEQUENCE COMPUTED CARDINAL OF Run], ENDCASE ]; Run: TYPE ~ PDFileFormat.Run; <<[fMin: CARDINAL, lastRun: BOOLEAN, fSize: NAT]>> <> <> Status: TYPE ~ {disabled, readOnly, extendable, transition}; Mask: TYPE ~ REF; Transformation: TYPE ~ ImagerTransformation.Transformation; ROPE: TYPE ~ Rope.ROPE; GetStatus: PROC [waitDuringTransition: BOOLEAN _ TRUE] RETURNS [Status]; DoUnderLock: PROC [action: PROC]; <> Disable: PROC; <> MakeReadOnly: PROC; <> <> Enable: PROC; <> FontCacheInconsistency: ERROR [reason: ATOM, wordOffset: INT]; TransID: TYPE ~ REF TransformationCodeEntry; <> <> TransIDFromTransformation: PROC [transformation: Transformation, scanConversionType: ScanConversionType, hint: TransID _ NIL] RETURNS [TransID]; <> <> TransformationFromTransID: PROC [transID: TransID] RETURNS [Transformation]; FontID: TYPE ~ REF FontIDCodeEntry; <> <> FontIDFromRopeAndGMT: PROC [name: ROPE, createdTime: BasicTime.GMT] RETURNS [FontID]; RopeFromFontID: PROC [fontID: FontID] RETURNS [name: ROPE]; GMTFromFontID: PROC [fontID: FontID] RETURNS [createdTime: BasicTime.GMT]; InsertMask: PROC [fontID: FontID, transID: TransID, charCode: INT, sWidth, fWidth: Scaled.Value, mask: Mask, amplified, correctSpace, correctMask: BOOLEAN _ FALSE] RETURNS [ok: BOOLEAN]; <> MaskDesc: TYPE ~ RECORD [ref: REF, maskEntryPtr: LONG POINTER TO MaskEntry]; <> GetMask: UNSAFE PROC [fontID: FontID, transID: TransID, charCode: INT] RETURNS [MaskDesc]; <> RopeOrRefText: TYPE ~ REF; StringBodyDesc: TYPE ~ RECORD [stringBody: RopeOrRefText, start: INT _ 0, length: INT _ INT.LAST, fontSet: [0..256) _ 0]; <> Current: PROC [stringBodyDesc: StringBodyDesc] RETURNS [charCode: INT]; Advance: PROC [stringBodyDesc: StringBodyDesc] RETURNS [StringBodyDesc]; GetStringBodyMasks: PROC [ fontID: FontID, transID: TransID, stringBodyDesc: StringBodyDesc, maskProc: UNSAFE PROC [MaskDesc] ] RETURNS [StringBodyDesc]; <> <> TrimCache: PROC [maxNumberOfMasks: INT, maxNumberOfWords: INT]; <> <> SetMaskUsage: PROC [fontID: FontID, transID: TransID, charCode: INT, usage: CARDINAL]; <> Enumerate: PROC [action: PROC [FontID, TransID, MaskDesc] RETURNS [continue: BOOL]]; <> <> GetHeader: PROC RETURNS [header: Header]; <> GetListOfContents: PROC RETURNS [LIST OF MaskDescriptor]; MaskDescriptor: TYPE ~ RECORD[name: ROPE, transID: TransID, usage: INT, set: INT, c: CHAR]; <> END.