Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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 */
  505.