xref: /aoo4110/main/vcl/inc/sft.hxx (revision b1cdbd2c)
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