// Copyright 2014 The PDFium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef PUBLIC_FPDF_SYSFONTINFO_H_ #define PUBLIC_FPDF_SYSFONTINFO_H_ #include // clang-format off // NOLINTNEXTLINE(build/include) #include "fpdfview.h" // Character sets for the font #define FXFONT_ANSI_CHARSET 0 #define FXFONT_DEFAULT_CHARSET 1 #define FXFONT_SYMBOL_CHARSET 2 #define FXFONT_SHIFTJIS_CHARSET 128 #define FXFONT_HANGEUL_CHARSET 129 #define FXFONT_GB2312_CHARSET 134 #define FXFONT_CHINESEBIG5_CHARSET 136 #define FXFONT_GREEK_CHARSET 161 #define FXFONT_VIETNAMESE_CHARSET 163 #define FXFONT_HEBREW_CHARSET 177 #define FXFONT_ARABIC_CHARSET 178 #define FXFONT_CYRILLIC_CHARSET 204 #define FXFONT_THAI_CHARSET 222 #define FXFONT_EASTERNEUROPEAN_CHARSET 238 // Font pitch and family flags #define FXFONT_FF_FIXEDPITCH (1 << 0) #define FXFONT_FF_ROMAN (1 << 4) #define FXFONT_FF_SCRIPT (4 << 4) // Typical weight values #define FXFONT_FW_NORMAL 400 #define FXFONT_FW_BOLD 700 // Exported Functions #ifdef __cplusplus extern "C" { #endif // Interface: FPDF_SYSFONTINFO // Interface for getting system font information and font mapping typedef struct _FPDF_SYSFONTINFO { // Version number of the interface. Currently must be 1. int version; // Method: Release // Give implementation a chance to release any data after the // interface is no longer used. // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself // Return Value: // None // Comments: // Called by PDFium during the final cleanup process. void (*Release)(struct _FPDF_SYSFONTINFO* pThis); // Method: EnumFonts // Enumerate all fonts installed on the system // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself // pMapper - An opaque pointer to internal font mapper, used // when calling FPDF_AddInstalledFont(). // Return Value: // None // Comments: // Implementations should call FPDF_AddInstalledFont() function for // each font found. Only TrueType/OpenType and Type1 fonts are // accepted by PDFium. void (*EnumFonts)(struct _FPDF_SYSFONTINFO* pThis, void* pMapper); // Method: MapFont // Use the system font mapper to get a font handle from requested // parameters. // Interface Version: // 1 // Implementation Required: // Required if GetFont method is not implemented. // Parameters: // pThis - Pointer to the interface structure itself // weight - Weight of the requested font. 400 is normal and // 700 is bold. // bItalic - Italic option of the requested font, TRUE or // FALSE. // charset - Character set identifier for the requested font. // See above defined constants. // pitch_family - A combination of flags. See above defined // constants. // face - Typeface name. Currently use system local encoding // only. // bExact - Obsolete: this parameter is now ignored. // Return Value: // An opaque pointer for font handle, or NULL if system mapping is // not supported. // Comments: // If the system supports native font mapper (like Windows), // implementation can implement this method to get a font handle. // Otherwise, PDFium will do the mapping and then call GetFont // method. Only TrueType/OpenType and Type1 fonts are accepted // by PDFium. void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis, int weight, FPDF_BOOL bItalic, int charset, int pitch_family, const char* face, FPDF_BOOL* bExact); // Method: GetFont // Get a handle to a particular font by its internal ID // Interface Version: // 1 // Implementation Required: // Required if MapFont method is not implemented. // Return Value: // An opaque pointer for font handle. // Parameters: // pThis - Pointer to the interface structure itself // face - Typeface name in system local encoding. // Comments: // If the system mapping not supported, PDFium will do the font // mapping and use this method to get a font handle. void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face); // Method: GetFontData // Get font data from a font // Interface Version: // 1 // Implementation Required: // Yes // Parameters: // pThis - Pointer to the interface structure itself // hFont - Font handle returned by MapFont or GetFont method // table - TrueType/OpenType table identifier (refer to // TrueType specification), or 0 for the whole file. // buffer - The buffer receiving the font data. Can be NULL if // not provided. // buf_size - Buffer size, can be zero if not provided. // Return Value: // Number of bytes needed, if buffer not provided or not large // enough, or number of bytes written into buffer otherwise. // Comments: // Can read either the full font file, or a particular // TrueType/OpenType table. unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis, void* hFont, unsigned int table, unsigned char* buffer, unsigned long buf_size); // Method: GetFaceName // Get face name from a font handle // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself // hFont - Font handle returned by MapFont or GetFont method // buffer - The buffer receiving the face name. Can be NULL if // not provided // buf_size - Buffer size, can be zero if not provided // Return Value: // Number of bytes needed, if buffer not provided or not large // enough, or number of bytes written into buffer otherwise. unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis, void* hFont, char* buffer, unsigned long buf_size); // Method: GetFontCharset // Get character set information for a font handle // Interface Version: // 1 // Implementation Required: // No // Parameters: // pThis - Pointer to the interface structure itself // hFont - Font handle returned by MapFont or GetFont method // Return Value: // Character set identifier. See defined constants above. int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont); // Method: DeleteFont // Delete a font handle // Interface Version: // 1 // Implementation Required: // Yes // Parameters: // pThis - Pointer to the interface structure itself // hFont - Font handle returned by MapFont or GetFont method // Return Value: // None void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont); } FPDF_SYSFONTINFO; // Struct: FPDF_CharsetFontMap // Provides the name of a font to use for a given charset value. typedef struct FPDF_CharsetFontMap_ { int charset; // Character Set Enum value, see FXFONT_*_CHARSET above. const char* fontname; // Name of default font to use with that charset. } FPDF_CharsetFontMap; // Function: FPDF_GetDefaultTTFMap // Returns a pointer to the default character set to TT Font name map. The // map is an array of FPDF_CharsetFontMap structs, with its end indicated // by a { -1, NULL } entry. // Parameters: // None. // Return Value: // Pointer to the Charset Font Map. // Note: // Once FPDF_GetDefaultTTFMapCount() and FPDF_GetDefaultTTFMapEntry() are no // longer experimental, this API will be marked as deprecated. // See https://crbug.com/348468114 FPDF_EXPORT const FPDF_CharsetFontMap* FPDF_CALLCONV FPDF_GetDefaultTTFMap(); // Experimental API. // // Function: FPDF_GetDefaultTTFMapCount // Returns the number of entries in the default character set to TT Font name // map. // Parameters: // None. // Return Value: // The number of entries in the map. FPDF_EXPORT size_t FPDF_CALLCONV FPDF_GetDefaultTTFMapCount(); // Experimental API. // // Function: FPDF_GetDefaultTTFMapEntry // Returns an entry in the default character set to TT Font name map. // Parameters: // index - The index to the entry in the map to retrieve. // Return Value: // A pointer to the entry, if it is in the map, or NULL if the index is out // of bounds. FPDF_EXPORT const FPDF_CharsetFontMap* FPDF_CALLCONV FPDF_GetDefaultTTFMapEntry(size_t index); // Function: FPDF_AddInstalledFont // Add a system font to the list in PDFium. // Comments: // This function is only called during the system font list building // process. // Parameters: // mapper - Opaque pointer to Foxit font mapper // face - The font face name // charset - Font character set. See above defined constants. // Return Value: // None. FPDF_EXPORT void FPDF_CALLCONV FPDF_AddInstalledFont(void* mapper, const char* face, int charset); // Function: FPDF_SetSystemFontInfo // Set the system font info interface into PDFium // Parameters: // pFontInfo - Pointer to a FPDF_SYSFONTINFO structure // Return Value: // None // Comments: // Platform support implementation should implement required methods of // FFDF_SYSFONTINFO interface, then call this function during PDFium // initialization process. // // Call this with NULL to tell PDFium to stop using a previously set // |FPDF_SYSFONTINFO|. FPDF_EXPORT void FPDF_CALLCONV FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo); // Function: FPDF_GetDefaultSystemFontInfo // Get default system font info interface for current platform // Parameters: // None // Return Value: // Pointer to a FPDF_SYSFONTINFO structure describing the default // interface, or NULL if the platform doesn't have a default interface. // Application should call FPDF_FreeDefaultSystemFontInfo to free the // returned pointer. // Comments: // For some platforms, PDFium implements a default version of system // font info interface. The default implementation can be passed to // FPDF_SetSystemFontInfo(). FPDF_EXPORT FPDF_SYSFONTINFO* FPDF_CALLCONV FPDF_GetDefaultSystemFontInfo(); // Function: FPDF_FreeDefaultSystemFontInfo // Free a default system font info interface // Parameters: // pFontInfo - Pointer to a FPDF_SYSFONTINFO structure // Return Value: // None // Comments: // This function should be called on the output from // FPDF_GetDefaultSystemFontInfo() once it is no longer needed. FPDF_EXPORT void FPDF_CALLCONV FPDF_FreeDefaultSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo); #ifdef __cplusplus } #endif #endif // PUBLIC_FPDF_SYSFONTINFO_H_