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 // NOLINTNEXTLINE(build/include)
     11 #include "fpdfview.h"
     12 
     13 /* Character sets for the font */
     14 #define FXFONT_ANSI_CHARSET 0
     15 #define FXFONT_DEFAULT_CHARSET 1
     16 #define FXFONT_SYMBOL_CHARSET 2
     17 #define FXFONT_SHIFTJIS_CHARSET 128
     18 #define FXFONT_HANGEUL_CHARSET 129
     19 #define FXFONT_GB2312_CHARSET 134
     20 #define FXFONT_CHINESEBIG5_CHARSET 136
     21 
     22 /* Font pitch and family flags */
     23 #define FXFONT_FF_FIXEDPITCH 1
     24 #define FXFONT_FF_ROMAN (1 << 4)
     25 #define FXFONT_FF_SCRIPT (4 << 4)
     26 
     27 /* Typical weight values */
     28 #define FXFONT_FW_NORMAL 400
     29 #define FXFONT_FW_BOLD 700
     30 
     31 // Exported Functions
     32 #ifdef __cplusplus
     33 extern "C" {
     34 #endif
     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
     49    * interface is no longer used
     50    * Interface Version:
     51    *          1
     52    * Implementation Required:
     53    *          No
     54    * Comments:
     55    *          Called by Foxit SDK during the final cleanup process.
     56    * Parameters:
     57    *          pThis       -   Pointer to the interface structure itself
     58    * Return Value:
     59    *          None
     60    */
     61   void (*Release)(struct _FPDF_SYSFONTINFO* pThis);
     62 
     63   /**
     64    * Method: EnumFonts
     65    *          Enumerate all fonts installed on the system
     66    * Interface Version:
     67    *          1
     68    * Implementation Required:
     69    *          No
     70    * Comments:
     71    *          Implementation should call FPDF_AddIntalledFont() function for
     72    * each font found.
     73    *          Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
     74    * Parameters:
     75    *          pThis       -   Pointer to the interface structure itself
     76    *          pMapper     -   An opaque pointer to internal font mapper, used
     77    * when calling FPDF_AddInstalledFont
     78    * Return Value:
     79    *          None
     80    */
     81   void (*EnumFonts)(struct _FPDF_SYSFONTINFO* pThis, void* pMapper);
     82 
     83   /**
     84    * Method: MapFont
     85    *          Use the system font mapper to get a font handle from requested
     86    *parameters
     87    * Interface Version:
     88    *          1
     89    * Implementation Required:
     90    *          Yes only if GetFont method is not implemented.
     91    * Comments:
     92    *          If the system supports native font mapper (like Windows),
     93    *implementation can implement this method to get a font handle.
     94    *          Otherwise, Foxit SDK will do the mapping and then call GetFont
     95    *method.
     96    *          Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
     97    * Parameters:
     98    *          pThis       -   Pointer to the interface structure itself
     99    *          weight      -   Weight of the requested font. 400 is normal and
    100    *700 is bold.
    101    *          bItalic     -   Italic option of the requested font, TRUE or
    102    *FALSE.
    103    *          charset     -   Character set identifier for the requested font.
    104    *See above defined constants.
    105    *          pitch_family -  A combination of flags. See above defined
    106    *constants.
    107    *          face        -   Typeface name. Currently use system local encoding
    108    *only.
    109    *          bExact      -   Pointer to a boolean value receiving the indicator
    110    *whether mapper found the exact match.
    111    *                          If mapper is not sure whether it's exact match,
    112    *ignore this paramter.
    113    * Return Value:
    114    *          An opaque pointer for font handle, or NULL if system mapping is
    115    *not supported.
    116    **/
    117   void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis,
    118                    int weight,
    119                    FPDF_BOOL bItalic,
    120                    int charset,
    121                    int pitch_family,
    122                    const char* face,
    123                    FPDF_BOOL* bExact);
    124 
    125   /**
    126    * Method: GetFont
    127    *          Get a handle to a particular font by its internal ID
    128    * Interface Version:
    129    *          1
    130    * Implementation Required:
    131    *          Yes only if MapFont method is not implemented.
    132    * Comments:
    133    *          If the system mapping not supported, Foxit SDK will do the font
    134    *mapping and use this method to get a font handle.
    135    * Parameters:
    136    *          pThis       -   Pointer to the interface structure itself
    137    *          face        -   Typeface name. Currently use system local encoding
    138    *only.
    139    * Return Value:
    140    *          An opaque pointer for font handle.
    141    **/
    142   void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
    143 
    144   /**
    145    * Method: GetFontData
    146    *          Get font data from a font
    147    * Interface Version:
    148    *          1
    149    * Implementation Required:
    150    *          Yes
    151    * Comments:
    152    *          Can read either full font file, or a particular TrueType/OpenType
    153    *table
    154    * Parameters:
    155    *          pThis       -   Pointer to the interface structure itself
    156    *          hFont       -   Font handle returned by MapFont or GetFont method
    157    *          table       -   TrueType/OpenType table identifier (refer to
    158    *TrueType specification).
    159    *                          0 for the whole font file.
    160    *          buffer      -   The buffer receiving the font data. Can be NULL if
    161    *not provided
    162    *          buf_size    -   Buffer size, can be zero if not provided
    163    * Return Value:
    164    *          Number of bytes needed, if buffer not provided or not large
    165    *enough,
    166    *          or number of bytes written into buffer otherwise.
    167    **/
    168   unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis,
    169                                void* hFont,
    170                                unsigned int table,
    171                                unsigned char* buffer,
    172                                unsigned long buf_size);
    173 
    174   /**
    175    * Method: GetFaceName
    176    *          Get face name from a font handle
    177    * Interface Version:
    178    *          1
    179    * Implementation Required:
    180    *          No
    181    * Parameters:
    182    *          pThis       -   Pointer to the interface structure itself
    183    *          hFont       -   Font handle returned by MapFont or GetFont method
    184    *          buffer      -   The buffer receiving the face name. Can be NULL if
    185    *not provided
    186    *          buf_size    -   Buffer size, can be zero if not provided
    187    * Return Value:
    188    *          Number of bytes needed, if buffer not provided or not large
    189    *enough,
    190    *          or number of bytes written into buffer otherwise.
    191    **/
    192   unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis,
    193                                void* hFont,
    194                                char* buffer,
    195                                unsigned long buf_size);
    196 
    197   /**
    198    * Method: GetFontCharset
    199    *          Get character set information for a font handle
    200    * Interface Version:
    201    *          1
    202    * Implementation Required:
    203    *          No
    204    * Parameters:
    205    *          pThis       -   Pointer to the interface structure itself
    206    *          hFont       -   Font handle returned by MapFont or GetFont method
    207    * Return Value:
    208    *          Character set identifier. See defined constants above.
    209    **/
    210   int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
    211 
    212   /**
    213    * Method: DeleteFont
    214    *          Delete a font handle
    215    * Interface Version:
    216    *          1
    217    * Implementation Required:
    218    *          Yes
    219    * Parameters:
    220    *          pThis       -   Pointer to the interface structure itself
    221    *          hFont       -   Font handle returned by MapFont or GetFont method
    222    * Return Value:
    223    *          None
    224    **/
    225   void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
    226 } FPDF_SYSFONTINFO;
    227 
    228 /**
    229  * Struct: FPDF_CharsetFontMap
    230  *    Provides the name of a font to use for a given charset value.
    231  **/
    232 typedef struct FPDF_CharsetFontMap_ {
    233   int charset;  // Character Set Enum value, see FXFONT_*_CHARSET above.
    234   const char* fontname;  // Name of default font to use with that charset.
    235 } FPDF_CharsetFontMap;
    236 
    237 /**
    238  * Function: FPDF_GetDefaultTTFMap
    239  *    Returns a pointer to the default character set to TT Font name map. The
    240  *    map is an array of FPDF_CharsetFontMap structs, with its end indicated
    241  *    by a { -1, NULL } entry.
    242  * Parameters:
    243  *     None.
    244  * Return Value:
    245  *     Pointer to the Charset Font Map.
    246  **/
    247 DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap();
    248 
    249 /**
    250  * Function: FPDF_AddInstalledFont
    251  *          Add a system font to the list in Foxit SDK.
    252  * Comments:
    253  *          This function is only called during the system font list building
    254  *process.
    255  * Parameters:
    256  *          mapper          -   Opaque pointer to Foxit font mapper
    257  *          face            -   The font face name
    258  *          charset         -   Font character set. See above defined constants.
    259  * Return Value:
    260  *          None.
    261  **/
    262 DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper,
    263                                              const char* face,
    264                                              int charset);
    265 
    266 /**
    267  * Function: FPDF_SetSystemFontInfo
    268  *          Set the system font info interface into Foxit SDK
    269  * Comments:
    270  *          Platform support implementation should implement required methods of
    271  *FFDF_SYSFONTINFO interface,
    272  *          then call this function during SDK initialization process.
    273  * Parameters:
    274  *          pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
    275  * Return Value:
    276  *          None
    277  **/
    278 DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
    279 
    280 /**
    281  * Function: FPDF_GetDefaultSystemFontInfo
    282  *          Get default system font info interface for current platform
    283  * Comments:
    284  *          For some platforms Foxit SDK implement a default version of system
    285  *font info interface.
    286  *          The default implementation can be used in FPDF_SetSystemFontInfo
    287  *function.
    288  * Parameters:
    289  *          None
    290  * Return Value:
    291  *          Pointer to a FPDF_SYSFONTINFO structure describing the default
    292  *interface.
    293  *          Or NULL if the platform doesn't have a default interface.
    294  *          Application should call FPDF_FreeDefaultSystemFontInfo to free the
    295  *returned pointer.
    296  **/
    297 DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo();
    298 
    299 /**
    300  * Function: FPDF_FreeDefaultSystemFontInfo
    301  *           Free a default system font info interface
    302  * Comments:
    303  *           This function should be called on the output from
    304  *FPDF_SetSystemFontInfo once it is no longer needed by the client.
    305  * Parameters:
    306  *           pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
    307  * Return Value:
    308  *          None
    309  **/
    310 DLLEXPORT void FPDF_FreeDefaultSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
    311 
    312 #ifdef __cplusplus
    313 }
    314 #endif
    315 
    316 #endif  // PUBLIC_FPDF_SYSFONTINFO_H_
    317