DIRECTORY RealFns, Rope, UFTfmObject, UFTfmReader, UnifiedFonts; UFTfmObjectImpl: CEDAR PROGRAM IMPORTS RealFns, UFTfmReader EXPORTS UFTfmObject SHARES UnifiedFonts = BEGIN FillInMetricsObject: PUBLIC PROCEDURE [font: UnifiedFonts.FONT, key: UnifiedFonts.Key] = { [bc: font.bc, ec: font.ec] _ UFTfmReader.Range[key]; font.FontMetricProc _ FontMetricProc; font.CharMetricProc _ CharMetricProc; font.LigKernProc _ LigKernProc; font.ContainsProc _ ContainsProc; font.metricKey _ key; }; FontMetricProc: PROCEDURE [font: UnifiedFonts.FONT, fontMetricCode: UnifiedFonts.FontMetricCode] RETURNS [metric: REAL] = { Slant: PROC RETURNS [REAL] = {numerator, denominator: INT; [numerator, denominator] _ UFTfmReader.Slant[font.metricKey]; RETURN[RealFns.ArcTanDeg[numerator, denominator]]}; metric _ SELECT fontMetricCode FROM xHeight => font.transformation.scale*UFTfmReader.Parameter[font.metricKey, xHeight], slant => Slant[], underlineOffset => font.transformation.scale*UFTfmReader.Depth[font.metricKey, 'g], underlineThickness => 0.4, ENDCASE => 0.0; }; CharMetricProc: PROCEDURE [font: UnifiedFonts.FONT, characterMetricCode: UnifiedFonts.CharacterMetricCode, char: CHAR] RETURNS [metric: REAL] = { metric _ SELECT characterMetricCode FROM widthX => font.transformation.scale*UFTfmReader.Width[font.metricKey, char], widthY => 0.0, leftExtent => 0.0, rightExtent => font.transformation.scale*UFTfmReader.Width[font.metricKey, char], descent => font.transformation.scale*UFTfmReader.Depth[font.metricKey, char], ascent => font.transformation.scale*UFTfmReader.Height[font.metricKey, char], ENDCASE => 0.0; }; LigKernProc: PROCEDURE [font: UnifiedFonts.FONT, char1, char2: CHAR] RETURNS [UnifiedFonts.LigatureOrKern] = { RETURN[UFTfmReader.LigKern[font.metricKey, char1, char2]]; }; ContainsProc: PROCEDURE [font: UnifiedFonts.FONT, char: CHAR] RETURNS [BOOLEAN] = { RETURN[UFTfmReader.Contains[font.metricKey, char]]; }; END. TUFTfmObjectImpl.mesa Last changed by Michael Plass, January 18, 1983 4:12 pm Κν˜JšœΟc™Jš7™7JšΟk œ7˜@unitšœžœž˜Jšžœ˜Jšžœ ˜Jšžœ ˜Jšœž˜šΟnœžœž œžœ˜ZJšœ4˜4Jšœ%˜%Jšœ%˜%Jšœ˜Jšœ!˜!Jšœ˜Jšœ˜—š Ÿœž œžœ/žœ žœ˜{Jš Ÿœžœžœžœžœ@žœ-˜¬šœ žœž˜#JšœT˜TJšœ˜JšœS˜SJšœ˜Jšžœ˜—Jšœ˜—š Ÿœž œžœ?žœžœ žœ˜‘šœ žœž˜(JšœL˜LJšœ˜Jšœ˜JšœQ˜QJšœM˜MJšœM˜MJšžœ˜—Jšœ˜—š Ÿ œž œžœžœžœ"˜nJšžœ4˜:Jšœ˜—š Ÿ œž œžœžœžœžœ˜SJšžœ-˜3Jšœ˜—Kšžœ˜——…—„ Ε