Home | History | Annotate | Download | only in freetype
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  t1tables.h                                                             */
      4 /*                                                                         */
      5 /*    Basic Type 1/Type 2 tables definitions and interface (specification  */
      6 /*    only).                                                               */
      7 /*                                                                         */
      8 /*  Copyright 1996-2017 by                                                 */
      9 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
     10 /*                                                                         */
     11 /*  This file is part of the FreeType project, and may only be used,       */
     12 /*  modified, and distributed under the terms of the FreeType project      */
     13 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
     14 /*  this file you indicate that you have read the license and              */
     15 /*  understand and accept it fully.                                        */
     16 /*                                                                         */
     17 /***************************************************************************/
     18 
     19 
     20 #ifndef T1TABLES_H_
     21 #define T1TABLES_H_
     22 
     23 
     24 #include <ft2build.h>
     25 #include FT_FREETYPE_H
     26 
     27 #ifdef FREETYPE_H
     28 #error "freetype.h of FreeType 1 has been loaded!"
     29 #error "Please fix the directory search order for header files"
     30 #error "so that freetype.h of FreeType 2 is found first."
     31 #endif
     32 
     33 
     34 FT_BEGIN_HEADER
     35 
     36 
     37   /*************************************************************************/
     38   /*                                                                       */
     39   /* <Section>                                                             */
     40   /*    type1_tables                                                       */
     41   /*                                                                       */
     42   /* <Title>                                                               */
     43   /*    Type 1 Tables                                                      */
     44   /*                                                                       */
     45   /* <Abstract>                                                            */
     46   /*    Type~1 (PostScript) specific font tables.                          */
     47   /*                                                                       */
     48   /* <Description>                                                         */
     49   /*    This section contains the definition of Type 1-specific tables,    */
     50   /*    including structures related to other PostScript font formats.     */
     51   /*                                                                       */
     52   /* <Order>                                                               */
     53   /*    PS_FontInfoRec                                                     */
     54   /*    PS_FontInfo                                                        */
     55   /*    PS_PrivateRec                                                      */
     56   /*    PS_Private                                                         */
     57   /*                                                                       */
     58   /*    CID_FaceDictRec                                                    */
     59   /*    CID_FaceDict                                                       */
     60   /*    CID_FaceInfoRec                                                    */
     61   /*    CID_FaceInfo                                                       */
     62   /*                                                                       */
     63   /*    FT_Has_PS_Glyph_Names                                              */
     64   /*    FT_Get_PS_Font_Info                                                */
     65   /*    FT_Get_PS_Font_Private                                             */
     66   /*    FT_Get_PS_Font_Value                                               */
     67   /*                                                                       */
     68   /*    T1_Blend_Flags                                                     */
     69   /*    T1_EncodingType                                                    */
     70   /*    PS_Dict_Keys                                                       */
     71   /*                                                                       */
     72   /*************************************************************************/
     73 
     74 
     75   /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */
     76   /* structures in order to support Multiple Master fonts.               */
     77 
     78 
     79   /*************************************************************************/
     80   /*                                                                       */
     81   /* <Struct>                                                              */
     82   /*    PS_FontInfoRec                                                     */
     83   /*                                                                       */
     84   /* <Description>                                                         */
     85   /*    A structure used to model a Type~1 or Type~2 FontInfo dictionary.  */
     86   /*    Note that for Multiple Master fonts, each instance has its own     */
     87   /*    FontInfo dictionary.                                               */
     88   /*                                                                       */
     89   typedef struct  PS_FontInfoRec_
     90   {
     91     FT_String*  version;
     92     FT_String*  notice;
     93     FT_String*  full_name;
     94     FT_String*  family_name;
     95     FT_String*  weight;
     96     FT_Long     italic_angle;
     97     FT_Bool     is_fixed_pitch;
     98     FT_Short    underline_position;
     99     FT_UShort   underline_thickness;
    100 
    101   } PS_FontInfoRec;
    102 
    103 
    104   /*************************************************************************/
    105   /*                                                                       */
    106   /* <Struct>                                                              */
    107   /*    PS_FontInfo                                                        */
    108   /*                                                                       */
    109   /* <Description>                                                         */
    110   /*    A handle to a @PS_FontInfoRec structure.                           */
    111   /*                                                                       */
    112   typedef struct PS_FontInfoRec_*  PS_FontInfo;
    113 
    114 
    115   /*************************************************************************/
    116   /*                                                                       */
    117   /* <Struct>                                                              */
    118   /*    T1_FontInfo                                                        */
    119   /*                                                                       */
    120   /* <Description>                                                         */
    121   /*    This type is equivalent to @PS_FontInfoRec.  It is deprecated but  */
    122   /*    kept to maintain source compatibility between various versions of  */
    123   /*    FreeType.                                                          */
    124   /*                                                                       */
    125   typedef PS_FontInfoRec  T1_FontInfo;
    126 
    127 
    128   /*************************************************************************/
    129   /*                                                                       */
    130   /* <Struct>                                                              */
    131   /*    PS_PrivateRec                                                      */
    132   /*                                                                       */
    133   /* <Description>                                                         */
    134   /*    A structure used to model a Type~1 or Type~2 private dictionary.   */
    135   /*    Note that for Multiple Master fonts, each instance has its own     */
    136   /*    Private dictionary.                                                */
    137   /*                                                                       */
    138   typedef struct  PS_PrivateRec_
    139   {
    140     FT_Int     unique_id;
    141     FT_Int     lenIV;
    142 
    143     FT_Byte    num_blue_values;
    144     FT_Byte    num_other_blues;
    145     FT_Byte    num_family_blues;
    146     FT_Byte    num_family_other_blues;
    147 
    148     FT_Short   blue_values[14];
    149     FT_Short   other_blues[10];
    150 
    151     FT_Short   family_blues      [14];
    152     FT_Short   family_other_blues[10];
    153 
    154     FT_Fixed   blue_scale;
    155     FT_Int     blue_shift;
    156     FT_Int     blue_fuzz;
    157 
    158     FT_UShort  standard_width[1];
    159     FT_UShort  standard_height[1];
    160 
    161     FT_Byte    num_snap_widths;
    162     FT_Byte    num_snap_heights;
    163     FT_Bool    force_bold;
    164     FT_Bool    round_stem_up;
    165 
    166     FT_Short   snap_widths [13];  /* including std width  */
    167     FT_Short   snap_heights[13];  /* including std height */
    168 
    169     FT_Fixed   expansion_factor;
    170 
    171     FT_Long    language_group;
    172     FT_Long    password;
    173 
    174     FT_Short   min_feature[2];
    175 
    176   } PS_PrivateRec;
    177 
    178 
    179   /*************************************************************************/
    180   /*                                                                       */
    181   /* <Struct>                                                              */
    182   /*    PS_Private                                                         */
    183   /*                                                                       */
    184   /* <Description>                                                         */
    185   /*    A handle to a @PS_PrivateRec structure.                            */
    186   /*                                                                       */
    187   typedef struct PS_PrivateRec_*  PS_Private;
    188 
    189 
    190   /*************************************************************************/
    191   /*                                                                       */
    192   /* <Struct>                                                              */
    193   /*    T1_Private                                                         */
    194   /*                                                                       */
    195   /* <Description>                                                         */
    196   /*   This type is equivalent to @PS_PrivateRec.  It is deprecated but    */
    197   /*   kept to maintain source compatibility between various versions of   */
    198   /*   FreeType.                                                           */
    199   /*                                                                       */
    200   typedef PS_PrivateRec  T1_Private;
    201 
    202 
    203   /*************************************************************************/
    204   /*                                                                       */
    205   /* <Enum>                                                                */
    206   /*    T1_Blend_Flags                                                     */
    207   /*                                                                       */
    208   /* <Description>                                                         */
    209   /*    A set of flags used to indicate which fields are present in a      */
    210   /*    given blend dictionary (font info or private).  Used to support    */
    211   /*    Multiple Masters fonts.                                            */
    212   /*                                                                       */
    213   /* <Values>                                                              */
    214   /*    T1_BLEND_UNDERLINE_POSITION ::                                     */
    215   /*    T1_BLEND_UNDERLINE_THICKNESS ::                                    */
    216   /*    T1_BLEND_ITALIC_ANGLE ::                                           */
    217   /*    T1_BLEND_BLUE_VALUES ::                                            */
    218   /*    T1_BLEND_OTHER_BLUES ::                                            */
    219   /*    T1_BLEND_STANDARD_WIDTH ::                                         */
    220   /*    T1_BLEND_STANDARD_HEIGHT ::                                        */
    221   /*    T1_BLEND_STEM_SNAP_WIDTHS ::                                       */
    222   /*    T1_BLEND_STEM_SNAP_HEIGHTS ::                                      */
    223   /*    T1_BLEND_BLUE_SCALE ::                                             */
    224   /*    T1_BLEND_BLUE_SHIFT ::                                             */
    225   /*    T1_BLEND_FAMILY_BLUES ::                                           */
    226   /*    T1_BLEND_FAMILY_OTHER_BLUES ::                                     */
    227   /*    T1_BLEND_FORCE_BOLD ::                                             */
    228   /*                                                                       */
    229   typedef enum  T1_Blend_Flags_
    230   {
    231     /* required fields in a FontInfo blend dictionary */
    232     T1_BLEND_UNDERLINE_POSITION = 0,
    233     T1_BLEND_UNDERLINE_THICKNESS,
    234     T1_BLEND_ITALIC_ANGLE,
    235 
    236     /* required fields in a Private blend dictionary */
    237     T1_BLEND_BLUE_VALUES,
    238     T1_BLEND_OTHER_BLUES,
    239     T1_BLEND_STANDARD_WIDTH,
    240     T1_BLEND_STANDARD_HEIGHT,
    241     T1_BLEND_STEM_SNAP_WIDTHS,
    242     T1_BLEND_STEM_SNAP_HEIGHTS,
    243     T1_BLEND_BLUE_SCALE,
    244     T1_BLEND_BLUE_SHIFT,
    245     T1_BLEND_FAMILY_BLUES,
    246     T1_BLEND_FAMILY_OTHER_BLUES,
    247     T1_BLEND_FORCE_BOLD,
    248 
    249     T1_BLEND_MAX    /* do not remove */
    250 
    251   } T1_Blend_Flags;
    252 
    253 
    254   /* these constants are deprecated; use the corresponding */
    255   /* `T1_Blend_Flags' values instead                       */
    256 #define t1_blend_underline_position   T1_BLEND_UNDERLINE_POSITION
    257 #define t1_blend_underline_thickness  T1_BLEND_UNDERLINE_THICKNESS
    258 #define t1_blend_italic_angle         T1_BLEND_ITALIC_ANGLE
    259 #define t1_blend_blue_values          T1_BLEND_BLUE_VALUES
    260 #define t1_blend_other_blues          T1_BLEND_OTHER_BLUES
    261 #define t1_blend_standard_widths      T1_BLEND_STANDARD_WIDTH
    262 #define t1_blend_standard_height      T1_BLEND_STANDARD_HEIGHT
    263 #define t1_blend_stem_snap_widths     T1_BLEND_STEM_SNAP_WIDTHS
    264 #define t1_blend_stem_snap_heights    T1_BLEND_STEM_SNAP_HEIGHTS
    265 #define t1_blend_blue_scale           T1_BLEND_BLUE_SCALE
    266 #define t1_blend_blue_shift           T1_BLEND_BLUE_SHIFT
    267 #define t1_blend_family_blues         T1_BLEND_FAMILY_BLUES
    268 #define t1_blend_family_other_blues   T1_BLEND_FAMILY_OTHER_BLUES
    269 #define t1_blend_force_bold           T1_BLEND_FORCE_BOLD
    270 #define t1_blend_max                  T1_BLEND_MAX
    271 
    272   /* */
    273 
    274 
    275   /* maximum number of Multiple Masters designs, as defined in the spec */
    276 #define T1_MAX_MM_DESIGNS     16
    277 
    278   /* maximum number of Multiple Masters axes, as defined in the spec */
    279 #define T1_MAX_MM_AXIS        4
    280 
    281   /* maximum number of elements in a design map */
    282 #define T1_MAX_MM_MAP_POINTS  20
    283 
    284 
    285   /* this structure is used to store the BlendDesignMap entry for an axis */
    286   typedef struct  PS_DesignMap_
    287   {
    288     FT_Byte    num_points;
    289     FT_Long*   design_points;
    290     FT_Fixed*  blend_points;
    291 
    292   } PS_DesignMapRec, *PS_DesignMap;
    293 
    294   /* backwards-compatible definition */
    295   typedef PS_DesignMapRec  T1_DesignMap;
    296 
    297 
    298   typedef struct  PS_BlendRec_
    299   {
    300     FT_UInt          num_designs;
    301     FT_UInt          num_axis;
    302 
    303     FT_String*       axis_names[T1_MAX_MM_AXIS];
    304     FT_Fixed*        design_pos[T1_MAX_MM_DESIGNS];
    305     PS_DesignMapRec  design_map[T1_MAX_MM_AXIS];
    306 
    307     FT_Fixed*        weight_vector;
    308     FT_Fixed*        default_weight_vector;
    309 
    310     PS_FontInfo      font_infos[T1_MAX_MM_DESIGNS + 1];
    311     PS_Private       privates  [T1_MAX_MM_DESIGNS + 1];
    312 
    313     FT_ULong         blend_bitflags;
    314 
    315     FT_BBox*         bboxes    [T1_MAX_MM_DESIGNS + 1];
    316 
    317     /* since 2.3.0 */
    318 
    319     /* undocumented, optional: the default design instance;   */
    320     /* corresponds to default_weight_vector --                */
    321     /* num_default_design_vector == 0 means it is not present */
    322     /* in the font and associated metrics files               */
    323     FT_UInt          default_design_vector[T1_MAX_MM_DESIGNS];
    324     FT_UInt          num_default_design_vector;
    325 
    326   } PS_BlendRec, *PS_Blend;
    327 
    328 
    329   /* backwards-compatible definition */
    330   typedef PS_BlendRec  T1_Blend;
    331 
    332 
    333   /*************************************************************************/
    334   /*                                                                       */
    335   /* <Struct>                                                              */
    336   /*    CID_FaceDictRec                                                    */
    337   /*                                                                       */
    338   /* <Description>                                                         */
    339   /*    A structure used to represent data in a CID top-level dictionary.  */
    340   /*                                                                       */
    341   typedef struct  CID_FaceDictRec_
    342   {
    343     PS_PrivateRec  private_dict;
    344 
    345     FT_UInt        len_buildchar;
    346     FT_Fixed       forcebold_threshold;
    347     FT_Pos         stroke_width;
    348     FT_Fixed       expansion_factor;
    349 
    350     FT_Byte        paint_type;
    351     FT_Byte        font_type;
    352     FT_Matrix      font_matrix;
    353     FT_Vector      font_offset;
    354 
    355     FT_UInt        num_subrs;
    356     FT_ULong       subrmap_offset;
    357     FT_Int         sd_bytes;
    358 
    359   } CID_FaceDictRec;
    360 
    361 
    362   /*************************************************************************/
    363   /*                                                                       */
    364   /* <Struct>                                                              */
    365   /*    CID_FaceDict                                                       */
    366   /*                                                                       */
    367   /* <Description>                                                         */
    368   /*    A handle to a @CID_FaceDictRec structure.                          */
    369   /*                                                                       */
    370   typedef struct CID_FaceDictRec_*  CID_FaceDict;
    371 
    372 
    373   /*************************************************************************/
    374   /*                                                                       */
    375   /* <Struct>                                                              */
    376   /*    CID_FontDict                                                       */
    377   /*                                                                       */
    378   /* <Description>                                                         */
    379   /*    This type is equivalent to @CID_FaceDictRec.  It is deprecated but */
    380   /*    kept to maintain source compatibility between various versions of  */
    381   /*    FreeType.                                                          */
    382   /*                                                                       */
    383   typedef CID_FaceDictRec  CID_FontDict;
    384 
    385 
    386   /*************************************************************************/
    387   /*                                                                       */
    388   /* <Struct>                                                              */
    389   /*    CID_FaceInfoRec                                                    */
    390   /*                                                                       */
    391   /* <Description>                                                         */
    392   /*    A structure used to represent CID Face information.                */
    393   /*                                                                       */
    394   typedef struct  CID_FaceInfoRec_
    395   {
    396     FT_String*      cid_font_name;
    397     FT_Fixed        cid_version;
    398     FT_Int          cid_font_type;
    399 
    400     FT_String*      registry;
    401     FT_String*      ordering;
    402     FT_Int          supplement;
    403 
    404     PS_FontInfoRec  font_info;
    405     FT_BBox         font_bbox;
    406     FT_ULong        uid_base;
    407 
    408     FT_Int          num_xuid;
    409     FT_ULong        xuid[16];
    410 
    411     FT_ULong        cidmap_offset;
    412     FT_Int          fd_bytes;
    413     FT_Int          gd_bytes;
    414     FT_ULong        cid_count;
    415 
    416     FT_Int          num_dicts;
    417     CID_FaceDict    font_dicts;
    418 
    419     FT_ULong        data_offset;
    420 
    421   } CID_FaceInfoRec;
    422 
    423 
    424   /*************************************************************************/
    425   /*                                                                       */
    426   /* <Struct>                                                              */
    427   /*    CID_FaceInfo                                                       */
    428   /*                                                                       */
    429   /* <Description>                                                         */
    430   /*    A handle to a @CID_FaceInfoRec structure.                          */
    431   /*                                                                       */
    432   typedef struct CID_FaceInfoRec_*  CID_FaceInfo;
    433 
    434 
    435   /*************************************************************************/
    436   /*                                                                       */
    437   /* <Struct>                                                              */
    438   /*    CID_Info                                                           */
    439   /*                                                                       */
    440   /* <Description>                                                         */
    441   /*   This type is equivalent to @CID_FaceInfoRec.  It is deprecated but  */
    442   /*   kept to maintain source compatibility between various versions of   */
    443   /*   FreeType.                                                           */
    444   /*                                                                       */
    445   typedef CID_FaceInfoRec  CID_Info;
    446 
    447 
    448   /************************************************************************
    449    *
    450    * @function:
    451    *    FT_Has_PS_Glyph_Names
    452    *
    453    * @description:
    454    *    Return true if a given face provides reliable PostScript glyph
    455    *    names.  This is similar to using the @FT_HAS_GLYPH_NAMES macro,
    456    *    except that certain fonts (mostly TrueType) contain incorrect
    457    *    glyph name tables.
    458    *
    459    *    When this function returns true, the caller is sure that the glyph
    460    *    names returned by @FT_Get_Glyph_Name are reliable.
    461    *
    462    * @input:
    463    *    face ::
    464    *       face handle
    465    *
    466    * @return:
    467    *    Boolean.  True if glyph names are reliable.
    468    *
    469    */
    470   FT_EXPORT( FT_Int )
    471   FT_Has_PS_Glyph_Names( FT_Face  face );
    472 
    473 
    474   /************************************************************************
    475    *
    476    * @function:
    477    *    FT_Get_PS_Font_Info
    478    *
    479    * @description:
    480    *    Retrieve the @PS_FontInfoRec structure corresponding to a given
    481    *    PostScript font.
    482    *
    483    * @input:
    484    *    face ::
    485    *       PostScript face handle.
    486    *
    487    * @output:
    488    *    afont_info ::
    489    *       Output font info structure pointer.
    490    *
    491    * @return:
    492    *    FreeType error code.  0~means success.
    493    *
    494    * @note:
    495    *    String pointers within the @PS_FontInfoRec structure are owned by
    496    *    the face and don't need to be freed by the caller.  Missing entries
    497    *    in the font's FontInfo dictionary are represented by NULL pointers.
    498    *
    499    *    If the font's format is not PostScript-based, this function will
    500    *    return the `FT_Err_Invalid_Argument' error code.
    501    *
    502    */
    503   FT_EXPORT( FT_Error )
    504   FT_Get_PS_Font_Info( FT_Face      face,
    505                        PS_FontInfo  afont_info );
    506 
    507 
    508   /************************************************************************
    509    *
    510    * @function:
    511    *    FT_Get_PS_Font_Private
    512    *
    513    * @description:
    514    *    Retrieve the @PS_PrivateRec structure corresponding to a given
    515    *    PostScript font.
    516    *
    517    * @input:
    518    *    face ::
    519    *       PostScript face handle.
    520    *
    521    * @output:
    522    *    afont_private ::
    523    *       Output private dictionary structure pointer.
    524    *
    525    * @return:
    526    *    FreeType error code.  0~means success.
    527    *
    528    * @note:
    529    *    The string pointers within the @PS_PrivateRec structure are owned by
    530    *    the face and don't need to be freed by the caller.
    531    *
    532    *    If the font's format is not PostScript-based, this function returns
    533    *    the `FT_Err_Invalid_Argument' error code.
    534    *
    535    */
    536   FT_EXPORT( FT_Error )
    537   FT_Get_PS_Font_Private( FT_Face     face,
    538                           PS_Private  afont_private );
    539 
    540 
    541   /*************************************************************************/
    542   /*                                                                       */
    543   /* <Enum>                                                                */
    544   /*    T1_EncodingType                                                    */
    545   /*                                                                       */
    546   /* <Description>                                                         */
    547   /*    An enumeration describing the `Encoding' entry in a Type 1         */
    548   /*    dictionary.                                                        */
    549   /*                                                                       */
    550   /* <Values>                                                              */
    551   /*    T1_ENCODING_TYPE_NONE ::                                           */
    552   /*    T1_ENCODING_TYPE_ARRAY ::                                          */
    553   /*    T1_ENCODING_TYPE_STANDARD ::                                       */
    554   /*    T1_ENCODING_TYPE_ISOLATIN1 ::                                      */
    555   /*    T1_ENCODING_TYPE_EXPERT ::                                         */
    556   /*                                                                       */
    557   typedef enum  T1_EncodingType_
    558   {
    559     T1_ENCODING_TYPE_NONE = 0,
    560     T1_ENCODING_TYPE_ARRAY,
    561     T1_ENCODING_TYPE_STANDARD,
    562     T1_ENCODING_TYPE_ISOLATIN1,
    563     T1_ENCODING_TYPE_EXPERT
    564 
    565   } T1_EncodingType;
    566 
    567 
    568   /*************************************************************************/
    569   /*                                                                       */
    570   /* <Enum>                                                                */
    571   /*    PS_Dict_Keys                                                       */
    572   /*                                                                       */
    573   /* <Description>                                                         */
    574   /*    An enumeration used in calls to @FT_Get_PS_Font_Value to identify  */
    575   /*    the Type~1 dictionary entry to retrieve.                           */
    576   /*                                                                       */
    577   /* <Values>                                                              */
    578   /*    PS_DICT_FONT_TYPE ::                                               */
    579   /*    PS_DICT_FONT_MATRIX ::                                             */
    580   /*    PS_DICT_FONT_BBOX ::                                               */
    581   /*    PS_DICT_PAINT_TYPE ::                                              */
    582   /*    PS_DICT_FONT_NAME ::                                               */
    583   /*    PS_DICT_UNIQUE_ID ::                                               */
    584   /*    PS_DICT_NUM_CHAR_STRINGS ::                                        */
    585   /*    PS_DICT_CHAR_STRING_KEY ::                                         */
    586   /*    PS_DICT_CHAR_STRING ::                                             */
    587   /*    PS_DICT_ENCODING_TYPE ::                                           */
    588   /*    PS_DICT_ENCODING_ENTRY ::                                          */
    589   /*    PS_DICT_NUM_SUBRS ::                                               */
    590   /*    PS_DICT_SUBR ::                                                    */
    591   /*    PS_DICT_STD_HW ::                                                  */
    592   /*    PS_DICT_STD_VW ::                                                  */
    593   /*    PS_DICT_NUM_BLUE_VALUES ::                                         */
    594   /*    PS_DICT_BLUE_VALUE ::                                              */
    595   /*    PS_DICT_BLUE_FUZZ ::                                               */
    596   /*    PS_DICT_NUM_OTHER_BLUES ::                                         */
    597   /*    PS_DICT_OTHER_BLUE ::                                              */
    598   /*    PS_DICT_NUM_FAMILY_BLUES ::                                        */
    599   /*    PS_DICT_FAMILY_BLUE ::                                             */
    600   /*    PS_DICT_NUM_FAMILY_OTHER_BLUES ::                                  */
    601   /*    PS_DICT_FAMILY_OTHER_BLUE ::                                       */
    602   /*    PS_DICT_BLUE_SCALE ::                                              */
    603   /*    PS_DICT_BLUE_SHIFT ::                                              */
    604   /*    PS_DICT_NUM_STEM_SNAP_H ::                                         */
    605   /*    PS_DICT_STEM_SNAP_H ::                                             */
    606   /*    PS_DICT_NUM_STEM_SNAP_V ::                                         */
    607   /*    PS_DICT_STEM_SNAP_V ::                                             */
    608   /*    PS_DICT_FORCE_BOLD ::                                              */
    609   /*    PS_DICT_RND_STEM_UP ::                                             */
    610   /*    PS_DICT_MIN_FEATURE ::                                             */
    611   /*    PS_DICT_LEN_IV ::                                                  */
    612   /*    PS_DICT_PASSWORD ::                                                */
    613   /*    PS_DICT_LANGUAGE_GROUP ::                                          */
    614   /*    PS_DICT_VERSION ::                                                 */
    615   /*    PS_DICT_NOTICE ::                                                  */
    616   /*    PS_DICT_FULL_NAME ::                                               */
    617   /*    PS_DICT_FAMILY_NAME ::                                             */
    618   /*    PS_DICT_WEIGHT ::                                                  */
    619   /*    PS_DICT_IS_FIXED_PITCH ::                                          */
    620   /*    PS_DICT_UNDERLINE_POSITION ::                                      */
    621   /*    PS_DICT_UNDERLINE_THICKNESS ::                                     */
    622   /*    PS_DICT_FS_TYPE ::                                                 */
    623   /*    PS_DICT_ITALIC_ANGLE ::                                            */
    624   /*                                                                       */
    625   typedef enum  PS_Dict_Keys_
    626   {
    627     /* conventionally in the font dictionary */
    628     PS_DICT_FONT_TYPE,              /* FT_Byte         */
    629     PS_DICT_FONT_MATRIX,            /* FT_Fixed        */
    630     PS_DICT_FONT_BBOX,              /* FT_Fixed        */
    631     PS_DICT_PAINT_TYPE,             /* FT_Byte         */
    632     PS_DICT_FONT_NAME,              /* FT_String*      */
    633     PS_DICT_UNIQUE_ID,              /* FT_Int          */
    634     PS_DICT_NUM_CHAR_STRINGS,       /* FT_Int          */
    635     PS_DICT_CHAR_STRING_KEY,        /* FT_String*      */
    636     PS_DICT_CHAR_STRING,            /* FT_String*      */
    637     PS_DICT_ENCODING_TYPE,          /* T1_EncodingType */
    638     PS_DICT_ENCODING_ENTRY,         /* FT_String*      */
    639 
    640     /* conventionally in the font Private dictionary */
    641     PS_DICT_NUM_SUBRS,              /* FT_Int     */
    642     PS_DICT_SUBR,                   /* FT_String* */
    643     PS_DICT_STD_HW,                 /* FT_UShort  */
    644     PS_DICT_STD_VW,                 /* FT_UShort  */
    645     PS_DICT_NUM_BLUE_VALUES,        /* FT_Byte    */
    646     PS_DICT_BLUE_VALUE,             /* FT_Short   */
    647     PS_DICT_BLUE_FUZZ,              /* FT_Int     */
    648     PS_DICT_NUM_OTHER_BLUES,        /* FT_Byte    */
    649     PS_DICT_OTHER_BLUE,             /* FT_Short   */
    650     PS_DICT_NUM_FAMILY_BLUES,       /* FT_Byte    */
    651     PS_DICT_FAMILY_BLUE,            /* FT_Short   */
    652     PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte    */
    653     PS_DICT_FAMILY_OTHER_BLUE,      /* FT_Short   */
    654     PS_DICT_BLUE_SCALE,             /* FT_Fixed   */
    655     PS_DICT_BLUE_SHIFT,             /* FT_Int     */
    656     PS_DICT_NUM_STEM_SNAP_H,        /* FT_Byte    */
    657     PS_DICT_STEM_SNAP_H,            /* FT_Short   */
    658     PS_DICT_NUM_STEM_SNAP_V,        /* FT_Byte    */
    659     PS_DICT_STEM_SNAP_V,            /* FT_Short   */
    660     PS_DICT_FORCE_BOLD,             /* FT_Bool    */
    661     PS_DICT_RND_STEM_UP,            /* FT_Bool    */
    662     PS_DICT_MIN_FEATURE,            /* FT_Short   */
    663     PS_DICT_LEN_IV,                 /* FT_Int     */
    664     PS_DICT_PASSWORD,               /* FT_Long    */
    665     PS_DICT_LANGUAGE_GROUP,         /* FT_Long    */
    666 
    667     /* conventionally in the font FontInfo dictionary */
    668     PS_DICT_VERSION,                /* FT_String* */
    669     PS_DICT_NOTICE,                 /* FT_String* */
    670     PS_DICT_FULL_NAME,              /* FT_String* */
    671     PS_DICT_FAMILY_NAME,            /* FT_String* */
    672     PS_DICT_WEIGHT,                 /* FT_String* */
    673     PS_DICT_IS_FIXED_PITCH,         /* FT_Bool    */
    674     PS_DICT_UNDERLINE_POSITION,     /* FT_Short   */
    675     PS_DICT_UNDERLINE_THICKNESS,    /* FT_UShort  */
    676     PS_DICT_FS_TYPE,                /* FT_UShort  */
    677     PS_DICT_ITALIC_ANGLE,           /* FT_Long    */
    678 
    679     PS_DICT_MAX = PS_DICT_ITALIC_ANGLE
    680 
    681   } PS_Dict_Keys;
    682 
    683 
    684   /************************************************************************
    685    *
    686    * @function:
    687    *    FT_Get_PS_Font_Value
    688    *
    689    * @description:
    690    *    Retrieve the value for the supplied key from a PostScript font.
    691    *
    692    * @input:
    693    *    face ::
    694    *       PostScript face handle.
    695    *
    696    *    key ::
    697    *       An enumeration value representing the dictionary key to retrieve.
    698    *
    699    *    idx ::
    700    *       For array values, this specifies the index to be returned.
    701    *
    702    *    value ::
    703    *       A pointer to memory into which to write the value.
    704    *
    705    *    valen_len ::
    706    *       The size, in bytes, of the memory supplied for the value.
    707    *
    708    * @output:
    709    *    value ::
    710    *       The value matching the above key, if it exists.
    711    *
    712    * @return:
    713    *    The amount of memory (in bytes) required to hold the requested
    714    *    value (if it exists, -1 otherwise).
    715    *
    716    * @note:
    717    *    The values returned are not pointers into the internal structures of
    718    *    the face, but are `fresh' copies, so that the memory containing them
    719    *    belongs to the calling application.  This also enforces the
    720    *    `read-only' nature of these values, i.e., this function cannot be
    721    *    used to manipulate the face.
    722    *
    723    *    `value' is a void pointer because the values returned can be of
    724    *    various types.
    725    *
    726    *    If either `value' is NULL or `value_len' is too small, just the
    727    *    required memory size for the requested entry is returned.
    728    *
    729    *    The `idx' parameter is used, not only to retrieve elements of, for
    730    *    example, the FontMatrix or FontBBox, but also to retrieve name keys
    731    *    from the CharStrings dictionary, and the charstrings themselves.  It
    732    *    is ignored for atomic values.
    733    *
    734    *    PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000.  To
    735    *    get the value as in the font stream, you need to divide by
    736    *    65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).
    737    *
    738    *    IMPORTANT: Only key/value pairs read by the FreeType interpreter can
    739    *    be retrieved.  So, for example, PostScript procedures such as NP,
    740    *    ND, and RD are not available.  Arbitrary keys are, obviously, not be
    741    *    available either.
    742    *
    743    *    If the font's format is not PostScript-based, this function returns
    744    *    the `FT_Err_Invalid_Argument' error code.
    745    *
    746    */
    747   FT_EXPORT( FT_Long )
    748   FT_Get_PS_Font_Value( FT_Face       face,
    749                         PS_Dict_Keys  key,
    750                         FT_UInt       idx,
    751                         void         *value,
    752                         FT_Long       value_len );
    753 
    754   /* */
    755 
    756 FT_END_HEADER
    757 
    758 #endif /* T1TABLES_H_ */
    759 
    760 
    761 /* END */
    762