| OLD | NEW |
| 1 /***************************************************************************/ | 1 /***************************************************************************/ |
| 2 /* */ | 2 /* */ |
| 3 /* cffobjs.c */ | 3 /* cffobjs.c */ |
| 4 /* */ | 4 /* */ |
| 5 /* OpenType objects manager (body). */ | 5 /* OpenType objects manager (body). */ |
| 6 /* */ | 6 /* */ |
| 7 /* Copyright 1996-2012 by */ | 7 /* Copyright 1996-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 |
| 18 | 18 |
| 19 #include <ft2build.h> | 19 #include <ft2build.h> |
| 20 |
| 20 #include FT_INTERNAL_DEBUG_H | 21 #include FT_INTERNAL_DEBUG_H |
| 21 #include FT_INTERNAL_CALC_H | 22 #include FT_INTERNAL_CALC_H |
| 22 #include FT_INTERNAL_STREAM_H | 23 #include FT_INTERNAL_STREAM_H |
| 23 #include FT_ERRORS_H | 24 #include FT_ERRORS_H |
| 24 #include FT_TRUETYPE_IDS_H | 25 #include FT_TRUETYPE_IDS_H |
| 25 #include FT_TRUETYPE_TAGS_H | 26 #include FT_TRUETYPE_TAGS_H |
| 26 #include FT_INTERNAL_SFNT_H | 27 #include FT_INTERNAL_SFNT_H |
| 28 #include FT_CFF_DRIVER_H |
| 29 |
| 27 #include "cffobjs.h" | 30 #include "cffobjs.h" |
| 28 #include "cffload.h" | 31 #include "cffload.h" |
| 29 #include "cffcmap.h" | 32 #include "cffcmap.h" |
| 33 #include "cffpic.h" |
| 34 |
| 30 #include "cfferrs.h" | 35 #include "cfferrs.h" |
| 31 #include "cffpic.h" | |
| 32 | 36 |
| 33 | 37 |
| 34 /*************************************************************************/ | 38 /*************************************************************************/ |
| 35 /* */ | 39 /* */ |
| 36 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ | 40 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
| 37 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ | 41 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ |
| 38 /* messages during execution. */ | 42 /* messages during execution. */ |
| 39 /* */ | 43 /* */ |
| 40 #undef FT_COMPONENT | 44 #undef FT_COMPONENT |
| 41 #define FT_COMPONENT trace_cffobjs | 45 #define FT_COMPONENT trace_cffobjs |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 priv->force_bold = cpriv->force_bold; | 150 priv->force_bold = cpriv->force_bold; |
| 147 priv->language_group = cpriv->language_group; | 151 priv->language_group = cpriv->language_group; |
| 148 priv->lenIV = cpriv->lenIV; | 152 priv->lenIV = cpriv->lenIV; |
| 149 } | 153 } |
| 150 | 154 |
| 151 | 155 |
| 152 FT_LOCAL_DEF( FT_Error ) | 156 FT_LOCAL_DEF( FT_Error ) |
| 153 cff_size_init( FT_Size cffsize ) /* CFF_Size */ | 157 cff_size_init( FT_Size cffsize ) /* CFF_Size */ |
| 154 { | 158 { |
| 155 CFF_Size size = (CFF_Size)cffsize; | 159 CFF_Size size = (CFF_Size)cffsize; |
| 156 FT_Error error = CFF_Err_Ok; | 160 FT_Error error = FT_Err_Ok; |
| 157 PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size ); | 161 PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size ); |
| 158 | 162 |
| 159 | 163 |
| 160 if ( funcs ) | 164 if ( funcs ) |
| 161 { | 165 { |
| 162 CFF_Face face = (CFF_Face)cffsize->face; | 166 CFF_Face face = (CFF_Face)cffsize->face; |
| 163 CFF_Font font = (CFF_Font)face->extra.data; | 167 CFF_Font font = (CFF_Font)face->extra.data; |
| 164 CFF_Internal internal = NULL; | 168 CFF_Internal internal = NULL; |
| 165 | 169 |
| 166 PS_PrivateRec priv; | 170 PS_PrivateRec priv; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 { | 250 { |
| 247 x_scale = size->metrics.x_scale; | 251 x_scale = size->metrics.x_scale; |
| 248 y_scale = size->metrics.y_scale; | 252 y_scale = size->metrics.y_scale; |
| 249 } | 253 } |
| 250 | 254 |
| 251 funcs->set_scale( internal->subfonts[i - 1], | 255 funcs->set_scale( internal->subfonts[i - 1], |
| 252 x_scale, y_scale, 0, 0 ); | 256 x_scale, y_scale, 0, 0 ); |
| 253 } | 257 } |
| 254 } | 258 } |
| 255 | 259 |
| 256 return CFF_Err_Ok; | 260 return FT_Err_Ok; |
| 257 } | 261 } |
| 258 | 262 |
| 259 #endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ | 263 #endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ |
| 260 | 264 |
| 261 | 265 |
| 262 FT_LOCAL_DEF( FT_Error ) | 266 FT_LOCAL_DEF( FT_Error ) |
| 263 cff_size_request( FT_Size size, | 267 cff_size_request( FT_Size size, |
| 264 FT_Size_Request req ) | 268 FT_Size_Request req ) |
| 265 { | 269 { |
| 266 CFF_Size cffsize = (CFF_Size)size; | 270 CFF_Size cffsize = (CFF_Size)size; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 { | 322 { |
| 319 x_scale = size->metrics.x_scale; | 323 x_scale = size->metrics.x_scale; |
| 320 y_scale = size->metrics.y_scale; | 324 y_scale = size->metrics.y_scale; |
| 321 } | 325 } |
| 322 | 326 |
| 323 funcs->set_scale( internal->subfonts[i - 1], | 327 funcs->set_scale( internal->subfonts[i - 1], |
| 324 x_scale, y_scale, 0, 0 ); | 328 x_scale, y_scale, 0, 0 ); |
| 325 } | 329 } |
| 326 } | 330 } |
| 327 | 331 |
| 328 return CFF_Err_Ok; | 332 return FT_Err_Ok; |
| 329 } | 333 } |
| 330 | 334 |
| 331 | 335 |
| 332 /*************************************************************************/ | 336 /*************************************************************************/ |
| 333 /* */ | 337 /* */ |
| 334 /* SLOT FUNCTIONS */ | 338 /* SLOT FUNCTIONS */ |
| 335 /* */ | 339 /* */ |
| 336 /*************************************************************************/ | 340 /*************************************************************************/ |
| 337 | 341 |
| 338 FT_LOCAL_DEF( void ) | 342 FT_LOCAL_DEF( void ) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 360 if ( module ) | 364 if ( module ) |
| 361 { | 365 { |
| 362 T2_Hints_Funcs funcs; | 366 T2_Hints_Funcs funcs; |
| 363 | 367 |
| 364 | 368 |
| 365 funcs = pshinter->get_t2_funcs( module ); | 369 funcs = pshinter->get_t2_funcs( module ); |
| 366 slot->internal->glyph_hints = (void*)funcs; | 370 slot->internal->glyph_hints = (void*)funcs; |
| 367 } | 371 } |
| 368 } | 372 } |
| 369 | 373 |
| 370 return CFF_Err_Ok; | 374 return FT_Err_Ok; |
| 371 } | 375 } |
| 372 | 376 |
| 373 | 377 |
| 374 /*************************************************************************/ | 378 /*************************************************************************/ |
| 375 /* */ | 379 /* */ |
| 376 /* FACE FUNCTIONS */ | 380 /* FACE FUNCTIONS */ |
| 377 /* */ | 381 /* */ |
| 378 /*************************************************************************/ | 382 /*************************************************************************/ |
| 379 | 383 |
| 380 static FT_String* | 384 static FT_String* |
| (...skipping 13 matching lines...) Expand all Loading... |
| 394 | 398 |
| 395 | 399 |
| 396 /* Strip all subset prefixes of the form `ABCDEF+'. Usually, there */ | 400 /* Strip all subset prefixes of the form `ABCDEF+'. Usually, there */ |
| 397 /* is only one, but font names like `APCOOG+JFABTD+FuturaBQ-Bold' */ | 401 /* is only one, but font names like `APCOOG+JFABTD+FuturaBQ-Bold' */ |
| 398 /* have been seen in the wild. */ | 402 /* have been seen in the wild. */ |
| 399 | 403 |
| 400 static void | 404 static void |
| 401 remove_subset_prefix( FT_String* name ) | 405 remove_subset_prefix( FT_String* name ) |
| 402 { | 406 { |
| 403 FT_Int32 idx = 0; | 407 FT_Int32 idx = 0; |
| 404 FT_Int32 length = strlen( name ) + 1; | 408 FT_Int32 length = (FT_Int32)strlen( name ) + 1; |
| 405 FT_Bool continue_search = 1; | 409 FT_Bool continue_search = 1; |
| 406 | 410 |
| 407 | 411 |
| 408 while ( continue_search ) | 412 while ( continue_search ) |
| 409 { | 413 { |
| 410 if ( length >= 7 && name[6] == '+' ) | 414 if ( length >= 7 && name[6] == '+' ) |
| 411 { | 415 { |
| 412 for ( idx = 0; idx < 6; idx++ ) | 416 for ( idx = 0; idx < 6; idx++ ) |
| 413 { | 417 { |
| 414 /* ASCII uppercase letters */ | 418 /* ASCII uppercase letters */ |
| (...skipping 16 matching lines...) Expand all Loading... |
| 431 | 435 |
| 432 /* Remove the style part from the family name (if present). */ | 436 /* Remove the style part from the family name (if present). */ |
| 433 | 437 |
| 434 static void | 438 static void |
| 435 remove_style( FT_String* family_name, | 439 remove_style( FT_String* family_name, |
| 436 const FT_String* style_name ) | 440 const FT_String* style_name ) |
| 437 { | 441 { |
| 438 FT_Int32 family_name_length, style_name_length; | 442 FT_Int32 family_name_length, style_name_length; |
| 439 | 443 |
| 440 | 444 |
| 441 family_name_length = strlen( family_name ); | 445 family_name_length = (FT_Int32)strlen( family_name ); |
| 442 style_name_length = strlen( style_name ); | 446 style_name_length = (FT_Int32)strlen( style_name ); |
| 443 | 447 |
| 444 if ( family_name_length > style_name_length ) | 448 if ( family_name_length > style_name_length ) |
| 445 { | 449 { |
| 446 FT_Int idx; | 450 FT_Int idx; |
| 447 | 451 |
| 448 | 452 |
| 449 for ( idx = 1; idx <= style_name_length; ++idx ) | 453 for ( idx = 1; idx <= style_name_length; ++idx ) |
| 450 { | 454 { |
| 451 if ( family_name[family_name_length - idx] != | 455 if ( family_name[family_name_length - idx] != |
| 452 style_name[style_name_length - idx] ) | 456 style_name[style_name_length - idx] ) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 FT_Bool pure_cff = 1; | 493 FT_Bool pure_cff = 1; |
| 490 FT_Bool sfnt_format = 0; | 494 FT_Bool sfnt_format = 0; |
| 491 FT_Library library = cffface->driver->root.library; | 495 FT_Library library = cffface->driver->root.library; |
| 492 | 496 |
| 493 | 497 |
| 494 sfnt = (SFNT_Service)FT_Get_Module_Interface( | 498 sfnt = (SFNT_Service)FT_Get_Module_Interface( |
| 495 library, "sfnt" ); | 499 library, "sfnt" ); |
| 496 if ( !sfnt ) | 500 if ( !sfnt ) |
| 497 { | 501 { |
| 498 FT_ERROR(( "cff_face_init: cannot access `sfnt' module\n" )); | 502 FT_ERROR(( "cff_face_init: cannot access `sfnt' module\n" )); |
| 499 error = CFF_Err_Missing_Module; | 503 error = FT_THROW( Missing_Module ); |
| 500 goto Exit; | 504 goto Exit; |
| 501 } | 505 } |
| 502 | 506 |
| 503 FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS ); | 507 FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS ); |
| 504 | 508 |
| 505 pshinter = (PSHinter_Service)FT_Get_Module_Interface( | 509 pshinter = (PSHinter_Service)FT_Get_Module_Interface( |
| 506 library, "pshinter" ); | 510 library, "pshinter" ); |
| 507 | 511 |
| 508 FT_TRACE2(( "CFF driver\n" )); | 512 FT_TRACE2(( "CFF driver\n" )); |
| 509 | 513 |
| 510 /* create input stream from resource */ | 514 /* create input stream from resource */ |
| 511 if ( FT_STREAM_SEEK( 0 ) ) | 515 if ( FT_STREAM_SEEK( 0 ) ) |
| 512 goto Exit; | 516 goto Exit; |
| 513 | 517 |
| 514 /* check whether we have a valid OpenType file */ | 518 /* check whether we have a valid OpenType file */ |
| 515 error = sfnt->init_face( stream, face, face_index, num_params, params ); | 519 error = sfnt->init_face( stream, face, face_index, num_params, params ); |
| 516 if ( !error ) | 520 if ( !error ) |
| 517 { | 521 { |
| 518 if ( face->format_tag != TTAG_OTTO ) /* `OTTO'; OpenType/CFF font */ | 522 if ( face->format_tag != TTAG_OTTO ) /* `OTTO'; OpenType/CFF font */ |
| 519 { | 523 { |
| 520 FT_TRACE2(( " not an OpenType/CFF font\n" )); | 524 FT_TRACE2(( " not an OpenType/CFF font\n" )); |
| 521 error = CFF_Err_Unknown_File_Format; | 525 error = FT_THROW( Unknown_File_Format ); |
| 522 goto Exit; | 526 goto Exit; |
| 523 } | 527 } |
| 524 | 528 |
| 525 /* if we are performing a simple font format check, exit immediately */ | 529 /* if we are performing a simple font format check, exit immediately */ |
| 526 if ( face_index < 0 ) | 530 if ( face_index < 0 ) |
| 527 return CFF_Err_Ok; | 531 return FT_Err_Ok; |
| 528 | |
| 529 /* UNDOCUMENTED! A CFF in an SFNT can have only a single font. */ | |
| 530 if ( face_index > 0 ) | |
| 531 { | |
| 532 FT_ERROR(( "cff_face_init: invalid face index\n" )); | |
| 533 error = CFF_Err_Invalid_Argument; | |
| 534 goto Exit; | |
| 535 } | |
| 536 | 532 |
| 537 sfnt_format = 1; | 533 sfnt_format = 1; |
| 538 | 534 |
| 539 /* now, the font can be either an OpenType/CFF font, or an SVG CEF */ | 535 /* now, the font can be either an OpenType/CFF font, or an SVG CEF */ |
| 540 /* font; in the latter case it doesn't have a `head' table */ | 536 /* font; in the latter case it doesn't have a `head' table */ |
| 541 error = face->goto_table( face, TTAG_head, stream, 0 ); | 537 error = face->goto_table( face, TTAG_head, stream, 0 ); |
| 542 if ( !error ) | 538 if ( !error ) |
| 543 { | 539 { |
| 544 pure_cff = 0; | 540 pure_cff = 0; |
| 545 | 541 |
| 546 /* load font directory */ | 542 /* load font directory */ |
| 547 error = sfnt->load_face( stream, face, 0, num_params, params ); | 543 error = sfnt->load_face( stream, face, face_index, |
| 544 num_params, params ); |
| 548 if ( error ) | 545 if ( error ) |
| 549 goto Exit; | 546 goto Exit; |
| 550 } | 547 } |
| 551 else | 548 else |
| 552 { | 549 { |
| 553 /* load the `cmap' table explicitly */ | 550 /* load the `cmap' table explicitly */ |
| 554 error = sfnt->load_cmap( face, stream ); | 551 error = sfnt->load_cmap( face, stream ); |
| 555 if ( error ) | 552 if ( error ) |
| 556 goto Exit; | 553 goto Exit; |
| 557 | |
| 558 /* XXX: we don't load the GPOS table, as OpenType Layout */ | |
| 559 /* support will be added later to a layout library on top of */ | |
| 560 /* FreeType 2 */ | |
| 561 } | 554 } |
| 562 | 555 |
| 563 /* now load the CFF part of the file */ | 556 /* now load the CFF part of the file */ |
| 564 error = face->goto_table( face, TTAG_CFF, stream, 0 ); | 557 error = face->goto_table( face, TTAG_CFF, stream, 0 ); |
| 565 if ( error ) | 558 if ( error ) |
| 566 goto Exit; | 559 goto Exit; |
| 567 } | 560 } |
| 568 else | 561 else |
| 569 { | 562 { |
| 570 /* rewind to start of file; we are going to load a pure-CFF font */ | 563 /* rewind to start of file; we are going to load a pure-CFF font */ |
| 571 if ( FT_STREAM_SEEK( 0 ) ) | 564 if ( FT_STREAM_SEEK( 0 ) ) |
| 572 goto Exit; | 565 goto Exit; |
| 573 error = CFF_Err_Ok; | 566 error = FT_Err_Ok; |
| 574 } | 567 } |
| 575 | 568 |
| 576 /* now load and parse the CFF table in the file */ | 569 /* now load and parse the CFF table in the file */ |
| 577 { | 570 { |
| 578 CFF_Font cff = NULL; | 571 CFF_Font cff = NULL; |
| 579 CFF_FontRecDict dict; | 572 CFF_FontRecDict dict; |
| 580 FT_Memory memory = cffface->memory; | 573 FT_Memory memory = cffface->memory; |
| 581 FT_Int32 flags; | 574 FT_Int32 flags; |
| 582 FT_UInt i; | 575 FT_UInt i; |
| 583 | 576 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 604 dict = &cff->top_font.font_dict; | 597 dict = &cff->top_font.font_dict; |
| 605 | 598 |
| 606 /* we need the `PSNames' module for CFF and CEF formats */ | 599 /* we need the `PSNames' module for CFF and CEF formats */ |
| 607 /* which aren't CID-keyed */ | 600 /* which aren't CID-keyed */ |
| 608 if ( dict->cid_registry == 0xFFFFU && !psnames ) | 601 if ( dict->cid_registry == 0xFFFFU && !psnames ) |
| 609 { | 602 { |
| 610 FT_ERROR(( "cff_face_init:" | 603 FT_ERROR(( "cff_face_init:" |
| 611 " cannot open CFF & CEF fonts\n" | 604 " cannot open CFF & CEF fonts\n" |
| 612 " " | 605 " " |
| 613 " without the `PSNames' module\n" )); | 606 " without the `PSNames' module\n" )); |
| 614 error = CFF_Err_Missing_Module; | 607 error = FT_THROW( Missing_Module ); |
| 615 goto Exit; | 608 goto Exit; |
| 616 } | 609 } |
| 617 | 610 |
| 618 #ifdef FT_DEBUG_LEVEL_TRACE | 611 #ifdef FT_DEBUG_LEVEL_TRACE |
| 619 { | 612 { |
| 620 FT_UInt idx; | 613 FT_UInt idx; |
| 621 FT_String* s; | 614 FT_String* s; |
| 622 | 615 |
| 623 | 616 |
| 624 FT_TRACE4(( "SIDs\n" )); | 617 FT_TRACE4(( "SIDs\n" )); |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 961 #endif | 954 #endif |
| 962 | 955 |
| 963 /* we didn't find a Unicode charmap -- synthesize one */ | 956 /* we didn't find a Unicode charmap -- synthesize one */ |
| 964 cmaprec.face = cffface; | 957 cmaprec.face = cffface; |
| 965 cmaprec.platform_id = TT_PLATFORM_MICROSOFT; | 958 cmaprec.platform_id = TT_PLATFORM_MICROSOFT; |
| 966 cmaprec.encoding_id = TT_MS_ID_UNICODE_CS; | 959 cmaprec.encoding_id = TT_MS_ID_UNICODE_CS; |
| 967 cmaprec.encoding = FT_ENCODING_UNICODE; | 960 cmaprec.encoding = FT_ENCODING_UNICODE; |
| 968 | 961 |
| 969 nn = (FT_UInt)cffface->num_charmaps; | 962 nn = (FT_UInt)cffface->num_charmaps; |
| 970 | 963 |
| 971 error = FT_CMap_New( &FT_CFF_CMAP_UNICODE_CLASS_REC_GET, NULL, | 964 error = FT_CMap_New( &CFF_CMAP_UNICODE_CLASS_REC_GET, NULL, |
| 972 &cmaprec, NULL ); | 965 &cmaprec, NULL ); |
| 973 if ( error && FT_Err_No_Unicode_Glyph_Name != error ) | 966 if ( error && |
| 967 FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) ) |
| 974 goto Exit; | 968 goto Exit; |
| 975 error = FT_Err_Ok; | 969 error = FT_Err_Ok; |
| 976 | 970 |
| 977 /* if no Unicode charmap was previously selected, select this one */ | 971 /* if no Unicode charmap was previously selected, select this one */ |
| 978 if ( cffface->charmap == NULL && nn != (FT_UInt)cffface->num_charmaps ) | 972 if ( cffface->charmap == NULL && nn != (FT_UInt)cffface->num_charmaps ) |
| 979 cffface->charmap = cffface->charmaps[nn]; | 973 cffface->charmap = cffface->charmaps[nn]; |
| 980 | 974 |
| 981 Skip_Unicode: | 975 Skip_Unicode: |
| 982 #ifdef FT_MAX_CHARMAP_CACHEABLE | 976 #ifdef FT_MAX_CHARMAP_CACHEABLE |
| 983 if ( nn > FT_MAX_CHARMAP_CACHEABLE ) | 977 if ( nn > FT_MAX_CHARMAP_CACHEABLE ) |
| 984 { | 978 { |
| 985 FT_ERROR(( "cff_face_init: Unicode cmap is found, " | 979 FT_ERROR(( "cff_face_init: Unicode cmap is found, " |
| 986 "but too many preceding subtables (%d) to access\n", | 980 "but too many preceding subtables (%d) to access\n", |
| 987 nn - 1 )); | 981 nn - 1 )); |
| 988 goto Exit; | 982 goto Exit; |
| 989 } | 983 } |
| 990 #endif | 984 #endif |
| 991 if ( encoding->count > 0 ) | 985 if ( encoding->count > 0 ) |
| 992 { | 986 { |
| 993 FT_CMap_Class clazz; | 987 FT_CMap_Class clazz; |
| 994 | 988 |
| 995 | 989 |
| 996 cmaprec.face = cffface; | 990 cmaprec.face = cffface; |
| 997 cmaprec.platform_id = TT_PLATFORM_ADOBE; /* Adobe platform id */ | 991 cmaprec.platform_id = TT_PLATFORM_ADOBE; /* Adobe platform id */ |
| 998 | 992 |
| 999 if ( encoding->offset == 0 ) | 993 if ( encoding->offset == 0 ) |
| 1000 { | 994 { |
| 1001 cmaprec.encoding_id = TT_ADOBE_ID_STANDARD; | 995 cmaprec.encoding_id = TT_ADOBE_ID_STANDARD; |
| 1002 cmaprec.encoding = FT_ENCODING_ADOBE_STANDARD; | 996 cmaprec.encoding = FT_ENCODING_ADOBE_STANDARD; |
| 1003 clazz = &FT_CFF_CMAP_ENCODING_CLASS_REC_GET; | 997 clazz = &CFF_CMAP_ENCODING_CLASS_REC_GET; |
| 1004 } | 998 } |
| 1005 else if ( encoding->offset == 1 ) | 999 else if ( encoding->offset == 1 ) |
| 1006 { | 1000 { |
| 1007 cmaprec.encoding_id = TT_ADOBE_ID_EXPERT; | 1001 cmaprec.encoding_id = TT_ADOBE_ID_EXPERT; |
| 1008 cmaprec.encoding = FT_ENCODING_ADOBE_EXPERT; | 1002 cmaprec.encoding = FT_ENCODING_ADOBE_EXPERT; |
| 1009 clazz = &FT_CFF_CMAP_ENCODING_CLASS_REC_GET; | 1003 clazz = &CFF_CMAP_ENCODING_CLASS_REC_GET; |
| 1010 } | 1004 } |
| 1011 else | 1005 else |
| 1012 { | 1006 { |
| 1013 cmaprec.encoding_id = TT_ADOBE_ID_CUSTOM; | 1007 cmaprec.encoding_id = TT_ADOBE_ID_CUSTOM; |
| 1014 cmaprec.encoding = FT_ENCODING_ADOBE_CUSTOM; | 1008 cmaprec.encoding = FT_ENCODING_ADOBE_CUSTOM; |
| 1015 clazz = &FT_CFF_CMAP_ENCODING_CLASS_REC_GET; | 1009 clazz = &CFF_CMAP_ENCODING_CLASS_REC_GET; |
| 1016 } | 1010 } |
| 1017 | 1011 |
| 1018 error = FT_CMap_New( clazz, NULL, &cmaprec, NULL ); | 1012 error = FT_CMap_New( clazz, NULL, &cmaprec, NULL ); |
| 1019 } | 1013 } |
| 1020 } | 1014 } |
| 1021 } | 1015 } |
| 1022 | 1016 |
| 1023 Exit: | 1017 Exit: |
| 1024 return error; | 1018 return error; |
| 1025 } | 1019 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1049 if ( cff ) | 1043 if ( cff ) |
| 1050 { | 1044 { |
| 1051 cff_font_done( cff ); | 1045 cff_font_done( cff ); |
| 1052 FT_FREE( face->extra.data ); | 1046 FT_FREE( face->extra.data ); |
| 1053 } | 1047 } |
| 1054 } | 1048 } |
| 1055 } | 1049 } |
| 1056 | 1050 |
| 1057 | 1051 |
| 1058 FT_LOCAL_DEF( FT_Error ) | 1052 FT_LOCAL_DEF( FT_Error ) |
| 1059 cff_driver_init( FT_Module module ) | 1053 cff_driver_init( FT_Module module ) /* CFF_Driver */ |
| 1060 { | 1054 { |
| 1061 FT_UNUSED( module ); | 1055 CFF_Driver driver = (CFF_Driver)module; |
| 1062 | 1056 |
| 1063 return CFF_Err_Ok; | 1057 |
| 1058 /* set default property values */ |
| 1059 #ifdef CFF_CONFIG_OPTION_OLD_ENGINE |
| 1060 driver->hinting_engine = FT_CFF_HINTING_FREETYPE; |
| 1061 #else |
| 1062 driver->hinting_engine = FT_CFF_HINTING_ADOBE; |
| 1063 #endif |
| 1064 driver->no_stem_darkening = FALSE; |
| 1065 |
| 1066 return FT_Err_Ok; |
| 1064 } | 1067 } |
| 1065 | 1068 |
| 1066 | 1069 |
| 1067 FT_LOCAL_DEF( void ) | 1070 FT_LOCAL_DEF( void ) |
| 1068 cff_driver_done( FT_Module module ) | 1071 cff_driver_done( FT_Module module ) /* CFF_Driver */ |
| 1069 { | 1072 { |
| 1070 FT_UNUSED( module ); | 1073 FT_UNUSED( module ); |
| 1071 } | 1074 } |
| 1072 | 1075 |
| 1073 | 1076 |
| 1074 /* END */ | 1077 /* END */ |
| OLD | NEW |