<> <> <> <> DIRECTORY IIFont USING [Font, CorrectionType, XChar], IISample USING [SampleMap], Scaled USING [Value], SF USING [Box, BoxAction, maxBox, Vec, zeroVec]; IIMaskCache: CEDAR DEFINITIONS ~ BEGIN XChar: TYPE ~ IIFont.XChar; <> Run: TYPE ~ MACHINE DEPENDENT RECORD [fMin: CARDINAL, lastRun: BOOL, fSize: NAT]; <> ScaledVec: TYPE ~ RECORD [s, f: Scaled.Value]; CharMask: TYPE ~ REF CharMaskRep; CharMaskRep: TYPE ~ MACHINE DEPENDENT RECORD [ font: IIFont.Font, -- font and char together provide a unique identifier for this mask char: IIFont.XChar, escapement: ScaledVec, box: SF.Box, amplified: BOOL, correction: IIFont.CorrectionType, flag: PACKED ARRAY [0..11) OF [0..1], -- for padding and expansion data: SELECT rep: * FROM raster => [bits: SEQUENCE COMPUTED CARDINAL -- sSize*Ceiling[fSize/16.0] -- OF WORD], runs => [run: SEQUENCE nRuns: CARDINAL OF Run], culled, maskNotCacheable => [], ENDCASE ]; BitmapFromCharMask: PROC [charMask: CharMask] RETURNS [IISample.SampleMap]; <<>> BoxesFromCharMask: PROC [charMask: CharMask, boxAction: SF.BoxAction, delta: SF.Vec _ SF.zeroVec, clip: SF.Box _ SF.maxBox]; <<>> <> MaskCache: TYPE ~ REF MaskCacheRep; MaskCacheRep: TYPE; Create: PROC [size: NAT] RETURNS [MaskCache]; Size: PROC [x: MaskCache] RETURNS [NAT]; <> Fetch: PROC [x: MaskCache, font: REF, char: XChar] RETURNS [CharMask]; Store: PROC [x: MaskCache, charMask: CharMask] RETURNS [ok: BOOL]; <> Flush: PROC [x: MaskCache]; <> GetList: PROC [x: MaskCache] RETURNS [LIST OF CharMask]; <> GetNamedCache: PROC [atom: ATOM, createSize: NAT] RETURNS [MaskCache]; <> FlushAll: PROC; <> END.