True Type fonts(ttf.rfh):
Class: Font file, Status: Almost Complete, Last change: 08.03.2008 18:03:30
set byteorder rev
type
ushort num+(2)
short num-(2):displ=(@,'s')
/*
fixed struc //32-bit signed fixed-point number (16.16)
int V
word frac
ends
*/
fixed num+(4)
DWORD num+(4)
FUnit num-(2)
FWORD short //in FUnits
UFWORD ushort //in FUnits
F2DOT14 short //16-bit signed fixed number with the low 14 bits of fraction (2.14).
include op_ttf.rfi
type
TDirTag array[4] of char
TTTFtable(hDir,Len) forward
PTTFtable(hDir,Len) ^TTTFTable(@:hDir,@:Len) near=DWORD //can't pass address yet
//and symbolic names are more convenient here
TTblDirEntry struc
TDirTag tag //4 -byte identifier.
DWORD checkSum// CheckSum for this table.
PTTFtable(hDir=@:#) data //Offset from beginning of TrueType font file.
DWORD length //Length of this table.
ends:[@.data:Len=@.length]
TTblDirectory(Cnt) array[@:Cnt] of TTblDirEntry
autoname
TTblDirEntry .tag de_
type
THdr struc
Fixed sfnt_version //0x00010000 for version 1.0.
USHORT numTables //Number of tables.
USHORT searchRange //(Maximum power of 2 ã numTables) x 16.
USHORT entrySelector //Log2(maximum power of 2 ã numTables).
USHORT rangeShift //NumTables x 16-searchRange.
TTblDirectory(@.numTables) Dir
ends
data
0 THdr Hdr
type
//cmap - sintacter To Glyph Index Mapping Table
TPlatformId enum USHORT (
//ID Platform Specific encoding
pltf_Apple=0, //Apple Unicode none
pltf_Mac=1, //Macintosh Script manager code
pltf_ISO=2, //ISO encoding
pltf_Win=3 //Microsoft Microsoft encoding
)
TWinEncodingId enum USHORT (
Symbol=0,
Unicode=1,
ShiftJIS=2,
Big5=3,
PRC=4,
Wansung=5,
Johab=6
)
TUShortTbl(Sz) array of ushort:[@:Size=@:Sz]
TCToGFmt4Dat(Sz) struc
USHORT segCountX2 //2 x segCount.
USHORT searchRange //2 x (2**floor(log2(segCount)))
USHORT entrySelector //log2(searchRange/2)
USHORT rangeShift //2 x segCount - searchRange
TUShortTbl(@.segCountX2) endCount //End characterCode for each segment,last =0xFFFF.
USHORT reservedPad //Set to 0.
TUShortTbl(@.segCountX2) startCount //Start character code for each segment.
TUShortTbl(@.segCountX2) idDelta //Delta for all character codes in segment.
TUShortTbl(@.segCountX2) idRangeOffset //Offsets into glyphIdArray or 0
TUShortTbl glyphIdArray //Glyph index array (arbitrary length)
ends:[@:Size=@:Sz]
PCToGSubTable(Base) ^TCToGSubTable near=DWORD,ref=@:Base+@;
TCToGSubTable struc
USHORT format
USHORT length //length in bytes of the subtable.
USHORT version //Version number (starts at 0).
case @.format of
0: array[256] of Byte //an array that maps character codes
//to glyph index values. (Apple)
//2: Chinese format - skipped
4: TCToGFmt4Dat(@@.Length-6) //Segment mapping to delta values (Microsoft)
endc FmtDat
raw[] rest
ends:[@:Size=@.length]
TCToGTblRec(Base) struc
TPlatformId Platf //Platform ID.
TWinEncodingId Encod //Platform-specific encoding ID.
PCToGSubTable(@:Base) Data //Byte offset from beginning of table
//to the subtable for this encoding.
//can't describe the table itself 'cause data blocks are not implemented
ends
TCToGTbl(n,Base) array[@:n] of TCToGTblRec(@:Base)
//Dirty trick to overcome absence of Block data type
TSecEnd(Pos) ^void near=void,ref=@:Pos;
TCToGMap(Len) struc
USHORT ver //Table version number (0).
USHORT n //Number of encoding tables, n.
TCToGTbl(@.n,&@) Tbl
TSecEnd(&@+@:Len) End
//raw[] rest
ends//:[@:Size=@:Len]
//cvt - List of n values referenceable by instructions.
TCvt(Sz) array of FWORD:[@:Size=@:Sz]
//EBDT - Embedded Bitmap Data Table
TEmbedBitmapDataTbl(Len) struc
FIXED ver //Initially defined as 0x00020000
raw[] rest
ends:[@:Size=@:Len]
//EBLC - Embedded Bitmap Location Table
TsbitLineMetrics struc
sint ascender
sint descender
BYTE widthMax
sint caretSlopeNumerator
sint caretSlopeDenominator
sint caretOffset
sint minOriginSB
sint minAdvanceSB
sint maxBeforeBL
sint minAfterBL
sint pad1
sint pad2
ends
TBitmapSizeTable struc
DWORD indexSubTableArrayOffset //offset to index subtable from beginning of EBLC.
DWORD indexTablesSize //number of bytes in corresponding index subtables and array
DWORD numberOfIndexSubTables //an index subtable for each range or format change
DWORD colorRef //not used; set to 0.
TsbitLineMetrics hori //line metrics for text rendered horizontally
TsbitLineMetrics vert //line metrics for text rendered vertically
USHORT startGlyphIndex //lowest glyph index for this size
USHORT endGlyphIndex //highest glyph index for this size
BYTE ppemX //horizontal pixels per Em
BYTE ppemY //vertical pixels per Em
BYTE bitDepth // set to 1 for now
byte flags //vertical or horizontal (see bitmapFlags)
ends
TBitmapSizeTableArray(n) array[@:n] of TBitmapSizeTable
TEmbedBitmapLoc(Len) struc
FIXED ver //initially defined as 0x00020000
DWORD numSizes //Number of bitmapSizeTables
TBitmapSizeTableArray(@.numSizes) SzTbl
raw[] rest
ends:[@:Size=@:Len]
/*** head - Font Header ***/
longDateTime array[8] of Byte
TFontHeader(Len) struc
FIXED ver //Table version number 0x00010000 for version 1.0.
FIXED fontRevision //Set by font manufacturer.
DWORD checkSumAdjustment //To compute: set it to 0,
//sum the entire font as DWORD, then store 0xB1B0AFBA - sum.
DWORD magicNumber //Set to 0x5F0F3CF5.
USHORT flags //Bit 0 - baseline for font at y=0;
//Bit 1 - left sidebearing at x=0;
//Bit 2 - instructions may depend on point size;
//Bit 3 - force ppem to integer values for all internal scaler
//math; may use fractional ppem sizes if this bit is clear;
//Bit 4 - instructions may alter advance width (the advance
//widths might not scale linearly);Note: All other bits must be zero.
USHORT unitsPerEm //Valid range is from 16 to 16384
longDateTime created //International date (8-byte field).
longDateTime modified //International date (8-byte field).
FWORD xMin //For all glyph bounding boxes.
FWORD yMin //For all glyph bounding boxes.
FWORD xMax //For all glyph bounding boxes.
FWORD yMax //For all glyph bounding boxes.
USHORT macStyle //Bit 0 bold (if set to 1);
//Bit 1 italic (if set to 1) ; Bits 2-15 reserved (set to 0).
USHORT lowestRecPPEM //Smallest readable size in pixels.
SHORT fontDirectionHint //0 Fully mixed directional glyphs;
//1 Only strongly left to right;
//2 Like 1 but also contains neutrals ;
//-1 Only strongly right to left;
//-2 Like -1 but also contains neutrals.
SHORT indexToLocFormat //0 for short offsets, 1 for long.
SHORT glyphDataFormat //0 for current format.
raw[] rest
ends:[@:Size=@:Len]
/*** hhea - Horizontal Header ***/
THorHeader(Len) struc
FIXED ver //0x00010000 for version 1.0.
FWORD Ascender //Typographic ascent.
FWORD Descender //Typographic descent.
FWORD LineGap //Typographic line gap. Negative LineGap values are
//treated as zero in Windows 3.1, System 6, and System 7.
UFWORD advanceWidthMax //Maximum advance width value in ÑhmtxÒ table.
FWORD minLeftSideBearing //Minimum left sidebearing value in ÑhmtxÒ table.
FWORD minRightSideBearing //Minimum right sidebearing value;
//calculated as Min(aw - lsb - (xMax - xMin)).
FWORD xMaxExtent //Max(lsb + (xMax - xMin)).
SHORT caretSlopeRise //Used to calculate the slope of the cursor
//(rise/run); 1 for vertical.
SHORT caretSlopeRun //0 for vertical.
array[5] of SHORT reserved //set to 0
SHORT metricDataFormat //0 for current format.
USHORT numberOfHMetrics //Number of hMetric entries in
//ÑhmtxÒ table; may be smaller than the total number of
//glyphs in the font.
raw[] rest
ends:[@:Size=@:Len]
/*** OS/2 - OS/2 and Windows Metrics ***/
include TTFPANOSE.rfi
TPANOSE struc
TPANOSEFamilyKind bFamilyType
TPANOSESerifStyle bSerifStyle
TPANOSEWeight bWeight
TPANOSEProportion bProportion
TPANOSEContrast bContrast
TPANOSEStrokeVariation bStrokeVariation
TPANOSEArmStyle bArmStyle
TPANOSELetterform bLetterform
TPANOSEMidline bMidline
TPANOSEXHeight bXHeight
ends
TOS2Metrics(Len) struc
USHORT version
SHORT xAvgCharWidth
USHORT usWeightClass
USHORT usWidthClass
SHORT fsType
SHORT ySubscriptXSize
SHORT ySubscriptYSize
SHORT ySubscriptXOffset
SHORT ySubscriptYOffset
SHORT ySuperscriptXSize
SHORT ySuperscriptYSize
SHORT ySuperscriptXOffset
SHORT ySuperscriptYOffset
SHORT yStrikeoutSize
SHORT yStrikeoutPosition
SHORT sFamilyClass
TPANOSE panose
DWORD ulUnicodeRange1
DWORD ulUnicodeRange2
DWORD ulUnicodeRange3
DWORD ulUnicodeRange4
array[4] of CHAR achVendID
USHORT fsSelection
USHORT usFirstCharIndex
USHORT usLastCharIndex
USHORT sTypoAscender
USHORT sTypoDescender
USHORT sTypoLineGap
USHORT usWinAscent
USHORT usWinDescent
DWORD ulCodePageRange1
DWORD ulCodePageRange2
raw[] rest
ends:[@:Size=@:Len]
/*** PCLT - PCL 5 Table ***/
TPCL5Table(Len) struc
FIXED Version
DWORD FontNumber
USHORT Pitch
USHORT xHeight
USHORT Style
USHORT TypeFamily
USHORT CapHeight
USHORT SymbolSet
array[16]of CHAR,0; Typeface
array[8]of Byte CharacterComplement
array[6]of CHAR FileName
sint StrokeWeight
sint WidthType
BYTE SerifStyle
BYTE Reserved //(pad)
raw[] rest
ends:[@:Size=@:Len]
/*** hdmx - Horizontal Device Metrics ***/
THorDevMetrix(Len) forward
/*** maxp - Maximum Profile ***/
TMaximumProfile(Len) struc
Fixed Ver //Table version number 0x00010000 for version 1.0.
USHORT numGlyphs //The number of glyphs in the font.
USHORT maxPoints //Maximum points in a non-composite glyph.
USHORT maxContours //Maximum contours in a non-composite glyph.
USHORT maxCompositePoints //Maximum points in a composite glyph.
USHORT maxCompositeContours //Maximum contours in a composite glyph.
USHORT maxZones //1 if instructions do not use the twilight zone (Z0), or 2 if instructions do use Z0; should be set to 2 in most cases.
USHORT maxTwilightPoints //Maximum points used in Z0.
USHORT maxStorage //Number of Storage Area locations.
USHORT maxFunctionDefs //Number of FDEFs.
USHORT maxInstructionDefs //Number of IDEFs.
USHORT maxStackElements //Maximum stack depth .
USHORT maxSizeOfInstructions //Maximum byte count for glyph instructions.
USHORT maxComponentElements //Maximum number of components referenced at "top level" for any composite glyph.
USHORT maxComponentDepth //Maximum levels of recursion; 1 for simple components.
raw[] rest
ends:[@:Size=@:Len]
/*** name - Naming Table ***/
TNameID enum USHORT (
Copyright=0,
FontFamily=1,
FontSubfamily=2,
font_id=3,
FullFontName=4,
Version=5, //In n.nn format.
PostscriptName=6,
Trademark=7
)
TNaming(Len,PlatformId) case @:PlatformId of
TPlatformId.pltf_Win,TPlatformId.pltf_Apple: array of wcharr
else array of char
endc:[@:Size=@:Len]
PNaming(Len,PlatformId,Base) ^TNaming(@:Len,@:PlatformId) HIDEREF NIL- near=USHORT,
REF=@+@:Base;:displ=(@^,'{',@,'}')
TNameRec(Base) struc
TPlatformId PlatformId
TWinEncodingId Encod //Platform-specific encoding ID.
USHORT LanguageID
TNameID NameID
USHORT Len //String length (in bytes).
PNaming(@.Len,@.PlatformId,@:Base) Ofs //String offset from start of storage area (in bytes).
ends
TNamingTable (Len) struc
USHORT Fmt //Format selector (=0).
USHORT Cnt //Number of NameRecords that follow n.
USHORT Ofs //Offset to start of string storage (from start of table).
array[@.Cnt]of TNameRec(&@@+@@.Ofs) NameTbl
raw[] rest
ends:[@:Size=@:Len]
/*** post - PostScript ***/
TPostScriptInf(Len) forward
/*** hmtx - Horizontal Metrics ***/
TLongHorMetric struc
uFWord av //advanceWidth
FWord lsb //left side bearing
ends
THorMetrics(Len) forward
/*** VDMX - Vertical Device Metrics ***/
TVertRatio struc
BYTE bCharSet /* Character set */
BYTE xRatio /* Value to use for x-Ratio */
BYTE yStartRatio /* Starting y-Ratio value */
BYTE yEndRatio /* Ending y-ratio value */
ends
TVdmxEntry struc
USHORT yPelHeight /* yPelHeight to which values apply */
SHORT yMax /* yMax (in pels) for this yPelHeight */
SHORT yMin /* yMin (in pels) for this yPelHeight */
ends
PVdmxGroup(base) ^TVdmxGroup near=USHORT, REF=@:base+@;
TVdmxGroup struc
USHORT recs //Number of height records in this group
BYTE startsz //Starting yPelHeight
BYTE endsz //Ending yPelHeight
array[@.recs]of TVdmxEntry entry // The VDMX records
ends
TVertMetrix(Len) struc
USHORT ver //Version number (starts at 0).
USHORT numRecs //Number of VDMX groups present
USHORT numRatios //Number of aspect ratio groupings
array[@.numRatios]of TVertRatio ratRange //Ratio ranges (see below for more info)
array[@.numRatios]of PVdmxGroup(&@@) offset //Offset from start of this table to the VDMX group for this ratio range.
//Vdmx groups The actual VDMX groupings (documented below)
//raw[] rest
ends//:[@:Size=@:Len]
/*** loca - Index to Location ***/
TLocationTbl(Len) forward
/*** gasp - Grid-fitting And Scan-conversion Procedure ***/
TGaspBehavior set 16 of (
GASP_GRIDFIT ^ 0x0001, //medium sizes, typically 9<=ppem<=16
GASP_DOGRAY ^ 0x0002 //small sizes, typically ppem<9
)
TGASPRANGE struc
USHORT MaxPPEM //Upper limit of range, in PPEM
TGaspBehavior F //Flags describing desired rasterizer behavior.
ends
TGASPTable(Len) struc
USHORT ver //Version number (set to 0)
USHORT numRanges //Number of records to follow
array[@.numRanges]of TGASPRANGE gaspRange //Sorted by ppem
raw[] rest
ends:[@:Size=@:Len]
//********************************//
TTTFTable(hDir,Len) case Hdr.Dir[@:hDir].Tag of
'cmap': TCToGMap(@:Len) //character to glyph mapping
'cvt ': TCvt(@:Len) //Control Value Table
'EBDT': TEmbedBitmapDataTbl(@:Len) //Embedded bitmap data
'EBLC': TEmbedBitmapLoc(@:Len) //Embedded bitmap location data
'head': TFontHeader(@:Len) //font header
'hhea': THorHeader(@:Len) //horizontal header
'hdmx': THorDevMetrix(@:Len) //Horizontal Device Metrics
'VDMX': TVertMetrix(@:Len) //Vertical Device Metrics
'OS/2': TOS2Metrics(@:Len) //OS/2 and Windows Metrics
'PCLT': TPCL5Table(@:Len) //PCL 5 Table
'maxp': TMaximumProfile(@:Len) //Maximum Profile
'name': TNamingTable(@:Len) //Naming Table
'post': TPostScriptInf(@:Len) //PostScript
'hmtx': THorMetrics(@:Len) //Horizontal Metrics
'glyf': void //Glyph data start
'loca': TLocationTbl(@:Len) //Index to Location
'gasp': TGASPTable(@:Len) //Grid-fitting And Scan-conversion Procedure
'fpgm': TTTFInstructions(@:Len)
'prep': TTTFInstructions(@:Len)
else raw[@:Len]
endc
/*** hmtx - Horizontal Metrics ***/
THorMetrics(Len) struc
array[Hdr.Dir[?@.tag='hhea'].data^.'hhea'.numberOfHMetrics exc 0]of TLongHorMetric hMetrics
array[(Hdr.Dir[?@.tag='maxp'].data^.'maxp'.numGlyphs-
Hdr.Dir[?@.tag='hhea'].data^.'hhea'.numberOfHMetrics)exc 0]of FWord leftSideBearing
raw[] rest
ends:[@:Size=@:Len]
/*** loca - Index to Location ***/
TGlyphCoordF set 8 of (
/* OnCurve=0,
xShort=1,
yShort=2,
Repeat=3,
ThisXIsSame=4,
ThisYIsSame=5 */
OnCrv=0,
xSh=1,
ySh=2,
Rpt=3,
XSame=4,
YSame=5
)
TGlyphCoordFlag struc
TGlyphCoordF F
case @.F and TGlyphCoordF.Rpt of
0: void
else Byte
endc Rep
ends
TGlyphCoordFlags(Cnt) array[@:Cnt] of TGlyphCoordFlag TAKES (@.Rep.1 exc 0)+1;
TGlyphXCoords(Cnt) forward
TGlyphYCoords(Cnt) forward
TSimpleGlyph(numberOfContours) struc
array[@:numberOfContours] of USHORT endPtsOfContours
USHORT instructionLength
TTTFInstructions(@.instructionLength) instructions
TGlyphCoordFlags(@.endPtsOfContours[@:numberOfContours-1]+1) Flags
TGlyphXCoords(@.endPtsOfContours[@:numberOfContours-1]+1) xCoords
TGlyphYCoords(@.endPtsOfContours[@:numberOfContours-1]+1) yCoords
ends
TV1P num+(1): displ=(INT(@),'n')
TV1N num+(1): displ=('-',INT(@),'p')
TGlyphXCoord case ((@:@ as TGlyphXCoords):@ as TSimpleGlyph).Flags[@:#].F and
(TGlyphCoordF.xSh or TGlyphCoordF.XSame) of
TGlyphCoordF.xSh: TV1N
TGlyphCoordF.xSh or TGlyphCoordF.XSame: TV1P
TGlyphCoordF.XSame: void
0: SHORT
endc
TGlyphXCoords(Cnt) array[@:Cnt] of TGlyphXCoord
TGlyphYCoord case ((@:@ as TGlyphYCoords):@ as TSimpleGlyph).Flags[@:#].F and
(TGlyphCoordF.ySh or TGlyphCoordF.YSame) of
TGlyphCoordF.ySh: TV1N
TGlyphCoordF.ySh or TGlyphCoordF.YSame: TV1P
TGlyphCoordF.ySame: void
0: SHORT
endc
TGlyphYCoords(Cnt) array[@:Cnt] of TGlyphYCoord
TCompositeGlyphFlags set 16 of (
ARG_1_AND_2_ARE_WORDS=0,
ARGS_ARE_XY_VALUES=1,
ROUND_XY_TO_GRID=2,
WE_HAVE_A_SCALE=3,
RESERVED=4,
MORE_COMPONENTS=5,
WE_HAVE_AN_X_AND_Y_SCALE=6,
WE_HAVE_A_TWO_BY_TWO=7,
WE_HAVE_INSTRUCTIONS=8,
USE_MY_METRICS=9
)
TCompositeGlyph struc
TCompositeGlyphFlags flags
USHORT glyphIndex
case @.flags and TCompositeGlyphFlags.ARG_1_AND_2_ARE_WORDS of
0: array[2]of Byte
else array[2]of Short
endc args
case @.flags and TCompositeGlyphFlags.WE_HAVE_A_SCALE of
0: case @@.flags and TCompositeGlyphFlags.WE_HAVE_AN_X_AND_Y_SCALE of
0: case @@@.flags and TCompositeGlyphFlags.WE_HAVE_A_TWO_BY_TWO of
0: void
else struc
F2Dot14 x
F2Dot14 s01
F2Dot14 s10
F2Dot14 y
ends
endc
else struc
F2Dot14 x
F2Dot14 y
ends
endc
else F2DOT14
endc Scale
ends
TCompositeGlyphTbl array of TCompositeGlyph ?@.flags and TCompositeGlyphFlags.MORE_COMPONENTS=0;
TCompositeGlyphRec struc
TCompositeGlyphTbl Tbl
case (&(@.Tbl[?(@.flags and TCompositeGlyphFlags.WE_HAVE_INSTRUCTIONS<>0)]))exc 0 of
0: void
else struc
USHORT numInstr
TTTFInstructions(@.numInstr) instr
ends
endc Instr
ends
TGlyphData(Sz) struc
SHORT numberOfContours
FWORD xMin
FWORD yMin
FWORD xMax
FWORD yMax
case @.numberOfContours of
-1: TCompositeGlyphRec
else TSimpleGlyph(@@.numberOfContours)
endc D
raw[] rest
ends:[@:Size=@:Sz]
PSGlyphData forward
PLGlyphData forward
TSGlyphTbl array[(Hdr.Dir[?@.tag='maxp'].data^.'maxp'.numGlyphs+1)exc 0]of PSGlyphData
TLGlyphTbl array[(Hdr.Dir[?@.tag='maxp'].data^.'maxp'.numGlyphs+1)exc 0]of PLGlyphData
PSGlyphData ^TGlyphData(2*((@:@ as TSGlyphTbl)[@:#+1]-@)exc 0) NIL:(((@:@ as TSGlyphTbl)[@:#+1]-@)exc 0)=0 near=USHORT, REF=Hdr.Dir[?@.tag='glyf'].data+2*@;
PLGlyphData ^TGlyphData(((@:@ as TLGlyphTbl)[@:#+1]-@)exc 0) NIL:(((@:@ as TLGlyphTbl)[@:#+1]-@)exc 0)=0 near=DWORD, REF=Hdr.Dir[?@.tag='glyf'].data+@;
TLocationTbl(Len) struc
case Hdr.Dir[?@.tag='head'].data^.'head'.indexToLocFormat exc -1 of
// 0: array[(Hdr.Dir[?@.tag='maxp'].data^.'maxp'.numGlyphs+1)exc 0]of PSGlyphData
// 1: array[(Hdr.Dir[?@.tag='maxp'].data^.'maxp'.numGlyphs+1)exc 0]of PLGlyphData
0: TSGlyphTbl
1: TLGlyphTbl
endc offsets
raw[] rest
ends:[@:Size=@:Len]
/*** hdmx - Horizontal Device Metrics ***/
TDeviceMetrixRecord(Sz) struc
BYTE pixSz //Pixel size for following widths (as ppem).
BYTE MaxW //Maximum width.
array[Hdr.Dir[?@.tag='maxp'].data^.'maxp'.numGlyphs] of BYTE Widths
ends:[@:Size=@:Sz]
THorDevMetrix(Len) struc
USHORT Ver //Table version number (starts at 0)
SHORT Cnt //Number of device records.
DWORD RecSz //Size of a device record, long aligned.
array[@.Cnt]of TDeviceMetrixRecord(@@.RecSz) Recs //Records[number of device records].
raw[] rest
ends:[@:Size=@:Len]
/*** post - PostScript ***/
include ttf_glfn.rfi
type
TGlyphID TMacGlyphID()
TGlyphIDTbl(Cnt) array[@:Cnt]of TGlyphID
TPostScriptInfWin(Len) struc
USHORT Num
TGlyphIDTbl(@.Num) glyphNameIndex
array of str GlyphNames
ends:[@:Size=@:Len]
TGlyphID enum TGlyphID = ((@:@ as TGlyphIDTbl):@ as TPostScriptInfWin).
GlyphNames[@-0x102];
TPostScriptInf(Len) struc
FIXED Format
FIXED italicAngle
FWORD underlinePosition
FWORD underlineThickness
ULONG isFixedPitch
ULONG minMemType42
ULONG maxMemType42
ULONG minMemType1
ULONG maxMemType1
case @.Format of
0x20000: TPostScriptInfWin(@@:Len-0x20)
0x20005: array[Hdr.Dir[?@.tag='maxp'].data^.'maxp'.numGlyphs]of Byte
endc Dat
raw[] rest
ends:[@:Size=@:Len]
Other specifications.
FlexT home page,
Author`s home page.