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/* */ 7727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* 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 58727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 59295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifndef FT_CONFIG_OPTION_PIC 60295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 61727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define FT_DEFINE_TT_CMAP( class_, \ 62727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease size_, \ 63727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease init_, \ 64727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease done_, \ 65727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_index_, \ 66727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_next_, \ 67727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_var_index_, \ 68727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_var_default_, \ 69727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease variant_list_, \ 70727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease charvariant_list_, \ 71727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease variantchar_list_, \ 72727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease format_, \ 73727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease validate_, \ 74727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease get_cmap_info_ ) \ 75727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_CALLBACK_TABLE_DEF \ 76727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const TT_CMap_ClassRec class_ = \ 77727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease { \ 78727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease { size_, \ 79727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease init_, \ 80727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease done_, \ 81727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_index_, \ 82727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_next_, \ 83727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_var_index_, \ 84727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_var_default_, \ 85727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease variant_list_, \ 86727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease charvariant_list_, \ 87727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease variantchar_list_ \ 88727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease }, \ 89727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease \ 90727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease format_, \ 91727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease validate_, \ 92727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease get_cmap_info_ \ 93295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner }; 94295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 9541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#else /* FT_CONFIG_OPTION_PIC */ 96295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 97727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define FT_DEFINE_TT_CMAP( class_, \ 98727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease size_, \ 99727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease init_, \ 100727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease done_, \ 101727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_index_, \ 102727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_next_, \ 103727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_var_index_, \ 104727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease char_var_default_, \ 105727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease variant_list_, \ 106727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease charvariant_list_, \ 107727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease variantchar_list_, \ 108727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease format_, \ 109727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease validate_, \ 110727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease get_cmap_info_ ) \ 111727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease void \ 112727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Init_Class_ ## class_( TT_CMap_ClassRec* clazz ) \ 113727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease { \ 114727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.size = size_; \ 115727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.init = init_; \ 116727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.done = done_; \ 117727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.char_index = char_index_; \ 118727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.char_next = char_next_; \ 119727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.char_var_index = char_var_index_; \ 120727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.char_var_default = char_var_default_; \ 121727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.variant_list = variant_list_; \ 122727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.charvariant_list = charvariant_list_; \ 123727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->clazz.variantchar_list = variantchar_list_; \ 124727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->format = format_; \ 125727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->validate = validate_; \ 126727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease clazz->get_cmap_info = get_cmap_info_; \ 12741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier } 128295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 12941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#endif /* FT_CONFIG_OPTION_PIC */ 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 131727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 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 140727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#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