/* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks. Copyright (C) 2007-2016 by Jin-Hwan Cho and Shunsaku Hirata, the dvipdfmx project team. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifndef _TT_TABLE_H_ #define _TT_TABLE_H_ #include "tectonic_bridge_core.h" #include "dpx-sfnt.h" #define TT_HEAD_TABLE_SIZE 54UL #define TT_MAXP_TABLE_SIZE 32UL #define TT_HHEA_TABLE_SIZE 36UL #define TT_VHEA_TABLE_SIZE 36UL struct tt_head_table { Fixed version; Fixed fontRevision; ULONG checkSumAdjustment; ULONG magicNumber; USHORT flags; USHORT unitsPerEm; BYTE created[8]; BYTE modified[8]; FWord xMin, yMin, xMax, yMax; USHORT macStyle; USHORT lowestRecPPEM; SHORT fontDirectionHint; SHORT indexToLocFormat; SHORT glyphDataFormat; }; struct tt_hhea_table { Fixed version; FWord ascent; FWord descent; FWord lineGap; uFWord advanceWidthMax; FWord minLeftSideBearing; FWord minRightSideBearing; FWord xMaxExtent; SHORT caretSlopeRise; SHORT caretSlopeRun; FWord caretOffset; SHORT reserved[4]; /* set to 0 */ SHORT metricDataFormat; USHORT numOfLongHorMetrics; USHORT numOfExSideBearings; /* extra information */ }; struct tt_vhea_table { Fixed version; SHORT vertTypoAscender; /* v.1.1 name */ SHORT vertTypoDescender; /* v.1.1 name */ SHORT vertTypoLineGap; /* v.1.1 name */ SHORT advanceHeightMax; SHORT minTopSideBearing; SHORT minBottomSideBearing; SHORT yMaxExtent; SHORT caretSlopeRise; SHORT caretSlopeRun; SHORT caretOffset; SHORT reserved[4]; /* set to 0 */ SHORT metricDataFormat; USHORT numOfLongVerMetrics; USHORT numOfExSideBearings; /* extra information */ }; struct tt_maxp_table { Fixed version; USHORT numGlyphs; USHORT maxPoints; USHORT maxContours; USHORT maxComponentPoints; USHORT maxComponentContours; USHORT maxZones; USHORT maxTwilightPoints; USHORT maxStorage; USHORT maxFunctionDefs; USHORT maxInstructionDefs; USHORT maxStackElements; USHORT maxSizeOfInstructions; USHORT maxComponentElements; USHORT maxComponentDepth; }; struct tt_os2__table { USHORT version; /* 0x0001 or 0x0002 */ SHORT xAvgCharWidth; USHORT usWeightClass; USHORT usWidthClass; SHORT fsType; /* if (faType & 0x08) editable_embedding */ SHORT ySubscriptXSize; SHORT ySubscriptYSize; SHORT ySubscriptXOffset; SHORT ySubscriptYOffset; SHORT ySuperscriptXSize; SHORT ySuperscriptYSize; SHORT ySuperscriptXOffset; SHORT ySuperscriptYOffset; SHORT yStrikeoutSize; SHORT yStrikeoutPosition; SHORT sFamilyClass; BYTE panose[10]; ULONG ulUnicodeRange1; ULONG ulUnicodeRange2; ULONG ulUnicodeRange3; ULONG ulUnicodeRange4; CHAR achVendID[4]; USHORT fsSelection; USHORT usFirstCharIndex; USHORT usLastCharIndex; SHORT sTypoAscender; /* TTF spec. from MS is wrong */ SHORT sTypoDescender; /* TTF spec. from MS is wrong */ SHORT sTypoLineGap; /* TTF spec. from MS is wrong */ USHORT usWinAscent; USHORT usWinDescent; ULONG ulCodePageRange1; ULONG ulCodePageRange2; /* version 0x0002 */ SHORT sxHeight; SHORT sCapHeight; USHORT usDefaultChar; USHORT usBreakChar; USHORT usMaxContext; }; struct tt_vertOriginYMetrics { USHORT glyphIndex; SHORT vertOriginY; }; struct tt_VORG_table { SHORT defaultVertOriginY; USHORT numVertOriginYMetrics; struct tt_vertOriginYMetrics *vertOriginYMetrics; }; /* hmtx and vmtx */ struct tt_longMetrics { USHORT advance; SHORT sideBearing; }; /* head, hhea, maxp */ char *tt_pack_head_table (struct tt_head_table *table); struct tt_head_table *tt_read_head_table (sfnt *sfont); char *tt_pack_hhea_table (struct tt_hhea_table *table); struct tt_hhea_table *tt_read_hhea_table (sfnt *sfont); char *tt_pack_maxp_table (struct tt_maxp_table *table); struct tt_maxp_table *tt_read_maxp_table (sfnt *sfont); /* vhea */ struct tt_vhea_table *tt_read_vhea_table (sfnt *sfont); /* VORG */ struct tt_VORG_table *tt_read_VORG_table (sfnt *sfont); /* hmtx and vmtx */ struct tt_longMetrics *tt_read_longMetrics (sfnt *sfont, USHORT numGlyphs, USHORT numLongMetrics, USHORT numExSideBearings); /* OS/2 table */ struct tt_os2__table *tt_read_os2__table (sfnt *sfont); /* name table */ USHORT tt_get_ps_fontname (sfnt *sfont, char *dest, USHORT destlen); #endif /* _TT_TABLE_H_ */