Home | History | Annotate | Download | only in include
      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
     32 extern "C" {
     33 #endif
     34 
     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 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  **/
    207 DLLEXPORT 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  **/
    220 DLLEXPORT 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  **/
    235 DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo();
    236 
    237 #ifdef __cplusplus
    238 };
    239 #endif
    240 
    241 #endif // _FPDF_SYSFONTINFO_H
    242