misc/libfreetype/include/freetype/t1tables.h
branchwebgl
changeset 9521 8054d9d775fd
parent 9282 92af50454cf2
parent 9519 b8b5c82eb61b
child 9950 2759212a27de
equal deleted inserted replaced
9282:92af50454cf2 9521:8054d9d775fd
     1 /***************************************************************************/
       
     2 /*                                                                         */
       
     3 /*  t1tables.h                                                             */
       
     4 /*                                                                         */
       
     5 /*    Basic Type 1/Type 2 tables definitions and interface (specification  */
       
     6 /*    only).                                                               */
       
     7 /*                                                                         */
       
     8 /*  Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 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   /*************************************************************************/
       
    53 
       
    54 
       
    55   /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */
       
    56   /* structures in order to support Multiple Master fonts.               */
       
    57 
       
    58 
       
    59   /*************************************************************************/
       
    60   /*                                                                       */
       
    61   /* <Struct>                                                              */
       
    62   /*    PS_FontInfoRec                                                     */
       
    63   /*                                                                       */
       
    64   /* <Description>                                                         */
       
    65   /*    A structure used to model a Type~1 or Type~2 FontInfo dictionary.  */
       
    66   /*    Note that for Multiple Master fonts, each instance has its own     */
       
    67   /*    FontInfo dictionary.                                               */
       
    68   /*                                                                       */
       
    69   typedef struct  PS_FontInfoRec_
       
    70   {
       
    71     FT_String*  version;
       
    72     FT_String*  notice;
       
    73     FT_String*  full_name;
       
    74     FT_String*  family_name;
       
    75     FT_String*  weight;
       
    76     FT_Long     italic_angle;
       
    77     FT_Bool     is_fixed_pitch;
       
    78     FT_Short    underline_position;
       
    79     FT_UShort   underline_thickness;
       
    80 
       
    81   } PS_FontInfoRec;
       
    82 
       
    83 
       
    84   /*************************************************************************/
       
    85   /*                                                                       */
       
    86   /* <Struct>                                                              */
       
    87   /*    PS_FontInfo                                                        */
       
    88   /*                                                                       */
       
    89   /* <Description>                                                         */
       
    90   /*    A handle to a @PS_FontInfoRec structure.                           */
       
    91   /*                                                                       */
       
    92   typedef struct PS_FontInfoRec_*  PS_FontInfo;
       
    93 
       
    94 
       
    95   /*************************************************************************/
       
    96   /*                                                                       */
       
    97   /* <Struct>                                                              */
       
    98   /*    T1_FontInfo                                                        */
       
    99   /*                                                                       */
       
   100   /* <Description>                                                         */
       
   101   /*    This type is equivalent to @PS_FontInfoRec.  It is deprecated but  */
       
   102   /*    kept to maintain source compatibility between various versions of  */
       
   103   /*    FreeType.                                                          */
       
   104   /*                                                                       */
       
   105   typedef PS_FontInfoRec  T1_FontInfo;
       
   106 
       
   107 
       
   108   /*************************************************************************/
       
   109   /*                                                                       */
       
   110   /* <Struct>                                                              */
       
   111   /*    PS_PrivateRec                                                      */
       
   112   /*                                                                       */
       
   113   /* <Description>                                                         */
       
   114   /*    A structure used to model a Type~1 or Type~2 private dictionary.   */
       
   115   /*    Note that for Multiple Master fonts, each instance has its own     */
       
   116   /*    Private dictionary.                                                */
       
   117   /*                                                                       */
       
   118   typedef struct  PS_PrivateRec_
       
   119   {
       
   120     FT_Int     unique_id;
       
   121     FT_Int     lenIV;
       
   122 
       
   123     FT_Byte    num_blue_values;
       
   124     FT_Byte    num_other_blues;
       
   125     FT_Byte    num_family_blues;
       
   126     FT_Byte    num_family_other_blues;
       
   127 
       
   128     FT_Short   blue_values[14];
       
   129     FT_Short   other_blues[10];
       
   130 
       
   131     FT_Short   family_blues      [14];
       
   132     FT_Short   family_other_blues[10];
       
   133 
       
   134     FT_Fixed   blue_scale;
       
   135     FT_Int     blue_shift;
       
   136     FT_Int     blue_fuzz;
       
   137 
       
   138     FT_UShort  standard_width[1];
       
   139     FT_UShort  standard_height[1];
       
   140 
       
   141     FT_Byte    num_snap_widths;
       
   142     FT_Byte    num_snap_heights;
       
   143     FT_Bool    force_bold;
       
   144     FT_Bool    round_stem_up;
       
   145 
       
   146     FT_Short   snap_widths [13];  /* including std width  */
       
   147     FT_Short   snap_heights[13];  /* including std height */
       
   148 
       
   149     FT_Fixed   expansion_factor;
       
   150 
       
   151     FT_Long    language_group;
       
   152     FT_Long    password;
       
   153 
       
   154     FT_Short   min_feature[2];
       
   155 
       
   156   } PS_PrivateRec;
       
   157 
       
   158 
       
   159   /*************************************************************************/
       
   160   /*                                                                       */
       
   161   /* <Struct>                                                              */
       
   162   /*    PS_Private                                                         */
       
   163   /*                                                                       */
       
   164   /* <Description>                                                         */
       
   165   /*    A handle to a @PS_PrivateRec structure.                            */
       
   166   /*                                                                       */
       
   167   typedef struct PS_PrivateRec_*  PS_Private;
       
   168 
       
   169 
       
   170   /*************************************************************************/
       
   171   /*                                                                       */
       
   172   /* <Struct>                                                              */
       
   173   /*    T1_Private                                                         */
       
   174   /*                                                                       */
       
   175   /* <Description>                                                         */
       
   176   /*   This type is equivalent to @PS_PrivateRec.  It is deprecated but    */
       
   177   /*   kept to maintain source compatibility between various versions of   */
       
   178   /*   FreeType.                                                           */
       
   179   /*                                                                       */
       
   180   typedef PS_PrivateRec  T1_Private;
       
   181 
       
   182 
       
   183   /*************************************************************************/
       
   184   /*                                                                       */
       
   185   /* <Enum>                                                                */
       
   186   /*    T1_Blend_Flags                                                     */
       
   187   /*                                                                       */
       
   188   /* <Description>                                                         */
       
   189   /*    A set of flags used to indicate which fields are present in a      */
       
   190   /*    given blend dictionary (font info or private).  Used to support    */
       
   191   /*    Multiple Masters fonts.                                            */
       
   192   /*                                                                       */
       
   193   typedef enum  T1_Blend_Flags_
       
   194   {
       
   195     /*# required fields in a FontInfo blend dictionary */
       
   196     T1_BLEND_UNDERLINE_POSITION = 0,
       
   197     T1_BLEND_UNDERLINE_THICKNESS,
       
   198     T1_BLEND_ITALIC_ANGLE,
       
   199 
       
   200     /*# required fields in a Private blend dictionary */
       
   201     T1_BLEND_BLUE_VALUES,
       
   202     T1_BLEND_OTHER_BLUES,
       
   203     T1_BLEND_STANDARD_WIDTH,
       
   204     T1_BLEND_STANDARD_HEIGHT,
       
   205     T1_BLEND_STEM_SNAP_WIDTHS,
       
   206     T1_BLEND_STEM_SNAP_HEIGHTS,
       
   207     T1_BLEND_BLUE_SCALE,
       
   208     T1_BLEND_BLUE_SHIFT,
       
   209     T1_BLEND_FAMILY_BLUES,
       
   210     T1_BLEND_FAMILY_OTHER_BLUES,
       
   211     T1_BLEND_FORCE_BOLD,
       
   212 
       
   213     /*# never remove */
       
   214     T1_BLEND_MAX
       
   215 
       
   216   } T1_Blend_Flags;
       
   217 
       
   218   /* */
       
   219 
       
   220 
       
   221   /*# backwards compatible definitions */
       
   222 #define t1_blend_underline_position   T1_BLEND_UNDERLINE_POSITION
       
   223 #define t1_blend_underline_thickness  T1_BLEND_UNDERLINE_THICKNESS
       
   224 #define t1_blend_italic_angle         T1_BLEND_ITALIC_ANGLE
       
   225 #define t1_blend_blue_values          T1_BLEND_BLUE_VALUES
       
   226 #define t1_blend_other_blues          T1_BLEND_OTHER_BLUES
       
   227 #define t1_blend_standard_widths      T1_BLEND_STANDARD_WIDTH
       
   228 #define t1_blend_standard_height      T1_BLEND_STANDARD_HEIGHT
       
   229 #define t1_blend_stem_snap_widths     T1_BLEND_STEM_SNAP_WIDTHS
       
   230 #define t1_blend_stem_snap_heights    T1_BLEND_STEM_SNAP_HEIGHTS
       
   231 #define t1_blend_blue_scale           T1_BLEND_BLUE_SCALE
       
   232 #define t1_blend_blue_shift           T1_BLEND_BLUE_SHIFT
       
   233 #define t1_blend_family_blues         T1_BLEND_FAMILY_BLUES
       
   234 #define t1_blend_family_other_blues   T1_BLEND_FAMILY_OTHER_BLUES
       
   235 #define t1_blend_force_bold           T1_BLEND_FORCE_BOLD
       
   236 #define t1_blend_max                  T1_BLEND_MAX
       
   237 
       
   238 
       
   239   /* maximum number of Multiple Masters designs, as defined in the spec */
       
   240 #define T1_MAX_MM_DESIGNS     16
       
   241 
       
   242   /* maximum number of Multiple Masters axes, as defined in the spec */
       
   243 #define T1_MAX_MM_AXIS        4
       
   244 
       
   245   /* maximum number of elements in a design map */
       
   246 #define T1_MAX_MM_MAP_POINTS  20
       
   247 
       
   248 
       
   249   /* this structure is used to store the BlendDesignMap entry for an axis */
       
   250   typedef struct  PS_DesignMap_
       
   251   {
       
   252     FT_Byte    num_points;
       
   253     FT_Long*   design_points;
       
   254     FT_Fixed*  blend_points;
       
   255 
       
   256   } PS_DesignMapRec, *PS_DesignMap;
       
   257 
       
   258   /* backwards-compatible definition */
       
   259   typedef PS_DesignMapRec  T1_DesignMap;
       
   260 
       
   261 
       
   262   typedef struct  PS_BlendRec_
       
   263   {
       
   264     FT_UInt          num_designs;
       
   265     FT_UInt          num_axis;
       
   266 
       
   267     FT_String*       axis_names[T1_MAX_MM_AXIS];
       
   268     FT_Fixed*        design_pos[T1_MAX_MM_DESIGNS];
       
   269     PS_DesignMapRec  design_map[T1_MAX_MM_AXIS];
       
   270 
       
   271     FT_Fixed*        weight_vector;
       
   272     FT_Fixed*        default_weight_vector;
       
   273 
       
   274     PS_FontInfo      font_infos[T1_MAX_MM_DESIGNS + 1];
       
   275     PS_Private       privates  [T1_MAX_MM_DESIGNS + 1];
       
   276 
       
   277     FT_ULong         blend_bitflags;
       
   278 
       
   279     FT_BBox*         bboxes    [T1_MAX_MM_DESIGNS + 1];
       
   280 
       
   281     /* since 2.3.0 */
       
   282 
       
   283     /* undocumented, optional: the default design instance;   */
       
   284     /* corresponds to default_weight_vector --                */
       
   285     /* num_default_design_vector == 0 means it is not present */
       
   286     /* in the font and associated metrics files               */
       
   287     FT_UInt          default_design_vector[T1_MAX_MM_DESIGNS];
       
   288     FT_UInt          num_default_design_vector;
       
   289 
       
   290   } PS_BlendRec, *PS_Blend;
       
   291 
       
   292 
       
   293   /* backwards-compatible definition */
       
   294   typedef PS_BlendRec  T1_Blend;
       
   295 
       
   296 
       
   297   /*************************************************************************/
       
   298   /*                                                                       */
       
   299   /* <Struct>                                                              */
       
   300   /*    CID_FaceDictRec                                                    */
       
   301   /*                                                                       */
       
   302   /* <Description>                                                         */
       
   303   /*    A structure used to represent data in a CID top-level dictionary.  */
       
   304   /*                                                                       */
       
   305   typedef struct  CID_FaceDictRec_
       
   306   {
       
   307     PS_PrivateRec  private_dict;
       
   308 
       
   309     FT_UInt        len_buildchar;
       
   310     FT_Fixed       forcebold_threshold;
       
   311     FT_Pos         stroke_width;
       
   312     FT_Fixed       expansion_factor;
       
   313 
       
   314     FT_Byte        paint_type;
       
   315     FT_Byte        font_type;
       
   316     FT_Matrix      font_matrix;
       
   317     FT_Vector      font_offset;
       
   318 
       
   319     FT_UInt        num_subrs;
       
   320     FT_ULong       subrmap_offset;
       
   321     FT_Int         sd_bytes;
       
   322 
       
   323   } CID_FaceDictRec;
       
   324 
       
   325 
       
   326   /*************************************************************************/
       
   327   /*                                                                       */
       
   328   /* <Struct>                                                              */
       
   329   /*    CID_FaceDict                                                       */
       
   330   /*                                                                       */
       
   331   /* <Description>                                                         */
       
   332   /*    A handle to a @CID_FaceDictRec structure.                          */
       
   333   /*                                                                       */
       
   334   typedef struct CID_FaceDictRec_*  CID_FaceDict;
       
   335 
       
   336   /* */
       
   337 
       
   338 
       
   339   /* backwards-compatible definition */
       
   340   typedef CID_FaceDictRec  CID_FontDict;
       
   341 
       
   342 
       
   343   /*************************************************************************/
       
   344   /*                                                                       */
       
   345   /* <Struct>                                                              */
       
   346   /*    CID_FaceInfoRec                                                    */
       
   347   /*                                                                       */
       
   348   /* <Description>                                                         */
       
   349   /*    A structure used to represent CID Face information.                */
       
   350   /*                                                                       */
       
   351   typedef struct  CID_FaceInfoRec_
       
   352   {
       
   353     FT_String*      cid_font_name;
       
   354     FT_Fixed        cid_version;
       
   355     FT_Int          cid_font_type;
       
   356 
       
   357     FT_String*      registry;
       
   358     FT_String*      ordering;
       
   359     FT_Int          supplement;
       
   360 
       
   361     PS_FontInfoRec  font_info;
       
   362     FT_BBox         font_bbox;
       
   363     FT_ULong        uid_base;
       
   364 
       
   365     FT_Int          num_xuid;
       
   366     FT_ULong        xuid[16];
       
   367 
       
   368     FT_ULong        cidmap_offset;
       
   369     FT_Int          fd_bytes;
       
   370     FT_Int          gd_bytes;
       
   371     FT_ULong        cid_count;
       
   372 
       
   373     FT_Int          num_dicts;
       
   374     CID_FaceDict    font_dicts;
       
   375 
       
   376     FT_ULong        data_offset;
       
   377 
       
   378   } CID_FaceInfoRec;
       
   379 
       
   380 
       
   381   /*************************************************************************/
       
   382   /*                                                                       */
       
   383   /* <Struct>                                                              */
       
   384   /*    CID_FaceInfo                                                       */
       
   385   /*                                                                       */
       
   386   /* <Description>                                                         */
       
   387   /*    A handle to a @CID_FaceInfoRec structure.                          */
       
   388   /*                                                                       */
       
   389   typedef struct CID_FaceInfoRec_*  CID_FaceInfo;
       
   390 
       
   391 
       
   392   /*************************************************************************/
       
   393   /*                                                                       */
       
   394   /* <Struct>                                                              */
       
   395   /*    CID_Info                                                           */
       
   396   /*                                                                       */
       
   397   /* <Description>                                                         */
       
   398   /*   This type is equivalent to @CID_FaceInfoRec.  It is deprecated but  */
       
   399   /*   kept to maintain source compatibility between various versions of   */
       
   400   /*   FreeType.                                                           */
       
   401   /*                                                                       */
       
   402   typedef CID_FaceInfoRec  CID_Info;
       
   403 
       
   404 
       
   405   /************************************************************************
       
   406    *
       
   407    * @function:
       
   408    *    FT_Has_PS_Glyph_Names
       
   409    *
       
   410    * @description:
       
   411    *    Return true if a given face provides reliable PostScript glyph
       
   412    *    names.  This is similar to using the @FT_HAS_GLYPH_NAMES macro,
       
   413    *    except that certain fonts (mostly TrueType) contain incorrect
       
   414    *    glyph name tables.
       
   415    *
       
   416    *    When this function returns true, the caller is sure that the glyph
       
   417    *    names returned by @FT_Get_Glyph_Name are reliable.
       
   418    *
       
   419    * @input:
       
   420    *    face ::
       
   421    *       face handle
       
   422    *
       
   423    * @return:
       
   424    *    Boolean.  True if glyph names are reliable.
       
   425    *
       
   426    */
       
   427   FT_EXPORT( FT_Int )
       
   428   FT_Has_PS_Glyph_Names( FT_Face  face );
       
   429 
       
   430 
       
   431   /************************************************************************
       
   432    *
       
   433    * @function:
       
   434    *    FT_Get_PS_Font_Info
       
   435    *
       
   436    * @description:
       
   437    *    Retrieve the @PS_FontInfoRec structure corresponding to a given
       
   438    *    PostScript font.
       
   439    *
       
   440    * @input:
       
   441    *    face ::
       
   442    *       PostScript face handle.
       
   443    *
       
   444    * @output:
       
   445    *    afont_info ::
       
   446    *       Output font info structure pointer.
       
   447    *
       
   448    * @return:
       
   449    *    FreeType error code.  0~means success.
       
   450    *
       
   451    * @note:
       
   452    *    The string pointers within the font info structure are owned by
       
   453    *    the face and don't need to be freed by the caller.
       
   454    *
       
   455    *    If the font's format is not PostScript-based, this function will
       
   456    *    return the `FT_Err_Invalid_Argument' error code.
       
   457    *
       
   458    */
       
   459   FT_EXPORT( FT_Error )
       
   460   FT_Get_PS_Font_Info( FT_Face      face,
       
   461                        PS_FontInfo  afont_info );
       
   462 
       
   463 
       
   464   /************************************************************************
       
   465    *
       
   466    * @function:
       
   467    *    FT_Get_PS_Font_Private
       
   468    *
       
   469    * @description:
       
   470    *    Retrieve the @PS_PrivateRec structure corresponding to a given
       
   471    *    PostScript font.
       
   472    *
       
   473    * @input:
       
   474    *    face ::
       
   475    *       PostScript face handle.
       
   476    *
       
   477    * @output:
       
   478    *    afont_private ::
       
   479    *       Output private dictionary structure pointer.
       
   480    *
       
   481    * @return:
       
   482    *    FreeType error code.  0~means success.
       
   483    *
       
   484    * @note:
       
   485    *    The string pointers within the @PS_PrivateRec structure are owned by
       
   486    *    the face and don't need to be freed by the caller.
       
   487    *
       
   488    *    If the font's format is not PostScript-based, this function returns
       
   489    *    the `FT_Err_Invalid_Argument' error code.
       
   490    *
       
   491    */
       
   492   FT_EXPORT( FT_Error )
       
   493   FT_Get_PS_Font_Private( FT_Face     face,
       
   494                           PS_Private  afont_private );
       
   495 
       
   496   /* */
       
   497 
       
   498 
       
   499 FT_END_HEADER
       
   500 
       
   501 #endif /* __T1TABLES_H__ */
       
   502 
       
   503 
       
   504 /* END */