• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #ifndef PUBLIC_FPDF_SYSFONTINFO_H_
8 #define PUBLIC_FPDF_SYSFONTINFO_H_
9 
10 // NOLINTNEXTLINE(build/include)
11 #include "fpdfview.h"
12 
13 /* Character sets for the font */
14 #define FXFONT_ANSI_CHARSET 0
15 #define FXFONT_DEFAULT_CHARSET 1
16 #define FXFONT_SYMBOL_CHARSET 2
17 #define FXFONT_SHIFTJIS_CHARSET 128
18 #define FXFONT_HANGEUL_CHARSET 129
19 #define FXFONT_GB2312_CHARSET 134
20 #define FXFONT_CHINESEBIG5_CHARSET 136
21 
22 /* Font pitch and family flags */
23 #define FXFONT_FF_FIXEDPITCH (1 << 0)
24 #define FXFONT_FF_ROMAN (1 << 4)
25 #define FXFONT_FF_SCRIPT (4 << 4)
26 
27 /* Typical weight values */
28 #define FXFONT_FW_NORMAL 400
29 #define FXFONT_FW_BOLD 700
30 
31 // Exported Functions
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 /**
37  * Interface: FPDF_SYSFONTINFO
38  *          Interface for getting system font information and font mapping
39  */
40 typedef struct _FPDF_SYSFONTINFO {
41   /**
42    * Version number of the interface. Currently must be 1.
43    **/
44   int version;
45 
46   /**
47    * Method: Release
48    *          Give implementation a chance to release any data after the
49    * interface is no longer used
50    * Interface Version:
51    *          1
52    * Implementation Required:
53    *          No
54    * Comments:
55    *          Called by Foxit SDK during the final cleanup process.
56    * Parameters:
57    *          pThis       -   Pointer to the interface structure itself
58    * Return Value:
59    *          None
60    */
61   void (*Release)(struct _FPDF_SYSFONTINFO* pThis);
62 
63   /**
64    * Method: EnumFonts
65    *          Enumerate all fonts installed on the system
66    * Interface Version:
67    *          1
68    * Implementation Required:
69    *          No
70    * Comments:
71    *          Implementation should call FPDF_AddIntalledFont() function for
72    * each font found.
73    *          Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
74    * Parameters:
75    *          pThis       -   Pointer to the interface structure itself
76    *          pMapper     -   An opaque pointer to internal font mapper, used
77    * when calling FPDF_AddInstalledFont
78    * Return Value:
79    *          None
80    */
81   void (*EnumFonts)(struct _FPDF_SYSFONTINFO* pThis, void* pMapper);
82 
83   /**
84    * Method: MapFont
85    *          Use the system font mapper to get a font handle from requested
86    *parameters
87    * Interface Version:
88    *          1
89    * Implementation Required:
90    *          Yes only if GetFont method is not implemented.
91    * Comments:
92    *          If the system supports native font mapper (like Windows),
93    *implementation can implement this method to get a font handle.
94    *          Otherwise, Foxit SDK will do the mapping and then call GetFont
95    *method.
96    *          Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
97    * Parameters:
98    *          pThis       -   Pointer to the interface structure itself
99    *          weight      -   Weight of the requested font. 400 is normal and
100    *700 is bold.
101    *          bItalic     -   Italic option of the requested font, TRUE or
102    *FALSE.
103    *          charset     -   Character set identifier for the requested font.
104    *See above defined constants.
105    *          pitch_family -  A combination of flags. See above defined
106    *constants.
107    *          face        -   Typeface name. Currently use system local encoding
108    *only.
109    *          bExact      -   Obsolete: this parameter is now ignored.
110    * Return Value:
111    *          An opaque pointer for font handle, or NULL if system mapping is
112    *not supported.
113    **/
114   void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis,
115                    int weight,
116                    FPDF_BOOL bItalic,
117                    int charset,
118                    int pitch_family,
119                    const char* face,
120                    FPDF_BOOL* bExact);
121 
122   /**
123    * Method: GetFont
124    *          Get a handle to a particular font by its internal ID
125    * Interface Version:
126    *          1
127    * Implementation Required:
128    *          Yes only if MapFont method is not implemented.
129    * Comments:
130    *          If the system mapping not supported, Foxit SDK will do the font
131    *mapping and use this method to get a font handle.
132    * Parameters:
133    *          pThis       -   Pointer to the interface structure itself
134    *          face        -   Typeface name. Currently use system local encoding
135    *only.
136    * Return Value:
137    *          An opaque pointer for font handle.
138    **/
139   void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
140 
141   /**
142    * Method: GetFontData
143    *          Get font data from a font
144    * Interface Version:
145    *          1
146    * Implementation Required:
147    *          Yes
148    * Comments:
149    *          Can read either full font file, or a particular TrueType/OpenType
150    *table
151    * Parameters:
152    *          pThis       -   Pointer to the interface structure itself
153    *          hFont       -   Font handle returned by MapFont or GetFont method
154    *          table       -   TrueType/OpenType table identifier (refer to
155    *TrueType specification).
156    *                          0 for the whole font file.
157    *          buffer      -   The buffer receiving the font data. Can be NULL if
158    *not provided
159    *          buf_size    -   Buffer size, can be zero if not provided
160    * Return Value:
161    *          Number of bytes needed, if buffer not provided or not large
162    *enough,
163    *          or number of bytes written into buffer otherwise.
164    **/
165   unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis,
166                                void* hFont,
167                                unsigned int table,
168                                unsigned char* buffer,
169                                unsigned long buf_size);
170 
171   /**
172    * Method: GetFaceName
173    *          Get face name from a font handle
174    * Interface Version:
175    *          1
176    * Implementation Required:
177    *          No
178    * Parameters:
179    *          pThis       -   Pointer to the interface structure itself
180    *          hFont       -   Font handle returned by MapFont or GetFont method
181    *          buffer      -   The buffer receiving the face name. Can be NULL if
182    *not provided
183    *          buf_size    -   Buffer size, can be zero if not provided
184    * Return Value:
185    *          Number of bytes needed, if buffer not provided or not large
186    *enough,
187    *          or number of bytes written into buffer otherwise.
188    **/
189   unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis,
190                                void* hFont,
191                                char* buffer,
192                                unsigned long buf_size);
193 
194   /**
195    * Method: GetFontCharset
196    *          Get character set information for a font handle
197    * Interface Version:
198    *          1
199    * Implementation Required:
200    *          No
201    * Parameters:
202    *          pThis       -   Pointer to the interface structure itself
203    *          hFont       -   Font handle returned by MapFont or GetFont method
204    * Return Value:
205    *          Character set identifier. See defined constants above.
206    **/
207   int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
208 
209   /**
210    * Method: DeleteFont
211    *          Delete a font handle
212    * Interface Version:
213    *          1
214    * Implementation Required:
215    *          Yes
216    * Parameters:
217    *          pThis       -   Pointer to the interface structure itself
218    *          hFont       -   Font handle returned by MapFont or GetFont method
219    * Return Value:
220    *          None
221    **/
222   void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
223 } FPDF_SYSFONTINFO;
224 
225 /**
226  * Struct: FPDF_CharsetFontMap
227  *    Provides the name of a font to use for a given charset value.
228  **/
229 typedef struct FPDF_CharsetFontMap_ {
230   int charset;  // Character Set Enum value, see FXFONT_*_CHARSET above.
231   const char* fontname;  // Name of default font to use with that charset.
232 } FPDF_CharsetFontMap;
233 
234 /**
235  * Function: FPDF_GetDefaultTTFMap
236  *    Returns a pointer to the default character set to TT Font name map. The
237  *    map is an array of FPDF_CharsetFontMap structs, with its end indicated
238  *    by a { -1, NULL } entry.
239  * Parameters:
240  *     None.
241  * Return Value:
242  *     Pointer to the Charset Font Map.
243  **/
244 FPDF_EXPORT const FPDF_CharsetFontMap* FPDF_CALLCONV FPDF_GetDefaultTTFMap();
245 
246 /**
247  * Function: FPDF_AddInstalledFont
248  *          Add a system font to the list in Foxit SDK.
249  * Comments:
250  *          This function is only called during the system font list building
251  *process.
252  * Parameters:
253  *          mapper          -   Opaque pointer to Foxit font mapper
254  *          face            -   The font face name
255  *          charset         -   Font character set. See above defined constants.
256  * Return Value:
257  *          None.
258  **/
259 FPDF_EXPORT void FPDF_CALLCONV FPDF_AddInstalledFont(void* mapper,
260                                                      const char* face,
261                                                      int charset);
262 
263 /**
264  * Function: FPDF_SetSystemFontInfo
265  *          Set the system font info interface into Foxit SDK
266  * Comments:
267  *          Platform support implementation should implement required methods of
268  *FFDF_SYSFONTINFO interface,
269  *          then call this function during SDK initialization process.
270  * Parameters:
271  *          pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
272  * Return Value:
273  *          None
274  **/
275 FPDF_EXPORT void FPDF_CALLCONV
276 FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
277 
278 /**
279  * Function: FPDF_GetDefaultSystemFontInfo
280  *          Get default system font info interface for current platform
281  * Comments:
282  *          For some platforms Foxit SDK implement a default version of system
283  *font info interface.
284  *          The default implementation can be used in FPDF_SetSystemFontInfo
285  *function.
286  * Parameters:
287  *          None
288  * Return Value:
289  *          Pointer to a FPDF_SYSFONTINFO structure describing the default
290  *interface.
291  *          Or NULL if the platform doesn't have a default interface.
292  *          Application should call FPDF_FreeDefaultSystemFontInfo to free the
293  *returned pointer.
294  **/
295 FPDF_EXPORT FPDF_SYSFONTINFO* FPDF_CALLCONV FPDF_GetDefaultSystemFontInfo();
296 
297 /**
298  * Function: FPDF_FreeDefaultSystemFontInfo
299  *           Free a default system font info interface
300  * Comments:
301  *           This function should be called on the output from
302  *FPDF_SetSystemFontInfo once it is no longer needed by the client.
303  * Parameters:
304  *           pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
305  * Return Value:
306  *          None
307  **/
308 FPDF_EXPORT void FPDF_CALLCONV
309 FPDF_FreeDefaultSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
310 
311 #ifdef __cplusplus
312 }
313 #endif
314 
315 #endif  // PUBLIC_FPDF_SYSFONTINFO_H_
316