<<>> <> <> <> <> DIRECTORY Basics USING [UnsafeBlock], ImagerBox USING [Box], ImagerPath USING [CurveToProc, LineToProc, MoveToProc], ImagerTransformation USING [Transformation], IO USING [STREAM], Prop USING [PropList], RefTab USING [Ref], Rope USING [ROPE], Vector2 USING [VEC]; Type1Font: CEDAR DEFINITIONS ~ BEGIN ROPE: TYPE ~ Rope.ROPE; VEC: TYPE ~ Vector2.VEC; <> Key: TYPE ~ REF KeyRep; KeyRep: TYPE ~ RECORD [r: CARD16]; Decrypt1: PROC [key: Key, char: CHAR] RETURNS [CHAR]; Source: TYPE ~ REF SourceRep; SourceRep: TYPE ~ RECORD [ stream: IO.STREAM, -- input stream buffer: REF TEXT, cipher: {plain, binary, hex} ¬ plain, key: Key ¬ NIL, putBack: BOOL ¬ FALSE, putBackChar: CHAR ¬ 0C ]; GetChar: PROC [s: Source] RETURNS [CHAR]; PutBack: PROC [s: Source, c: CHAR]; TokenType: TYPE ~ {null, int, radix, real, string, name, special}; Token: TYPE ~ RECORD [type: TokenType, text: REF TEXT, literal: BOOL ¬ FALSE]; GetToken: PROC [s: Source] RETURNS [Token]; GetKeyword: PROC [s: Source] RETURNS [ATOM]; BeginEExec: PROC [s: Source]; <> CharString: TYPE ~ RECORD [data: REF, getBlock: PROC [REF] RETURNS [Basics.UnsafeBlock]]; <<>> BlockFromCharString: PROC [cs: CharString] RETURNS [Basics.UnsafeBlock] ~ INLINE { RETURN cs.getBlock[cs.data] }; <<>> Cmd1: TYPE ~ MACHINE DEPENDENT { hstem(1), vstem(3), vmoveto(4), rlineto(5), hlineto(6), vlineto(7), rrcurveto(8), closepath(9), callsubr(10), return(11), escape(12), hsbw(13), endchar(14), rmoveto(21), hmoveto(22), vhcurveto(30), hvcurveto(31) }; Cmd2: TYPE ~ MACHINE DEPENDENT { dotsection(0), vstem3(1), hstem3(2), seac(6), sbw(7), div(12), callothersubr(16), pop(17), setcurrentpoint(33), (255) }; DecodeCharString: PROC [block: Basics.UnsafeBlock, lenIV: NAT, int: PROC [INT], cmd1: PROC [Cmd1], cmd2: PROC [Cmd2]]; <> EncodingArray: TYPE ~ REF EncodingArrayRep; EncodingArrayRep: TYPE ~ ARRAY CHAR OF ATOM; theStandardEncoding: READONLY EncodingArray; RealArray: TYPE ~ REF RealArrayRep; RealArrayRep: TYPE ~ RECORD [PACKED SEQUENCE length: NAT OF REAL]; Metrics2Dict: TYPE ~ RefTab.Ref; -- TABLE ATOM OF Metrics2Entry Metrics2Entry: TYPE ~ REF Metrics2EntryRep; Metrics2EntryRep: TYPE ~ RECORD [w, v: VEC]; -- c.f. section 5.6.2 of redbook <<>> Type1Data: TYPE ~ REF Type1DataRep; Type1DataRep: TYPE ~ RECORD [ data: REF ¬, CharStringsLength: PROC [self: Type1Data] RETURNS [NAT] ¬, CharStringsForAll: PROC [self: Type1Data, action: PROC [ATOM, CharString]] ¬, CharStringsKnown: PROC [self: Type1Data, name: ATOM] RETURNS [BOOL] ¬, CharStringsGet: PROC [self: Type1Data, name: ATOM] RETURNS [CharString] ¬, SubrsGet: PROC [self: Type1Data, n: NAT] RETURNS [CharString] ¬, FontName: ATOM ¬ NIL, version: ROPE ¬ NIL, Notice: ROPE ¬ NIL, FullName: ROPE ¬ NIL, FamilyName: ROPE ¬ NIL, Weight: ROPE ¬ NIL, ItalicAngle: REAL ¬ 0, isFixedPitch: BOOL ¬ FALSE, UnderlinePosition: REAL ¬ 0, UnderlineThickness: REAL ¬ 0, Encoding: EncodingArray ¬ NIL, FontMatrix: ImagerTransformation.Transformation ¬ NIL, FontBBox: ImagerBox.Box ¬ [0, 0, 0, 0], WeightVector: RealArray ¬ NIL, PaintType: INT ¬ 0, FontType: INT ¬ 0, UniqueID: INT ¬ 0, StrokeWidth: REAL ¬ 0, Metrics2: Metrics2Dict ¬ NIL, BlueValues: RealArray ¬ NIL, OtherBlues: RealArray ¬ NIL, FamilyBlues: RealArray ¬ NIL, FamilyOtherBlues: RealArray ¬ NIL, BlueScale: REAL ¬ defaultBlueScale, BlueShift: REAL ¬ defaultBlueShift, BlueFuzz: REAL ¬ defaultBlueFuzz, StdHW: REAL ¬ 0, StdVW: REAL ¬ 0, StemSnapH: RealArray ¬ NIL, StemSnapV: RealArray ¬ NIL, ForceBold: BOOL ¬ FALSE, LanguageGroup: INT ¬ 0, password: INT ¬ 0, lenIV: INT ¬ defaultLenIV, RndStemUp: BOOL ¬ FALSE, propList: Prop.PropList ¬ NIL ]; defaultBlueScale: REAL ~ 0.039625; defaultBlueShift: REAL ~ 7.0; defaultBlueFuzz: REAL ~ 1.0; defaultLenIV: INT ~ 4; <<>> InvalidFont: ERROR; ParseFont: PROC [IO.STREAM] RETURNS [Type1Data]; <> MoveToProc: TYPE ~ ImagerPath.MoveToProc; LineToProc: TYPE ~ ImagerPath.LineToProc; CurveToProc: TYPE ~ ImagerPath.CurveToProc; FlexArray: TYPE ~ ARRAY [0..7) OF VEC; FlexProc: TYPE ~ PROC [f: FlexArray, min: REAL]; <> <> <> <> <> <> <> <> <> CloseProc: TYPE ~ PROC; HStemProc: TYPE ~ PROC [y, dy: REAL]; HStem3Proc: TYPE ~ PROC [y0, dy0, y1, dy1, y2, dy2: REAL]; VStemProc: TYPE ~ PROC [x, dx: REAL]; VStem3Proc: TYPE ~ PROC [x0, dx0, x1, dx1, x2, dx2: REAL]; DiscardProc: TYPE ~ PROC; CharInfo: TYPE ~ RECORD [sb, w: VEC]; -- sidebearing and width ExecuteChar: PROC [self: Type1Data, name: ATOM, moveTo: MoveToProc, lineTo: LineToProc, curveTo: CurveToProc, flex: FlexProc ¬ NIL, close: CloseProc ¬ NIL, hstem: HStemProc ¬ NIL, hstem3: HStem3Proc ¬ NIL, vstem: VStemProc ¬ NIL, vstem3: VStem3Proc ¬ NIL, discard: DiscardProc ¬ NIL, origin: VEC ¬ [0, 0]] RETURNS [CharInfo]; <> END.