1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* t1cmap.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Type 1 character map support (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Copyright 2002, 2003, 2006, 2007 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#include "t1cmap.h" 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "psauxerr.h" 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS *****/ 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static void 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_std_init( T1_CMapStd cmap, 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int is_expert ) 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project T1_Face face = (T1_Face)FT_CMAP_FACE( cmap ); 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->num_glyphs = face->type1.num_glyphs; 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->glyph_names = (const char* const*)face->type1.glyph_names; 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->sid_to_string = psnames->adobe_std_strings; 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->code_to_sid = is_expert ? psnames->adobe_expert_encoding 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project : psnames->adobe_std_encoding; 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ASSERT( cmap->code_to_sid != NULL ); 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( void ) 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_std_done( T1_CMapStd cmap ) 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->num_glyphs = 0; 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->glyph_names = NULL; 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->sid_to_string = NULL; 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->code_to_sid = NULL; 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_UInt ) 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_std_char_index( T1_CMapStd cmap, 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 char_code ) 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt result = 0; 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( char_code < 256 ) 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt code, n; 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* glyph_name; 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* convert character code to Adobe SID string */ 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project code = cmap->code_to_sid[char_code]; 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project glyph_name = cmap->sid_to_string( code ); 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* look for the corresponding glyph name */ 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project for ( n = 0; n < cmap->num_glyphs; n++ ) 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* gname = cmap->glyph_names[n]; 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( gname && gname[0] == glyph_name[0] && 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_strcmp( gname, glyph_name ) == 0 ) 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project result = n; 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return result; 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 98295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_CALLBACK_DEF( FT_UInt32 ) 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_std_char_next( T1_CMapStd cmap, 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 *pchar_code ) 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt result = 0; 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 char_code = *pchar_code + 1; 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project while ( char_code < 256 ) 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project result = t1_cmap_std_char_index( cmap, char_code ); 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( result != 0 ) 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project char_code++; 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project char_code = 0; 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Exit: 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *pchar_code = char_code; 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return result; 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_Error ) 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_standard_init( T1_CMapStd cmap ) 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_std_init( cmap, 0 ); 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_standard_class_rec = 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( T1_CMapStdRec ), 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_InitFunc) t1_cmap_standard_init, 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_DoneFunc) t1_cmap_std_done, 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_CharIndexFunc)t1_cmap_std_char_index, 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_CharNextFunc) t1_cmap_std_char_next, 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project NULL, NULL, NULL, NULL, NULL 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_Error ) 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_expert_init( T1_CMapStd cmap ) 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_std_init( cmap, 1 ); 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_expert_class_rec = 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( T1_CMapStdRec ), 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_InitFunc) t1_cmap_expert_init, 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_DoneFunc) t1_cmap_std_done, 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_CharIndexFunc)t1_cmap_std_char_index, 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_CharNextFunc) t1_cmap_std_char_next, 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project NULL, NULL, NULL, NULL, NULL 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** TYPE1 CUSTOM ENCODING CMAP *****/ 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_Error ) 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_custom_init( T1_CMapCustom cmap ) 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project T1_Face face = (T1_Face)FT_CMAP_FACE( cmap ); 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project T1_Encoding encoding = &face->type1.encoding; 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->first = encoding->code_first; 182295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner cmap->count = (FT_UInt)( encoding->code_last - cmap->first ); 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->indices = encoding->char_index; 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ASSERT( cmap->indices != NULL ); 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ASSERT( encoding->code_first <= encoding->code_last ); 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( void ) 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_custom_done( T1_CMapCustom cmap ) 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->indices = NULL; 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->first = 0; 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cmap->count = 0; 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_UInt ) 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_custom_char_index( T1_CMapCustom cmap, 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 char_code ) 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt result = 0; 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( ( char_code >= cmap->first ) && 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ( char_code < ( cmap->first + cmap->count ) ) ) 210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project result = cmap->indices[char_code]; 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return result; 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 216295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_CALLBACK_DEF( FT_UInt32 ) 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_custom_char_next( T1_CMapCustom cmap, 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 *pchar_code ) 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt result = 0; 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 char_code = *pchar_code; 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ++char_code; 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( char_code < cmap->first ) 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project char_code = cmap->first; 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project for ( ; char_code < ( cmap->first + cmap->count ); char_code++ ) 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project result = cmap->indices[char_code]; 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( result != 0 ) 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project char_code = 0; 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Exit: 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *pchar_code = char_code; 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return result; 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_custom_class_rec = 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( T1_CMapCustomRec ), 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_InitFunc) t1_cmap_custom_init, 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_DoneFunc) t1_cmap_custom_done, 251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_CharIndexFunc)t1_cmap_custom_char_index, 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_CharNextFunc) t1_cmap_custom_char_next, 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project NULL, NULL, NULL, NULL, NULL 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** TYPE1 SYNTHETIC UNICODE ENCODING CMAP *****/ 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( const char * ) 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_get_glyph_name( T1_Face face, 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt idx ) 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return face->type1.glyph_names[idx]; 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_Error ) 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_unicode_init( PS_Unicodes unicodes ) 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project T1_Face face = (T1_Face)FT_CMAP_FACE( unicodes ); 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory = FT_FACE_MEMORY( face ); 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return psnames->unicodes_init( memory, 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project unicodes, 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project face->type1.num_glyphs, 285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (PS_GetGlyphNameFunc)&t1_get_glyph_name, 286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (PS_FreeGlyphNameFunc)NULL, 287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Pointer)face ); 288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( void ) 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_unicode_done( PS_Unicodes unicodes ) 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Face face = FT_CMAP_FACE( unicodes ); 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory = FT_FACE_MEMORY( face ); 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FREE( unicodes->maps ); 299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project unicodes->num_maps = 0; 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_UInt ) 304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_unicode_char_index( PS_Unicodes unicodes, 305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 char_code ) 306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project T1_Face face = (T1_Face)FT_CMAP_FACE( unicodes ); 308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; 309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return psnames->unicodes_char_index( unicodes, char_code ); 312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 314049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 315295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_CALLBACK_DEF( FT_UInt32 ) 316049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_unicode_char_next( PS_Unicodes unicodes, 317049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 *pchar_code ) 318049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 319049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project T1_Face face = (T1_Face)FT_CMAP_FACE( unicodes ); 320049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; 321049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 322049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 323049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return psnames->unicodes_char_next( unicodes, pchar_code ); 324049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 325049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 326049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 327049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec 328049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project t1_cmap_unicode_class_rec = 329049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 330049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( PS_UnicodesRec ), 331049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 332049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_InitFunc) t1_cmap_unicode_init, 333049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_DoneFunc) t1_cmap_unicode_done, 334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_CharIndexFunc)t1_cmap_unicode_char_index, 335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_CMap_CharNextFunc) t1_cmap_unicode_char_next, 336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project NULL, NULL, NULL, NULL, NULL 338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 340049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 341049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 342