DIRECTORY UFFileManager, CGFont, Graphics, GraphicsOps, UnifiedFonts, UFStrikeReader; UFStrikeReaderImpl: CEDAR PROGRAM IMPORTS UFFileManager, Graphics, GraphicsOps, UnifiedFonts EXPORTS UFStrikeReader = BEGIN OPEN UFStrikeReader; FONT: TYPE = UnifiedFonts.FONT; OpenInitialization: UFFileManager.InitProc = TRUSTED { fontRef: Graphics.FontRef _ GraphicsOps.UnsafeNewFont[fontFile.Pointer[]]; RETURN[fontRef]; }; DrawChar: PUBLIC PROCEDURE [context: Graphics.Context, key: Key, char: CHAR] = TRUSTED { file: UFFileManager.FontFile _ UFFileManager.Open[key, OpenInitialization]; fRef: CGFont.Ref _ NARROW[file.GetData[]]; fontRef: Graphics.FontRef _ LOOPHOLE[fRef]; Graphics.DrawChar[context, char, fontRef]; }; BoundingBox: PUBLIC PROCEDURE [key: Key, char: CHAR] RETURNS [box: UnifiedFonts.Box] = TRUSTED { file: UFFileManager.FontFile _ UFFileManager.Open[key, OpenInitialization]; fRef: CGFont.Ref _ NARROW[file.GetData[]]; fontRef: Graphics.FontRef _ LOOPHOLE[fRef]; [box.xmin, box.ymin, box.xmax, box.ymax] _ Graphics.CharBox[fontRef, char]; }; WidthVector: PUBLIC PROCEDURE [key: Key, char: CHAR] RETURNS [vec: UnifiedFonts.Vec] = TRUSTED { file: UFFileManager.FontFile _ UFFileManager.Open[key, OpenInitialization]; fRef: CGFont.Ref _ NARROW[file.GetData[]]; fontRef: Graphics.FontRef _ LOOPHOLE[fRef]; [vec.x, vec.y] _ Graphics.CharWidth[fontRef, char]; }; SKDrawChar: PROCEDURE [font: FONT, char: CHAR, context: Graphics.Context] = { DrawChar[context, font.graphicsKey, char]; }; SKBoundingBox: PROCEDURE [font: FONT, char: CHAR] RETURNS [box: UnifiedFonts.Box] = { box _ BoundingBox[font.graphicsKey, char]; }; SKWidthVector: PROCEDURE [font: FONT, char: CHAR] RETURNS [vec: UnifiedFonts.Vec] = { vec _ WidthVector[font.graphicsKey, char]; }; SKContains: PROCEDURE [font: FONT, char: CHAR] RETURNS [BOOLEAN] = { RETURN[WidthVector[font.graphicsKey, char]#[0,0]]; }; SKGraphicsObjectInit: PROCEDURE [font: FONT] = { file: UFFileManager.FontFile _ UFFileManager.Open[font.graphicsKey, OpenInitialization]; fRef: CGFont.Ref _ NARROW[file.GetData[]]; font.fontGraphicsClass _ SKGraphicsClass; font.bc _ fRef.min; font.ec _ fRef.max; }; SKGraphicsClass: REF UnifiedFonts.FontGraphicsClassRec_NEW[UnifiedFonts.FontGraphicsClassRec_[ drawCharProc: SKDrawChar, boundingBoxProc: SKBoundingBox, widthVectorProc: SKWidthVector, containsProc: SKContains ]]; LigatureOrKern: TYPE = UnifiedFonts.LigatureOrKern; Box: TYPE = UnifiedFonts.Box; SKLigKern: PROCEDURE [font: FONT, char1, char2: CHAR] RETURNS [ligatureOrKern: LigatureOrKern] = {RETURN[[neither[]]]}; SKFormattingBox: PROCEDURE [font: FONT, char: CHAR] RETURNS [box: Box] = { box _ BoundingBox[font.graphicsKey, char]; box.xmin _ 0; box.xmax _ WidthVector[font.graphicsKey, char].x; }; SKFormattingMetric: PROCEDURE [font: FONT, metric: ATOM, char: CHAR] RETURNS [REAL] = { RETURN[0.0]; }; SKFormattingObjectInit: PROCEDURE [font: FONT] = { font.fontFormattingClass _ SKFormattingClass; }; SKFormattingClass: REF UnifiedFonts.FontFormattingClassRec _ NEW[UnifiedFonts.FontFormattingClassRec_[ formattingBoxProc: SKFormattingBox, ligKernProc: SKLigKern, formattingMetricProc: SKFormattingMetric ]]; UnifiedFonts.RegisterFontGraphicsClass[$Strike, SKGraphicsObjectInit]; UnifiedFonts.RegisterFontFormattingClass[$Strike, SKFormattingObjectInit]; END. UFStrikeReaderImpl.mesa Last changed by Michael Plass, January 25, 1983 10:45 am This gets called when the font file is first opened; its responsibility is to build a description of the font acceptable to Graphics. FontGraphicsClass interface FontFormattingClass interface Κ“˜Jšœ™Jšœ8™8IunitšΟk œL˜Ušœœ˜!Jšœ3˜:Jšœ˜Jšœ œ˜Kšœœœ˜šΟnœœ˜6Jšœ…™…JšœJ˜JJšœ ˜J˜—š žœœ œ-œœ˜XJšœK˜KJšœœ˜*Jšœœ˜+Jšœ*˜*Jšœ˜—š ž œœ œœœœ˜`JšœK˜KJšœœ˜*Jšœœ˜+JšœK˜KJšœ˜—š ž œœ œœœœ˜`JšœK˜KJšœœ˜*Jšœœ˜+Jšœ3˜3Jšœ˜—šΟb™šž œ œœœ ˜MJšœ*˜*Jšœ˜—š ž œ œœœœ˜UJšœ*˜*Jšœ˜—š ž œ œœœœ˜UJšœ*˜*Jšœ˜—š ž œ œœœœœ˜DJšœ,˜2Jšœ˜—šžœ œœ˜0JšœX˜XJšœœ˜*Jšœ)˜)Jšœ˜Jšœ˜Jšœ˜—šœœ#œ$˜^Jšœ˜Jšœ˜Jšœ˜Jšœ˜J˜——šŸž Ÿ™Kšœœ˜3Kšœœ˜Kš ž œ œœœœ%œ˜wš žœ œœœœ˜JJšœ*˜*J˜ Jšœ1˜1Jšœ˜—šžœ œœ œœœœ˜WJšœ˜ Jšœ˜—šžœ œœ˜2Jšœ-˜-Jšœ˜—šœœ'œ&˜fJšœ#˜#Jšœ˜Jšœ(˜(J˜——KšœF˜FKšœJ˜JKšœ˜—J˜—…— μ—