xref: /plan9/sys/src/cmd/gs/src/gxttf.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
13ff48bf5SDavid du Colombier /* Copyright (C) 2000 Aladdin Enterprises.  All rights reserved.
23ff48bf5SDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
53ff48bf5SDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
93ff48bf5SDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
153ff48bf5SDavid du Colombier */
163ff48bf5SDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: gxttf.h,v 1.6 2002/06/28 05:27:22 lpd Exp $ */
183ff48bf5SDavid du Colombier /* Table definitions for TrueType fonts */
193ff48bf5SDavid du Colombier 
203ff48bf5SDavid du Colombier #ifndef gxttf_INCLUDED
213ff48bf5SDavid du Colombier #  define gxttf_INCLUDED
223ff48bf5SDavid du Colombier 
23*593dc095SDavid du Colombier /* ------ Composite glyf component flags ------ */
24*593dc095SDavid du Colombier 
25*593dc095SDavid du Colombier #define TT_CG_ARGS_ARE_WORDS     (1<<0)
26*593dc095SDavid du Colombier #define TT_CG_ARGS_ARE_XY_VALUES (1<<1)
27*593dc095SDavid du Colombier #define TT_CG_ROUND_XY_TO_GRID   (1<<2)
28*593dc095SDavid du Colombier #define TT_CG_HAVE_SCALE         (1<<3)
29*593dc095SDavid du Colombier #define TT_CG_MORE_COMPONENTS    (1<<5)
30*593dc095SDavid du Colombier #define TT_CG_HAVE_XY_SCALE      (1<<6)
31*593dc095SDavid du Colombier #define TT_CG_HAVE_2X2           (1<<7)
32*593dc095SDavid du Colombier #define TT_CG_HAVE_INSTRUCTIONS  (1<<8)
33*593dc095SDavid du Colombier #define TT_CG_USE_MY_METRICS     (1<<9)
34*593dc095SDavid du Colombier 
353ff48bf5SDavid du Colombier /* ------ head ------ */
363ff48bf5SDavid du Colombier 
373ff48bf5SDavid du Colombier typedef struct ttf_head_s {
383ff48bf5SDavid du Colombier     byte
393ff48bf5SDavid du Colombier 	version[4],		/* version 1.0 */
403ff48bf5SDavid du Colombier 	fontRevision[4],
413ff48bf5SDavid du Colombier 	checkSumAdjustment[4],
423ff48bf5SDavid du Colombier 	magicNumber[4],
433ff48bf5SDavid du Colombier 	flags[2],
443ff48bf5SDavid du Colombier 	unitsPerEm[2],
453ff48bf5SDavid du Colombier 	created[8],
463ff48bf5SDavid du Colombier 	modified[8],
473ff48bf5SDavid du Colombier 	xMin[2],
483ff48bf5SDavid du Colombier 	yMin[2],
493ff48bf5SDavid du Colombier 	xMax[2],
503ff48bf5SDavid du Colombier 	yMax[2],
513ff48bf5SDavid du Colombier 	macStyle[2],
523ff48bf5SDavid du Colombier 	lowestRecPPM[2],
533ff48bf5SDavid du Colombier 	fontDirectionHint[2],
543ff48bf5SDavid du Colombier 	indexToLocFormat[2],
553ff48bf5SDavid du Colombier 	glyphDataFormat[2];
563ff48bf5SDavid du Colombier } ttf_head_t;
573ff48bf5SDavid du Colombier 
583ff48bf5SDavid du Colombier /* ------ hhea ------ */
593ff48bf5SDavid du Colombier 
603ff48bf5SDavid du Colombier typedef struct ttf_hhea_s {
613ff48bf5SDavid du Colombier     byte
623ff48bf5SDavid du Colombier 	version[4],		/* version 1.0 */
633ff48bf5SDavid du Colombier 	ascender[2],		/* FWord */
643ff48bf5SDavid du Colombier 	descender[2],		/* FWord */
653ff48bf5SDavid du Colombier 	lineGap[2],		/* FWord */
663ff48bf5SDavid du Colombier 	advanceWidthMax[2],	/* uFWord */
673ff48bf5SDavid du Colombier 	minLeftSideBearing[2],	/* FWord */
683ff48bf5SDavid du Colombier 	minRightSideBearing[2],	/* FWord */
693ff48bf5SDavid du Colombier 	xMaxExtent[2],		/* FWord */
703ff48bf5SDavid du Colombier 	caretSlopeRise[2],
713ff48bf5SDavid du Colombier 	caretSlopeRun[2],
723ff48bf5SDavid du Colombier 	caretOffset[2],
733ff48bf5SDavid du Colombier 	reserved[8],
743ff48bf5SDavid du Colombier 	metricDataFormat[2],	/* 0 */
753ff48bf5SDavid du Colombier 	numHMetrics[2];
763ff48bf5SDavid du Colombier } ttf_hhea_t;
773ff48bf5SDavid du Colombier 
783ff48bf5SDavid du Colombier /* ------ hmtx ------ */
793ff48bf5SDavid du Colombier 
803ff48bf5SDavid du Colombier typedef struct longHorMetric_s {
813ff48bf5SDavid du Colombier     byte
823ff48bf5SDavid du Colombier 	advanceWidth[2],	/* uFWord */
833ff48bf5SDavid du Colombier 	lsb[2];			/* FWord */
843ff48bf5SDavid du Colombier } longHorMetric_t;
853ff48bf5SDavid du Colombier 
863ff48bf5SDavid du Colombier /* ------ maxp ------ */
873ff48bf5SDavid du Colombier 
883ff48bf5SDavid du Colombier typedef struct ttf_maxp_s {
893ff48bf5SDavid du Colombier     byte
90*593dc095SDavid du Colombier 	version[4],		/* 1.0 */
913ff48bf5SDavid du Colombier 	numGlyphs[2],
923ff48bf5SDavid du Colombier 	maxPoints[2],
933ff48bf5SDavid du Colombier 	maxContours[2],
943ff48bf5SDavid du Colombier 	maxCompositePoints[2],
953ff48bf5SDavid du Colombier 	maxCompositeContours[2],
963ff48bf5SDavid du Colombier 	maxZones[2],
973ff48bf5SDavid du Colombier 	maxTwilightPoints[2],
983ff48bf5SDavid du Colombier 	maxStorage[2],
993ff48bf5SDavid du Colombier 	maxFunctionDefs[2],
1003ff48bf5SDavid du Colombier 	maxInstructionDefs[2],
1013ff48bf5SDavid du Colombier 	maxStackElements[2],
1023ff48bf5SDavid du Colombier 	maxSizeOfInstructions[2],
1033ff48bf5SDavid du Colombier 	maxComponentElements[2],
1043ff48bf5SDavid du Colombier 	maxComponentDepth[2];
1053ff48bf5SDavid du Colombier } ttf_maxp_t;
1063ff48bf5SDavid du Colombier 
1073ff48bf5SDavid du Colombier /* ------ OS/2 ------ */
1083ff48bf5SDavid du Colombier 
1093ff48bf5SDavid du Colombier typedef struct ttf_OS_2_s {
1103ff48bf5SDavid du Colombier     byte
1113ff48bf5SDavid du Colombier 	version[2],		/* version 1 */
1123ff48bf5SDavid du Colombier 	xAvgCharWidth[2],
1133ff48bf5SDavid du Colombier 	usWeightClass[2],
1143ff48bf5SDavid du Colombier 	usWidthClass[2],
1153ff48bf5SDavid du Colombier 	fsType[2],
1163ff48bf5SDavid du Colombier 	ySubscriptXSize[2],
1173ff48bf5SDavid du Colombier 	ySubscriptYSize[2],
1183ff48bf5SDavid du Colombier 	ySubscriptXOffset[2],
1193ff48bf5SDavid du Colombier 	ySubscriptYOffset[2],
1203ff48bf5SDavid du Colombier 	ySuperscriptXSize[2],
1213ff48bf5SDavid du Colombier 	ySuperscriptYSize[2],
1223ff48bf5SDavid du Colombier 	ySuperscriptXOffset[2],
1233ff48bf5SDavid du Colombier 	ySuperscriptYOffset[2],
1243ff48bf5SDavid du Colombier 	yStrikeoutSize[2],
1253ff48bf5SDavid du Colombier 	yStrikeoutPosition[2],
1263ff48bf5SDavid du Colombier 	sFamilyClass[2],
1273ff48bf5SDavid du Colombier 	/*panose:*/
1283ff48bf5SDavid du Colombier 	    bFamilyType, bSerifStyle, bWeight, bProportion, bContrast,
1293ff48bf5SDavid du Colombier 	    bStrokeVariation, bArmStyle, bLetterform, bMidline, bXHeight,
1303ff48bf5SDavid du Colombier 	ulUnicodeRanges[16],
1313ff48bf5SDavid du Colombier 	achVendID[4],
1323ff48bf5SDavid du Colombier 	fsSelection[2],
1333ff48bf5SDavid du Colombier 	usFirstCharIndex[2],
1343ff48bf5SDavid du Colombier 	usLastCharIndex[2],
1353ff48bf5SDavid du Colombier 	sTypoAscender[2],
1363ff48bf5SDavid du Colombier 	sTypoDescender[2],
1373ff48bf5SDavid du Colombier 	sTypoLineGap[2],
1383ff48bf5SDavid du Colombier 	usWinAscent[2],
1393ff48bf5SDavid du Colombier 	usWinDescent[2],
1403ff48bf5SDavid du Colombier 	ulCodePageRanges[8];
1413ff48bf5SDavid du Colombier } ttf_OS_2_t;
1423ff48bf5SDavid du Colombier 
1433ff48bf5SDavid du Colombier /* ------ vhea ------ */
1443ff48bf5SDavid du Colombier 
1453ff48bf5SDavid du Colombier typedef struct ttf_vhea_s {
1463ff48bf5SDavid du Colombier     byte
1473ff48bf5SDavid du Colombier 	version[4],		/* version 1.0 */
1483ff48bf5SDavid du Colombier 	ascent[2],		/* FWord */
1493ff48bf5SDavid du Colombier 	descent[2],		/* FWord */
1503ff48bf5SDavid du Colombier 	lineGap[2],		/* FWord */
1513ff48bf5SDavid du Colombier 	advanceHeightMax[2],	/* uFWord */
1523ff48bf5SDavid du Colombier 	minTopSideBearing[2],	/* FWord */
1533ff48bf5SDavid du Colombier 	minBottomSideBearing[2],  /* FWord */
1543ff48bf5SDavid du Colombier 	yMaxExtent[2],		/* FWord */
1553ff48bf5SDavid du Colombier 	caretSlopeRise[2],
1563ff48bf5SDavid du Colombier 	caretSlopeRun[2],
1573ff48bf5SDavid du Colombier 	caretOffset[2],
1583ff48bf5SDavid du Colombier 	reserved[8],
1593ff48bf5SDavid du Colombier 	metricDataFormat[2],	/* 0 */
1603ff48bf5SDavid du Colombier 	numVMetrics[2];
1613ff48bf5SDavid du Colombier } ttf_vhea_t;
1623ff48bf5SDavid du Colombier 
1633ff48bf5SDavid du Colombier /* ------ vmtx ------ */
1643ff48bf5SDavid du Colombier 
1653ff48bf5SDavid du Colombier typedef struct longVerMetric_s {
1663ff48bf5SDavid du Colombier     byte
1673ff48bf5SDavid du Colombier 	advanceHeight[2],	/* uFWord */
1683ff48bf5SDavid du Colombier 	topSideBearing[2];	/* FWord */
1693ff48bf5SDavid du Colombier } longVerMetric_t;
1703ff48bf5SDavid du Colombier 
1713ff48bf5SDavid du Colombier #endif /* gxttf_INCLUDED */
172