blob: 2dac855ad4e6501f4c6fa63e43ed3241a47a9e71 [file] [log] [blame]
// 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 <stddef.h>
// 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_