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