Home | History | Annotate | Download | only in sfnt
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ttcmap.h                                                               */
      4 /*                                                                         */
      5 /*    TrueType character mapping table (cmap) support (specification).     */
      6 /*                                                                         */
      7 /*  Copyright 2002, 2003, 2004, 2005 by                                    */
      8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
      9 /*                                                                         */
     10 /*  This file is part of the FreeType project, and may only be used,       */
     11 /*  modified, and distributed under the terms of the FreeType project      */
     12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
     13 /*  this file you indicate that you have read the license and              */
     14 /*  understand and accept it fully.                                        */
     15 /*                                                                         */
     16 /***************************************************************************/
     17 
     18 
     19 #ifndef __TTCMAP_H__
     20 #define __TTCMAP_H__
     21 
     22 
     23 #include <ft2build.h>
     24 #include FT_INTERNAL_TRUETYPE_TYPES_H
     25 #include FT_INTERNAL_VALIDATE_H
     26 #include FT_SERVICE_TT_CMAP_H
     27 
     28 FT_BEGIN_HEADER
     29 
     30 
     31 #define TT_CMAP_FLAG_UNSORTED     1
     32 #define TT_CMAP_FLAG_OVERLAPPING  2
     33 
     34   typedef struct  TT_CMapRec_
     35   {
     36     FT_CMapRec  cmap;
     37     FT_Byte*    data;           /* pointer to in-memory cmap table */
     38     FT_Int      flags;          /* for format 4 only               */
     39 
     40   } TT_CMapRec, *TT_CMap;
     41 
     42   typedef const struct TT_CMap_ClassRec_*  TT_CMap_Class;
     43 
     44 
     45   typedef FT_Error
     46   (*TT_CMap_ValidateFunc)( FT_Byte*      data,
     47                            FT_Validator  valid );
     48 
     49   typedef struct  TT_CMap_ClassRec_
     50   {
     51     FT_CMap_ClassRec      clazz;
     52     FT_UInt               format;
     53     TT_CMap_ValidateFunc  validate;
     54     TT_CMap_Info_GetFunc  get_cmap_info;
     55 
     56   } TT_CMap_ClassRec;
     57 
     58 #ifndef FT_CONFIG_OPTION_PIC
     59 
     60 #define FT_DEFINE_TT_CMAP(class_, size_, init_, done_, char_index_,          \
     61     char_next_, char_var_index_, char_var_default_, variant_list_,           \
     62     charvariant_list_,variantchar_list_,                                     \
     63     format_, validate_, get_cmap_info_)                                      \
     64   FT_CALLBACK_TABLE_DEF                                                      \
     65   const TT_CMap_ClassRec class_ =                                            \
     66   {                                                                          \
     67     {size_, init_, done_, char_index_,                                       \
     68      char_next_, char_var_index_, char_var_default_, variant_list_,          \
     69      charvariant_list_, variantchar_list_},                                  \
     70     format_, validate_, get_cmap_info_                                       \
     71   };
     72 
     73 #else /* FT_CONFIG_OPTION_PIC */
     74 
     75 #define FT_DEFINE_TT_CMAP(class_, size_, init_, done_, char_index_,          \
     76     char_next_, char_var_index_, char_var_default_, variant_list_,           \
     77     charvariant_list_,variantchar_list_,                                     \
     78     format_, validate_, get_cmap_info_)                                      \
     79   void                                                                       \
     80   FT_Init_Class_##class_( TT_CMap_ClassRec*  clazz )                         \
     81   {                                                                          \
     82     clazz->clazz.size = size_;                                               \
     83     clazz->clazz.init = init_;                                               \
     84     clazz->clazz.done = done_;                                               \
     85     clazz->clazz.char_index = char_index_;                                   \
     86     clazz->clazz.char_next = char_next_;                                     \
     87     clazz->clazz.char_var_index = char_var_index_;                           \
     88     clazz->clazz.char_var_default = char_var_default_;                       \
     89     clazz->clazz.variant_list = variant_list_;                               \
     90     clazz->clazz.charvariant_list = charvariant_list_;                       \
     91     clazz->clazz.variantchar_list = variantchar_list_;                       \
     92     clazz->format = format_;                                                 \
     93     clazz->validate = validate_;                                             \
     94     clazz->get_cmap_info = get_cmap_info_;                                   \
     95   }
     96 
     97 #endif /* FT_CONFIG_OPTION_PIC */
     98 
     99   typedef struct  TT_ValidatorRec_
    100   {
    101     FT_ValidatorRec  validator;
    102     FT_UInt          num_glyphs;
    103 
    104   } TT_ValidatorRec, *TT_Validator;
    105 
    106 
    107 #define TT_VALIDATOR( x )          ((TT_Validator)( x ))
    108 #define TT_VALID_GLYPH_COUNT( x )  TT_VALIDATOR( x )->num_glyphs
    109 
    110 
    111   FT_LOCAL( FT_Error )
    112   tt_face_build_cmaps( TT_Face  face );
    113 
    114   /* used in tt-cmaps service */
    115   FT_LOCAL( FT_Error )
    116   tt_get_cmap_info( FT_CharMap    charmap,
    117                     TT_CMapInfo  *cmap_info );
    118 
    119 
    120 FT_END_HEADER
    121 
    122 #endif /* __TTCMAP_H__ */
    123 
    124 
    125 /* END */
    126