Home | History | Annotate | Download | only in public
      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 #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  * Interface: FPDF_SYSFONTINFO
     37  *          Interface for getting system font information and font mapping
     38  */
     39 typedef struct _FPDF_SYSFONTINFO {
     40     /**
     41      * Version number of the interface. Currently must be 1.
     42      **/
     43     int version;
     44 
     45     /**
     46      * Method: Release
     47      *          Give implementation a chance to release any data after the interface is no longer used
     48      * Interface Version:
     49      *          1
     50      * Implementation Required:
     51      *          No
     52      * Comments:
     53      *          Called by Foxit SDK during the final cleanup process.
     54      * Parameters:
     55      *          pThis       -   Pointer to the interface structure itself
     56      * Return Value:
     57      *          None
     58      */
     59     void (*Release)(struct _FPDF_SYSFONTINFO* pThis);
     60 
     61     /**
     62      * Method: EnumFonts
     63      *          Enumerate all fonts installed on the system
     64      * Interface Version:
     65      *          1
     66      * Implementation Required:
     67      *          No
     68      * Comments:
     69      *          Implementation should call FPDF_AddIntalledFont() function for each font found.
     70      *          Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
     71      * Parameters:
     72      *          pThis       -   Pointer to the interface structure itself
     73      *          pMapper     -   An opaque pointer to internal font mapper, used when calling FPDF_AddInstalledFont
     74      * Return Value:
     75      *          None
     76      */
     77     void (*EnumFonts)(struct _FPDF_SYSFONTINFO* pThis, void* pMapper);
     78 
     79     /**
     80      * Method: MapFont
     81      *          Use the system font mapper to get a font handle from requested parameters
     82      * Interface Version:
     83      *          1
     84      * Implementation Required:
     85      *          Yes only if GetFont method is not implemented.
     86      * Comments:
     87      *          If the system supports native font mapper (like Windows), implementation can implement this method to get a font handle.
     88      *          Otherwise, Foxit SDK will do the mapping and then call GetFont method.
     89      *          Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
     90      * Parameters:
     91      *          pThis       -   Pointer to the interface structure itself
     92      *          weight      -   Weight of the requested font. 400 is normal and 700 is bold.
     93      *          bItalic     -   Italic option of the requested font, TRUE or FALSE.
     94      *          charset     -   Character set identifier for the requested font. See above defined constants.
     95      *          pitch_family -  A combination of flags. See above defined constants.
     96      *          face        -   Typeface name. Currently use system local encoding only.
     97      *          bExact      -   Pointer to an boolean value receiving the indicator whether mapper found the exact match.
     98      *                          If mapper is not sure whether it's exact match, ignore this paramter.
     99      * Return Value:
    100      *          An opaque pointer for font handle, or NULL if system mapping is not supported.
    101      **/
    102     void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis, int weight, int bItalic, int charset, int pitch_family,
    103                         const char* face, int* bExact);
    104 
    105     /**
    106      * Method: GetFont
    107      *          Get a handle to a particular font by its internal ID
    108      * Interface Version:
    109      *          1
    110      * Implementation Required:
    111      *          Yes only if MapFont method is not implemented.
    112      * Comments:
    113      *          If the system mapping not supported, Foxit SDK will do the font mapping and use this method to get a font handle.
    114      * Parameters:
    115      *          pThis       -   Pointer to the interface structure itself
    116      *          face        -   Typeface name. Currently use system local encoding only.
    117      * Return Value:
    118      *          An opaque pointer for font handle.
    119      **/
    120     void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
    121 
    122     /**
    123      * Method: GetFontData
    124      *          Get font data from a font
    125      * Interface Version:
    126      *          1
    127      * Implementation Required:
    128      *          Yes
    129      * Comments:
    130      *          Can read either full font file, or a particular TrueType/OpenType table
    131      * Parameters:
    132      *          pThis       -   Pointer to the interface structure itself
    133      *          hFont       -   Font handle returned by MapFont or GetFont method
    134      *          table       -   TrueType/OpenType table identifier (refer to TrueType specification).
    135      *                          0 for the whole font file.
    136      *          buffer      -   The buffer receiving the font data. Can be NULL if not provided
    137      *          buf_size    -   Buffer size, can be zero if not provided
    138      * Return Value:
    139      *          Number of bytes needed, if buffer not provided or not large enough,
    140      *          or number of bytes written into buffer otherwise.
    141      **/
    142     unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis, void* hFont,
    143             unsigned int table, unsigned char* buffer, unsigned long buf_size);
    144 
    145     /**
    146      * Method: GetFaceName
    147      *          Get face name from a font handle
    148      * Interface Version:
    149      *          1
    150      * Implementation Required:
    151      *          No
    152      * Parameters:
    153      *          pThis       -   Pointer to the interface structure itself
    154      *          hFont       -   Font handle returned by MapFont or GetFont method
    155      *          buffer      -   The buffer receiving the face name. Can be NULL if not provided
    156      *          buf_size    -   Buffer size, can be zero if not provided
    157      * Return Value:
    158      *          Number of bytes needed, if buffer not provided or not large enough,
    159      *          or number of bytes written into buffer otherwise.
    160      **/
    161     unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis, void* hFont, char* buffer, unsigned long buf_size);
    162 
    163     /**
    164      * Method: GetFontCharset
    165      *          Get character set information for a font handle
    166      * Interface Version:
    167      *          1
    168      * Implementation Required:
    169      *          No
    170      * Parameters:
    171      *          pThis       -   Pointer to the interface structure itself
    172      *          hFont       -   Font handle returned by MapFont or GetFont method
    173      * Return Value:
    174      *          Character set identifier. See defined constants above.
    175      **/
    176     int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
    177 
    178     /**
    179      * Method: DeleteFont
    180      *          Delete a font handle
    181      * Interface Version:
    182      *          1
    183      * Implementation Required:
    184      *          Yes
    185      * Parameters:
    186      *          pThis       -   Pointer to the interface structure itself
    187      *          hFont       -   Font handle returned by MapFont or GetFont method
    188      * Return Value:
    189      *          None
    190      **/
    191     void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
    192 } FPDF_SYSFONTINFO;
    193 
    194 /**
    195  * Struct: FPDF_CharsetFontMap
    196  *    Provides the name of a font to use for a given charset value.
    197  **/
    198 typedef struct FPDF_CharsetFontMap_
    199 {
    200     int charset;  // Character Set Enum value, see FXFONT_*_CHARSET above.
    201     const char* fontname;  // Name of default font to use with that charset.
    202 } FPDF_CharsetFontMap;
    203 
    204 /**
    205  * Function: FPDF_GetDefaultTTFMap
    206  *    Returns a pointer to the default character set to TT Font name map. The
    207  *    map is an array of FPDF_CharsetFontMap structs, with its end indicated
    208  *    by a { -1, NULL } entry.
    209  * Parameters:
    210  *     None.
    211  * Return Value:
    212  *     Pointer to the Charset Font Map.
    213  **/
    214 DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap();
    215 
    216 /**
    217  * Function: FPDF_AddInstalledFont
    218  *          Add a system font to the list in Foxit SDK.
    219  * Comments:
    220  *          This function is only called during the system font list building process.
    221  * Parameters:
    222  *          mapper          -   Opaque pointer to Foxit font mapper
    223  *          face            -   The font face name
    224  *          charset         -   Font character set. See above defined constants.
    225  * Return Value:
    226  *          None.
    227  **/
    228 DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper, const char* face, int charset);
    229 
    230 /**
    231  * Function: FPDF_SetSystemFontInfo
    232  *          Set the system font info interface into Foxit SDK
    233  * Comments:
    234  *          Platform support implementation should implement required methods of FFDF_SYSFONTINFO interface,
    235  *          then call this function during SDK initialization process.
    236  * Parameters:
    237  *          pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
    238  * Return Value:
    239  *          None
    240  **/
    241 DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
    242 
    243 /**
    244  * Function: FPDF_GetDefaultSystemFontInfo
    245  *          Get default system font info interface for current platform
    246  * Comments:
    247  *          For some platforms Foxit SDK implement a default version of system font info interface.
    248  *          The default implementation can be used in FPDF_SetSystemFontInfo function.
    249  * Parameters:
    250  *          None
    251  * Return Value:
    252  *          Pointer to a FPDF_SYSFONTINFO structure describing the default interface.
    253  *          Or NULL if the platform doesn't have a default interface.
    254  *          Application should call FPDF_FreeMemory to free the returned pointer.
    255  **/
    256 DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo();
    257 
    258 #ifdef __cplusplus
    259 }
    260 #endif
    261 
    262 #endif  // PUBLIC_FPDF_SYSFONTINFO_H_
    263