1 /****************************************************************************
   2  *
   3  * ttcmap.h
   4  *
   5  *   TrueType character mapping table (cmap) support (specification).
   6  *
   7  * Copyright (C) 2002-2019 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 
  59 #define FT_DEFINE_TT_CMAP( class_,             \
  60                            size_,              \
  61                            init_,              \
  62                            done_,              \
  63                            char_index_,        \
  64                            char_next_,         \
  65                            char_var_index_,    \
  66                            char_var_default_,  \
  67                            variant_list_,      \
  68                            charvariant_list_,  \
  69                            variantchar_list_,  \
  70                            format_,            \
  71                            validate_,          \
  72                            get_cmap_info_ )    \
  73   FT_CALLBACK_TABLE_DEF                        \
  74   const TT_CMap_ClassRec  class_ =             \
  75   {                                            \
  76     { size_,                                   \
  77       init_,                                   \
  78       done_,                                   \
  79       char_index_,                             \
  80       char_next_,                              \
  81       char_var_index_,                         \
  82       char_var_default_,                       \
  83       variant_list_,                           \
  84       charvariant_list_,                       \
  85       variantchar_list_                        \
  86     },                                         \
  87                                                \
  88     format_,                                   \
  89     validate_,                                 \
  90     get_cmap_info_                             \
  91   };
  92 
  93 
  94   typedef struct  TT_ValidatorRec_
  95   {
  96     FT_ValidatorRec  validator;
  97     FT_UInt          num_glyphs;
  98 
  99   } TT_ValidatorRec, *TT_Validator;
 100 
 101 
 102 #define TT_VALIDATOR( x )          ( (TT_Validator)( x ) )
 103 #define TT_VALID_GLYPH_COUNT( x )  TT_VALIDATOR( x )->num_glyphs
 104 
 105 
 106   FT_CALLBACK_TABLE const TT_CMap_ClassRec  tt_cmap_unicode_class_rec;
 107 
 108   FT_LOCAL( FT_Error )
 109   tt_face_build_cmaps( TT_Face  face );
 110 
 111   /* used in tt-cmaps service */
 112   FT_LOCAL( FT_Error )
 113   tt_get_cmap_info( FT_CharMap    charmap,
 114                     TT_CMapInfo  *cmap_info );
 115 
 116 
 117 FT_END_HEADER
 118 
 119 #endif /* TTCMAP_H_ */
 120 
 121 
 122 /* END */