• 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
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      -   Pointer to a boolean value receiving the indicator
110    *whether mapper found the exact match.
111    *                          If mapper is not sure whether it's exact match,
112    *ignore this paramter.
113    * Return Value:
114    *          An opaque pointer for font handle, or NULL if system mapping is
115    *not supported.
116    **/
117   void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis,
118                    int weight,
119                    FPDF_BOOL bItalic,
120                    int charset,
121                    int pitch_family,
122                    const char* face,
123                    FPDF_BOOL* bExact);
124 
125   /**
126    * Method: GetFont
127    *          Get a handle to a particular font by its internal ID
128    * Interface Version:
129    *          1
130    * Implementation Required:
131    *          Yes only if MapFont method is not implemented.
132    * Comments:
133    *          If the system mapping not supported, Foxit SDK will do the font
134    *mapping and use this method to get a font handle.
135    * Parameters:
136    *          pThis       -   Pointer to the interface structure itself
137    *          face        -   Typeface name. Currently use system local encoding
138    *only.
139    * Return Value:
140    *          An opaque pointer for font handle.
141    **/
142   void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
143 
144   /**
145    * Method: GetFontData
146    *          Get font data from a font
147    * Interface Version:
148    *          1
149    * Implementation Required:
150    *          Yes
151    * Comments:
152    *          Can read either full font file, or a particular TrueType/OpenType
153    *table
154    * Parameters:
155    *          pThis       -   Pointer to the interface structure itself
156    *          hFont       -   Font handle returned by MapFont or GetFont method
157    *          table       -   TrueType/OpenType table identifier (refer to
158    *TrueType specification).
159    *                          0 for the whole font file.
160    *          buffer      -   The buffer receiving the font data. Can be NULL if
161    *not provided
162    *          buf_size    -   Buffer size, can be zero if not provided
163    * Return Value:
164    *          Number of bytes needed, if buffer not provided or not large
165    *enough,
166    *          or number of bytes written into buffer otherwise.
167    **/
168   unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis,
169                                void* hFont,
170                                unsigned int table,
171                                unsigned char* buffer,
172                                unsigned long buf_size);
173 
174   /**
175    * Method: GetFaceName
176    *          Get face name from a font handle
177    * Interface Version:
178    *          1
179    * Implementation Required:
180    *          No
181    * Parameters:
182    *          pThis       -   Pointer to the interface structure itself
183    *          hFont       -   Font handle returned by MapFont or GetFont method
184    *          buffer      -   The buffer receiving the face name. Can be NULL if
185    *not provided
186    *          buf_size    -   Buffer size, can be zero if not provided
187    * Return Value:
188    *          Number of bytes needed, if buffer not provided or not large
189    *enough,
190    *          or number of bytes written into buffer otherwise.
191    **/
192   unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis,
193                                void* hFont,
194                                char* buffer,
195                                unsigned long buf_size);
196 
197   /**
198    * Method: GetFontCharset
199    *          Get character set information for a font handle
200    * Interface Version:
201    *          1
202    * Implementation Required:
203    *          No
204    * Parameters:
205    *          pThis       -   Pointer to the interface structure itself
206    *          hFont       -   Font handle returned by MapFont or GetFont method
207    * Return Value:
208    *          Character set identifier. See defined constants above.
209    **/
210   int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
211 
212   /**
213    * Method: DeleteFont
214    *          Delete a font handle
215    * Interface Version:
216    *          1
217    * Implementation Required:
218    *          Yes
219    * Parameters:
220    *          pThis       -   Pointer to the interface structure itself
221    *          hFont       -   Font handle returned by MapFont or GetFont method
222    * Return Value:
223    *          None
224    **/
225   void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
226 } FPDF_SYSFONTINFO;
227 
228 /**
229  * Struct: FPDF_CharsetFontMap
230  *    Provides the name of a font to use for a given charset value.
231  **/
232 typedef struct FPDF_CharsetFontMap_ {
233   int charset;  // Character Set Enum value, see FXFONT_*_CHARSET above.
234   const char* fontname;  // Name of default font to use with that charset.
235 } FPDF_CharsetFontMap;
236 
237 /**
238  * Function: FPDF_GetDefaultTTFMap
239  *    Returns a pointer to the default character set to TT Font name map. The
240  *    map is an array of FPDF_CharsetFontMap structs, with its end indicated
241  *    by a { -1, NULL } entry.
242  * Parameters:
243  *     None.
244  * Return Value:
245  *     Pointer to the Charset Font Map.
246  **/
247 DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap();
248 
249 /**
250  * Function: FPDF_AddInstalledFont
251  *          Add a system font to the list in Foxit SDK.
252  * Comments:
253  *          This function is only called during the system font list building
254  *process.
255  * Parameters:
256  *          mapper          -   Opaque pointer to Foxit font mapper
257  *          face            -   The font face name
258  *          charset         -   Font character set. See above defined constants.
259  * Return Value:
260  *          None.
261  **/
262 DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper,
263                                              const char* face,
264                                              int charset);
265 
266 /**
267  * Function: FPDF_SetSystemFontInfo
268  *          Set the system font info interface into Foxit SDK
269  * Comments:
270  *          Platform support implementation should implement required methods of
271  *FFDF_SYSFONTINFO interface,
272  *          then call this function during SDK initialization process.
273  * Parameters:
274  *          pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
275  * Return Value:
276  *          None
277  **/
278 DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
279 
280 /**
281  * Function: FPDF_GetDefaultSystemFontInfo
282  *          Get default system font info interface for current platform
283  * Comments:
284  *          For some platforms Foxit SDK implement a default version of system
285  *font info interface.
286  *          The default implementation can be used in FPDF_SetSystemFontInfo
287  *function.
288  * Parameters:
289  *          None
290  * Return Value:
291  *          Pointer to a FPDF_SYSFONTINFO structure describing the default
292  *interface.
293  *          Or NULL if the platform doesn't have a default interface.
294  *          Application should call FPDF_FreeDefaultSystemFontInfo to free the
295  *returned pointer.
296  **/
297 DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo();
298 
299 /**
300  * Function: FPDF_FreeDefaultSystemFontInfo
301  *           Free a default system font info interface
302  * Comments:
303  *           This function should be called on the output from
304  *FPDF_SetSystemFontInfo once it is no longer needed by the client.
305  * Parameters:
306  *           pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
307  * Return Value:
308  *          None
309  **/
310 DLLEXPORT void FPDF_FreeDefaultSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
311 
312 #ifdef __cplusplus
313 }
314 #endif
315 
316 #endif  // PUBLIC_FPDF_SYSFONTINFO_H_
317