From 1ad384d8818e0b0da95b069d5874da6f7ec51558 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Thu, 25 Dec 2008 23:52:00 +0000 Subject: [PATCH] Set `face_index' field in FT_Face for all font formats. * cff/cffobjs.c (cff_face_init), winfonts/winfnt.c (FNT_Face_Init), sfnt/sfobjs.c (sfnt_init_face): Do it. * docs/CHANGES: Document it. --- ChangeLog | 9 +++++++++ docs/CHANGES | 5 +++++ src/cff/cffobjs.c | 5 +++-- src/cid/cidobjs.c | 1 + src/sfnt/sfobjs.c | 3 ++- src/type1/t1objs.c | 4 ++-- src/type42/t42objs.c | 4 ++-- src/winfonts/winfnt.c | 2 ++ 8 files changed, 26 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index e8591b7a7..ad844b742 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-12-26 Werner Lemberg + + Set `face_index' field in FT_Face for all font formats. + + * cff/cffobjs.c (cff_face_init), winfonts/winfnt.c (FNT_Face_Init), + sfnt/sfobjs.c (sfnt_init_face): Do it. + + * docs/CHANGES: Document it. + 2008-12-22 Steve Grubb * builds/unix/ftsystem.c (FT_Stream_Open): Reject zero-length files. diff --git a/docs/CHANGES b/docs/CHANGES index 5ac53f5ec..76242cd7f 100644 --- a/docs/CHANGES +++ b/docs/CHANGES @@ -14,6 +14,11 @@ CHANGES BETWEEN 2.3.8 and 2.3.7 configuration macros TT_CONFIG_OPTION_BYTECODE_INTERPRETER and TT_CONFIG_OPTION_UNPATENTED_HINTING were defined. + - The `face_index' field in the `FT_Face' structure wasn't + initialized properly after calling FT_Open_Face and friends with + a positive face index for CFFs, WinFNTs, and, most importantly, + for TrueType Collections (TTCs). + II. IMPORTANT CHANGES diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c index c80cb82f2..3525ea3b7 100644 --- a/src/cff/cffobjs.c +++ b/src/cff/cffobjs.c @@ -465,8 +465,7 @@ pure_cff = 0; /* load font directory */ - error = sfnt->load_face( stream, face, - face_index, num_params, params ); + error = sfnt->load_face( stream, face, 0, num_params, params ); if ( error ) goto Exit; } @@ -515,6 +514,8 @@ cff->pshinter = pshinter; cff->psnames = (void*)psnames; + cffface->face_index = face_index; + /* Complement the root flags with some interesting information. */ /* Note that this is only necessary for pure CFF and CEF fonts; */ /* SFNT based fonts use the `name' table instead. */ diff --git a/src/cid/cidobjs.c b/src/cid/cidobjs.c index 5d5459184..9647d8701 100644 --- a/src/cid/cidobjs.c +++ b/src/cid/cidobjs.c @@ -324,6 +324,7 @@ goto Exit; /* check the face index */ + /* XXX: handle CID fonts with more than a single face */ if ( face_index != 0 ) { FT_ERROR(( "cid_face_init: invalid face index\n" )); diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c index 2f9a3b812..021ec5a38 100644 --- a/src/sfnt/sfobjs.c +++ b/src/sfnt/sfobjs.c @@ -468,7 +468,8 @@ if ( error ) return error; - face->root.num_faces = face->ttc_header.count; + face->root.num_faces = face->ttc_header.count; + face->root.face_index = face_index; return error; } diff --git a/src/type1/t1objs.c b/src/type1/t1objs.c index ed49d6ea2..2f90dd62f 100644 --- a/src/type1/t1objs.c +++ b/src/type1/t1objs.c @@ -326,7 +326,7 @@ goto Exit; /* check the face index */ - if ( face_index != 0 ) + if ( face_index > 0 ) { FT_ERROR(( "T1_Face_Init: invalid face index\n" )); error = T1_Err_Invalid_Argument; @@ -343,7 +343,7 @@ root->num_glyphs = type1->num_glyphs; - root->face_index = face_index; + root->face_index = 0; root->face_flags = FT_FACE_FLAG_SCALABLE | FT_FACE_FLAG_HORIZONTAL | diff --git a/src/type42/t42objs.c b/src/type42/t42objs.c index ad895aaa9..16e9809ce 100644 --- a/src/type42/t42objs.c +++ b/src/type42/t42objs.c @@ -188,7 +188,7 @@ goto Exit; /* check the face index */ - if ( face_index != 0 ) + if ( face_index > 0 ) { FT_ERROR(( "T42_Face_Init: invalid face index\n" )); error = T42_Err_Invalid_Argument; @@ -202,7 +202,7 @@ root->num_glyphs = type1->num_glyphs; root->num_charmaps = 0; - root->face_index = face_index; + root->face_index = 0; root->face_flags = FT_FACE_FLAG_SCALABLE | FT_FACE_FLAG_HORIZONTAL | diff --git a/src/winfonts/winfnt.c b/src/winfonts/winfnt.c index cb6b0352d..f6e9859b4 100644 --- a/src/winfonts/winfnt.c +++ b/src/winfonts/winfnt.c @@ -736,6 +736,8 @@ FT_PtrDist family_size; + root->face_index = face_index; + root->face_flags = FT_FACE_FLAG_FIXED_SIZES | FT_FACE_FLAG_HORIZONTAL;