1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  ttcmap.h                                                               */
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    TrueType character mapping table (cmap) support (specification).     */
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  Copyright 2002-2005, 2009, 2012 by                                     */
8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  This file is part of the FreeType project, and may only be used,       */
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  modified, and distributed under the terms of the FreeType project      */
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  this file you indicate that you have read the license and              */
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  understand and accept it fully.                                        */
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef __TTCMAP_H__
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __TTCMAP_H__
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h>
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_TRUETYPE_TYPES_H
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_VALIDATE_H
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_TT_CMAP_H
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_CMAP_FLAG_UNSORTED     1
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_CMAP_FLAG_OVERLAPPING  2
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  TT_CMapRec_
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_CMapRec  cmap;
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Byte*    data;           /* pointer to in-memory cmap table */
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int      flags;          /* for format 4 only               */
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } TT_CMapRec, *TT_CMap;
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef const struct TT_CMap_ClassRec_*  TT_CMap_Class;
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef FT_Error
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*TT_CMap_ValidateFunc)( FT_Byte*      data,
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                           FT_Validator  valid );
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  TT_CMap_ClassRec_
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_CMap_ClassRec      clazz;
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt               format;
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_CMap_ValidateFunc  validate;
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_CMap_Info_GetFunc  get_cmap_info;
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } TT_CMap_ClassRec;
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
58a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
59295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifndef FT_CONFIG_OPTION_PIC
60295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
61a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define FT_DEFINE_TT_CMAP( class_,             \
62a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           size_,              \
63a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           init_,              \
64a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           done_,              \
65a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           char_index_,        \
66a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           char_next_,         \
67a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           char_var_index_,    \
68a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           char_var_default_,  \
69a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           variant_list_,      \
70a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           charvariant_list_,  \
71a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           variantchar_list_,  \
72a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           format_,            \
73a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           validate_,          \
74a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           get_cmap_info_ )    \
75a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  FT_CALLBACK_TABLE_DEF                        \
76a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  const TT_CMap_ClassRec  class_ =             \
77a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  {                                            \
78a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    { size_,                                   \
79a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      init_,                                   \
80a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      done_,                                   \
81a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      char_index_,                             \
82a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      char_next_,                              \
83a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      char_var_index_,                         \
84a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      char_var_default_,                       \
85a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      variant_list_,                           \
86a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      charvariant_list_,                       \
87a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang      variantchar_list_                        \
88a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    },                                         \
89a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                                               \
90a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    format_,                                   \
91a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    validate_,                                 \
92a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    get_cmap_info_                             \
93295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  };
94295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
95e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else /* FT_CONFIG_OPTION_PIC */
96295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
97a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define FT_DEFINE_TT_CMAP( class_,                      \
98a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           size_,                       \
99a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           init_,                       \
100a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           done_,                       \
101a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           char_index_,                 \
102a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           char_next_,                  \
103a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           char_var_index_,             \
104a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           char_var_default_,           \
105a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           variant_list_,               \
106a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           charvariant_list_,           \
107a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           variantchar_list_,           \
108a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           format_,                     \
109a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           validate_,                   \
110a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                           get_cmap_info_ )             \
111a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  void                                                  \
112a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  FT_Init_Class_ ## class_( TT_CMap_ClassRec*  clazz )  \
113a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  {                                                     \
114a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.size             = size_;              \
115a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.init             = init_;              \
116a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.done             = done_;              \
117a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.char_index       = char_index_;        \
118a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.char_next        = char_next_;         \
119a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.char_var_index   = char_var_index_;    \
120a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.char_var_default = char_var_default_;  \
121a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.variant_list     = variant_list_;      \
122a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.charvariant_list = charvariant_list_;  \
123a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->clazz.variantchar_list = variantchar_list_;  \
124a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->format                 = format_;            \
125a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->validate               = validate_;          \
126a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang    clazz->get_cmap_info          = get_cmap_info_;     \
127e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang  }
128295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
129e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif /* FT_CONFIG_OPTION_PIC */
130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
131a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  TT_ValidatorRec_
133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_ValidatorRec  validator;
135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt          num_glyphs;
136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } TT_ValidatorRec, *TT_Validator;
138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
140a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define TT_VALIDATOR( x )          ( (TT_Validator)( x ) )
141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_VALID_GLYPH_COUNT( x )  TT_VALIDATOR( x )->num_glyphs
142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  tt_face_build_cmaps( TT_Face  face );
146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* used in tt-cmaps service */
148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  tt_get_cmap_info( FT_CharMap    charmap,
150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                    TT_CMapInfo  *cmap_info );
151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __TTCMAP_H__ */
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
159