ref: bd75a517dcf87b620e8dd7fcd07992b881f0e234
parent: e5f4469359560913da8a87cf4831e3e5dee30f93
author: Werner Lemberg <[email protected]>
date: Sat Aug 8 04:39:45 EDT 2015
[type42] Fix glyph access. This is a severe bug: We've missed one level of indirection, as described in the Type 42 specification. As a result, ftview sometimes showed incorrect glyphs for given glyph names, and even displayed `error 0x0006' (invalid argument!) in case the number of glyph indices differed between the Type 42 font and the embedded TTF. Apparently, noone ever noticed it; this shows how much Type 42 fonts are in use... * src/type42/t42objs.c (T42_GlyphSlot_Load): Map Type 42 glyph index to embedded TTF's glyph index.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
2015-08-08 Werner Lemberg <[email protected]>
+ [type42] Fix glyph access.
+
+ This is a severe bug: We've missed one level of indirection, as
+ described in the Type 42 specification. As a result, ftview
+ sometimes showed incorrect glyphs for given glyph names, and even
+ displayed `error 0x0006' (invalid argument!) in case the number of
+ glyph indices differed between the Type 42 font and the embedded
+ TTF.
+
+ Apparently, noone ever noticed it; this shows how much Type 42 fonts
+ are in use...
+
+ * src/type42/t42objs.c (T42_GlyphSlot_Load): Map Type 42 glyph index
+ to embedded TTF's glyph index.
+
+2015-08-08 Werner Lemberg <[email protected]>
+
[type42] Minor clean-up.
* src/type42/t42parse.c (t42_parse_font_matrix): Remove unused
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -8,7 +8,11 @@
you are using CFFs; otherwise you get cropped glyphs with GUI
interfaces like GTK or Qt.
+ - Accessing Type 42 fonts returned incorrect results if the glyph
+ order of the embedded TrueType font differs from the glyph order
+ of the Type 42 charstrings table.
+
II. IMPORTANT CHANGES
- The header file layout has been changed (again), moving all
@@ -28,6 +32,15 @@
...
don't need any change to the source code.
+
+
+ III. MISCELLANEOUS
+
+ - The auto-hinter's Arabic script support has been enhanced.
+
+ - The TrueType bytecode interpreter now runs slightly faster.
+
+ - Improved support for builds with cmake.
======================================================================
--- a/src/type42/t42objs.c
+++ b/src/type42/t42objs.c
@@ -652,10 +652,15 @@
FT_Error error;
T42_GlyphSlot t42slot = (T42_GlyphSlot)glyph;
T42_Size t42size = (T42_Size)size;
+ T42_Face t42face = (T42_Face)size->face;
FT_Driver_Class ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz;
FT_TRACE1(( "T42_GlyphSlot_Load: glyph index %d\n", glyph_index ));
+
+ /* map T42 glyph index to embedded TTF's glyph index */
+ glyph_index = (FT_UInt)ft_atol(
+ (const char *)t42face->type1.charstrings[glyph_index] );
t42_glyphslot_clear( t42slot->ttslot );
error = ttclazz->load_glyph( t42slot->ttslot,