Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Side by Side Diff: src/sfnt/sfdriver.c

Issue 89753003: Update freetype to latest version of ASOP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src/third_party/freetype.git@master
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/sfnt/pngshim.c ('k') | src/sfnt/sferrors.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /***************************************************************************/ 1 /***************************************************************************/
2 /* */ 2 /* */
3 /* sfdriver.c */ 3 /* sfdriver.c */
4 /* */ 4 /* */
5 /* High-level SFNT driver interface (body). */ 5 /* High-level SFNT driver interface (body). */
6 /* */ 6 /* */
7 /* Copyright 1996-2007, 2009-2011 by */ 7 /* Copyright 1996-2007, 2009-2013 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
9 /* */ 9 /* */
10 /* This file is part of the FreeType project, and may only be used, */ 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 */ 11 /* modified, and distributed under the terms of the FreeType project */
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
13 /* this file you indicate that you have read the license and */ 13 /* this file you indicate that you have read the license and */
14 /* understand and accept it fully. */ 14 /* understand and accept it fully. */
15 /* */ 15 /* */
16 /***************************************************************************/ 16 /***************************************************************************/
17 17
(...skipping 25 matching lines...) Expand all
43 43
44 #include "ttcmap.h" 44 #include "ttcmap.h"
45 #include "ttkern.h" 45 #include "ttkern.h"
46 #include "ttmtx.h" 46 #include "ttmtx.h"
47 47
48 #include FT_SERVICE_GLYPH_DICT_H 48 #include FT_SERVICE_GLYPH_DICT_H
49 #include FT_SERVICE_POSTSCRIPT_NAME_H 49 #include FT_SERVICE_POSTSCRIPT_NAME_H
50 #include FT_SERVICE_SFNT_H 50 #include FT_SERVICE_SFNT_H
51 #include FT_SERVICE_TT_CMAP_H 51 #include FT_SERVICE_TT_CMAP_H
52 52
53
53 /*************************************************************************/ 54 /*************************************************************************/
54 /* */ 55 /* */
55 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 56 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
56 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 57 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
57 /* messages during execution. */ 58 /* messages during execution. */
58 /* */ 59 /* */
59 #undef FT_COMPONENT 60 #undef FT_COMPONENT
60 #define FT_COMPONENT trace_sfdriver 61 #define FT_COMPONENT trace_sfdriver
61 62
62 63
63 /* 64 /*
64 * SFNT TABLE SERVICE 65 * SFNT TABLE SERVICE
65 * 66 *
66 */ 67 */
67 68
68 static void* 69 static void*
69 get_sfnt_table( TT_Face face, 70 get_sfnt_table( TT_Face face,
70 FT_Sfnt_Tag tag ) 71 FT_Sfnt_Tag tag )
71 { 72 {
72 void* table; 73 void* table;
73 74
74 75
75 switch ( tag ) 76 switch ( tag )
76 { 77 {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 112
112 113
113 static FT_Error 114 static FT_Error
114 sfnt_table_info( TT_Face face, 115 sfnt_table_info( TT_Face face,
115 FT_UInt idx, 116 FT_UInt idx,
116 FT_ULong *tag, 117 FT_ULong *tag,
117 FT_ULong *offset, 118 FT_ULong *offset,
118 FT_ULong *length ) 119 FT_ULong *length )
119 { 120 {
120 if ( !offset || !length ) 121 if ( !offset || !length )
121 return SFNT_Err_Invalid_Argument; 122 return FT_THROW( Invalid_Argument );
122 123
123 if ( !tag ) 124 if ( !tag )
124 *length = face->num_tables; 125 *length = face->num_tables;
125 else 126 else
126 { 127 {
127 if ( idx >= face->num_tables ) 128 if ( idx >= face->num_tables )
128 return SFNT_Err_Table_Missing; 129 return FT_THROW( Table_Missing );
129 130
130 *tag = face->dir_tables[idx].Tag; 131 *tag = face->dir_tables[idx].Tag;
131 *offset = face->dir_tables[idx].Offset; 132 *offset = face->dir_tables[idx].Offset;
132 *length = face->dir_tables[idx].Length; 133 *length = face->dir_tables[idx].Length;
133 } 134 }
134 135
135 return SFNT_Err_Ok; 136 return FT_Err_Ok;
136 } 137 }
137 138
138 139
139 FT_DEFINE_SERVICE_SFNT_TABLEREC(sfnt_service_sfnt_table, 140 FT_DEFINE_SERVICE_SFNT_TABLEREC(
141 sfnt_service_sfnt_table,
140 (FT_SFNT_TableLoadFunc)tt_face_load_any, 142 (FT_SFNT_TableLoadFunc)tt_face_load_any,
141 (FT_SFNT_TableGetFunc) get_sfnt_table, 143 (FT_SFNT_TableGetFunc) get_sfnt_table,
142 (FT_SFNT_TableInfoFunc)sfnt_table_info 144 (FT_SFNT_TableInfoFunc)sfnt_table_info )
143 )
144 145
145 146
146 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES 147 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
147 148
148 /* 149 /*
149 * GLYPH DICT SERVICE 150 * GLYPH DICT SERVICE
150 * 151 *
151 */ 152 */
152 153
153 static FT_Error 154 static FT_Error
154 sfnt_get_glyph_name( TT_Face face, 155 sfnt_get_glyph_name( TT_Face face,
155 FT_UInt glyph_index, 156 FT_UInt glyph_index,
156 FT_Pointer buffer, 157 FT_Pointer buffer,
157 FT_UInt buffer_max ) 158 FT_UInt buffer_max )
158 { 159 {
159 FT_String* gname; 160 FT_String* gname;
160 FT_Error error; 161 FT_Error error;
161 162
162 163
163 error = tt_face_get_ps_name( face, glyph_index, &gname ); 164 error = tt_face_get_ps_name( face, glyph_index, &gname );
164 if ( !error ) 165 if ( !error )
165 FT_STRCPYN( buffer, gname, buffer_max ); 166 FT_STRCPYN( buffer, gname, buffer_max );
166 167
167 return error; 168 return error;
168 } 169 }
169 170
170 171
171 static FT_UInt 172 static FT_UInt
172 sfnt_get_name_index( TT_Face face, 173 sfnt_get_name_index( TT_Face face,
173 FT_String* glyph_name ) 174 FT_String* glyph_name )
174 { 175 {
175 FT_Face root = &face->root; 176 FT_Face root = &face->root;
176 FT_UInt i, max_gid = FT_UINT_MAX; 177
178 FT_UInt i, max_gid = FT_UINT_MAX;
177 179
178 180
179 if ( root->num_glyphs < 0 ) 181 if ( root->num_glyphs < 0 )
180 return 0; 182 return 0;
181 else if ( ( FT_ULong ) root->num_glyphs < FT_UINT_MAX ) 183 else if ( (FT_ULong)root->num_glyphs < FT_UINT_MAX )
182 max_gid = ( FT_UInt ) root->num_glyphs; 184 max_gid = (FT_UInt)root->num_glyphs;
183 else 185 else
184 FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n", 186 FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n",
185 FT_UINT_MAX, root->num_glyphs )); 187 FT_UINT_MAX, root->num_glyphs ));
186 188
187 for ( i = 0; i < max_gid; i++ ) 189 for ( i = 0; i < max_gid; i++ )
188 { 190 {
189 FT_String* gname; 191 FT_String* gname;
190 FT_Error error = tt_face_get_ps_name( face, i, &gname ); 192 FT_Error error = tt_face_get_ps_name( face, i, &gname );
191 193
192 194
193 if ( error ) 195 if ( error )
194 continue; 196 continue;
195 197
196 if ( !ft_strcmp( glyph_name, gname ) ) 198 if ( !ft_strcmp( glyph_name, gname ) )
197 return i; 199 return i;
198 } 200 }
199 201
200 return 0; 202 return 0;
201 } 203 }
202 204
203 205
204 FT_DEFINE_SERVICE_GLYPHDICTREC(sfnt_service_glyph_dict, 206 FT_DEFINE_SERVICE_GLYPHDICTREC(
207 sfnt_service_glyph_dict,
205 (FT_GlyphDict_GetNameFunc) sfnt_get_glyph_name, 208 (FT_GlyphDict_GetNameFunc) sfnt_get_glyph_name,
206 (FT_GlyphDict_NameIndexFunc)sfnt_get_name_index 209 (FT_GlyphDict_NameIndexFunc)sfnt_get_name_index )
207 ) 210
208 211
209 #endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */ 212 #endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
210 213
211 214
212 /* 215 /*
213 * POSTSCRIPT NAME SERVICE 216 * POSTSCRIPT NAME SERVICE
214 * 217 *
215 */ 218 */
216 219
217 static const char* 220 static const char*
218 sfnt_get_ps_name( TT_Face face ) 221 sfnt_get_ps_name( TT_Face face )
219 { 222 {
220 FT_Int n, found_win, found_apple; 223 FT_Int n, found_win, found_apple;
221 const char* result = NULL; 224 const char* result = NULL;
222 225
223 226
224 /* shouldn't happen, but just in case to avoid memory leaks */ 227 /* shouldn't happen, but just in case to avoid memory leaks */
225 if ( face->postscript_name ) 228 if ( face->postscript_name )
(...skipping 21 matching lines...) Expand all
247 name->languageID == 0 ) 250 name->languageID == 0 )
248 found_apple = n; 251 found_apple = n;
249 } 252 }
250 } 253 }
251 254
252 if ( found_win != -1 ) 255 if ( found_win != -1 )
253 { 256 {
254 FT_Memory memory = face->root.memory; 257 FT_Memory memory = face->root.memory;
255 TT_NameEntryRec* name = face->name_table.names + found_win; 258 TT_NameEntryRec* name = face->name_table.names + found_win;
256 FT_UInt len = name->stringLength / 2; 259 FT_UInt len = name->stringLength / 2;
257 FT_Error error = SFNT_Err_Ok; 260 FT_Error error = FT_Err_Ok;
258 261
259 FT_UNUSED( error ); 262 FT_UNUSED( error );
260 263
261 264
262 if ( !FT_ALLOC( result, name->stringLength + 1 ) ) 265 if ( !FT_ALLOC( result, name->stringLength + 1 ) )
263 { 266 {
264 FT_Stream stream = face->name_table.stream; 267 FT_Stream stream = face->name_table.stream;
265 FT_String* r = (FT_String*)result; 268 FT_String* r = (FT_String*)result;
266 FT_Byte* p = (FT_Byte*)name->string; 269 FT_Byte* p = (FT_Byte*)name->string;
267 270
(...skipping 21 matching lines...) Expand all
289 FT_FRAME_EXIT(); 292 FT_FRAME_EXIT();
290 } 293 }
291 goto Exit; 294 goto Exit;
292 } 295 }
293 296
294 if ( found_apple != -1 ) 297 if ( found_apple != -1 )
295 { 298 {
296 FT_Memory memory = face->root.memory; 299 FT_Memory memory = face->root.memory;
297 TT_NameEntryRec* name = face->name_table.names + found_apple; 300 TT_NameEntryRec* name = face->name_table.names + found_apple;
298 FT_UInt len = name->stringLength; 301 FT_UInt len = name->stringLength;
299 FT_Error error = SFNT_Err_Ok; 302 FT_Error error = FT_Err_Ok;
300 303
301 FT_UNUSED( error ); 304 FT_UNUSED( error );
302 305
303 306
304 if ( !FT_ALLOC( result, len + 1 ) ) 307 if ( !FT_ALLOC( result, len + 1 ) )
305 { 308 {
306 FT_Stream stream = face->name_table.stream; 309 FT_Stream stream = face->name_table.stream;
307 310
308 311
309 if ( FT_STREAM_SEEK( name->stringOffset ) || 312 if ( FT_STREAM_SEEK( name->stringOffset ) ||
310 FT_STREAM_READ( result, len ) ) 313 FT_STREAM_READ( result, len ) )
311 { 314 {
312 name->stringOffset = 0; 315 name->stringOffset = 0;
313 name->stringLength = 0; 316 name->stringLength = 0;
314 FT_FREE( name->string ); 317 FT_FREE( name->string );
315 FT_FREE( result ); 318 FT_FREE( result );
316 goto Exit; 319 goto Exit;
317 } 320 }
318 ((char*)result)[len] = '\0'; 321 ((char*)result)[len] = '\0';
319 } 322 }
320 } 323 }
321 324
322 Exit: 325 Exit:
323 face->postscript_name = result; 326 face->postscript_name = result;
324 return result; 327 return result;
325 } 328 }
326 329
327 FT_DEFINE_SERVICE_PSFONTNAMEREC(sfnt_service_ps_name, 330
328 (FT_PsName_GetFunc)sfnt_get_ps_name 331 FT_DEFINE_SERVICE_PSFONTNAMEREC(
329 ) 332 sfnt_service_ps_name,
333 (FT_PsName_GetFunc)sfnt_get_ps_name )
330 334
331 335
332 /* 336 /*
333 * TT CMAP INFO 337 * TT CMAP INFO
334 */ 338 */
335 FT_DEFINE_SERVICE_TTCMAPSREC(tt_service_get_cmap_info, 339 FT_DEFINE_SERVICE_TTCMAPSREC(
336 (TT_CMap_Info_GetFunc)tt_get_cmap_info 340 tt_service_get_cmap_info,
337 ) 341 (TT_CMap_Info_GetFunc)tt_get_cmap_info )
338 342
339 343
340 #ifdef TT_CONFIG_OPTION_BDF 344 #ifdef TT_CONFIG_OPTION_BDF
341 345
342 static FT_Error 346 static FT_Error
343 sfnt_get_charset_id( TT_Face face, 347 sfnt_get_charset_id( TT_Face face,
344 const char* *acharset_encoding, 348 const char* *acharset_encoding,
345 const char* *acharset_registry ) 349 const char* *acharset_registry )
346 { 350 {
347 BDF_PropertyRec encoding, registry; 351 BDF_PropertyRec encoding, registry;
(...skipping 12 matching lines...) Expand all
360 error = tt_face_find_bdf_prop( face, "CHARSET_ENCODING", &encoding ); 364 error = tt_face_find_bdf_prop( face, "CHARSET_ENCODING", &encoding );
361 if ( !error ) 365 if ( !error )
362 { 366 {
363 if ( registry.type == BDF_PROPERTY_TYPE_ATOM && 367 if ( registry.type == BDF_PROPERTY_TYPE_ATOM &&
364 encoding.type == BDF_PROPERTY_TYPE_ATOM ) 368 encoding.type == BDF_PROPERTY_TYPE_ATOM )
365 { 369 {
366 *acharset_encoding = encoding.u.atom; 370 *acharset_encoding = encoding.u.atom;
367 *acharset_registry = registry.u.atom; 371 *acharset_registry = registry.u.atom;
368 } 372 }
369 else 373 else
370 error = SFNT_Err_Invalid_Argument; 374 error = FT_THROW( Invalid_Argument );
371 } 375 }
372 } 376 }
373 377
374 return error; 378 return error;
375 } 379 }
376 380
377 381
378 FT_DEFINE_SERVICE_BDFRec(sfnt_service_bdf, 382 FT_DEFINE_SERVICE_BDFRec(
379 (FT_BDF_GetCharsetIdFunc) sfnt_get_charset_id, 383 sfnt_service_bdf,
380 (FT_BDF_GetPropertyFunc) tt_face_find_bdf_prop 384 (FT_BDF_GetCharsetIdFunc)sfnt_get_charset_id,
381 ) 385 (FT_BDF_GetPropertyFunc) tt_face_find_bdf_prop )
386
382 387
383 #endif /* TT_CONFIG_OPTION_BDF */ 388 #endif /* TT_CONFIG_OPTION_BDF */
384 389
385 390
386 /* 391 /*
387 * SERVICE LIST 392 * SERVICE LIST
388 */ 393 */
389 394
390 #if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF 395 #if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF
391 FT_DEFINE_SERVICEDESCREC5(sfnt_services, 396 FT_DEFINE_SERVICEDESCREC5(
392 FT_SERVICE_ID_SFNT_TABLE, &FT_SFNT_SERVICE_SFNT_TABLE_GET, 397 sfnt_services,
393 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_SFNT_SERVICE_PS_NAME_GET, 398 FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
394 FT_SERVICE_ID_GLYPH_DICT, &FT_SFNT_SERVICE_GLYPH_DICT_GET, 399 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
395 FT_SERVICE_ID_BDF, &FT_SFNT_SERVICE_BDF_GET, 400 FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET,
396 FT_SERVICE_ID_TT_CMAP, &FT_TT_SERVICE_GET_CMAP_INFO_GET 401 FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET,
397 ) 402 FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
398 #elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES 403 #elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES
399 FT_DEFINE_SERVICEDESCREC4(sfnt_services, 404 FT_DEFINE_SERVICEDESCREC4(
400 FT_SERVICE_ID_SFNT_TABLE, &FT_SFNT_SERVICE_SFNT_TABLE_GET, 405 sfnt_services,
401 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_SFNT_SERVICE_PS_NAME_GET, 406 FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
402 FT_SERVICE_ID_GLYPH_DICT, &FT_SFNT_SERVICE_GLYPH_DICT_GET, 407 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
403 FT_SERVICE_ID_TT_CMAP, &FT_TT_SERVICE_GET_CMAP_INFO_GET 408 FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET,
404 ) 409 FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
405 #elif defined TT_CONFIG_OPTION_BDF 410 #elif defined TT_CONFIG_OPTION_BDF
406 FT_DEFINE_SERVICEDESCREC4(sfnt_services, 411 FT_DEFINE_SERVICEDESCREC4(
407 FT_SERVICE_ID_SFNT_TABLE, &FT_SFNT_SERVICE_SFNT_TABLE_GET, 412 sfnt_services,
408 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_SFNT_SERVICE_PS_NAME_GET, 413 FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
409 FT_SERVICE_ID_BDF, &FT_SFNT_SERVICE_BDF_GET, 414 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
410 FT_SERVICE_ID_TT_CMAP, &FT_TT_SERVICE_GET_CMAP_INFO_GET 415 FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET,
411 ) 416 FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
412 #else 417 #else
413 FT_DEFINE_SERVICEDESCREC3(sfnt_services, 418 FT_DEFINE_SERVICEDESCREC3(
414 FT_SERVICE_ID_SFNT_TABLE, &FT_SFNT_SERVICE_SFNT_TABLE_GET, 419 sfnt_services,
415 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_SFNT_SERVICE_PS_NAME_GET, 420 FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
416 FT_SERVICE_ID_TT_CMAP, &FT_TT_SERVICE_GET_CMAP_INFO_GET 421 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
417 ) 422 FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
418 #endif 423 #endif
419 424
420 425
421 FT_CALLBACK_DEF( FT_Module_Interface ) 426 FT_CALLBACK_DEF( FT_Module_Interface )
422 sfnt_get_interface( FT_Module module, 427 sfnt_get_interface( FT_Module module,
423 const char* module_interface ) 428 const char* module_interface )
424 { 429 {
425 /* FT_SFNT_SERVICES_GET derefers `library' in PIC mode */ 430 /* SFNT_SERVICES_GET derefers `library' in PIC mode */
426 #ifdef FT_CONFIG_OPTION_PIC 431 #ifdef FT_CONFIG_OPTION_PIC
427 FT_Library library; 432 FT_Library library;
428 433
429 434
430 if ( !module ) 435 if ( !module )
431 return NULL; 436 return NULL;
432 library = module->library; 437 library = module->library;
433 if ( !library ) 438 if ( !library )
434 return NULL; 439 return NULL;
435 #else 440 #else
436 FT_UNUSED( module ); 441 FT_UNUSED( module );
437 #endif 442 #endif
438 return ft_service_list_lookup( FT_SFNT_SERVICES_GET, module_interface ); 443
444 return ft_service_list_lookup( SFNT_SERVICES_GET, module_interface );
439 } 445 }
440 446
441 447
442 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
443
444 FT_CALLBACK_DEF( FT_Error )
445 tt_face_load_sfnt_header_stub( TT_Face face,
446 FT_Stream stream,
447 FT_Long face_index,
448 SFNT_Header header )
449 {
450 FT_UNUSED( face );
451 FT_UNUSED( stream );
452 FT_UNUSED( face_index );
453 FT_UNUSED( header );
454
455 return SFNT_Err_Unimplemented_Feature;
456 }
457
458
459 FT_CALLBACK_DEF( FT_Error )
460 tt_face_load_directory_stub( TT_Face face,
461 FT_Stream stream,
462 SFNT_Header header )
463 {
464 FT_UNUSED( face );
465 FT_UNUSED( stream );
466 FT_UNUSED( header );
467
468 return SFNT_Err_Unimplemented_Feature;
469 }
470
471
472 FT_CALLBACK_DEF( FT_Error )
473 tt_face_load_hdmx_stub( TT_Face face,
474 FT_Stream stream )
475 {
476 FT_UNUSED( face );
477 FT_UNUSED( stream );
478
479 return SFNT_Err_Unimplemented_Feature;
480 }
481
482
483 FT_CALLBACK_DEF( void )
484 tt_face_free_hdmx_stub( TT_Face face )
485 {
486 FT_UNUSED( face );
487 }
488
489
490 FT_CALLBACK_DEF( FT_Error )
491 tt_face_set_sbit_strike_stub( TT_Face face,
492 FT_UInt x_ppem,
493 FT_UInt y_ppem,
494 FT_ULong* astrike_index )
495 {
496 /*
497 * We simply forge a FT_Size_Request and call the real function
498 * that does all the work.
499 *
500 * This stub might be called by libXfont in the X.Org Xserver,
501 * compiled against version 2.1.8 or newer.
502 */
503
504 FT_Size_RequestRec req;
505
506
507 req.type = FT_SIZE_REQUEST_TYPE_NOMINAL;
508 req.width = (FT_F26Dot6)x_ppem;
509 req.height = (FT_F26Dot6)y_ppem;
510 req.horiResolution = 0;
511 req.vertResolution = 0;
512
513 *astrike_index = 0x7FFFFFFFUL;
514
515 return tt_face_set_sbit_strike( face, &req, astrike_index );
516 }
517
518
519 FT_CALLBACK_DEF( FT_Error )
520 tt_face_load_sbit_stub( TT_Face face,
521 FT_Stream stream )
522 {
523 FT_UNUSED( face );
524 FT_UNUSED( stream );
525
526 /*
527 * This function was originally implemented to load the sbit table.
528 * However, it has been replaced by `tt_face_load_eblc', and this stub
529 * is only there for some rogue clients which would want to call it
530 * directly (which doesn't make much sense).
531 */
532 return SFNT_Err_Unimplemented_Feature;
533 }
534
535
536 FT_CALLBACK_DEF( void )
537 tt_face_free_sbit_stub( TT_Face face )
538 {
539 /* nothing to do in this stub */
540 FT_UNUSED( face );
541 }
542
543
544 FT_CALLBACK_DEF( FT_Error )
545 tt_face_load_charmap_stub( TT_Face face,
546 void* cmap,
547 FT_Stream input )
548 {
549 FT_UNUSED( face );
550 FT_UNUSED( cmap );
551 FT_UNUSED( input );
552
553 return SFNT_Err_Unimplemented_Feature;
554 }
555
556
557 FT_CALLBACK_DEF( FT_Error )
558 tt_face_free_charmap_stub( TT_Face face,
559 void* cmap )
560 {
561 FT_UNUSED( face );
562 FT_UNUSED( cmap );
563
564 return SFNT_Err_Ok;
565 }
566
567 #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
568
569 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 448 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
570 #define PUT_EMBEDDED_BITMAPS(a) a 449 #define PUT_EMBEDDED_BITMAPS( a ) a
571 #else 450 #else
572 #define PUT_EMBEDDED_BITMAPS(a) 0 451 #define PUT_EMBEDDED_BITMAPS( a ) NULL
573 #endif
574 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
575 #define PUT_PS_NAMES(a) a
576 #else
577 #define PUT_PS_NAMES(a) 0
578 #endif 452 #endif
579 453
580 FT_DEFINE_SFNT_INTERFACE(sfnt_interface, 454 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
455 #define PUT_PS_NAMES( a ) a
456 #else
457 #define PUT_PS_NAMES( a ) NULL
458 #endif
459
460 FT_DEFINE_SFNT_INTERFACE(
461 sfnt_interface,
581 tt_face_goto_table, 462 tt_face_goto_table,
582 463
583 sfnt_init_face, 464 sfnt_init_face,
584 sfnt_load_face, 465 sfnt_load_face,
585 sfnt_done_face, 466 sfnt_done_face,
586 sfnt_get_interface, 467 sfnt_get_interface,
587 468
588 tt_face_load_any, 469 tt_face_load_any,
589 470
590 tt_face_load_sfnt_header_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */
591 tt_face_load_directory_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */
592
593 tt_face_load_head, 471 tt_face_load_head,
594 tt_face_load_hhea, 472 tt_face_load_hhea,
595 tt_face_load_cmap, 473 tt_face_load_cmap,
596 tt_face_load_maxp, 474 tt_face_load_maxp,
597 tt_face_load_os2, 475 tt_face_load_os2,
598 tt_face_load_post, 476 tt_face_load_post,
599 477
600 tt_face_load_name, 478 tt_face_load_name,
601 tt_face_free_name, 479 tt_face_free_name,
602 480
603 tt_face_load_hdmx_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */
604 tt_face_free_hdmx_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */
605
606 tt_face_load_kern, 481 tt_face_load_kern,
607 tt_face_load_gasp, 482 tt_face_load_gasp,
608 tt_face_load_pclt, 483 tt_face_load_pclt,
609 484
610 /* see `ttload.h' */ 485 /* see `ttload.h' */
611 PUT_EMBEDDED_BITMAPS(tt_face_load_bhed), 486 PUT_EMBEDDED_BITMAPS( tt_face_load_bhed ),
612 487
613 tt_face_set_sbit_strike_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ 488 PUT_EMBEDDED_BITMAPS( tt_face_load_sbit_image ),
614 tt_face_load_sbit_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */
615
616 tt_find_sbit_image, /* FT_CONFIG_OPTION_OLD_INTERNALS */
617 tt_load_sbit_metrics, /* FT_CONFIG_OPTION_OLD_INTERNALS */
618
619 PUT_EMBEDDED_BITMAPS(tt_face_load_sbit_image),
620
621 tt_face_free_sbit_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */
622 489
623 /* see `ttpost.h' */ 490 /* see `ttpost.h' */
624 PUT_PS_NAMES(tt_face_get_ps_name), 491 PUT_PS_NAMES( tt_face_get_ps_name ),
625 PUT_PS_NAMES(tt_face_free_ps_names), 492 PUT_PS_NAMES( tt_face_free_ps_names ),
626
627 tt_face_load_charmap_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */
628 tt_face_free_charmap_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */
629 493
630 /* since version 2.1.8 */ 494 /* since version 2.1.8 */
631
632 tt_face_get_kerning, 495 tt_face_get_kerning,
633 496
634 /* since version 2.2 */ 497 /* since version 2.2 */
635
636 tt_face_load_font_dir, 498 tt_face_load_font_dir,
637 tt_face_load_hmtx, 499 tt_face_load_hmtx,
638 500
639 /* see `ttsbit.h' and `sfnt.h' */ 501 /* see `ttsbit.h' and `sfnt.h' */
640 PUT_EMBEDDED_BITMAPS(tt_face_load_eblc), 502 PUT_EMBEDDED_BITMAPS( tt_face_load_eblc ),
641 PUT_EMBEDDED_BITMAPS(tt_face_free_eblc), 503 PUT_EMBEDDED_BITMAPS( tt_face_free_eblc ),
642 504
643 PUT_EMBEDDED_BITMAPS(tt_face_set_sbit_strike), 505 PUT_EMBEDDED_BITMAPS( tt_face_set_sbit_strike ),
644 PUT_EMBEDDED_BITMAPS(tt_face_load_strike_metrics), 506 PUT_EMBEDDED_BITMAPS( tt_face_load_strike_metrics ),
645 507
646 tt_face_get_metrics 508 tt_face_get_metrics
647 ) 509 )
648 510
649 511
650 FT_DEFINE_MODULE(sfnt_module_class, 512 FT_DEFINE_MODULE(
513 sfnt_module_class,
651 514
652 0, /* not a font driver or renderer */ 515 0, /* not a font driver or renderer */
653 sizeof ( FT_ModuleRec ), 516 sizeof ( FT_ModuleRec ),
654 517
655 "sfnt", /* driver name */ 518 "sfnt", /* driver name */
656 0x10000L, /* driver version 1.0 */ 519 0x10000L, /* driver version 1.0 */
657 0x20000L, /* driver requires FreeType 2.0 or higher */ 520 0x20000L, /* driver requires FreeType 2.0 or higher */
658 521
659 (const void*)&FT_SFNT_INTERFACE_GET, /* module specific interface */ 522 (const void*)&SFNT_INTERFACE_GET, /* module specific interface */
660 523
661 (FT_Module_Constructor)0, 524 (FT_Module_Constructor)0,
662 (FT_Module_Destructor) 0, 525 (FT_Module_Destructor) 0,
663 (FT_Module_Requester) sfnt_get_interface 526 (FT_Module_Requester) sfnt_get_interface )
664 )
665 527
666 528
667 /* END */ 529 /* END */
OLDNEW
« no previous file with comments | « src/sfnt/pngshim.c ('k') | src/sfnt/sferrors.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698