Package: libpoppler46
Version: 0.26.4-1
Severity: wishlist
Tags: patch
Forwarded: https://bugs.freedesktop.org/show_bug.cgi?id=80093
Hi,
evince, i.e. the PDF rendering engine behind it and thus poppler, fails
to render fi/fl ligatures for certain documents. This happens, if the
document has been created with the Times Type 1 font and then rendered
with the TeX Gyre Termes OTF font, which is a metric compatible
substitute. The reason is that in the Type 1 font the ligature glyphs
are called fi and fl whereas they are called f_i and f_l in the
OTF font.
Since both nomenclatures are right according to the Adobe specs, poppler
should search for the respective other if it canot find the requested
ligature glyph in the current font. The attached patch does exactly that
and I can confirm that it works. It has also been submitted upstream
[1], but they have shown no reaction recently. Thus I am asking you to
include it in the Debian package, which inturn might raise the incentive
for upstream to merge it as well.
Best Regards,
Fabian
PS: This bug has been reported upstream against poppler
[0] https://bugs.freedesktop.org/show_bug.cgi?id=73291
[1] https://bugs.freedesktop.org/show_bug.cgi?id=80093
and in Debian against the fonts-texgyre package
[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=742767
-- System Information:
Debian Release: jessie/sid
APT prefers testing
APT policy: (990, 'testing'), (900, 'unstable'), (800, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.14-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages libpoppler46 depends on:
ii libc6 2.19-10
ii libfontconfig1 2.11.0-6.1
ii libfreetype6 2.5.2-1.1
ii libjpeg8 8d1-1
ii liblcms2-2 2.6-3
ii libopenjpeg5 1.5.2-2
ii libpng12-0 1.2.50-2
ii libstdc++6 4.9.1-12
ii libtiff5 4.0.3-9
ii multiarch-support 2.19-10
Versions of packages libpoppler46 recommends:
ii poppler-data 0.4.7-1
libpoppler46 suggests no packages.
-- no debconf information
From 419a0b803c0663490258cb1f6f23d2334cd08489 Mon Sep 17 00:00:00 2001
From: Fabian Greffrath fab...@greffrath.com
Date: Mon, 25 Aug 2014 18:21:32 +0200
Subject: [PATCH] if glyph name lookup failed, try alternate naming scheme for
ligatures
According to the Adobe spec., ligature glyphs may be named either e.g.
fi ot f_i. If text has been set with a font using the one naming
scheme but is rendered with a font using the other, ligature glyphs
may be missing from the rendering. Therefore, if a glyph name lookup
failed, try again using the other naming scheme.
This happened e.g. for the fl and fi ligatures in texts set in
Times but rendered in Tex Gyre Termes.
Closes Bug #73291, Bug #80093.
---
poppler/CairoFontEngine.cc | 41 +
1 file changed, 41 insertions(+)
diff --git a/poppler/CairoFontEngine.cc b/poppler/CairoFontEngine.cc
index 1546594..c30c7da 100644
--- a/poppler/CairoFontEngine.cc
+++ b/poppler/CairoFontEngine.cc
@@ -458,6 +458,47 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref,
codeToGID[i] = 0;
if ((name = enc[i])) {
codeToGID[i] = FT_Get_Name_Index(face, name);
+
+ // glyph lookup failed, try alternate naming scheme for ligatures
+ if (!codeToGID[i])
+ {
+ size_t j, k;
+ char newname[14];
+ const size_t namelen = strlen(name);
+
+ // unusual glyph name size for a ligature
+ if (namelen 2 || namelen 7)
+ continue;
+
+ if (!strchr(name, '_'))
+ {
+ // glyph name contains no underscores,
+ // now try with interleaving them
+ newname[0] = name[0];
+ for (j = k = 1; j namelen; j++)
+ {
+ newname[k++] = '_';
+ newname[k++] = name[j];
+ }
+ newname[k] = '\0';
+ }
+ else
+ {
+ // glyph name already contains underscores,
+ // now try without them
+ for (j = k = 0; j namelen; j++)
+ {
+ if (name[j] != '_')
+ {
+ newname[k++] = name[j];
+ }
+ }
+ newname[k] = '\0';
+ }
+
+ // repeat glyph lookup for the alternate name
+ codeToGID[i] = FT_Get_Name_Index(face, newname);
+ }
}
}
break;
--
2.1.0