DIRECTORY ImagerDeviceVector USING [ScaledVec], ImagerFont USING [Font, CorrectionType, XChar], ImagerManhattan USING [Polygon], ImagerSample USING [SampleMap], Prop USING [PropList], SF USING [Box, BoxAction, maxBox, Vec, zeroVec]; ImagerMaskCache: CEDAR DEFINITIONS ~ BEGIN XChar: TYPE ~ ImagerFont.XChar; Run: TYPE ~ MACHINE DEPENDENT RECORD [fMin: CARD16, lastRun: BOOL, fSize: NAT15]; ScaledVec: TYPE ~ ImagerDeviceVector.ScaledVec; CharFlags: TYPE ~ MACHINE DEPENDENT --PACKED-- RECORD [ amplified: BOOL, correction: ImagerFont.CorrectionType, missing: BOOL -- this character was missing from the font ]; CharMask: TYPE ~ REF CharMaskRep; CharMaskRep: TYPE ~ RECORD [ font: ImagerFont.Font, -- font and char together provide a unique identifier for this mask char: ImagerFont.XChar, escapement: ScaledVec, box: SF.Box, flags: CharFlags, data: SELECT rep: * FROM raster => [bits: SEQUENCE length: CARDINAL -- sSize*Ceiling[REAL[fSize]/BITS[WORD]] -- OF WORD], runs => [run: SEQUENCE nRuns: CARDINAL OF Run], culled, maskNotCacheable => [], ENDCASE ]; BitmapFromCharMask: PROC [charMask: CharMask] RETURNS [ImagerSample.SampleMap]; BoxesFromCharMask: PROC [charMask: CharMask, boxAction: SF.BoxAction, delta: SF.Vec ¬ SF.zeroVec, clip: SF.Box ¬ SF.maxBox]; RasterCharMaskFromSampleMap: PROC [map: ImagerSample.SampleMap] RETURNS [REF CharMaskRep.raster]; RasterCharMaskFromManhattan: PROC [p: ImagerManhattan.Polygon, bb: SF.Box] RETURNS [REF CharMaskRep.raster]; RunsCharMaskFromManhattan: PROC [p: ImagerManhattan.Polygon, bb: SF.Box, nRuns: INT] RETURNS [REF CharMaskRep.runs]; CountRuns: PROC [p: ImagerManhattan.Polygon] RETURNS [INT]; MakeCharMaskProc: TYPE ~ PROC [parameters: Parameters, font: ImagerFont.Font, char: ImagerFont.XChar] RETURNS [CharMask]; CostParameters: TYPE ~ RECORD [slope: REAL, offset: REAL]; Parameters: TYPE ~ REF ParametersRep; ParametersRep: TYPE ~ RECORD [ sizeLimit: NAT ¬ 4000, makeCharMask: MakeCharMaskProc ¬ NIL, -- For font-tuning hooks rasterCost: CostParameters ¬ [slope: 1, offset: 0], runsCost: CostParameters ¬ [slope: 1, offset: 0], uncacheableCost: CostParameters ¬ [slope: 0, offset: 2000], spotSize: REAL ¬ 1.0, sThicken: REAL ¬ 0.0, fThicken: REAL ¬ 0.0, sMinThickness: REAL ¬ 0.0, fMinThickness: REAL ¬ 0.0, sHalfbit: BOOL ¬ FALSE, fHalfbit: BOOL ¬ FALSE, propList: Prop.PropList ]; MaskCache: TYPE ~ REF MaskCacheRep; MaskCacheRep: TYPE; Create: PROC [param: ParametersRep ¬ []] RETURNS [MaskCache]; Size: PROC [x: MaskCache] RETURNS [NAT]; Fetch: PROC [x: MaskCache, font: REF, char: XChar] RETURNS [CharMask]; GetParameters: PROC [x: MaskCache] RETURNS [Parameters]; UpdateParameters: PROC [x: MaskCache, action: PROC [Parameters]]; Store: PROC [x: MaskCache, charMask: CharMask]; Flush: PROC [x: MaskCache]; Launder: PROC [x: MaskCache, keep: PROC [CharMask] RETURNS [BOOL]]; GetList: PROC [x: MaskCache] RETURNS [LIST OF CharMask]; GetNamedCache: PROC [atom: ATOM] RETURNS [MaskCache]; SetNamedCacheParameters: PROC [atom: ATOM, p: ParametersRep]; FlushAll: PROC; smallCacheSize: NAT ~ 256; SmallCache: TYPE = REF ARRAY [0..smallCacheSize) OF REF CharMaskRep.raster; ObtainSmallCache: PROC [x: MaskCache] RETURNS [SmallCache]; -- might return NIL. ReleaseSmallCache: PROC [x: MaskCache, s: SmallCache]; END. L ImagerMaskCache.mesa Copyright Σ 1986, 1987, 1989, 1991 by Xerox Corporation. All rights reserved. Michael Plass, September 14, 1989 10:10:53 am PDT Doug Wyatt, May 19, 1985 4:06:38 pm PDT Device-dependent Character Masks Same as PDFileFormat.Run; fMin is relative to box.min.f. Does not fill in font, char, escapement or flags Does not fill in font, char, escapement or flags Does not fill in font, char, escapement or flags This version includes zero-length runs needed to get the PD-style run representation to work. Character Mask Caches These parameters are used (as a hint) for deciding on which cached repersentation to use. For each of the possible representation the cost is calculated as (slope*WORDS[rep]+offset), and the representation of lowest cost is selected. This collection of parameters is available for use by higher-level software; except for the cache management parameters, the cache implementation does not itself use the parameters. Cache management parameters: Mask creation hook: Representation selection parameters: Folio: Font Solution: Extension: Makes a new cache Actual number of elements in the cache. Returns NIL if the entry is not in the cache. Treat these Parameters as read-only. The action proc is called (probably under a monitor!) to access or change the parameters. Changes that cause different masks to be generated should be followed by a Flush. Since this is a cache, the implementation reserves the right to replace previously existing entries. Makes the cache empty. Calls keep procedure for each CharMask, and retains only those masks for which keep returns TRUE. In case somebody wants to save the cache somewhere else. For sharing caches by name. For initializing the parameters in a shared font cache. Flushes all the named caches. A small cache is owned by a single process for the duration of a Show. Κ²–(cedarcode) style•NewlineDelimiter ™codešœ™Kšœ ΟeœC™NK™1K™'—K˜šΟk œ˜ Kšœžœ ˜%Kšœ žœ˜/Kšœžœ ˜ Kšœ žœ ˜Kšœžœ ˜Kšžœžœ(˜0—K˜KšΠblœžœž ˜"šœž˜K˜Kšœžœ˜—head™ šœžœžœž œžœžœ žœ žœ˜QKšœ8™8K˜—Kšœ žœ ˜/š œ žœžœž œΟc œžœ˜7Kšœ žœ˜Kšœ&˜&Kšœ žœ +˜9Kšœ˜—Kšœ žœžœ ˜!šœ žœžœ˜Kšœ C˜ZKšœ˜Kšœ˜Kšœžœ˜ Kšœ˜šœžœž˜Kš œžœ žœ +œžœžœ˜`Kšœžœžœžœ˜/Kšœ˜Kšž˜—Kšœ˜K˜—šΟnœžœžœ˜OK™—š‘œžœ!žœžœžœžœžœ ˜|K™—š‘œžœžœžœ˜aKšœ0™0K˜—š ‘œžœ"žœžœžœ˜lKšœ0™0K˜—š ‘œžœ"žœ žœžœžœ˜tKšœ0™0K˜—š‘ œžœžœžœ˜;K™]—K™—™šœžœžœIžœ ˜yK˜—š œžœžœ žœ žœ˜:Kšœκ™κK™—šœ žœžœ˜%I availablešœ΅™΅—šœžœžœ˜š‘œ™Kšœ žœ˜—š‘œ™Kšœ!žœ ˜>—š‘#œ™$K˜3K˜1K˜;—š‘œ™Kšœ žœ˜—š‘ œ™Kšœ žœ˜Kšœ žœ˜Kšœžœ˜Kšœžœ˜Kšœ žœžœ˜Kšœ žœžœ˜—š‘ œ™ K˜—Kšœ˜K˜—Kšœ žœžœ˜#šœžœ˜K˜—š‘œžœžœ ˜=Kšœ™K˜—š‘œžœžœžœ˜(K™'K˜—š‘œžœžœžœ ˜FK™-K˜—š‘ œžœžœ˜8Kšœ$™$K˜—š‘œžœžœ˜AK™YK™QK˜—š‘œžœ$˜/Kšœd™dK˜—š‘œžœ˜Kšœ™K˜—š ‘œžœžœ žœžœ˜CKšœa™aK˜—š ‘œžœžœžœžœ ˜8K™8K˜—š‘ œžœžœžœ ˜5K™K˜—š‘œžœžœ˜=K™7K˜—š‘œžœ˜K™K˜—Kšœžœ˜š œ žœžœžœžœžœ˜KK˜—Kš‘œžœžœ ˜Pš‘œžœ˜6K™FK˜——Kšžœ˜—…— ήά