495 {
499 FT_Service_PsCMaps psnames;
502 FT_Service_CFFLoad cffload;
507
508
510 "sfnt" );
512 {
513 FT_ERROR((
"cff_face_init: cannot access `sfnt' module\n" ));
516 }
517
519
521 "pshinter" );
522
524 "psaux" );
525 if ( !psaux )
526 {
527 FT_ERROR((
"cff_face_init: cannot access `psaux' module\n" ));
530 }
532
534
536
537
540
541
545 {
547 {
548 FT_TRACE2((
" not an OpenType/CFF font\n" ));
551 }
552
553
554 if ( face_index < 0 )
556
557 sfnt_format = 1;
558
559
560
563 {
564 pure_cff = 0;
565
566
571 }
572 else
573 {
574
578 }
579
580
581
584 {
585 cff2 = 1;
586 face->is_cff2 = cff2;
587 }
588
591
594 }
595 else
596 {
597
601 }
602
603
604 {
610
611
614
618 face_index,
621 pure_cff,
622 cff2 );
625
626
627
628 if ( face_index < 0 )
629 {
632 }
633
637
638 cffface->face_index = face_index & 0xFFFF;
639
640
641
642
643
645
647
648
649
651 {
653 " cannot open CFF & CEF fonts\n"
654 " "
655 " without the `PSNames' module\n" ));
658 }
659
660#ifdef FT_DEBUG_LEVEL_TRACE
661 {
664
665
667
668
670 {
674 }
675
676
677
678
679
681 {
686
687
689 for (
l = 0;
l < s1len;
l++ )
692 }
693
694
696 {
701
702
704 for (
l = 0;
l < s1len;
l++ )
707 }
708 }
709#endif
710
711#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
712 {
713 FT_Service_MultiMasters mm = (FT_Service_MultiMasters)
face->mm;
714 FT_Service_MetricsVariations
var = (FT_Service_MetricsVariations)
face->var;
715
717
718
720 mm &&
721 instance_index > 0 )
722 {
723 error = mm->set_instance( cffface, instance_index );
726
728 var->metrics_adjust( cffface );
729 }
730 }
731#endif
732
735
736
737
738
739
740
741
742
743
744
745 {
750
751
754
755 if (
temp != 0x10000L )
756 {
758
765 }
766
769 }
770
772 {
775
780
781
783 {
785
786
787
788
789
790 if (
top->has_font_matrix )
791 {
795 else
796 scaling = 1;
797
800 scaling );
803 scaling );
804
808 scaling );
809 }
810 }
811 else
812 {
815
817 }
818
822
825
826
827 if (
temp != 0x10000L )
828 {
830
837 }
838
841 }
842
843 if ( pure_cff )
844 {
845 char* style_name =
NULL;
846
847
848
850
851
854 else
856
857
860
861 cffface->bbox.xMax = ( dict->
font_bbox.
xMax + 0xFFFF ) >> 16;
862 cffface->bbox.yMax = ( dict->
font_bbox.
yMax + 0xFFFF ) >> 16;
863
865
866 cffface->ascender = (
FT_Short)( cffface->bbox.yMax );
867 cffface->descender = (
FT_Short)( cffface->bbox.yMin );
868
869 cffface->height = (
FT_Short)( ( cffface->units_per_EM * 12 ) / 10 );
870 if ( cffface->height < cffface->ascender - cffface->descender )
871 cffface->height = (
FT_Short)( cffface->ascender -
872 cffface->descender );
873
874 cffface->underline_position =
876 cffface->underline_thickness =
878
879
881 {
883
884
888 }
889
890 if ( !cffface->family_name )
891 {
894 (
FT_UInt)( face_index & 0xFFFF ) );
895 if ( cffface->family_name )
897 }
898
899 if ( cffface->family_name )
900 {
903 char* fullp = full;
904 char* family = cffface->family_name;
905
906
907
908
909 if ( full && family )
910 {
911 while ( *fullp )
912 {
913
914 if ( *fullp == *family )
915 {
916 family++;
917 fullp++;
918 continue;
919 }
920
921
922 if ( *fullp == ' ' || *fullp == '-' )
923 {
924 fullp++;
925 continue;
926 }
927
928
929 if ( *family == ' ' || *family == '-' )
930 {
931 family++;
932 continue;
933 }
934
935 if ( !*family && *fullp )
936 {
937
938
939
940
942
943
945 }
946 break;
947 }
948 }
949 }
950 else
951 {
952 char *cid_font_name =
955
956
957
958 if ( cid_font_name )
960 }
961
962 if ( style_name )
963 cffface->style_name = style_name;
964 else
965
967
968
969
970
971
975
976 if ( sfnt_format )
978
979
982
983
984#if 0
985
986 if (
face->kern_pairs )
988#endif
989
990 cffface->face_flags |=
flags;
991
992
993
994
995
997
1000
1001 {
1004
1005
1010 }
1011
1012
1014 if ( !
ft_strncmp( cffface->style_name,
"Bold", 4 ) ||
1015 !
ft_strncmp( cffface->style_name,
"Black", 5 ) )
1017
1018 cffface->style_flags =
flags;
1019 }
1020
1021#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
1022
1023
1026#endif
1027
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039 {
1044
1045
1046 for ( nn = 0; nn < (
FT_UInt)cffface->num_charmaps; nn++ )
1047 {
1048 cmap = cffface->charmaps[nn];
1049
1050
1053 goto Skip_Unicode;
1054
1055
1057 goto Skip_Unicode;
1058 }
1059
1060
1061
1064
1065
1066 cmaprec.
face = cffface;
1069 cmaprec.
encoding = FT_ENCODING_UNICODE;
1070
1071 nn = (
FT_UInt)cffface->num_charmaps;
1072
1079
1080
1081 if ( !cffface->charmap && nn != (
FT_UInt)cffface->num_charmaps )
1082 cffface->charmap = cffface->charmaps[nn];
1083
1084 Skip_Unicode:
1086 {
1088
1089
1090 cmaprec.
face = cffface;
1092
1094 {
1096 cmaprec.
encoding = FT_ENCODING_ADOBE_STANDARD;
1098 }
1100 {
1102 cmaprec.
encoding = FT_ENCODING_ADOBE_EXPERT;
1104 }
1105 else
1106 {
1108 cmaprec.
encoding = FT_ENCODING_ADOBE_CUSTOM;
1110 }
1111
1113 }
1114 }
1115 }
1116
1119 }
return cff_index_get_sid_string(cff, sid)
cff_font_load(FT_Library library, FT_Stream stream, FT_Int face_index, CFF_Font font, CFF_Face face, FT_Bool pure_cff, FT_Bool cff2)
cff_index_get_name(CFF_Font font, FT_UInt element)
static void remove_style(FT_String *family_name, const FT_String *style_name)
static FT_String * cff_strcpy(FT_Memory memory, const FT_String *source)
static void remove_subset_prefix(FT_String *name)
#define CFF_CMAP_ENCODING_CLASS_REC_GET
#define CFF_CMAP_UNICODE_CLASS_REC_GET
#define TT_MS_ID_UNICODE_CS
#define TT_PLATFORM_MICROSOFT
#define TT_PLATFORM_APPLE_UNICODE
#define FT_FACE_FLAG_KERNING
#define FT_FACE_FLAG_SFNT
#define FT_STYLE_FLAG_ITALIC
#define FT_FACE_FLAG_SCALABLE
#define FT_FACE_FLAG_HINTER
#define FT_HAS_MULTIPLE_MASTERS(face)
#define FT_FACE_FLAG_FIXED_WIDTH
FT_DivFix(FT_Long a, FT_Long b)
#define FT_FACE_FLAG_CID_KEYED
#define FT_FACE_FLAG_GLYPH_NAMES
#define FT_STYLE_FLAG_BOLD
#define FT_FACE_FLAG_HORIZONTAL
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_Vector_Transform_Scaled(FT_Vector *vector, const FT_Matrix *matrix, FT_Long scaling)
FT_Matrix_Multiply_Scaled(const FT_Matrix *a, FT_Matrix *b, FT_Long scaling)
#define FT_ERROR(varformat)
#define FT_TRACE2(varformat)
#define FT_TRACE4(varformat)
FT_CMap_New(FT_CMap_Class clazz, FT_Pointer init_data, FT_CharMap charmap, FT_CMap *acmap)
FT_Get_Module_Interface(FT_Library library, const char *mod_name)
#define FT_FACE_FIND_GLOBAL_SERVICE(face, ptr, id)
#define FT_STREAM_SEEK(position)
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLdouble GLdouble GLdouble GLdouble top
GLenum const GLfloat * params
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
PSHinter_Interface * PSHinter_Service
struct PSAux_ServiceRec_ * PSAux_Service
FT_Fixed underline_position
FT_Fixed underline_thickness
FT_Service_PsCMaps psnames
CFF_SubFont subfonts[CFF_MAX_CID_FONTS]
CFF_IndexRec charstrings_index
FT_ULong string_pool_size
PSHinter_Service pshinter
CFF_FontRecDictRec font_dict
TT_Load_Table_Func load_cmap
TT_Init_Face_Func init_face
TT_Load_Face_Func load_face
T1_FIELD_DICT_FONTDICT family_name
#define TT_ADOBE_ID_EXPERT
#define TT_ADOBE_ID_STANDARD
#define TT_PLATFORM_ADOBE
#define TT_ADOBE_ID_CUSTOM