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 _FPDF_SYSFONTINFO_H
8#define _FPDF_SYSFONTINFO_H
9
10#include "fpdfview.h"
11
12/* Character sets for the font */
13#define FXFONT_ANSI_CHARSET		0
14#define FXFONT_DEFAULT_CHARSET	1
15#define FXFONT_SYMBOL_CHARSET	2
16#define FXFONT_SHIFTJIS_CHARSET	128
17#define FXFONT_HANGEUL_CHARSET	129
18#define FXFONT_GB2312_CHARSET	134
19#define FXFONT_CHINESEBIG5_CHARSET	136
20
21/* Font pitch and family flags */
22#define FXFONT_FF_FIXEDPITCH	1
23#define FXFONT_FF_ROMAN			(1<<4)
24#define FXFONT_FF_SCRIPT		(4<<4)
25
26/* Typical weight values */
27#define FXFONT_FW_NORMAL		400
28#define FXFONT_FW_BOLD			700
29
30// Exported Functions
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35
36/**
37 * Interface: FPDF_SYSFONTINFO
38 *			Interface for getting system font information and font mapping
39 */
40typedef 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 interface is no longer used
49	 * Interface Version:
50	 *			1
51	 * Implementation Required:
52	 *			No
53	 * Comments:
54	 *			Called by Foxit SDK during the final cleanup process.
55	 * Parameters:
56	 *			pThis		-	Pointer to the interface structure itself
57	 * Return Value:
58	 *			None
59	 */
60	void (*Release)(struct _FPDF_SYSFONTINFO* pThis);
61
62	/**
63	 * Method: EnumFonts
64	 *			Enumerate all fonts installed on the system
65	 * Interface Version:
66	 *			1
67	 * Implementation Required:
68	 *			No
69	 * Comments:
70	 *			Implementation should call FPDF_AddIntalledFont() function for each font found.
71	 *			Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
72	 * Parameters:
73	 *			pThis		-	Pointer to the interface structure itself
74	 *			pMapper		-	An opaque pointer to internal font mapper, used when calling FPDF_AddInstalledFont
75	 * Return Value:
76	 *			None
77	 */
78	void (*EnumFonts)(struct _FPDF_SYSFONTINFO* pThis, void* pMapper);
79
80	/**
81	 * Method: MapFont
82	 *			Use the system font mapper to get a font handle from requested parameters
83	 * Interface Version:
84	 *			1
85	 * Implementation Required:
86	 *			Yes only if GetFont method is not implemented.
87	 * Comments:
88	 *			If the system supports native font mapper (like Windows), implementation can implement this method to get a font handle.
89	 *			Otherwise, Foxit SDK will do the mapping and then call GetFont method.
90	 *			Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
91	 * Parameters:
92	 *			pThis		-	Pointer to the interface structure itself
93	 *			weight		-	Weight of the requested font. 400 is normal and 700 is bold.
94	 *			bItalic		-	Italic option of the requested font, TRUE or FALSE.
95	 *			charset		-	Character set identifier for the requested font. See above defined constants.
96	 *			pitch_family -	A combination of flags. See above defined constants.
97	 *			face		-	Typeface name. Currently use system local encoding only.
98	 *			bExact		-	Pointer to an boolean value receiving the indicator whether mapper found the exact match.
99	 *							If mapper is not sure whether it's exact match, ignore this paramter.
100	 * Return Value:
101	 *			An opaque pointer for font handle, or NULL if system mapping is not supported.
102	 **/
103	void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis, int weight, int bItalic, int charset, int pitch_family,
104						const char* face, int* bExact);
105
106	/**
107	 * Method: GetFont
108	 *			Get a handle to a particular font by its internal ID
109	 * Interface Version:
110	 *			1
111	 * Implementation Required:
112	 *			Yes only if MapFont method is not implemented.
113	 * Comments:
114	 *			If the system mapping not supported, Foxit SDK will do the font mapping and use this method to get a font handle.
115	 * Parameters:
116	 *			pThis		-	Pointer to the interface structure itself
117	 *			face		-	Typeface name. Currently use system local encoding only.
118	 * Return Value:
119	 *			An opaque pointer for font handle.
120	 **/
121	void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
122
123	/**
124	 * Method: GetFontData
125	 *			Get font data from a font
126	 * Interface Version:
127	 *			1
128	 * Implementation Required:
129	 *			Yes
130	 * Comments:
131	 *			Can read either full font file, or a particular TrueType/OpenType table
132	 * Parameters:
133	 *			pThis		-	Pointer to the interface structure itself
134	 *			hFont		-	Font handle returned by MapFont or GetFont method
135	 *			table		-	TrueType/OpenType table identifier (refer to TrueType specification).
136	 *							0 for the whole font file.
137	 *			buffer		-	The buffer receiving the font data. Can be NULL if not provided
138	 *			buf_size	-	Buffer size, can be zero if not provided
139	 * Return Value:
140	 *			Number of bytes needed, if buffer not provided or not large enough,
141	 *			or number of bytes written into buffer otherwise.
142	 **/
143	unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis, void* hFont,
144			unsigned int table, unsigned char* buffer, unsigned long buf_size);
145
146	/**
147	 * Method: GetFaceName
148	 *			Get face name from a font handle
149	 * Interface Version:
150	 *			1
151	 * Implementation Required:
152	 *			No
153	 * Parameters:
154	 *			pThis		-	Pointer to the interface structure itself
155	 *			hFont		-	Font handle returned by MapFont or GetFont method
156	 *			buffer		-	The buffer receiving the face name. Can be NULL if not provided
157	 *			buf_size	-	Buffer size, can be zero if not provided
158	 * Return Value:
159	 *			Number of bytes needed, if buffer not provided or not large enough,
160	 *			or number of bytes written into buffer otherwise.
161	 **/
162	unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis, void* hFont, char* buffer, unsigned long buf_size);
163
164	/**
165	 * Method: GetFontCharset
166	 *			Get character set information for a font handle
167	 * Interface Version:
168	 *			1
169	 * Implementation Required:
170	 *			No
171	 * Parameters:
172	 *			pThis		-	Pointer to the interface structure itself
173	 *			hFont		-	Font handle returned by MapFont or GetFont method
174	 * Return Value:
175	 *			Character set identifier. See defined constants above.
176	 **/
177	int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
178
179	/**
180	 * Method: DeleteFont
181	 *			Delete a font handle
182	 * Interface Version:
183	 *			1
184	 * Implementation Required:
185	 *			Yes
186	 * Parameters:
187	 *			pThis		-	Pointer to the interface structure itself
188	 *			hFont		-	Font handle returned by MapFont or GetFont method
189	 * Return Value:
190	 *			None
191	 **/
192	void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
193} FPDF_SYSFONTINFO;
194
195/**
196 * Function: FPDF_AddInstalledFont
197 *			Add a system font to the list in Foxit SDK.
198 * Comments:
199 *			This function is only called during the system font list building process.
200 * Parameters:
201 *			mapper			-	Opaque pointer to Foxit font mapper
202 *			face			-	The font face name
203 *			charset			-	Font character set. See above defined constants.
204 * Return Value:
205 *			None.
206 **/
207DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper, const char* face, int charset);
208
209/**
210 * Function: FPDF_SetSystemFontInfo
211 *			Set the system font info interface into Foxit SDK
212 * Comments:
213 *			Platform support implementation should implement required methods of FFDF_SYSFONTINFO interface,
214 *			then call this function during SDK initialization process.
215 * Parameters:
216 *			pFontInfo		-	Pointer to a FPDF_SYSFONTINFO structure
217 * Return Value:
218 *			None
219 **/
220DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
221
222/**
223 * Function: FPDF_GetDefaultSystemFontInfo
224 *			Get default system font info interface for current platform
225 * Comments:
226 *			For some platforms Foxit SDK implement a default version of system font info interface.
227 *			The default implementation can be used in FPDF_SetSystemFontInfo function.
228 * Parameters:
229 *			None
230 * Return Value:
231 *			Pointer to a FPDF_SYSFONTINFO structure describing the default interface.
232 *			Or NULL if the platform doesn't have a default interface.
233 *			Application should call FPDF_FreeMemory to free the returned pointer.
234 **/
235DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo();
236
237#ifdef __cplusplus
238};
239#endif
240
241#endif // _FPDF_SYSFONTINFO_H
242