<> <> <> <> DIRECTORY IIFont USING [CorrectionType, XChar], IISample USING [SampleMap], Scaled USING [Value], SF USING [Box, BoxAction, BoxGenerator, Vec]; IIMask: CEDAR DEFINITIONS ~ BEGIN Box: TYPE ~ SF.Box; BoxAction: TYPE ~ SF.BoxAction; BoxGenerator: TYPE ~ SF.BoxGenerator; SampleMap: TYPE ~ IISample.SampleMap; Run: TYPE ~ MACHINE DEPENDENT RECORD [fMin: CARDINAL, lastRun: BOOL, fSize: NAT]; <> CharMask: TYPE ~ REF CharMaskRep; CharMaskRep: TYPE ~ MACHINE DEPENDENT RECORD [ font: REF, -- font and char together provide a unique identifier for this mask char: IIFont.XChar, sWidth, fWidth: Scaled.Value, sMinBB, fMinBB: INTEGER, sSizeBB, fSizeBB: CARDINAL, metricsValid: BOOL, -- numbers above are invalid if this is true. amplified: BOOL, correction: IIFont.CorrectionType, flag: PACKED ARRAY [0..10) 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], uncached => [], ENDCASE ]; RunProc: TYPE ~ PROC [min: SF.Vec, count: NAT]; BoxesFromBitmap: PROC [bitmap: SampleMap, boxAction: BoxAction]; <<>> BoxesFromBits: PROC [base: LONG POINTER, wordsPerLine: NAT, sBits, fBits, sSize, fSize: NAT, sRuns, fRuns: INTEGER, boxAction: BoxAction]; <<(sBits, fBits) is the min corner of the rectangle in the bitmap.>> <<(sRuns, fRuns) is the min corner of the rectangle in the output coordinate system.>> <> RunsFromBoxes: PROC [boxes: BoxGenerator, run: RunProc]; RunsFromCharMask: PROC [charMask: CharMask, run: RunProc, s, f: INTEGER, clip: Box]; <> <<>> BitmapFromCharMask: PROC [charMask: CharMask] RETURNS [SampleMap]; <<>> <<>> END.