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