19#include FT_INTERNAL_DEBUG_H
20#include FT_INTERNAL_CALC_H
21#include FT_INTERNAL_STREAM_H
22#include FT_INTERNAL_SFNT_H
23#include FT_TRUETYPE_TAGS_H
30#if defined( TT_USE_BYTECODE_INTERPRETER ) && \
31 defined( TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY )
65#define FAMILY_CLASS_RULES_SIZE 7
67 static const SPH_Font_Class FAMILY_CLASS_Rules
68 [FAMILY_CLASS_RULES_SIZE] =
95 "Fixed Miriam Transparent",
97 "Franklin Gothic Medium",
112 "Lucida Sans Unicode",
118 "Microsoft Sans Serif",
121 "Miriam Transparent",
130 "Simplified Arabic Fixed",
137 "Traditional Arabic",
146 {
"Core MS Legacy Fonts",
157 "Lucida Sans Unicode",
158 "Microsoft Sans Serif",
167 {
"Apple Legacy Fonts",
184 {
"Legacy Sans Fonts",
190 "Franklin Gothic Medium",
194 "Lucida Sans Unicode",
195 "Lucida Sans Typewriter",
196 "Microsoft Sans Serif",
205 {
"Misc Legacy Fonts",
206 {
"Dark Courier",
"", }, },
209 "Bitstream Vera Sans",
"", }, },
210 {
"Verdana and Clones",
212 "Bitstream Vera Sans",
225#define STYLE_CLASS_RULES_SIZE 5
227 static const SPH_Font_Class STYLE_CLASS_Rules
228 [STYLE_CLASS_RULES_SIZE] =
239 {
"Regular/Italic Class",
250 {
"Bold/BoldItalic Class",
257 {
"Bold/Italic/BoldItalic Class",
266 {
"Regular/Bold Class",
281#define COMPATIBILITY_MODE_RULES_SIZE 1
283 static const SPH_TweakRule COMPATIBILITY_MODE_Rules
284 [COMPATIBILITY_MODE_RULES_SIZE] =
286 {
"Verdana Clones", 0,
"", 0 },
291#define PIXEL_HINTING_RULES_SIZE 2
293 static const SPH_TweakRule PIXEL_HINTING_Rules
294 [PIXEL_HINTING_RULES_SIZE] =
297 {
"Courier New", 12,
"Italic",
'z' },
298 {
"Courier New", 11,
"Italic",
'z' },
303#define DO_SHPIX_RULES_SIZE 1
305 static const SPH_TweakRule DO_SHPIX_Rules
306 [DO_SHPIX_RULES_SIZE] =
314#define SKIP_NONPIXEL_Y_MOVES_RULES_SIZE 4
316 static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_Rules
317 [SKIP_NONPIXEL_Y_MOVES_RULES_SIZE] =
320 {
"Consolas", 0,
"", 0 },
322 {
"Core MS Legacy Fonts", 0,
"Regular", 0 },
324 {
"Legacy Sans Fonts", 0,
"", 0 },
326 {
"Verdana Clones", 0,
"", 0 },
330#define SKIP_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
332 static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions
333 [SKIP_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
336 {
"Courier New", 0,
"Regular", 0 },
342#define SKIP_NONPIXEL_Y_MOVES_DELTAP_RULES_SIZE 2
344 static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_DELTAP_Rules
345 [SKIP_NONPIXEL_Y_MOVES_DELTAP_RULES_SIZE] =
348 {
"Times New Roman", 0,
"Regular/Bold Class",
'N' },
349 {
"Georgia", 0,
"Regular/Bold Class",
'N' },
354#define SKIP_OFFPIXEL_Y_MOVES_RULES_SIZE 1
356 static const SPH_TweakRule SKIP_OFFPIXEL_Y_MOVES_Rules
357 [SKIP_OFFPIXEL_Y_MOVES_RULES_SIZE] =
363#define SKIP_OFFPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
365 static const SPH_TweakRule SKIP_OFFPIXEL_Y_MOVES_Rules_Exceptions
366 [SKIP_OFFPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
373#define ROUND_NONPIXEL_Y_MOVES_RULES_SIZE 2
375 static const SPH_TweakRule ROUND_NONPIXEL_Y_MOVES_Rules
376 [ROUND_NONPIXEL_Y_MOVES_RULES_SIZE] =
379 {
"Droid Sans", 0,
"Regular/Italic Class", 0 },
380 {
"Droid Sans Mono", 0,
"", 0 },
384#define ROUND_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
386 static const SPH_TweakRule ROUND_NONPIXEL_Y_MOVES_Rules_Exceptions
387 [ROUND_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
394#define ALLOW_X_DMOVE_RULES_SIZE 1
396 static const SPH_TweakRule ALLOW_X_DMOVE_Rules
397 [ALLOW_X_DMOVE_RULES_SIZE] =
400 {
"Verdana", 0,
"Regular",
'4' },
405#define RASTERIZER_35_RULES_SIZE 8
407 static const SPH_TweakRule RASTERIZER_35_Rules
408 [RASTERIZER_35_RULES_SIZE] =
411 {
"Times New Roman", 0,
"Regular",
'i' },
412 {
"Times New Roman", 0,
"Regular",
'j' },
413 {
"Times New Roman", 0,
"Regular",
'm' },
414 {
"Times New Roman", 0,
"Regular",
'r' },
415 {
"Times New Roman", 0,
"Regular",
'a' },
416 {
"Times New Roman", 0,
"Regular",
'n' },
417 {
"Times New Roman", 0,
"Regular",
'p' },
418 {
"Times", 0,
"", 0 },
423#define NORMAL_ROUND_RULES_SIZE 1
425 static const SPH_TweakRule NORMAL_ROUND_Rules
426 [NORMAL_ROUND_RULES_SIZE] =
430 {
"Courier New", 0,
"", 0 },
435#define SKIP_IUP_RULES_SIZE 1
437 static const SPH_TweakRule SKIP_IUP_Rules
438 [SKIP_IUP_RULES_SIZE] =
440 {
"Arial", 13,
"Regular",
'a' },
445#define MIAP_HACK_RULES_SIZE 1
447 static const SPH_TweakRule MIAP_HACK_Rules
448 [MIAP_HACK_RULES_SIZE] =
450 {
"Geneva", 12,
"", 0 },
455#define ALWAYS_SKIP_DELTAP_RULES_SIZE 23
457 static const SPH_TweakRule ALWAYS_SKIP_DELTAP_Rules
458 [ALWAYS_SKIP_DELTAP_RULES_SIZE] =
460 {
"Georgia", 0,
"Regular",
'k' },
462 {
"Trebuchet MS", 14,
"Regular",
'e' },
463 {
"Trebuchet MS", 13,
"Regular",
'e' },
464 {
"Trebuchet MS", 15,
"Regular",
'e' },
465 {
"Trebuchet MS", 0,
"Italic",
'v' },
466 {
"Trebuchet MS", 0,
"Italic",
'w' },
467 {
"Trebuchet MS", 0,
"Regular",
'Y' },
468 {
"Arial", 11,
"Regular",
's' },
470 {
"Verdana", 10,
"Regular", 0 },
471 {
"Verdana", 9,
"Regular", 0 },
473 {
"Legacy Sans Fonts", 0,
"", 0x438 },
474 {
"Legacy Sans Fonts", 0,
"", 0x439 },
475 {
"Arial", 10,
"Regular",
'6' },
476 {
"Arial", 0,
"Bold/BoldItalic Class",
'a' },
478 {
"Arial", 24,
"Bold",
'a' },
479 {
"Arial", 25,
"Bold",
'a' },
480 {
"Arial", 24,
"Bold",
's' },
481 {
"Arial", 25,
"Bold",
's' },
482 {
"Arial", 34,
"Bold",
's' },
483 {
"Arial", 35,
"Bold",
's' },
484 {
"Arial", 36,
"Bold",
's' },
485 {
"Arial", 25,
"Regular",
's' },
486 {
"Arial", 26,
"Regular",
's' },
491#define ALWAYS_DO_DELTAP_RULES_SIZE 1
493 static const SPH_TweakRule ALWAYS_DO_DELTAP_Rules
494 [ALWAYS_DO_DELTAP_RULES_SIZE] =
501#define NO_ALIGNRP_AFTER_IUP_RULES_SIZE 1
503 static const SPH_TweakRule NO_ALIGNRP_AFTER_IUP_Rules
504 [NO_ALIGNRP_AFTER_IUP_RULES_SIZE] =
512#define NO_DELTAP_AFTER_IUP_RULES_SIZE 1
514 static const SPH_TweakRule NO_DELTAP_AFTER_IUP_Rules
515 [NO_DELTAP_AFTER_IUP_RULES_SIZE] =
522#define NO_CALL_AFTER_IUP_RULES_SIZE 1
524 static const SPH_TweakRule NO_CALL_AFTER_IUP_Rules
525 [NO_CALL_AFTER_IUP_RULES_SIZE] =
533#define DEEMBOLDEN_RULES_SIZE 9
535 static const SPH_TweakRule DEEMBOLDEN_Rules
536 [DEEMBOLDEN_RULES_SIZE] =
538 {
"Courier New", 0,
"Bold",
'A' },
539 {
"Courier New", 0,
"Bold",
'W' },
540 {
"Courier New", 0,
"Bold",
'w' },
541 {
"Courier New", 0,
"Bold",
'M' },
542 {
"Courier New", 0,
"Bold",
'X' },
543 {
"Courier New", 0,
"Bold",
'K' },
544 {
"Courier New", 0,
"Bold",
'x' },
545 {
"Courier New", 0,
"Bold",
'z' },
546 {
"Courier New", 0,
"Bold",
'v' },
551#define EMBOLDEN_RULES_SIZE 2
553 static const SPH_TweakRule EMBOLDEN_Rules
554 [EMBOLDEN_RULES_SIZE] =
556 {
"Courier New", 0,
"Regular", 0 },
557 {
"Courier New", 0,
"Italic", 0 },
563#define TIMES_NEW_ROMAN_HACK_RULES_SIZE 12
565 static const SPH_TweakRule TIMES_NEW_ROMAN_HACK_Rules
566 [TIMES_NEW_ROMAN_HACK_RULES_SIZE] =
568 {
"Times New Roman", 16,
"Italic",
'2' },
569 {
"Times New Roman", 16,
"Italic",
'5' },
570 {
"Times New Roman", 16,
"Italic",
'7' },
571 {
"Times New Roman", 16,
"Regular",
'2' },
572 {
"Times New Roman", 16,
"Regular",
'5' },
573 {
"Times New Roman", 16,
"Regular",
'7' },
574 {
"Times New Roman", 17,
"Italic",
'2' },
575 {
"Times New Roman", 17,
"Italic",
'5' },
576 {
"Times New Roman", 17,
"Italic",
'7' },
577 {
"Times New Roman", 17,
"Regular",
'2' },
578 {
"Times New Roman", 17,
"Regular",
'5' },
579 {
"Times New Roman", 17,
"Regular",
'7' },
585#define COURIER_NEW_2_HACK_RULES_SIZE 15
587 static const SPH_TweakRule COURIER_NEW_2_HACK_Rules
588 [COURIER_NEW_2_HACK_RULES_SIZE] =
590 {
"Courier New", 10,
"Regular",
'2' },
591 {
"Courier New", 11,
"Regular",
'2' },
592 {
"Courier New", 12,
"Regular",
'2' },
593 {
"Courier New", 13,
"Regular",
'2' },
594 {
"Courier New", 14,
"Regular",
'2' },
595 {
"Courier New", 15,
"Regular",
'2' },
596 {
"Courier New", 16,
"Regular",
'2' },
597 {
"Courier New", 17,
"Regular",
'2' },
598 {
"Courier New", 18,
"Regular",
'2' },
599 {
"Courier New", 19,
"Regular",
'2' },
600 {
"Courier New", 20,
"Regular",
'2' },
601 {
"Courier New", 21,
"Regular",
'2' },
602 {
"Courier New", 22,
"Regular",
'2' },
603 {
"Courier New", 23,
"Regular",
'2' },
604 {
"Courier New", 24,
"Regular",
'2' },
608#ifndef FORCE_NATURAL_WIDTHS
613#define COMPATIBLE_WIDTHS_RULES_SIZE 38
615 static const SPH_TweakRule COMPATIBLE_WIDTHS_Rules
616 [COMPATIBLE_WIDTHS_RULES_SIZE] =
618 {
"Arial Unicode MS", 12,
"Regular Class",
'm' },
619 {
"Arial Unicode MS", 14,
"Regular Class",
'm' },
621 {
"Arial", 10,
"Regular Class", 0x448 },
622 {
"Arial", 11,
"Regular Class",
'm' },
623 {
"Arial", 12,
"Regular Class",
'm' },
625 {
"Arial", 12,
"Regular Class", 0x448 },
626 {
"Arial", 13,
"Regular Class", 0x448 },
627 {
"Arial", 14,
"Regular Class",
'm' },
629 {
"Arial", 14,
"Regular Class", 0x448 },
630 {
"Arial", 15,
"Regular Class", 0x448 },
631 {
"Arial", 17,
"Regular Class",
'm' },
632 {
"DejaVu Sans", 15,
"Regular Class", 0 },
633 {
"Microsoft Sans Serif", 11,
"Regular Class", 0 },
634 {
"Microsoft Sans Serif", 12,
"Regular Class", 0 },
635 {
"Segoe UI", 11,
"Regular Class", 0 },
636 {
"Monaco", 0,
"Regular Class", 0 },
637 {
"Segoe UI", 12,
"Regular Class",
'm' },
638 {
"Segoe UI", 14,
"Regular Class",
'm' },
639 {
"Tahoma", 11,
"Regular Class", 0 },
640 {
"Times New Roman", 16,
"Regular Class",
'c' },
641 {
"Times New Roman", 16,
"Regular Class",
'm' },
642 {
"Times New Roman", 16,
"Regular Class",
'o' },
643 {
"Times New Roman", 16,
"Regular Class",
'w' },
644 {
"Trebuchet MS", 11,
"Regular Class", 0 },
645 {
"Trebuchet MS", 12,
"Regular Class", 0 },
646 {
"Trebuchet MS", 14,
"Regular Class", 0 },
647 {
"Trebuchet MS", 15,
"Regular Class", 0 },
648 {
"Ubuntu", 12,
"Regular Class",
'm' },
650 {
"Verdana", 10,
"Regular Class", 0x448 },
651 {
"Verdana", 11,
"Regular Class", 0x448 },
652 {
"Verdana and Clones", 12,
"Regular Class",
'i' },
653 {
"Verdana and Clones", 12,
"Regular Class",
'j' },
654 {
"Verdana and Clones", 12,
"Regular Class",
'l' },
655 {
"Verdana and Clones", 12,
"Regular Class",
'm' },
656 {
"Verdana and Clones", 13,
"Regular Class",
'i' },
657 {
"Verdana and Clones", 13,
"Regular Class",
'j' },
658 {
"Verdana and Clones", 13,
"Regular Class",
'l' },
659 {
"Verdana and Clones", 14,
"Regular Class",
'm' },
668#define X_SCALING_RULES_SIZE 50
670 static const SPH_ScaleRule X_SCALING_Rules[X_SCALING_RULES_SIZE] =
672 {
"DejaVu Sans", 12,
"Regular Class",
'm', 950 },
673 {
"Verdana and Clones", 12,
"Regular Class",
'a', 1100 },
674 {
"Verdana and Clones", 13,
"Regular Class",
'a', 1050 },
675 {
"Arial", 11,
"Regular Class",
'm', 975 },
676 {
"Arial", 12,
"Regular Class",
'm', 1050 },
678 {
"Arial", 13,
"Regular Class", 0x43B, 950 },
679 {
"Arial", 13,
"Regular Class",
'o', 950 },
680 {
"Arial", 13,
"Regular Class",
'e', 950 },
681 {
"Arial", 14,
"Regular Class",
'm', 950 },
683 {
"Arial", 15,
"Regular Class", 0x43B, 925 },
684 {
"Bitstream Vera Sans", 10,
"Regular/Italic Class", 0, 1100 },
685 {
"Bitstream Vera Sans", 12,
"Regular/Italic Class", 0, 1050 },
686 {
"Bitstream Vera Sans", 16,
"Regular Class", 0, 1050 },
687 {
"Bitstream Vera Sans", 9,
"Regular/Italic Class", 0, 1050 },
688 {
"DejaVu Sans", 12,
"Regular Class",
'l', 975 },
689 {
"DejaVu Sans", 12,
"Regular Class",
'i', 975 },
690 {
"DejaVu Sans", 12,
"Regular Class",
'j', 975 },
691 {
"DejaVu Sans", 13,
"Regular Class",
'l', 950 },
692 {
"DejaVu Sans", 13,
"Regular Class",
'i', 950 },
693 {
"DejaVu Sans", 13,
"Regular Class",
'j', 950 },
694 {
"DejaVu Sans", 10,
"Regular/Italic Class", 0, 1100 },
695 {
"DejaVu Sans", 12,
"Regular/Italic Class", 0, 1050 },
696 {
"Georgia", 10,
"", 0, 1050 },
697 {
"Georgia", 11,
"", 0, 1100 },
698 {
"Georgia", 12,
"", 0, 1025 },
699 {
"Georgia", 13,
"", 0, 1050 },
700 {
"Georgia", 16,
"", 0, 1050 },
701 {
"Georgia", 17,
"", 0, 1030 },
702 {
"Liberation Sans", 12,
"Regular Class",
'm', 1100 },
703 {
"Lucida Grande", 11,
"Regular Class",
'm', 1100 },
704 {
"Microsoft Sans Serif", 11,
"Regular Class",
'm', 950 },
705 {
"Microsoft Sans Serif", 12,
"Regular Class",
'm', 1050 },
706 {
"Segoe UI", 12,
"Regular Class",
'H', 1050 },
707 {
"Segoe UI", 12,
"Regular Class",
'm', 1050 },
708 {
"Segoe UI", 14,
"Regular Class",
'm', 1050 },
709 {
"Tahoma", 11,
"Regular Class",
'i', 975 },
710 {
"Tahoma", 11,
"Regular Class",
'l', 975 },
711 {
"Tahoma", 11,
"Regular Class",
'j', 900 },
712 {
"Tahoma", 11,
"Regular Class",
'm', 918 },
713 {
"Verdana", 10,
"Regular/Italic Class", 0, 1100 },
714 {
"Verdana", 12,
"Regular Class",
'm', 975 },
715 {
"Verdana", 12,
"Regular/Italic Class", 0, 1050 },
716 {
"Verdana", 13,
"Regular/Italic Class",
'i', 950 },
717 {
"Verdana", 13,
"Regular/Italic Class",
'j', 950 },
718 {
"Verdana", 13,
"Regular/Italic Class",
'l', 950 },
719 {
"Verdana", 16,
"Regular Class", 0, 1050 },
720 {
"Verdana", 9,
"Regular/Italic Class", 0, 1050 },
721 {
"Times New Roman", 16,
"Regular Class",
'm', 918 },
722 {
"Trebuchet MS", 11,
"Regular Class",
'm', 800 },
723 {
"Trebuchet MS", 12,
"Regular Class",
'm', 800 },
728#define COMPATIBLE_WIDTHS_RULES_SIZE 1
730 static const SPH_TweakRule COMPATIBLE_WIDTHS_Rules
731 [COMPATIBLE_WIDTHS_RULES_SIZE] =
737#define X_SCALING_RULES_SIZE 1
739 static const SPH_ScaleRule X_SCALING_Rules
740 [X_SCALING_RULES_SIZE] =
742 {
"-", 0,
"", 0, 1000 },
749 is_member_of_family_class(
const FT_String* detected_font_name,
756 if (
ft_strcmp( detected_font_name, rule_font_name ) == 0 )
760 if (
ft_strcmp( rule_font_name,
"" ) == 0 )
764 for (
i = 0;
i < FAMILY_CLASS_RULES_SIZE;
i++ )
766 if (
ft_strcmp( FAMILY_CLASS_Rules[
i].
name, rule_font_name ) == 0 )
768 for (
j = 0;
j < SPH_MAX_CLASS_MEMBERS;
j++ )
773 detected_font_name ) == 0 )
784 is_member_of_style_class(
const FT_String* detected_font_style,
791 if (
ft_strcmp( detected_font_style, rule_font_style ) == 0 )
795 if (
ft_strcmp( rule_font_style,
"" ) == 0 )
799 for (
i = 0;
i < STYLE_CLASS_RULES_SIZE;
i++ )
801 if (
ft_strcmp( STYLE_CLASS_Rules[
i].
name, rule_font_style ) == 0 )
803 for (
j = 0;
j < SPH_MAX_CLASS_MEMBERS;
j++ )
808 detected_font_style ) == 0 )
824 const SPH_TweakRule* rule,
831 for (
i = 0;
i < num_rules;
i++ )
834 ( is_member_of_family_class ( family, rule[
i].family ) ) )
835 if ( rule[
i].ppem == 0 ||
836 rule[
i].ppem == ppem )
838 is_member_of_style_class (
style, rule[
i].
style ) )
839 if ( rule[
i].glyph == 0 ||
841 rule[
i].glyph ) == glyph_index )
855 const SPH_ScaleRule* rule,
862 for (
i = 0;
i < num_rules;
i++ )
865 ( is_member_of_family_class ( family, rule[
i].family ) ) )
866 if ( rule[
i].ppem == 0 ||
867 rule[
i].ppem == ppem )
870 if ( rule[
i].glyph == 0 ||
872 rule[
i].glyph ) == glyph_index )
873 return rule[
i].scale;
887 return scale_test_tweak(
face, family, ppem,
style, glyph_index,
888 X_SCALING_Rules, X_SCALING_RULES_SIZE );
892#define TWEAK_RULES( x ) \
893 if ( sph_test_tweak( face, family, ppem, style, glyph_index, \
894 x##_Rules, x##_RULES_SIZE ) ) \
895 loader->exec->sph_tweak_flags |= SPH_TWEAK_##x;
897#define TWEAK_RULES_EXCEPTIONS( x ) \
898 if ( sph_test_tweak( face, family, ppem, style, glyph_index, \
899 x##_Rules_Exceptions, x##_RULES_EXCEPTIONS_SIZE ) ) \
900 loader->exec->sph_tweak_flags &= ~SPH_TWEAK_##x;
914 if ( !
face->root.style_name )
917#ifdef SPH_DEBUG_MORE_VERBOSE
918 printf(
"%s,%d,%s,%c=%d ",
919 family, ppem,
style, glyph_index, glyph_index );
922 TWEAK_RULES( PIXEL_HINTING );
924 if ( loader->
exec->sph_tweak_flags & SPH_TWEAK_PIXEL_HINTING )
930 TWEAK_RULES( ALLOW_X_DMOVE );
931 TWEAK_RULES( ALWAYS_DO_DELTAP );
932 TWEAK_RULES( ALWAYS_SKIP_DELTAP );
933 TWEAK_RULES( DEEMBOLDEN );
934 TWEAK_RULES( DO_SHPIX );
935 TWEAK_RULES( EMBOLDEN );
936 TWEAK_RULES( MIAP_HACK );
937 TWEAK_RULES( NORMAL_ROUND );
938 TWEAK_RULES( NO_ALIGNRP_AFTER_IUP );
939 TWEAK_RULES( NO_CALL_AFTER_IUP );
940 TWEAK_RULES( NO_DELTAP_AFTER_IUP );
941 TWEAK_RULES( RASTERIZER_35 );
942 TWEAK_RULES( SKIP_IUP );
944 TWEAK_RULES( SKIP_OFFPIXEL_Y_MOVES );
945 TWEAK_RULES_EXCEPTIONS( SKIP_OFFPIXEL_Y_MOVES );
947 TWEAK_RULES( SKIP_NONPIXEL_Y_MOVES_DELTAP );
949 TWEAK_RULES( SKIP_NONPIXEL_Y_MOVES );
950 TWEAK_RULES_EXCEPTIONS( SKIP_NONPIXEL_Y_MOVES );
952 TWEAK_RULES( ROUND_NONPIXEL_Y_MOVES );
953 TWEAK_RULES_EXCEPTIONS( ROUND_NONPIXEL_Y_MOVES );
955 if ( loader->
exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 )
962 tt_size_ready_bytecode(
971 if ( loader->
exec->rasterizer_version !=
972 SPH_OPTION_SET_RASTERIZER_VERSION )
974 loader->
exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
977 tt_size_ready_bytecode(
982 loader->
exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
987 TWEAK_RULES( TIMES_NEW_ROMAN_HACK );
988 TWEAK_RULES( COURIER_NEW_2_HACK );
991 if ( sph_test_tweak(
face, family, ppem,
style, glyph_index,
992 COMPATIBILITY_MODE_Rules, COMPATIBILITY_MODE_RULES_SIZE ) )
998 if ( sph_test_tweak(
face, family, ppem,
style, glyph_index,
999 COMPATIBLE_WIDTHS_Rules, COMPATIBLE_WIDTHS_RULES_SIZE ) )
1000 loader->
exec->compatible_widths |=
TRUE;
FT_Get_Char_Index(FT_Face face, FT_ULong charcode)
#define TT_INTERPRETER_VERSION_35
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLenum GLuint GLint GLenum face
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
FT_Size_Metrics * metrics