1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski /** 25*b1cdbd2cSJim Jagielski * @file sft.h 26*b1cdbd2cSJim Jagielski * @brief Sun Font Tools 27*b1cdbd2cSJim Jagielski * @author Alexander Gelfenbain 28*b1cdbd2cSJim Jagielski */ 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski /* 31*b1cdbd2cSJim Jagielski * If NO_MAPPERS is defined, MapChar() and MapString() and consequently GetTTSimpleCharMetrics() 32*b1cdbd2cSJim Jagielski * don't get compiled in. This is done to avoid including a large chunk of code (TranslateXY() from 33*b1cdbd2cSJim Jagielski * xlat.c in the projects that don't require it. 34*b1cdbd2cSJim Jagielski * 35*b1cdbd2cSJim Jagielski * If NO_TYPE3 is defined CreateT3FromTTGlyphs() does not get compiled in. 36*b1cdbd2cSJim Jagielski * If NO_TYPE42 is defined Type42-related code is excluded 37*b1cdbd2cSJim Jagielski * If NO_TTCR is defined TrueType creation related code is excluded\ 38*b1cdbd2cSJim Jagielski */ 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski /* 41*b1cdbd2cSJim Jagielski * Generated fonts contain an XUID entry in the form of: 42*b1cdbd2cSJim Jagielski * 43*b1cdbd2cSJim Jagielski * 103 0 T C1 N C2 C3 44*b1cdbd2cSJim Jagielski * 45*b1cdbd2cSJim Jagielski * 103 - Sun's Adobe assigned XUID number. Contact person: Alexander Gelfenbain <gelf@eng.sun.com> 46*b1cdbd2cSJim Jagielski * 47*b1cdbd2cSJim Jagielski * T - font type. 0: Type 3, 1: Type 42 48*b1cdbd2cSJim Jagielski * C1 - CRC-32 of the entire source TrueType font 49*b1cdbd2cSJim Jagielski * N - number of glyphs in the subset 50*b1cdbd2cSJim Jagielski * C2 - CRC-32 of the array of glyph IDs used to generate the subset 51*b1cdbd2cSJim Jagielski * C3 - CRC-32 of the array of encoding numbers used to generate the subset 52*b1cdbd2cSJim Jagielski * 53*b1cdbd2cSJim Jagielski */ 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski #ifndef __SUBFONT_H 57*b1cdbd2cSJim Jagielski #define __SUBFONT_H 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski #ifdef UNX 60*b1cdbd2cSJim Jagielski #include <sys/types.h> 61*b1cdbd2cSJim Jagielski #include <unistd.h> 62*b1cdbd2cSJim Jagielski #endif 63*b1cdbd2cSJim Jagielski #include <stdio.h> 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski #include <sal/types.h> 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski #include "vcl/dllapi.h" 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski #include <vector> 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski namespace vcl 72*b1cdbd2cSJim Jagielski { 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski /*@{*/ 75*b1cdbd2cSJim Jagielski typedef sal_Int16 F2Dot14; /**< fixed: 2.14 */ 76*b1cdbd2cSJim Jagielski typedef sal_Int32 F16Dot16; /**< fixed: 16.16 */ 77*b1cdbd2cSJim Jagielski /*@}*/ 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski typedef struct { 80*b1cdbd2cSJim Jagielski sal_uInt16 s; 81*b1cdbd2cSJim Jagielski sal_uInt16 d; 82*b1cdbd2cSJim Jagielski } sal_uInt16pair; 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski /** Return value of OpenTTFont() and CreateT3FromTTGlyphs() */ 85*b1cdbd2cSJim Jagielski enum SFErrCodes { 86*b1cdbd2cSJim Jagielski SF_OK, /**< no error */ 87*b1cdbd2cSJim Jagielski SF_BADFILE, /**< file not found */ 88*b1cdbd2cSJim Jagielski SF_FILEIO, /**< file I/O error */ 89*b1cdbd2cSJim Jagielski SF_MEMORY, /**< memory allocation error */ 90*b1cdbd2cSJim Jagielski SF_GLYPHNUM, /**< incorrect number of glyphs */ 91*b1cdbd2cSJim Jagielski SF_BADARG, /**< incorrect arguments */ 92*b1cdbd2cSJim Jagielski SF_TTFORMAT, /**< incorrect TrueType font format */ 93*b1cdbd2cSJim Jagielski SF_TABLEFORMAT, /**< incorrect format of a TrueType table */ 94*b1cdbd2cSJim Jagielski SF_FONTNO /**< incorrect logical font number of a TTC font */ 95*b1cdbd2cSJim Jagielski }; 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski #ifndef FW_THIN /* WIN32 compilation would conflict */ 98*b1cdbd2cSJim Jagielski /** Value of the weight member of the TTGlobalFontInfo struct */ 99*b1cdbd2cSJim Jagielski enum WeightClass { 100*b1cdbd2cSJim Jagielski FW_THIN = 100, /**< Thin */ 101*b1cdbd2cSJim Jagielski FW_EXTRALIGHT = 200, /**< Extra-light (Ultra-light) */ 102*b1cdbd2cSJim Jagielski FW_LIGHT = 300, /**< Light */ 103*b1cdbd2cSJim Jagielski FW_NORMAL = 400, /**< Normal (Regular) */ 104*b1cdbd2cSJim Jagielski FW_MEDIUM = 500, /**< Medium */ 105*b1cdbd2cSJim Jagielski FW_SEMIBOLD = 600, /**< Semi-bold (Demi-bold) */ 106*b1cdbd2cSJim Jagielski FW_BOLD = 700, /**< Bold */ 107*b1cdbd2cSJim Jagielski FW_EXTRABOLD = 800, /**< Extra-bold (Ultra-bold) */ 108*b1cdbd2cSJim Jagielski FW_BLACK = 900 /**< Black (Heavy) */ 109*b1cdbd2cSJim Jagielski }; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski /** Value of the width member of the TTGlobalFontInfo struct */ 112*b1cdbd2cSJim Jagielski #ifndef FWIDTH_DONT_CARE // OS2 113*b1cdbd2cSJim Jagielski enum WidthClass { 114*b1cdbd2cSJim Jagielski FWIDTH_ULTRA_CONDENSED = 1, /**< 50% of normal */ 115*b1cdbd2cSJim Jagielski FWIDTH_EXTRA_CONDENSED = 2, /**< 62.5% of normal */ 116*b1cdbd2cSJim Jagielski FWIDTH_CONDENSED = 3, /**< 75% of normal */ 117*b1cdbd2cSJim Jagielski FWIDTH_SEMI_CONDENSED = 4, /**< 87.5% of normal */ 118*b1cdbd2cSJim Jagielski FWIDTH_NORMAL = 5, /**< Medium, 100% */ 119*b1cdbd2cSJim Jagielski FWIDTH_SEMI_EXPANDED = 6, /**< 112.5% of normal */ 120*b1cdbd2cSJim Jagielski FWIDTH_EXPANDED = 7, /**< 125% of normal */ 121*b1cdbd2cSJim Jagielski FWIDTH_EXTRA_EXPANDED = 8, /**< 150% of normal */ 122*b1cdbd2cSJim Jagielski FWIDTH_ULTRA_EXPANDED = 9 /**< 200% of normal */ 123*b1cdbd2cSJim Jagielski }; 124*b1cdbd2cSJim Jagielski #endif // FWIDTH_DONT_CARE 125*b1cdbd2cSJim Jagielski #endif /* FW_THIN */ 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski /** Type of the 'kern' table, stored in _TrueTypeFont::kerntype */ 128*b1cdbd2cSJim Jagielski enum KernType { 129*b1cdbd2cSJim Jagielski KT_NONE = 0, /**< no kern table */ 130*b1cdbd2cSJim Jagielski KT_APPLE_NEW = 1, /**< new Apple kern table */ 131*b1cdbd2cSJim Jagielski KT_MICROSOFT = 2 /**< Microsoft table */ 132*b1cdbd2cSJim Jagielski }; 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski /* Composite glyph flags definition */ 135*b1cdbd2cSJim Jagielski enum CompositeFlags { 136*b1cdbd2cSJim Jagielski ARG_1_AND_2_ARE_WORDS = 1, 137*b1cdbd2cSJim Jagielski ARGS_ARE_XY_VALUES = 1<<1, 138*b1cdbd2cSJim Jagielski ROUND_XY_TO_GRID = 1<<2, 139*b1cdbd2cSJim Jagielski WE_HAVE_A_SCALE = 1<<3, 140*b1cdbd2cSJim Jagielski MORE_COMPONENTS = 1<<5, 141*b1cdbd2cSJim Jagielski WE_HAVE_AN_X_AND_Y_SCALE = 1<<6, 142*b1cdbd2cSJim Jagielski WE_HAVE_A_TWO_BY_TWO = 1<<7, 143*b1cdbd2cSJim Jagielski WE_HAVE_INSTRUCTIONS = 1<<8, 144*b1cdbd2cSJim Jagielski USE_MY_METRICS = 1<<9, 145*b1cdbd2cSJim Jagielski OVERLAP_COMPOUND = 1<<10 146*b1cdbd2cSJim Jagielski }; 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski #ifndef NO_TTCR 149*b1cdbd2cSJim Jagielski /** Flags for TrueType generation */ 150*b1cdbd2cSJim Jagielski enum TTCreationFlags { 151*b1cdbd2cSJim Jagielski TTCF_AutoName = 1, /**< Automatically generate a compact 'name' table. 152*b1cdbd2cSJim Jagielski If this flag is not set, name table is generated 153*b1cdbd2cSJim Jagielski either from an array of NameRecord structs passed as 154*b1cdbd2cSJim Jagielski arguments or if the array is NULL, 'name' table 155*b1cdbd2cSJim Jagielski of the generated TrueType file will be a copy 156*b1cdbd2cSJim Jagielski of the name table of the original file. 157*b1cdbd2cSJim Jagielski If this flag is set the array of NameRecord structs 158*b1cdbd2cSJim Jagielski is ignored and a very compact 'name' table is automatically 159*b1cdbd2cSJim Jagielski generated. */ 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski TTCF_IncludeOS2 = 2 /** If this flag is set OS/2 table from the original font will be 162*b1cdbd2cSJim Jagielski copied to the subset */ 163*b1cdbd2cSJim Jagielski }; 164*b1cdbd2cSJim Jagielski #endif 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski /** Structure used by GetTTSimpleGlyphMetrics() and GetTTSimpleCharMetrics() functions */ 170*b1cdbd2cSJim Jagielski typedef struct { 171*b1cdbd2cSJim Jagielski sal_uInt16 adv; /**< advance width or height */ 172*b1cdbd2cSJim Jagielski sal_Int16 sb; /**< left or top sidebearing */ 173*b1cdbd2cSJim Jagielski } TTSimpleGlyphMetrics; 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski /** Structure used by the TrueType Creator and GetRawGlyphData() */ 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski typedef struct { 180*b1cdbd2cSJim Jagielski sal_uInt32 glyphID; /**< glyph ID */ 181*b1cdbd2cSJim Jagielski sal_uInt16 nbytes; /**< number of bytes in glyph data */ 182*b1cdbd2cSJim Jagielski sal_uInt8 *ptr; /**< pointer to glyph data */ 183*b1cdbd2cSJim Jagielski sal_uInt16 aw; /**< advance width */ 184*b1cdbd2cSJim Jagielski sal_Int16 lsb; /**< left sidebearing */ 185*b1cdbd2cSJim Jagielski sal_uInt16 compflag; /**< 0- if non-composite, 1- otherwise */ 186*b1cdbd2cSJim Jagielski sal_uInt16 npoints; /**< number of points */ 187*b1cdbd2cSJim Jagielski sal_uInt16 ncontours; /**< number of contours */ 188*b1cdbd2cSJim Jagielski /* */ 189*b1cdbd2cSJim Jagielski sal_uInt32 newID; /**< used internally by the TTCR */ 190*b1cdbd2cSJim Jagielski } GlyphData; 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski /** Structure used by the TrueType Creator and CreateTTFromTTGlyphs() */ 193*b1cdbd2cSJim Jagielski typedef struct { 194*b1cdbd2cSJim Jagielski sal_uInt16 platformID; /**< Platform ID */ 195*b1cdbd2cSJim Jagielski sal_uInt16 encodingID; /**< Platform-specific encoding ID */ 196*b1cdbd2cSJim Jagielski sal_uInt16 languageID; /**< Language ID */ 197*b1cdbd2cSJim Jagielski sal_uInt16 nameID; /**< Name ID */ 198*b1cdbd2cSJim Jagielski sal_uInt16 slen; /**< String length in bytes */ 199*b1cdbd2cSJim Jagielski sal_uInt8 *sptr; /**< Pointer to string data (not zero-terminated!) */ 200*b1cdbd2cSJim Jagielski } NameRecord; 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski /** Return value of GetTTGlobalFontInfo() */ 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski typedef struct { 207*b1cdbd2cSJim Jagielski char *family; /**< family name */ 208*b1cdbd2cSJim Jagielski sal_uInt16 *ufamily; /**< family name UCS2 */ 209*b1cdbd2cSJim Jagielski char *subfamily; /**< subfamily name */ 210*b1cdbd2cSJim Jagielski sal_uInt16 *usubfamily; /**< subfamily name UCS2 */ 211*b1cdbd2cSJim Jagielski char *psname; /**< PostScript name */ 212*b1cdbd2cSJim Jagielski sal_uInt16 macStyle; /**< macstyle bits from 'HEAD' table */ 213*b1cdbd2cSJim Jagielski int weight; /**< value of WeightClass or 0 if can't be determined */ 214*b1cdbd2cSJim Jagielski int width; /**< value of WidthClass or 0 if can't be determined */ 215*b1cdbd2cSJim Jagielski int pitch; /**< 0: proportianal font, otherwise: monospaced */ 216*b1cdbd2cSJim Jagielski int italicAngle; /**< in counter-clockwise degrees * 65536 */ 217*b1cdbd2cSJim Jagielski int xMin; /**< global bounding box: xMin */ 218*b1cdbd2cSJim Jagielski int yMin; /**< global bounding box: yMin */ 219*b1cdbd2cSJim Jagielski int xMax; /**< global bounding box: xMax */ 220*b1cdbd2cSJim Jagielski int yMax; /**< global bounding box: yMax */ 221*b1cdbd2cSJim Jagielski int ascender; /**< typographic ascent. */ 222*b1cdbd2cSJim Jagielski int descender; /**< typographic descent. */ 223*b1cdbd2cSJim Jagielski int linegap; /**< typographic line gap.\ Negative values are treated as 224*b1cdbd2cSJim Jagielski zero in Win 3.1, System 6 and System 7. */ 225*b1cdbd2cSJim Jagielski int vascent; /**< typographic ascent for vertical writing mode */ 226*b1cdbd2cSJim Jagielski int vdescent; /**< typographic descent for vertical writing mode */ 227*b1cdbd2cSJim Jagielski int typoAscender; /**< OS/2 portable typographic ascender */ 228*b1cdbd2cSJim Jagielski int typoDescender; /**< OS/2 portable typographic descender */ 229*b1cdbd2cSJim Jagielski int typoLineGap; /**< OS/2 portable typographc line gap */ 230*b1cdbd2cSJim Jagielski int winAscent; /**< ascender metric for Windows */ 231*b1cdbd2cSJim Jagielski int winDescent; /**< descender metric for Windows */ 232*b1cdbd2cSJim Jagielski int symbolEncoded; /**< 1: MS symbol encoded 0: not symbol encoded */ 233*b1cdbd2cSJim Jagielski int rangeFlag; /**< if set to 1 Unicode Range flags are applicable */ 234*b1cdbd2cSJim Jagielski sal_uInt32 ur1; /**< bits 0 - 31 of Unicode Range flags */ 235*b1cdbd2cSJim Jagielski sal_uInt32 ur2; /**< bits 32 - 63 of Unicode Range flags */ 236*b1cdbd2cSJim Jagielski sal_uInt32 ur3; /**< bits 64 - 95 of Unicode Range flags */ 237*b1cdbd2cSJim Jagielski sal_uInt32 ur4; /**< bits 96 - 127 of Unicode Range flags */ 238*b1cdbd2cSJim Jagielski sal_uInt8 panose[10]; /**< PANOSE classification number */ 239*b1cdbd2cSJim Jagielski sal_uInt32 typeFlags; /**< type flags (copyright bits + PS-OpenType flag) */ 240*b1cdbd2cSJim Jagielski } TTGlobalFontInfo; 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski #define TYPEFLAG_INVALID 0x8000000 243*b1cdbd2cSJim Jagielski #define TYPEFLAG_COPYRIGHT_MASK 0x000000E 244*b1cdbd2cSJim Jagielski #define TYPEFLAG_PS_OPENTYPE 0x0010000 245*b1cdbd2cSJim Jagielski 246*b1cdbd2cSJim Jagielski /** Structure used by KernGlyphs() */ 247*b1cdbd2cSJim Jagielski typedef struct { 248*b1cdbd2cSJim Jagielski int x; /**< positive: right, negative: left */ 249*b1cdbd2cSJim Jagielski int y; /**< positive: up, negative: down */ 250*b1cdbd2cSJim Jagielski } KernData; 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski 253*b1cdbd2cSJim Jagielski /** ControlPoint structure used by GetTTGlyphPoints() */ 254*b1cdbd2cSJim Jagielski typedef struct { 255*b1cdbd2cSJim Jagielski sal_uInt32 flags; /**< 00000000 00000000 e0000000 bbbbbbbb */ 256*b1cdbd2cSJim Jagielski /**< b - byte flags from the glyf array */ 257*b1cdbd2cSJim Jagielski /**< e == 0 - regular point */ 258*b1cdbd2cSJim Jagielski /**< e == 1 - end contour */ 259*b1cdbd2cSJim Jagielski sal_Int16 x; /**< X coordinate in EmSquare units */ 260*b1cdbd2cSJim Jagielski sal_Int16 y; /**< Y coordinate in EmSquare units */ 261*b1cdbd2cSJim Jagielski } ControlPoint; 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski typedef struct _TrueTypeFont TrueTypeFont; 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski /** 266*b1cdbd2cSJim Jagielski * @defgroup sft Sun Font Tools Exported Functions 267*b1cdbd2cSJim Jagielski */ 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski /** 271*b1cdbd2cSJim Jagielski * Get the number of fonts contained in a TrueType collection 272*b1cdbd2cSJim Jagielski * @param fname - file name 273*b1cdbd2cSJim Jagielski * @return number of fonts or zero, if file is not a TTC file. 274*b1cdbd2cSJim Jagielski * @ingroup sft 275*b1cdbd2cSJim Jagielski */ 276*b1cdbd2cSJim Jagielski int CountTTCFonts(const char* fname); 277*b1cdbd2cSJim Jagielski 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielski /** 280*b1cdbd2cSJim Jagielski * TrueTypeFont constructor. 281*b1cdbd2cSJim Jagielski * The font file has to be provided as a memory buffer and length 282*b1cdbd2cSJim Jagielski * @param facenum - logical font number within a TTC file. This value is ignored 283*b1cdbd2cSJim Jagielski * for TrueType fonts 284*b1cdbd2cSJim Jagielski * @return value of SFErrCodes enum 285*b1cdbd2cSJim Jagielski * @ingroup sft 286*b1cdbd2cSJim Jagielski */ 287*b1cdbd2cSJim Jagielski int VCL_DLLPUBLIC OpenTTFontBuffer(void* pBuffer, sal_uInt32 nLen, sal_uInt32 facenum, TrueTypeFont** ttf); /*FOLD01*/ 288*b1cdbd2cSJim Jagielski #if !defined(WIN32) && !defined(OS2) 289*b1cdbd2cSJim Jagielski /** 290*b1cdbd2cSJim Jagielski * TrueTypeFont constructor. 291*b1cdbd2cSJim Jagielski * Reads the font file and allocates the memory for the structure. 292*b1cdbd2cSJim Jagielski * on WIN32 the font has to be provided as a memory buffer and length 293*b1cdbd2cSJim Jagielski * @param facenum - logical font number within a TTC file. This value is ignored 294*b1cdbd2cSJim Jagielski * for TrueType fonts 295*b1cdbd2cSJim Jagielski * @return value of SFErrCodes enum 296*b1cdbd2cSJim Jagielski * @ingroup sft 297*b1cdbd2cSJim Jagielski */ 298*b1cdbd2cSJim Jagielski int VCL_DLLPUBLIC OpenTTFontFile(const char *fname, sal_uInt32 facenum, TrueTypeFont** ttf); 299*b1cdbd2cSJim Jagielski #endif 300*b1cdbd2cSJim Jagielski 301*b1cdbd2cSJim Jagielski /** 302*b1cdbd2cSJim Jagielski * TrueTypeFont destructor. Deallocates the memory. 303*b1cdbd2cSJim Jagielski * @ingroup sft 304*b1cdbd2cSJim Jagielski */ 305*b1cdbd2cSJim Jagielski void VCL_DLLPUBLIC CloseTTFont(TrueTypeFont *); 306*b1cdbd2cSJim Jagielski 307*b1cdbd2cSJim Jagielski /** 308*b1cdbd2cSJim Jagielski * Extracts TrueType control points, and stores them in an allocated array pointed to 309*b1cdbd2cSJim Jagielski * by *pointArray. This function returns the number of extracted points. 310*b1cdbd2cSJim Jagielski * 311*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 312*b1cdbd2cSJim Jagielski * @param glyphID Glyph ID 313*b1cdbd2cSJim Jagielski * @param pointArray Return value - address of the pointer to the first element of the array 314*b1cdbd2cSJim Jagielski * of points allocated by the function 315*b1cdbd2cSJim Jagielski * @return Returns the number of points in *pointArray or -1 if glyphID is 316*b1cdbd2cSJim Jagielski * invalid. 317*b1cdbd2cSJim Jagielski * @ingroup sft 318*b1cdbd2cSJim Jagielski * 319*b1cdbd2cSJim Jagielski */ 320*b1cdbd2cSJim Jagielski int GetTTGlyphPoints(TrueTypeFont *ttf, sal_uInt32 glyphID, ControlPoint **pointArray); 321*b1cdbd2cSJim Jagielski 322*b1cdbd2cSJim Jagielski /** 323*b1cdbd2cSJim Jagielski * Extracts raw glyph data from the 'glyf' table and returns it in an allocated 324*b1cdbd2cSJim Jagielski * GlyphData structure. 325*b1cdbd2cSJim Jagielski * 326*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 327*b1cdbd2cSJim Jagielski * @param glyphID Glyph ID 328*b1cdbd2cSJim Jagielski * 329*b1cdbd2cSJim Jagielski * @return pointer to an allocated GlyphData structure or NULL if 330*b1cdbd2cSJim Jagielski * glyphID is not present in the font 331*b1cdbd2cSJim Jagielski * @ingroup sft 332*b1cdbd2cSJim Jagielski * 333*b1cdbd2cSJim Jagielski */ 334*b1cdbd2cSJim Jagielski GlyphData *GetTTRawGlyphData(TrueTypeFont *ttf, sal_uInt32 glyphID); 335*b1cdbd2cSJim Jagielski 336*b1cdbd2cSJim Jagielski /** 337*b1cdbd2cSJim Jagielski * For a specified glyph adds all component glyphs IDs to the list and 338*b1cdbd2cSJim Jagielski * return their number. If the glyph is a single glyph it has one component 339*b1cdbd2cSJim Jagielski * glyph (which is added to the list) and the function returns 1. 340*b1cdbd2cSJim Jagielski * For a composite glyphs it returns the number of component glyphs 341*b1cdbd2cSJim Jagielski * and adds all of them to the list. 342*b1cdbd2cSJim Jagielski * 343*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 344*b1cdbd2cSJim Jagielski * @param glyphID Glyph ID 345*b1cdbd2cSJim Jagielski * @param glyphlist list of glyphs 346*b1cdbd2cSJim Jagielski * 347*b1cdbd2cSJim Jagielski * @return number of component glyphs 348*b1cdbd2cSJim Jagielski * @ingroup sft 349*b1cdbd2cSJim Jagielski * 350*b1cdbd2cSJim Jagielski */ 351*b1cdbd2cSJim Jagielski int GetTTGlyphComponents(TrueTypeFont *ttf, sal_uInt32 glyphID, std::vector< sal_uInt32 >& glyphlist); 352*b1cdbd2cSJim Jagielski 353*b1cdbd2cSJim Jagielski /** 354*b1cdbd2cSJim Jagielski * Extracts all Name Records from the font and stores them in an allocated 355*b1cdbd2cSJim Jagielski * array of NameRecord structs 356*b1cdbd2cSJim Jagielski * 357*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont struct 358*b1cdbd2cSJim Jagielski * @param nr pointer to the array of NameRecord structs 359*b1cdbd2cSJim Jagielski * 360*b1cdbd2cSJim Jagielski * @return number of NameRecord structs 361*b1cdbd2cSJim Jagielski * @ingroup sft 362*b1cdbd2cSJim Jagielski */ 363*b1cdbd2cSJim Jagielski 364*b1cdbd2cSJim Jagielski int GetTTNameRecords(TrueTypeFont *ttf, NameRecord **nr); 365*b1cdbd2cSJim Jagielski 366*b1cdbd2cSJim Jagielski /** 367*b1cdbd2cSJim Jagielski * Deallocates previously allocated array of NameRecords. 368*b1cdbd2cSJim Jagielski * 369*b1cdbd2cSJim Jagielski * @param nr array of NameRecord structs 370*b1cdbd2cSJim Jagielski * @param n number of elements in the array 371*b1cdbd2cSJim Jagielski * 372*b1cdbd2cSJim Jagielski * @ingroup sft 373*b1cdbd2cSJim Jagielski */ 374*b1cdbd2cSJim Jagielski void DisposeNameRecords(NameRecord* nr, int n); 375*b1cdbd2cSJim Jagielski 376*b1cdbd2cSJim Jagielski 377*b1cdbd2cSJim Jagielski #ifndef NO_TYPE3 378*b1cdbd2cSJim Jagielski /** 379*b1cdbd2cSJim Jagielski * Generates a new PostScript Type 3 font and dumps it to <b>outf</b> file. 380*b1cdbd2cSJim Jagielski * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. 381*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 382*b1cdbd2cSJim Jagielski * @param outf the resulting font is written to this stream 383*b1cdbd2cSJim Jagielski * @param fname font name for the new font. If it is NULL the PostScript name of the 384*b1cdbd2cSJim Jagielski * original font will be used 385*b1cdbd2cSJim Jagielski * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf 386*b1cdbd2cSJim Jagielski * @param encoding array of encoding values. encoding[i] specifies the position of the glyph 387*b1cdbd2cSJim Jagielski * glyphArray[i] in the encoding vector of the resulting Type3 font 388*b1cdbd2cSJim Jagielski * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding 389*b1cdbd2cSJim Jagielski * @param wmode writing mode for the output file: 0 - horizontal, 1 - vertical 390*b1cdbd2cSJim Jagielski * @return return the value of SFErrCodes enum 391*b1cdbd2cSJim Jagielski * @see SFErrCodes 392*b1cdbd2cSJim Jagielski * @ingroup sft 393*b1cdbd2cSJim Jagielski * 394*b1cdbd2cSJim Jagielski */ 395*b1cdbd2cSJim Jagielski int CreateT3FromTTGlyphs(TrueTypeFont *ttf, FILE *outf, const char *fname, sal_uInt16 *glyphArray, sal_uInt8 *encoding, int nGlyphs, int wmode); 396*b1cdbd2cSJim Jagielski #endif 397*b1cdbd2cSJim Jagielski 398*b1cdbd2cSJim Jagielski #ifndef NO_TTCR 399*b1cdbd2cSJim Jagielski /** 400*b1cdbd2cSJim Jagielski * Generates a new TrueType font and dumps it to <b>outf</b> file. 401*b1cdbd2cSJim Jagielski * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. 402*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 403*b1cdbd2cSJim Jagielski * @param fname file name for the output TrueType font file 404*b1cdbd2cSJim Jagielski * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf. The first 405*b1cdbd2cSJim Jagielski * element of this array has to be glyph 0 (default glyph) 406*b1cdbd2cSJim Jagielski * @param encoding array of encoding values. encoding[i] specifies character code for 407*b1cdbd2cSJim Jagielski * the glyphID glyphArray[i]. Character code 0 usually points to a default 408*b1cdbd2cSJim Jagielski * glyph (glyphID 0) 409*b1cdbd2cSJim Jagielski * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding 410*b1cdbd2cSJim Jagielski * @param nNameRecs number of NameRecords for the font, if 0 the name table from the 411*b1cdbd2cSJim Jagielski * original font will be used 412*b1cdbd2cSJim Jagielski * @param nr array of NameRecords 413*b1cdbd2cSJim Jagielski * @param flags or'ed TTCreationFlags 414*b1cdbd2cSJim Jagielski * @return return the value of SFErrCodes enum 415*b1cdbd2cSJim Jagielski * @see SFErrCodes 416*b1cdbd2cSJim Jagielski * @ingroup sft 417*b1cdbd2cSJim Jagielski * 418*b1cdbd2cSJim Jagielski */ 419*b1cdbd2cSJim Jagielski int CreateTTFromTTGlyphs(TrueTypeFont *ttf, 420*b1cdbd2cSJim Jagielski const char *fname, 421*b1cdbd2cSJim Jagielski sal_uInt16 *glyphArray, 422*b1cdbd2cSJim Jagielski sal_uInt8 *encoding, 423*b1cdbd2cSJim Jagielski int nGlyphs, 424*b1cdbd2cSJim Jagielski int nNameRecs, 425*b1cdbd2cSJim Jagielski NameRecord *nr, 426*b1cdbd2cSJim Jagielski sal_uInt32 flags); 427*b1cdbd2cSJim Jagielski #endif 428*b1cdbd2cSJim Jagielski 429*b1cdbd2cSJim Jagielski #ifndef NO_TYPE42 430*b1cdbd2cSJim Jagielski /** 431*b1cdbd2cSJim Jagielski * Generates a new PostScript Type42 font and dumps it to <b>outf</b> file. 432*b1cdbd2cSJim Jagielski * This functions subsititues glyph 0 for all glyphIDs that are not found in the font. 433*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 434*b1cdbd2cSJim Jagielski * @param outf output stream for a resulting font 435*b1cdbd2cSJim Jagielski * @param psname PostScript name of the resulting font 436*b1cdbd2cSJim Jagielski * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf. The first 437*b1cdbd2cSJim Jagielski * element of this array has to be glyph 0 (default glyph) 438*b1cdbd2cSJim Jagielski * @param encoding array of encoding values. encoding[i] specifies character code for 439*b1cdbd2cSJim Jagielski * the glyphID glyphArray[i]. Character code 0 usually points to a default 440*b1cdbd2cSJim Jagielski * glyph (glyphID 0) 441*b1cdbd2cSJim Jagielski * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding 442*b1cdbd2cSJim Jagielski * @return SF_OK - no errors 443*b1cdbd2cSJim Jagielski * SF_GLYPHNUM - too many glyphs (> 255) 444*b1cdbd2cSJim Jagielski * SF_TTFORMAT - corrupted TrueType fonts 445*b1cdbd2cSJim Jagielski * 446*b1cdbd2cSJim Jagielski * @see SFErrCodes 447*b1cdbd2cSJim Jagielski * @ingroup sft 448*b1cdbd2cSJim Jagielski * 449*b1cdbd2cSJim Jagielski */ 450*b1cdbd2cSJim Jagielski int CreateT42FromTTGlyphs(TrueTypeFont *ttf, 451*b1cdbd2cSJim Jagielski FILE *outf, 452*b1cdbd2cSJim Jagielski const char *psname, 453*b1cdbd2cSJim Jagielski sal_uInt16 *glyphArray, 454*b1cdbd2cSJim Jagielski sal_uInt8 *encoding, 455*b1cdbd2cSJim Jagielski int nGlyphs); 456*b1cdbd2cSJim Jagielski #endif 457*b1cdbd2cSJim Jagielski 458*b1cdbd2cSJim Jagielski 459*b1cdbd2cSJim Jagielski /** 460*b1cdbd2cSJim Jagielski * Queries glyph metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it. 461*b1cdbd2cSJim Jagielski * 462*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 463*b1cdbd2cSJim Jagielski * @param glyphArray pointer to an array of glyphs that are to be extracted from ttf 464*b1cdbd2cSJim Jagielski * @param nGlyphs number of glyph IDs in glyphArray and encoding values in encoding 465*b1cdbd2cSJim Jagielski * @param mode writing mode: 0 - horizontal, 1 - vertical 466*b1cdbd2cSJim Jagielski * @ingroup sft 467*b1cdbd2cSJim Jagielski * 468*b1cdbd2cSJim Jagielski */ 469*b1cdbd2cSJim Jagielski TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *glyphArray, int nGlyphs, int mode); 470*b1cdbd2cSJim Jagielski 471*b1cdbd2cSJim Jagielski #ifndef NO_MAPPERS 472*b1cdbd2cSJim Jagielski /** 473*b1cdbd2cSJim Jagielski * Queries glyph metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it. 474*b1cdbd2cSJim Jagielski * This function behaves just like GetTTSimpleGlyphMetrics() but it takes a range of Unicode 475*b1cdbd2cSJim Jagielski * characters instead of an array of glyphs. 476*b1cdbd2cSJim Jagielski * 477*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 478*b1cdbd2cSJim Jagielski * @param firstChar Unicode value of the first character in the range 479*b1cdbd2cSJim Jagielski * @param nChars number of Unicode characters in the range 480*b1cdbd2cSJim Jagielski * @param mode writing mode: 0 - horizontal, 1 - vertical 481*b1cdbd2cSJim Jagielski * 482*b1cdbd2cSJim Jagielski * @see GetTTSimpleGlyphMetrics 483*b1cdbd2cSJim Jagielski * @ingroup sft 484*b1cdbd2cSJim Jagielski * 485*b1cdbd2cSJim Jagielski */ 486*b1cdbd2cSJim Jagielski TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont *ttf, sal_uInt16 firstChar, int nChars, int mode); 487*b1cdbd2cSJim Jagielski 488*b1cdbd2cSJim Jagielski /** 489*b1cdbd2cSJim Jagielski * Maps a Unicode (UCS-2) string to a glyph array. Returns the number of glyphs in the array, 490*b1cdbd2cSJim Jagielski * which for TrueType fonts is always the same as the number of input characters. 491*b1cdbd2cSJim Jagielski * 492*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 493*b1cdbd2cSJim Jagielski * @param str pointer to a UCS-2 string 494*b1cdbd2cSJim Jagielski * @param nchars number of characters in <b>str</b> 495*b1cdbd2cSJim Jagielski * @param glyphArray pointer to the glyph array where glyph IDs are to be recorded. 496*b1cdbd2cSJim Jagielski * 497*b1cdbd2cSJim Jagielski * @return MapString() returns -1 if the TrueType font has no usable 'cmap' tables. 498*b1cdbd2cSJim Jagielski * Otherwise it returns the number of characters processed: <b>nChars</b> 499*b1cdbd2cSJim Jagielski * 500*b1cdbd2cSJim Jagielski * glyphIDs of TrueType fonts are 2 byte positive numbers. glyphID of 0 denotes a missing 501*b1cdbd2cSJim Jagielski * glyph and traditionally defaults to an empty square. 502*b1cdbd2cSJim Jagielski * glyphArray should be at least sizeof(sal_uInt16) * nchars bytes long. If glyphArray is NULL 503*b1cdbd2cSJim Jagielski * MapString() replaces the UCS-2 characters in str with glyphIDs. 504*b1cdbd2cSJim Jagielski * @ingroup sft 505*b1cdbd2cSJim Jagielski */ 506*b1cdbd2cSJim Jagielski int VCL_DLLPUBLIC MapString(TrueTypeFont *ttf, sal_uInt16 *str, int nchars, sal_uInt16 *glyphArray, int bvertical); 507*b1cdbd2cSJim Jagielski 508*b1cdbd2cSJim Jagielski /** 509*b1cdbd2cSJim Jagielski * Maps a Unicode (UCS-2) character to a glyph ID and returns it. Missing glyph has 510*b1cdbd2cSJim Jagielski * a glyphID of 0 so this function can be used to test if a character is encoded in the font. 511*b1cdbd2cSJim Jagielski * 512*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 513*b1cdbd2cSJim Jagielski * @param ch Unicode (UCS-2) character 514*b1cdbd2cSJim Jagielski * @return glyph ID, if the character is missing in the font, the return value is 0. 515*b1cdbd2cSJim Jagielski * @ingroup sft 516*b1cdbd2cSJim Jagielski */ 517*b1cdbd2cSJim Jagielski sal_uInt16 MapChar(TrueTypeFont *ttf, sal_uInt16 ch, int bvertical); 518*b1cdbd2cSJim Jagielski 519*b1cdbd2cSJim Jagielski /** 520*b1cdbd2cSJim Jagielski * Returns 0 when the font does not substitute vertical glyphs 521*b1cdbd2cSJim Jagielski * 522*b1cdbd2cSJim Jagielski * @param ttf pointer to the TrueTypeFont structure 523*b1cdbd2cSJim Jagielski */ 524*b1cdbd2cSJim Jagielski int DoesVerticalSubstitution( TrueTypeFont *ttf, int bvertical); 525*b1cdbd2cSJim Jagielski 526*b1cdbd2cSJim Jagielski #endif 527*b1cdbd2cSJim Jagielski 528*b1cdbd2cSJim Jagielski /** 529*b1cdbd2cSJim Jagielski * Returns global font information about the TrueType font. 530*b1cdbd2cSJim Jagielski * @see TTGlobalFontInfo 531*b1cdbd2cSJim Jagielski * 532*b1cdbd2cSJim Jagielski * @param ttf pointer to a TrueTypeFont structure 533*b1cdbd2cSJim Jagielski * @param info pointer to a TTGlobalFontInfo structure 534*b1cdbd2cSJim Jagielski * @ingroup sft 535*b1cdbd2cSJim Jagielski * 536*b1cdbd2cSJim Jagielski */ 537*b1cdbd2cSJim Jagielski void GetTTGlobalFontInfo(TrueTypeFont *ttf, TTGlobalFontInfo *info); 538*b1cdbd2cSJim Jagielski 539*b1cdbd2cSJim Jagielski #ifdef TEST5 540*b1cdbd2cSJim Jagielski /** 541*b1cdbd2cSJim Jagielski * Returns kerning information for an array of glyphs. 542*b1cdbd2cSJim Jagielski * Kerning is not cumulative. 543*b1cdbd2cSJim Jagielski * kern[i] contains kerning information for a pair of glyphs at positions i and i+1 544*b1cdbd2cSJim Jagielski * 545*b1cdbd2cSJim Jagielski * @param ttf pointer to a TrueTypeFont structure 546*b1cdbd2cSJim Jagielski * @param glyphs array of source glyphs 547*b1cdbd2cSJim Jagielski * @param nglyphs number of glyphs in the array 548*b1cdbd2cSJim Jagielski * @param wmode writing mode: 0 - horizontal, 1 - vertical 549*b1cdbd2cSJim Jagielski * @param kern array of KernData structures. It should contain nglyphs-1 elements 550*b1cdbd2cSJim Jagielski * @see KernData 551*b1cdbd2cSJim Jagielski * @ingroup sft 552*b1cdbd2cSJim Jagielski * 553*b1cdbd2cSJim Jagielski */ 554*b1cdbd2cSJim Jagielski void KernGlyphs(TrueTypeFont *ttf, sal_uInt16 *glyphs, int nglyphs, int wmode, KernData *kern); 555*b1cdbd2cSJim Jagielski #endif 556*b1cdbd2cSJim Jagielski 557*b1cdbd2cSJim Jagielski /** 558*b1cdbd2cSJim Jagielski * Returns nonzero if font is a symbol encoded font 559*b1cdbd2cSJim Jagielski */ 560*b1cdbd2cSJim Jagielski int CheckSymbolEncoding(TrueTypeFont* ttf); 561*b1cdbd2cSJim Jagielski 562*b1cdbd2cSJim Jagielski /** 563*b1cdbd2cSJim Jagielski * returns the number of glyphs in a font 564*b1cdbd2cSJim Jagielski */ 565*b1cdbd2cSJim Jagielski int GetTTGlyphCount( TrueTypeFont* ttf ); 566*b1cdbd2cSJim Jagielski 567*b1cdbd2cSJim Jagielski /** 568*b1cdbd2cSJim Jagielski * provide access to the raw data of a SFNT-container's subtable 569*b1cdbd2cSJim Jagielski */ 570*b1cdbd2cSJim Jagielski bool GetSfntTable( TrueTypeFont* ttf, int nSubtableIndex, 571*b1cdbd2cSJim Jagielski const sal_uInt8** ppRawBytes, int* pRawLength ); 572*b1cdbd2cSJim Jagielski 573*b1cdbd2cSJim Jagielski /*- private definitions */ /*FOLD00*/ 574*b1cdbd2cSJim Jagielski 575*b1cdbd2cSJim Jagielski struct _TrueTypeFont { 576*b1cdbd2cSJim Jagielski sal_uInt32 tag; 577*b1cdbd2cSJim Jagielski 578*b1cdbd2cSJim Jagielski char *fname; 579*b1cdbd2cSJim Jagielski sal_Int32 fsize; 580*b1cdbd2cSJim Jagielski sal_uInt8 *ptr; 581*b1cdbd2cSJim Jagielski 582*b1cdbd2cSJim Jagielski char *psname; 583*b1cdbd2cSJim Jagielski char *family; 584*b1cdbd2cSJim Jagielski sal_uInt16 *ufamily; 585*b1cdbd2cSJim Jagielski char *subfamily; 586*b1cdbd2cSJim Jagielski sal_uInt16 *usubfamily; 587*b1cdbd2cSJim Jagielski 588*b1cdbd2cSJim Jagielski sal_uInt32 ntables; 589*b1cdbd2cSJim Jagielski sal_uInt32 *goffsets; 590*b1cdbd2cSJim Jagielski sal_uInt32 nglyphs; 591*b1cdbd2cSJim Jagielski sal_uInt32 unitsPerEm; 592*b1cdbd2cSJim Jagielski sal_uInt32 numberOfHMetrics; 593*b1cdbd2cSJim Jagielski sal_uInt32 numOfLongVerMetrics; /* if this number is not 0, font has vertical metrics information */ 594*b1cdbd2cSJim Jagielski const sal_uInt8* cmap; 595*b1cdbd2cSJim Jagielski int cmapType; 596*b1cdbd2cSJim Jagielski sal_uInt32 (*mapper)(const sal_uInt8 *, sal_uInt32); /* character to glyphID translation function */ 597*b1cdbd2cSJim Jagielski const sal_uInt8 **tables; /* array of pointers to raw subtables in SFNT file */ 598*b1cdbd2cSJim Jagielski sal_uInt32 *tlens; /* array of table lengths */ 599*b1cdbd2cSJim Jagielski int kerntype; /* Defined in the KernType enum */ 600*b1cdbd2cSJim Jagielski sal_uInt32 nkern; /* number of kern subtables */ 601*b1cdbd2cSJim Jagielski const sal_uInt8** kerntables; /* array of pointers to kern subtables */ 602*b1cdbd2cSJim Jagielski void *pGSubstitution; /* info provided by GSUB for UseGSUB() */ 603*b1cdbd2cSJim Jagielski }; 604*b1cdbd2cSJim Jagielski 605*b1cdbd2cSJim Jagielski /* indexes into _TrueTypeFont::tables[] and _TrueTypeFont::tlens[] */ 606*b1cdbd2cSJim Jagielski #define O_maxp 0 /* 'maxp' */ 607*b1cdbd2cSJim Jagielski #define O_glyf 1 /* 'glyf' */ 608*b1cdbd2cSJim Jagielski #define O_head 2 /* 'head' */ 609*b1cdbd2cSJim Jagielski #define O_loca 3 /* 'loca' */ 610*b1cdbd2cSJim Jagielski #define O_name 4 /* 'name' */ 611*b1cdbd2cSJim Jagielski #define O_hhea 5 /* 'hhea' */ 612*b1cdbd2cSJim Jagielski #define O_hmtx 6 /* 'hmtx' */ 613*b1cdbd2cSJim Jagielski #define O_cmap 7 /* 'cmap' */ 614*b1cdbd2cSJim Jagielski #define O_vhea 8 /* 'vhea' */ 615*b1cdbd2cSJim Jagielski #define O_vmtx 9 /* 'vmtx' */ 616*b1cdbd2cSJim Jagielski #define O_OS2 10 /* 'OS/2' */ 617*b1cdbd2cSJim Jagielski #define O_post 11 /* 'post' */ 618*b1cdbd2cSJim Jagielski #define O_kern 12 /* 'kern' */ 619*b1cdbd2cSJim Jagielski #define O_cvt 13 /* 'cvt_' - only used in TT->TT generation */ 620*b1cdbd2cSJim Jagielski #define O_prep 14 /* 'prep' - only used in TT->TT generation */ 621*b1cdbd2cSJim Jagielski #define O_fpgm 15 /* 'fpgm' - only used in TT->TT generation */ 622*b1cdbd2cSJim Jagielski #define O_gsub 16 /* 'GSUB' */ 623*b1cdbd2cSJim Jagielski #define O_CFF 17 /* 'CFF' */ 624*b1cdbd2cSJim Jagielski #define NUM_TAGS 18 625*b1cdbd2cSJim Jagielski 626*b1cdbd2cSJim Jagielski } // namespace vcl 627*b1cdbd2cSJim Jagielski 628*b1cdbd2cSJim Jagielski #endif /* __SUBFONT_H */ 629