IIMaskCache.mesa
Copyright Ó 1986 by Xerox Corporation. All rights reserved.
Michael Plass, November 21, 1986 2:01:51 pm PST
Doug Wyatt, May 19, 1985 4:06:38 pm PDT
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;
Device-dependent Character Masks
Run:
TYPE ~
MACHINE
DEPENDENT
RECORD [fMin:
CARDINAL, lastRun:
BOOL, fSize:
NAT];
Same as PDFileFormat.Run; fMin is relative to fMinBB.
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];
Character Mask Caches
MaskCache: TYPE ~ REF MaskCacheRep;
Create:
PROC [size:
NAT]
RETURNS [MaskCache];
Size:
PROC [x: MaskCache]
RETURNS [
NAT];
Number of elements in the cache.
Fetch:
PROC [x: MaskCache, font:
REF, char: XChar]
RETURNS [CharMask];
Store:
PROC [x: MaskCache, charMask: CharMask]
RETURNS [ok:
BOOL];
Returns FALSE if the cache is full. Since this is a cache, the implementation reserves the right to replace a previously existing entry.
Flush:
PROC [x: MaskCache];
Makes the cache empty.
GetList:
PROC [x: MaskCache]
RETURNS [
LIST
OF CharMask];
In case somebody wants to save the cache somewhere else.
GetNamedCache:
PROC [atom:
ATOM, createSize:
NAT]
RETURNS [MaskCache];
For sharing caches by name.
FlushAll:
PROC;
Flushes all the named caches.
END.