1 /***************************************************************************/ 2 /* */ 3 /* svpscmap.h */ 4 /* */ 5 /* The FreeType PostScript charmap service (specification). */ 6 /* */ 7 /* Copyright 2003, 2006, 2009, 2012 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 __SVPSCMAP_H__ 20 #define __SVPSCMAP_H__ 21 22 #include FT_INTERNAL_OBJECTS_H 23 24 25 FT_BEGIN_HEADER 26 27 28 #define FT_SERVICE_ID_POSTSCRIPT_CMAPS "postscript-cmaps" 29 30 31 /* 32 * Adobe glyph name to unicode value. 33 */ 34 typedef FT_UInt32 35 (*PS_Unicode_ValueFunc)( const char* glyph_name ); 36 37 /* 38 * Macintosh name id to glyph name. NULL if invalid index. 39 */ 40 typedef const char* 41 (*PS_Macintosh_NameFunc)( FT_UInt name_index ); 42 43 /* 44 * Adobe standard string ID to glyph name. NULL if invalid index. 45 */ 46 typedef const char* 47 (*PS_Adobe_Std_StringsFunc)( FT_UInt string_index ); 48 49 50 /* 51 * Simple unicode -> glyph index charmap built from font glyph names 52 * table. 53 */ 54 typedef struct PS_UniMap_ 55 { 56 FT_UInt32 unicode; /* bit 31 set: is glyph variant */ 57 FT_UInt glyph_index; 58 59 } PS_UniMap; 60 61 62 typedef struct PS_UnicodesRec_* PS_Unicodes; 63 64 typedef struct PS_UnicodesRec_ 65 { 66 FT_CMapRec cmap; 67 FT_UInt num_maps; 68 PS_UniMap* maps; 69 70 } PS_UnicodesRec; 71 72 73 /* 74 * A function which returns a glyph name for a given index. Returns 75 * NULL if invalid index. 76 */ 77 typedef const char* 78 (*PS_GetGlyphNameFunc)( FT_Pointer data, 79 FT_UInt string_index ); 80 81 /* 82 * A function used to release the glyph name returned by 83 * PS_GetGlyphNameFunc, when needed 84 */ 85 typedef void 86 (*PS_FreeGlyphNameFunc)( FT_Pointer data, 87 const char* name ); 88 89 typedef FT_Error 90 (*PS_Unicodes_InitFunc)( FT_Memory memory, 91 PS_Unicodes unicodes, 92 FT_UInt num_glyphs, 93 PS_GetGlyphNameFunc get_glyph_name, 94 PS_FreeGlyphNameFunc free_glyph_name, 95 FT_Pointer glyph_data ); 96 97 typedef FT_UInt 98 (*PS_Unicodes_CharIndexFunc)( PS_Unicodes unicodes, 99 FT_UInt32 unicode ); 100 101 typedef FT_UInt32 102 (*PS_Unicodes_CharNextFunc)( PS_Unicodes unicodes, 103 FT_UInt32 *unicode ); 104 105 FT_DEFINE_SERVICE(PsCMaps)106 FT_DEFINE_SERVICE( PsCMaps ) 107 { 108 PS_Unicode_ValueFunc unicode_value; 109 110 PS_Unicodes_InitFunc unicodes_init; 111 PS_Unicodes_CharIndexFunc unicodes_char_index; 112 PS_Unicodes_CharNextFunc unicodes_char_next; 113 114 PS_Macintosh_NameFunc macintosh_name; 115 PS_Adobe_Std_StringsFunc adobe_std_strings; 116 const unsigned short* adobe_std_encoding; 117 const unsigned short* adobe_expert_encoding; 118 }; 119 120 121 #ifndef FT_CONFIG_OPTION_PIC 122 123 #define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \ 124 unicode_value_, \ 125 unicodes_init_, \ 126 unicodes_char_index_, \ 127 unicodes_char_next_, \ 128 macintosh_name_, \ 129 adobe_std_strings_, \ 130 adobe_std_encoding_, \ 131 adobe_expert_encoding_ ) \ 132 static const FT_Service_PsCMapsRec class_ = \ 133 { \ 134 unicode_value_, unicodes_init_, \ 135 unicodes_char_index_, unicodes_char_next_, macintosh_name_, \ 136 adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_ \ 137 }; 138 139 #else /* FT_CONFIG_OPTION_PIC */ 140 141 #define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \ 142 unicode_value_, \ 143 unicodes_init_, \ 144 unicodes_char_index_, \ 145 unicodes_char_next_, \ 146 macintosh_name_, \ 147 adobe_std_strings_, \ 148 adobe_std_encoding_, \ 149 adobe_expert_encoding_ ) \ 150 void \ 151 FT_Init_Class_ ## class_( FT_Library library, \ 152 FT_Service_PsCMapsRec* clazz ) \ 153 { \ 154 FT_UNUSED( library ); \ 155 \ 156 clazz->unicode_value = unicode_value_; \ 157 clazz->unicodes_init = unicodes_init_; \ 158 clazz->unicodes_char_index = unicodes_char_index_; \ 159 clazz->unicodes_char_next = unicodes_char_next_; \ 160 clazz->macintosh_name = macintosh_name_; \ 161 clazz->adobe_std_strings = adobe_std_strings_; \ 162 clazz->adobe_std_encoding = adobe_std_encoding_; \ 163 clazz->adobe_expert_encoding = adobe_expert_encoding_; \ 164 } 165 166 #endif /* FT_CONFIG_OPTION_PIC */ 167 168 /* */ 169 170 171 FT_END_HEADER 172 173 174 #endif /* __SVPSCMAP_H__ */ 175 176 177 /* END */ 178