/***************************************************************************/
/*                                                                         */
/*  t1tables.h                                                             */
/*                                                                         */
/*    Basic Type 1/Type 2 tables definitions and interface (specification  */
/*    only).                                                               */
/*                                                                         */
/*  Copyright 1996-2000 by                                                 */
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
/*                                                                         */
/*  This file is part of the FreeType project, and may only be used,       */
/*  modified, and distributed under the terms of the FreeType project      */
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
/*  this file you indicate that you have read the license and              */
/*  understand and accept it fully.                                        */
/*                                                                         */
/***************************************************************************/


#ifndef __T1TABLES_H__
#define __T1TABLES_H__

#ifndef    FT_BUILD_H
#  define  FT_BUILD_H    <freetype/config/ftbuild.h>
#endif

#include FT_BUILD_H
#include FT_FREETYPE_H

FT_BEGIN_HEADER

  /* Note that we separate font data in T1_FontInfo and T1_Private */
  /* structures in order to support Multiple Master fonts.         */


  /*************************************************************************/
  /*                                                                       */
  /* <Struct>                                                              */
  /*    T1_FontInfo                                                        */
  /*                                                                       */
  /* <Description>                                                         */
  /*    A structure used to model a Type1/Type2 FontInfo dictionary.  Note */
  /*    that for Multiple Master fonts, each instance has its own          */
  /*    FontInfo.                                                          */
  /*                                                                       */
  typedef struct  T1_FontInfo
  {
    FT_String*  version;
    FT_String*  notice;
    FT_String*  full_name;
    FT_String*  family_name;
    FT_String*  weight;
    FT_Long     italic_angle;
    FT_Bool     is_fixed_pitch;
    FT_Short    underline_position;
    FT_UShort   underline_thickness;

  } T1_FontInfo;


  /*************************************************************************/
  /*                                                                       */
  /* <Struct>                                                              */
  /*    T1_Private                                                         */
  /*                                                                       */
  /* <Description>                                                         */
  /*    A structure used to model a Type1/Type2 FontInfo dictionary.  Note */
  /*    that for Multiple Master fonts, each instance has its own Private  */
  /*    dict.                                                              */
  /*                                                                       */
  typedef struct  T1_Private
  {
    FT_Int     unique_id;
    FT_Int     lenIV;

    FT_Byte    num_blue_values;
    FT_Byte    num_other_blues;
    FT_Byte    num_family_blues;
    FT_Byte    num_family_other_blues;

    FT_Short   blue_values[14];
    FT_Short   other_blues[10];

    FT_Short   family_blues      [14];
    FT_Short   family_other_blues[10];

    FT_Fixed   blue_scale;
    FT_Int     blue_shift;
    FT_Int     blue_fuzz;

    FT_UShort  standard_width[1];
    FT_UShort  standard_height[1];

    FT_Byte    num_snap_widths;
    FT_Byte    num_snap_heights;
    FT_Bool    force_bold;
    FT_Bool    round_stem_up;

    FT_Short   snap_widths [13];  /* reserve one place for the std */
    FT_Short   snap_heights[13];  /* reserve one place for the std */

    FT_Long    language_group;
    FT_Long    password;

    FT_Short   min_feature[2];

  } T1_Private;


  /*************************************************************************/
  /*                                                                       */
  /* <Enum>                                                                */
  /*    T1_Blend_Flags                                                     */
  /*                                                                       */
  /* <Description>                                                         */
  /*    A set of flags used to indicate which fields are present in a      */
  /*    given blen dictionary (font info or private).  Used to support     */
  /*    Multiple Masters fonts.                                            */
  /*                                                                       */
  typedef enum
  {
    /* required fields in a FontInfo blend dictionary */
    t1_blend_underline_position = 0,
    t1_blend_underline_thickness,
    t1_blend_italic_angle,

    /* required fields in a Private blend dictionary */
    t1_blend_blue_values,
    t1_blend_other_blues,
    t1_blend_standard_width,
    t1_blend_standard_height,
    t1_blend_stem_snap_widths,
    t1_blend_stem_snap_heights,
    t1_blend_blue_scale,
    t1_blend_blue_shift,
    t1_blend_family_blues,
    t1_blend_family_other_blues,
    t1_blend_force_bold,

    /* never remove */
    t1_blend_max

  } T1_Blend_Flags;


  /* maximum number of Multiple Masters designs, as defined in the spec */
#define T1_MAX_MM_DESIGNS     16

  /* maximum number of Multiple Masters axes, as defined in the spec */
#define T1_MAX_MM_AXIS         4

  /* maximum number of elements in a design map */
#define T1_MAX_MM_MAP_POINTS  20


  /* this structure is used to store the BlendDesignMap entry for an axis */
  typedef struct  T1_DesignMap_
  {
    FT_Byte    num_points;
    FT_Fixed*  design_points;
    FT_Fixed*  blend_points;

  } T1_DesignMap;


  typedef struct  T1_Blend_
  {
    FT_UInt       num_designs;
    FT_UInt       num_axis;

    FT_String*    axis_names[T1_MAX_MM_AXIS];
    FT_Fixed*     design_pos[T1_MAX_MM_DESIGNS];
    T1_DesignMap  design_map[T1_MAX_MM_AXIS];

    FT_Fixed*     weight_vector;
    FT_Fixed*     default_weight_vector;

    T1_FontInfo*  font_infos[T1_MAX_MM_DESIGNS + 1];
    T1_Private*   privates  [T1_MAX_MM_DESIGNS + 1];

    FT_ULong      blend_bitflags;

  } T1_Blend;


  typedef struct  CID_FontDict_
  {
    T1_Private  private_dict;

    FT_UInt     len_buildchar;
    FT_Fixed    forcebold_threshold;
    FT_Pos      stroke_width;
    FT_Fixed    expansion_factor;

    FT_Byte     paint_type;
    FT_Byte     font_type;
    FT_Matrix   font_matrix;
    FT_Vector   font_offset;

    FT_UInt     num_subrs;
    FT_ULong    subrmap_offset;
    FT_Int      sd_bytes;

  } CID_FontDict;


  typedef struct  CID_Info_
  {
    FT_String*     cid_font_name;
    FT_Fixed       cid_version;
    FT_Int         cid_font_type;

    FT_String*     registry;
    FT_String*     ordering;
    FT_Int         supplement;

    T1_FontInfo    font_info;
    FT_BBox        font_bbox;
    FT_ULong       uid_base;

    FT_Int         num_xuid;
    FT_ULong       xuid[16];


    FT_ULong       cidmap_offset;
    FT_Int         fd_bytes;
    FT_Int         gd_bytes;
    FT_ULong       cid_count;

    FT_Int         num_dicts;
    CID_FontDict*  font_dicts;

    FT_ULong       data_offset;

  } CID_Info;


FT_END_HEADER

#endif /* __T1TABLES_H__ */


/* END */
