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
28FT_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
120FT_END_HEADER
121
122#endif /* __TTCMAP_H__ */
123
124
125/* END */
126