DIRECTORY BasicTime USING [GMT], ImagerBox USING [Extents], ImagerFont USING [CorrectionType], ImagerTransformation USING [Transformation], ImagerTypeface USING [Typeface], IO USING [STREAM], Prop USING [PropList], RefTab USING [Ref], Rope USING [ROPE], Vector2 USING [VEC]; ImagerFDTypeface: CEDAR DEFINITIONS = BEGIN password: CARD32 = 19FD6A03H; -- the first four bytes of the file (big endian); low order byte is a version number. ROPE: TYPE = Rope.ROPE; VEC: TYPE = Vector2.VEC; Transformation: TYPE = ImagerTransformation.Transformation; Data: TYPE = REF DataRep; DataRep: TYPE = RECORD [ fontExtents: ImagerBox.Extents, commonLeftExtents: RealSeq, commonRightExtents: RealSeq, commonDescents: RealSeq, commonAscents: RealSeq, commonEscapements: RealSeq, charToDeviceTransformations: TransformationSeq, typefaceCellSeq: TypefaceCellSeq, placementTransformations: TransformationSeq, overflowCharInfoSeq: OverflowCharInfoSeq, charInfoRunSeq: CharInfoRunSeq, propList: Prop.PropList, transformationCache: RefTab.Ref, setTable: ARRAY CharSet OF CharRuns ¬ ALL[NIL] ]; RealCode: TYPE = BYTE; RealSeq: TYPE = REF RealSeqRep; RealSeqRep: TYPE = RECORD[SEQUENCE size: NAT OF REAL]; TransformationSeq: TYPE = REF TransformationSeqRep; TransformationSeqRep: TYPE = RECORD[SEQUENCE size: NAT OF Transformation]; CharSet: TYPE = BYTE; CharRuns: TYPE = REF CharRunsRep; -- non-overlapping runs, sorted by bc CharRunsRep: TYPE = RECORD [ link: CharRuns, -- self.link.bc > self.ec bc, ec: BYTE, s: SEQUENCE nt: NAT OF CharRunEntry -- indexed by easy Transformation code ]; CharRunEntry: TYPE = RECORD [ typefaceIndex: TypefaceIndex, charInfoRunIndex: CharInfoRunIndex ]; CharInfoRunIndex: TYPE = NAT; CharInfoRunSeq: TYPE = REF CharInfoRunSeqRep; CharInfoRunSeqRep: TYPE = RECORD [SEQUENCE size: NAT OF CharInfoRun]; CharInfoRun: TYPE = REF CharInfoRunRep; CharInfoRunRep: TYPE = RECORD [ xcCodeDelta: INT, -- Add to get translated code bits: AmplCorr, placementCode: CARDINAL, -- index into data.placementTransformations s: SEQUENCE size: NAT OF CharInfo ]; AmplCorr: TYPE = PACKED RECORD [ amplified: BOOL ¬ FALSE, correction: ImagerFont.CorrectionType ¬ mask ]; TypefaceIndex: TYPE = NAT; TypefaceCellSeq: TYPE = REF TypefaceCellSeqRep; TypefaceCellSeqRep: TYPE = RECORD [SEQUENCE size: NAT OF TypefaceCell]; TypefaceCell: TYPE = REF TypefaceCellRep; TypefaceCellRep: TYPE = RECORD [ fontName: ROPE, typeface: ImagerTypeface.Typeface ¬ NIL, createDate: BasicTime.GMT, -- for version checking against typeface.created type: ATOM -- for version checking against typeface.class.type ]; InfoRepTag: TYPE = MACHINE DEPENDENT {short(0), verbose(1), (255)}; CharInfo: TYPE = PACKED RECORD [ SELECT tag: InfoRepTag FROM short => [leftExtent, rightExtent, descent, ascent, escapementX, escapementY: RealCode], verbose => [overflowIndex: OverflowIndex], ENDCASE ]; OverflowIndex: TYPE = NAT; OverflowCharInfoSeq: TYPE = REF OverflowCharInfoSeqRep; OverflowCharInfoSeqRep: TYPE = RECORD [SEQUENCE size: NAT OF VerboseCharInfo]; VerboseCharInfo: TYPE = REF VerboseCharInfoRep; VerboseCharInfoRep: TYPE = RECORD [extents: ImagerBox.Extents, escapement: VEC, propList: Prop.PropList ¬ NIL]; FromStream: PROC [stream: IO.STREAM] RETURNS [Data]; FormatError: ERROR [diagnosis: ATOM, byteIndex: INT]; END. @ ImagerFDTypeface.mesa Copyright Σ 1989, 1991 by Xerox Corporation. All rights reserved. Michael Plass, June 14, 1989 11:57:47 am PDT NIL Transformation means resolution-independent for compact representation of Kanji and fixed-width portions, if size=1 and bc#ec, then the charinfo applies for the entire range Κ>•NewlineDelimiter –(cedarcode) style™codešœ™Kšœ Οeœ7™BK™,K™—šΟk ˜ Kšœ žœžœ˜Kšœ žœ ˜Kšœ žœ˜"Kšœžœ˜,Kšœžœ ˜ Kšžœžœžœ˜Kšœžœ ˜Kšœžœ˜Kšœžœžœ˜Kšœžœžœ˜—K˜KšΟnœžœž ˜#šœž˜K˜šœ žœΟf œΟcU˜sK˜—Kšžœžœžœ˜Kšžœžœ žœ˜šœžœ'˜;K˜—Kšœžœžœ ˜šœ žœžœ˜K˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜šœ/˜/Kšžœ,™/—Kšœ!˜!Kšœ,˜,Kšœ)˜)Kšœ˜Kšœ˜K˜ Kš œ žœ žœ žœžœ˜.šœ˜K˜——Kšœ žœžœ˜Kšœ žœžœ ˜š œ žœžœžœžœžœžœ˜6K˜—Kšœžœžœ˜3š œžœžœžœžœžœ˜JK˜—šœ žœžœ˜K˜—Kšœ žœžœ‘%˜Gšœ žœžœ˜Kšœ‘˜)Kšœžœ˜ Kšœžœžœžœ‘&˜JKšœ˜K˜—šœžœžœ˜Kšœ˜Kšœ"˜"˜K˜——Kšœžœžœ˜Kšœžœžœ˜-Kš œžœžœžœžœžœ˜EKšœ žœžœ˜'šœžœžœ˜Kšœ žœ‘˜/Kšœ˜Kšœžœ‘+˜Dšœžœžœžœ ˜!Kšœ™—Kšœ˜K˜—šœ žœžœžœ˜ Kšœ žœžœ˜Kšœ,˜,Kšœ˜K˜—Kšœžœžœ˜Kšœžœžœ˜/Kš œžœžœžœžœžœ˜GKšœžœžœ˜)šœžœžœ˜ Kšœ žœ˜Kšœ$žœ˜(Kšœžœ‘0˜KKšœžœ‘3˜>Kšœ˜K˜—Kšœ žœžœž œ˜Cšœ žœžœžœ˜ šžœž˜KšœX˜XKšœ*˜*Kšž˜—Kšœ˜K˜—Kšœžœžœ˜Kšœžœžœ˜7Kš œžœžœžœžœžœ˜NKšœžœžœ˜/Kš œžœžœ*žœžœ˜oK˜Kš Ÿ œžœ žœžœžœ˜4KšŸ œžœ žœ žœ˜5—K˜Kšžœ˜—…— δb