34 FT_CALLBACK_DEF( FT_Error )
35 cff_cmap_encoding_init( FT_CMap cmap,
38 CFF_CMapStd cffcmap = (CFF_CMapStd)cmap;
39 TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
40 CFF_Font cff = (CFF_Font)face->extra.data;
41 CFF_Encoding encoding = &cff->encoding;
46 cffcmap->gids = encoding->codes;
52 FT_CALLBACK_DEF(
void )
53 cff_cmap_encoding_done( FT_CMap cmap )
55 CFF_CMapStd cffcmap = (CFF_CMapStd)cmap;
62 FT_CALLBACK_DEF( FT_UInt )
63 cff_cmap_encoding_char_index( FT_CMap cmap,
66 CFF_CMapStd cffcmap = (CFF_CMapStd)cmap;
70 if ( char_code < 256 )
71 result = cffcmap->gids[char_code];
77 FT_CALLBACK_DEF( FT_UInt )
78 cff_cmap_encoding_char_next( FT_CMap cmap,
79 FT_UInt32 *pchar_code )
81 CFF_CMapStd cffcmap = (CFF_CMapStd)cmap;
83 FT_UInt32 char_code = *pchar_code;
86 while ( char_code < 255 )
88 result = cffcmap->gids[++char_code];
91 *pchar_code = char_code;
100 FT_DEFINE_CMAP_CLASS(
101 cff_cmap_encoding_class_rec,
103 sizeof ( CFF_CMapStdRec ),
105 (FT_CMap_InitFunc) cff_cmap_encoding_init,
106 (FT_CMap_DoneFunc) cff_cmap_encoding_done,
107 (FT_CMap_CharIndexFunc)cff_cmap_encoding_char_index,
108 (FT_CMap_CharNextFunc) cff_cmap_encoding_char_next,
110 (FT_CMap_CharVarIndexFunc) NULL,
111 (FT_CMap_CharVarIsDefaultFunc)NULL,
112 (FT_CMap_VariantListFunc) NULL,
113 (FT_CMap_CharVariantListFunc) NULL,
114 (FT_CMap_VariantCharListFunc) NULL
126 FT_CALLBACK_DEF(
const char* )
127 cff_sid_to_glyph_name(
void* face_,
130 TT_Face face = (TT_Face)face_;
131 CFF_Font cff = (CFF_Font)face->extra.data;
132 CFF_Charset charset = &cff->charset;
133 FT_UInt sid = charset->sids[idx];
136 return cff_index_get_sid_string( cff, sid );
140 FT_CALLBACK_DEF( FT_Error )
141 cff_cmap_unicode_init( FT_CMap cmap,
144 PS_Unicodes unicodes = (PS_Unicodes)cmap;
145 TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
146 FT_Memory memory = FT_FACE_MEMORY( face );
147 CFF_Font cff = (CFF_Font)face->extra.data;
148 CFF_Charset charset = &cff->charset;
149 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
151 FT_UNUSED( pointer );
156 if ( !charset->sids )
157 return FT_THROW( No_Unicode_Glyph_Name );
159 if ( !psnames->unicodes_init )
160 return FT_THROW( Unimplemented_Feature );
162 return psnames->unicodes_init( memory,
165 &cff_sid_to_glyph_name,
166 (PS_FreeGlyphNameFunc)NULL,
171 FT_CALLBACK_DEF(
void )
172 cff_cmap_unicode_done( FT_CMap cmap )
174 PS_Unicodes unicodes = (PS_Unicodes)cmap;
175 FT_Face face = FT_CMAP_FACE( cmap );
176 FT_Memory memory = FT_FACE_MEMORY( face );
179 FT_FREE( unicodes->maps );
180 unicodes->num_maps = 0;
184 FT_CALLBACK_DEF( FT_UInt )
185 cff_cmap_unicode_char_index( FT_CMap cmap,
186 FT_UInt32 char_code )
188 PS_Unicodes unicodes = (PS_Unicodes)cmap;
189 TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
190 CFF_Font cff = (CFF_Font)face->extra.data;
191 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
194 return psnames->unicodes_char_index( unicodes, char_code );
198 FT_CALLBACK_DEF( FT_UInt )
199 cff_cmap_unicode_char_next( FT_CMap cmap,
200 FT_UInt32 *pchar_code )
202 PS_Unicodes unicodes = (PS_Unicodes)cmap;
203 TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
204 CFF_Font cff = (CFF_Font)face->extra.data;
205 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
208 return psnames->unicodes_char_next( unicodes, pchar_code );
212 FT_DEFINE_CMAP_CLASS(
213 cff_cmap_unicode_class_rec,
215 sizeof ( PS_UnicodesRec ),
217 (FT_CMap_InitFunc) cff_cmap_unicode_init,
218 (FT_CMap_DoneFunc) cff_cmap_unicode_done,
219 (FT_CMap_CharIndexFunc)cff_cmap_unicode_char_index,
220 (FT_CMap_CharNextFunc) cff_cmap_unicode_char_next,
222 (FT_CMap_CharVarIndexFunc) NULL,
223 (FT_CMap_CharVarIsDefaultFunc)NULL,
224 (FT_CMap_VariantListFunc) NULL,
225 (FT_CMap_CharVariantListFunc) NULL,
226 (FT_CMap_VariantCharListFunc) NULL