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