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 << 0)
     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      -   Obsolete: this parameter is now ignored.
    110    * Return Value:
    111    *          An opaque pointer for font handle, or NULL if system mapping is
    112    *not supported.
    113    **/
    114   void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis,
    115                    int weight,
    116                    FPDF_BOOL bItalic,
    117                    int charset,
    118                    int pitch_family,
    119                    const char* face,
    120                    FPDF_BOOL* bExact);
    121 
    122   /**
    123    * Method: GetFont
    124    *          Get a handle to a particular font by its internal ID
    125    * Interface Version:
    126    *          1
    127    * Implementation Required:
    128    *          Yes only if MapFont method is not implemented.
    129    * Comments:
    130    *          If the system mapping not supported, Foxit SDK will do the font
    131    *mapping and use this method to get a font handle.
    132    * Parameters:
    133    *          pThis       -   Pointer to the interface structure itself
    134    *          face        -   Typeface name. Currently use system local encoding
    135    *only.
    136    * Return Value:
    137    *          An opaque pointer for font handle.
    138    **/
    139   void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
    140 
    141   /**
    142    * Method: GetFontData
    143    *          Get font data from a font
    144    * Interface Version:
    145    *          1
    146    * Implementation Required:
    147    *          Yes
    148    * Comments:
    149    *          Can read either full font file, or a particular TrueType/OpenType
    150    *table
    151    * Parameters:
    152    *          pThis       -   Pointer to the interface structure itself
    153    *          hFont       -   Font handle returned by MapFont or GetFont method
    154    *          table       -   TrueType/OpenType table identifier (refer to
    155    *TrueType specification).
    156    *                          0 for the whole font file.
    157    *          buffer      -   The buffer receiving the font data. Can be NULL if
    158    *not provided
    159    *          buf_size    -   Buffer size, can be zero if not provided
    160    * Return Value:
    161    *          Number of bytes needed, if buffer not provided or not large
    162    *enough,
    163    *          or number of bytes written into buffer otherwise.
    164    **/
    165   unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis,
    166                                void* hFont,
    167                                unsigned int table,
    168                                unsigned char* buffer,
    169                                unsigned long buf_size);
    170 
    171   /**
    172    * Method: GetFaceName
    173    *          Get face name from a font handle
    174    * Interface Version:
    175    *          1
    176    * Implementation Required:
    177    *          No
    178    * Parameters:
    179    *          pThis       -   Pointer to the interface structure itself
    180    *          hFont       -   Font handle returned by MapFont or GetFont method
    181    *          buffer      -   The buffer receiving the face name. Can be NULL if
    182    *not provided
    183    *          buf_size    -   Buffer size, can be zero if not provided
    184    * Return Value:
    185    *          Number of bytes needed, if buffer not provided or not large
    186    *enough,
    187    *          or number of bytes written into buffer otherwise.
    188    **/
    189   unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis,
    190                                void* hFont,
    191                                char* buffer,
    192                                unsigned long buf_size);
    193 
    194   /**
    195    * Method: GetFontCharset
    196    *          Get character set information for a font handle
    197    * Interface Version:
    198    *          1
    199    * Implementation Required:
    200    *          No
    201    * Parameters:
    202    *          pThis       -   Pointer to the interface structure itself
    203    *          hFont       -   Font handle returned by MapFont or GetFont method
    204    * Return Value:
    205    *          Character set identifier. See defined constants above.
    206    **/
    207   int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
    208 
    209   /**
    210    * Method: DeleteFont
    211    *          Delete a font handle
    212    * Interface Version:
    213    *          1
    214    * Implementation Required:
    215    *          Yes
    216    * Parameters:
    217    *          pThis       -   Pointer to the interface structure itself
    218    *          hFont       -   Font handle returned by MapFont or GetFont method
    219    * Return Value:
    220    *          None
    221    **/
    222   void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
    223 } FPDF_SYSFONTINFO;
    224 
    225 /**
    226  * Struct: FPDF_CharsetFontMap
    227  *    Provides the name of a font to use for a given charset value.
    228  **/
    229 typedef struct FPDF_CharsetFontMap_ {
    230   int charset;  // Character Set Enum value, see FXFONT_*_CHARSET above.
    231   const char* fontname;  // Name of default font to use with that charset.
    232 } FPDF_CharsetFontMap;
    233 
    234 /**
    235  * Function: FPDF_GetDefaultTTFMap
    236  *    Returns a pointer to the default character set to TT Font name map. The
    237  *    map is an array of FPDF_CharsetFontMap structs, with its end indicated
    238  *    by a { -1, NULL } entry.
    239  * Parameters:
    240  *     None.
    241  * Return Value:
    242  *     Pointer to the Charset Font Map.
    243  **/
    244 FPDF_EXPORT const FPDF_CharsetFontMap* FPDF_CALLCONV FPDF_GetDefaultTTFMap();
    245 
    246 /**
    247  * Function: FPDF_AddInstalledFont
    248  *          Add a system font to the list in Foxit SDK.
    249  * Comments:
    250  *          This function is only called during the system font list building
    251  *process.
    252  * Parameters:
    253  *          mapper          -   Opaque pointer to Foxit font mapper
    254  *          face            -   The font face name
    255  *          charset         -   Font character set. See above defined constants.
    256  * Return Value:
    257  *          None.
    258  **/
    259 FPDF_EXPORT void FPDF_CALLCONV FPDF_AddInstalledFont(void* mapper,
    260                                                      const char* face,
    261                                                      int charset);
    262 
    263 /**
    264  * Function: FPDF_SetSystemFontInfo
    265  *          Set the system font info interface into Foxit SDK
    266  * Comments:
    267  *          Platform support implementation should implement required methods of
    268  *FFDF_SYSFONTINFO interface,
    269  *          then call this function during SDK initialization process.
    270  * Parameters:
    271  *          pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
    272  * Return Value:
    273  *          None
    274  **/
    275 FPDF_EXPORT void FPDF_CALLCONV
    276 FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
    277 
    278 /**
    279  * Function: FPDF_GetDefaultSystemFontInfo
    280  *          Get default system font info interface for current platform
    281  * Comments:
    282  *          For some platforms Foxit SDK implement a default version of system
    283  *font info interface.
    284  *          The default implementation can be used in FPDF_SetSystemFontInfo
    285  *function.
    286  * Parameters:
    287  *          None
    288  * Return Value:
    289  *          Pointer to a FPDF_SYSFONTINFO structure describing the default
    290  *interface.
    291  *          Or NULL if the platform doesn't have a default interface.
    292  *          Application should call FPDF_FreeDefaultSystemFontInfo to free the
    293  *returned pointer.
    294  **/
    295 FPDF_EXPORT FPDF_SYSFONTINFO* FPDF_CALLCONV FPDF_GetDefaultSystemFontInfo();
    296 
    297 /**
    298  * Function: FPDF_FreeDefaultSystemFontInfo
    299  *           Free a default system font info interface
    300  * Comments:
    301  *           This function should be called on the output from
    302  *FPDF_SetSystemFontInfo once it is no longer needed by the client.
    303  * Parameters:
    304  *           pFontInfo       -   Pointer to a FPDF_SYSFONTINFO structure
    305  * Return Value:
    306  *          None
    307  **/
    308 FPDF_EXPORT void FPDF_CALLCONV
    309 FPDF_FreeDefaultSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
    310 
    311 #ifdef __cplusplus
    312 }
    313 #endif
    314 
    315 #endif  // PUBLIC_FPDF_SYSFONTINFO_H_
    316