Index: src/dvi.c =================================================================== --- src/dvi.c (revision 92) +++ src/dvi.c (revision 93) @@ -1901,6 +1901,9 @@ } } +/* globals initialized by fontmap.c when it opens freetype */ +extern FT_Int ft_major, ft_minor, ft_patch; + static void do_glyph_array (int yLocsPresent) { @@ -1938,8 +1941,10 @@ glyph_id = get_buffered_unsigned_pair(); /* freetype glyph index */ if (glyph_id < font->ft_face->num_glyphs) { if (font->glyph_widths[glyph_id] == 0xffff) { - if (FT_IS_SFNT(font->ft_face)) { - /* CFF driver of freetype does not set vertical metrics correctly, + if (FT_IS_SFNT(font->ft_face) + && ((ft_major < 2) || ((ft_major == 2) && (ft_minor < 2)))) { + /* prior to version 2.2.0, + CFF driver of freetype does not set vertical metrics correctly, so we'll read the metrics directly */ TT_HoriHeader *dir_hea; /* vhea structure is identical */ dir_hea = FT_Get_Sfnt_Table(font->ft_face, (font->layout_dir == 0) Index: src/fontmap.c =================================================================== --- src/fontmap.c (revision 92) +++ src/fontmap.c (revision 93) @@ -1070,6 +1070,10 @@ return error; } +FT_Int ft_major; /* global so that dvi.c can check the version */ +FT_Int ft_minor; +FT_Int ft_patch; + int pdf_load_native_font (const char *ps_name, const char *fam_name, const char *sty_name, @@ -1085,6 +1089,7 @@ WARN("FreeType initialization failed."); return error; } + FT_Library_Version(ftLib, &ft_major, &ft_minor, &ft_patch); sInitialized = 1; } @@ -1139,6 +1144,7 @@ WARN("FreeType initialization failed."); return error; } + FT_Library_Version(ftLib, &ft_major, &ft_minor, &ft_patch); sInitialized = 1; }