commit:     2e0a12d57f1c5d198ab89b3a7b9b0a1c1e8a784c
Author:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 15 21:46:01 2018 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Sat Sep 15 21:46:30 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2e0a12d5

media-gfx/inkscape: Fix ugly bug with PDF import and Type3 fonts

All Type 3 text got swallowed due to a faulty poppler-0.64
compatibility patch. Works better with new commit from upstream.

Package-Manager: Portage-2.3.49, Repoman-2.3.10

 .../files/inkscape-0.92.3-poppler-0.64-2.patch     | 160 ++++++++++++++++++
 media-gfx/inkscape/inkscape-0.92.3-r1.ebuild       | 180 +++++++++++++++++++++
 2 files changed, 340 insertions(+)

diff --git a/media-gfx/inkscape/files/inkscape-0.92.3-poppler-0.64-2.patch 
b/media-gfx/inkscape/files/inkscape-0.92.3-poppler-0.64-2.patch
new file mode 100644
index 00000000000..4608bc79ecd
--- /dev/null
+++ b/media-gfx/inkscape/files/inkscape-0.92.3-poppler-0.64-2.patch
@@ -0,0 +1,160 @@
+From 66d05776ea2d403f2f48437f70d096a09724dfec Mon Sep 17 00:00:00 2001
+From: Eduard Braun <eduard.bra...@gmx.de>
+Date: Wed, 5 Sep 2018 00:31:06 +0200
+Subject: [PATCH] Modified fix for compatibility with poppler 0.64
+
+This is slightly uglier than f0697de012598ea84edafea9a326e5e101eccd2a
+but avoids duplicating strings (which is unnecessary and leaked memory).
+
+It's also closer to what upstream intended with the changes in 0.64.
+
+(cherry picked from commit 722e121361d0f784083d10e897155b7d4e44e515)
+---
+ .../internal/pdfinput/pdf-parser.cpp          | 19 ++++++++++++++++---
+ src/extension/internal/pdfinput/pdf-parser.h  |  6 ++++++
+ .../internal/pdfinput/svg-builder.cpp         |  6 +++---
+ src/extension/internal/pdfinput/svg-builder.h |  4 ++--
+ 4 files changed, 27 insertions(+), 8 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp 
b/src/extension/internal/pdfinput/pdf-parser.cpp
+index a3aa3213a1..ea9f902e09 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -36,6 +36,7 @@ extern "C" {
+ #include "pdf-parser.h"
+ #include "util/units.h"
+ 
++#include "glib/poppler-features.h"
+ #include "goo/gmem.h"
+ #include "goo/GooString.h"
+ #include "GlobalParams.h"
+@@ -2581,7 +2582,11 @@ void PdfParser::opShowSpaceText(Object args[], int 
/*numArgs*/)
+   }
+ }
+ 
++#if POPPLER_CHECK_VERSION(0,64,0)
+ void PdfParser::doShowText(const GooString *s) {
++#else
++void PdfParser::doShowText(GooString *s) {
++#endif
+   GfxFont *font;
+   int wMode;
+   double riseX, riseY;
+@@ -2594,7 +2599,11 @@ void PdfParser::doShowText(const GooString *s) {
+   Object charProc;
+   Dict *resDict;
+   Parser *oldParser;
++#if POPPLER_CHECK_VERSION(0,64,0)
++  const char *p;
++#else
+   char *p;
++#endif
+   int len, n, uLen;
+ 
+   font = state->getFont();
+@@ -2630,7 +2639,7 @@ void PdfParser::doShowText(const GooString *s) {
+     double lineX = state->getLineX();
+     double lineY = state->getLineY();
+     oldParser = parser;
+-    p = g_strdup(s->getCString());
++    p = s->getCString();
+     len = s->getLength();
+     while (len > 0) {
+       n = font->getNextChar(p, len, &code,
+@@ -2685,7 +2694,7 @@ void PdfParser::doShowText(const GooString *s) {
+ 
+   } else {
+     state->textTransformDelta(0, state->getRise(), &riseX, &riseY);
+-    p = g_strdup(s->getCString());
++    p = s->getCString();
+     len = s->getLength();
+     while (len > 0) {
+       n = font->getNextChar(p, len, &code,
+@@ -2731,7 +2740,11 @@ void PdfParser::opXObject(Object args[], int 
/*numArgs*/)
+ {
+   Object obj1, obj2, obj3, refObj;
+ 
+-  char *name = g_strdup(args[0].getName());
++#if POPPLER_CHECK_VERSION(0,64,0)
++  const char *name = args[0].getName();
++#else
++  char *name = args[0].getName();
++#endif
+ #if defined(POPPLER_NEW_OBJECT_API)
+   if ((obj1 = res->lookupXObject(name)).isNull()) {
+ #else
+diff --git a/src/extension/internal/pdfinput/pdf-parser.h 
b/src/extension/internal/pdfinput/pdf-parser.h
+index f985b15cad..ed28274f42 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.h
++++ b/src/extension/internal/pdfinput/pdf-parser.h
+@@ -25,6 +25,7 @@ namespace Inkscape {
+ // TODO clean up and remove using:
+ using Inkscape::Extension::Internal::SvgBuilder;
+ 
++#include "glib/poppler-features.h"
+ #include "goo/gtypes.h"
+ #include "Object.h"
+ 
+@@ -287,7 +288,12 @@ private:
+   void opMoveShowText(Object args[], int numArgs);
+   void opMoveSetShowText(Object args[], int numArgs);
+   void opShowSpaceText(Object args[], int numArgs);
++#if POPPLER_CHECK_VERSION(0,64,0)
+   void doShowText(const GooString *s);
++#else
++  void doShowText(GooString *s);
++#endif
++  
+ 
+   // XObject operators
+   void opXObject(Object args[], int numArgs);
+diff --git a/src/extension/internal/pdfinput/svg-builder.cpp 
b/src/extension/internal/pdfinput/svg-builder.cpp
+index 617861928d..767c8af4d4 100644
+--- a/src/extension/internal/pdfinput/svg-builder.cpp
++++ b/src/extension/internal/pdfinput/svg-builder.cpp
+@@ -1020,9 +1020,9 @@ void SvgBuilder::updateFont(GfxState *state) {
+     GfxFont *font = state->getFont();
+     // Store original name
+     if (font->getName()) {
+-        _font_specification = g_strdup(font->getName()->getCString());
++        _font_specification = font->getName()->getCString();
+     } else {
+-        _font_specification = (char*) "Arial";
++        _font_specification = "Arial";
+     }
+ 
+     // Prune the font name to get the correct font family name
+@@ -1030,7 +1030,7 @@ void SvgBuilder::updateFont(GfxState *state) {
+     char *font_family = NULL;
+     char *font_style = NULL;
+     char *font_style_lowercase = NULL;
+-    char *plus_sign = strstr(_font_specification, "+");
++    const char *plus_sign = strstr(_font_specification, "+");
+     if (plus_sign) {
+         font_family = g_strdup(plus_sign + 1);
+         _font_specification = plus_sign + 1;
+diff --git a/src/extension/internal/pdfinput/svg-builder.h 
b/src/extension/internal/pdfinput/svg-builder.h
+index ed2a4d48e0..55daacee74 100644
+--- a/src/extension/internal/pdfinput/svg-builder.h
++++ b/src/extension/internal/pdfinput/svg-builder.h
+@@ -80,7 +80,7 @@ struct SvgGlyph {
+     bool style_changed;  // Set to true if style has to be reset
+     SPCSSAttr *style;
+     int render_mode;    // Text render mode
+-    char *font_specification;   // Pointer to current font specification
++    const char *font_specification;   // Pointer to current font specification
+ };
+ 
+ /**
+@@ -202,7 +202,7 @@ private:
+ 
+     SPCSSAttr *_font_style;          // Current font style
+     GfxFont *_current_font;
+-    char *_font_specification;
++    const char *_font_specification;
+     double _font_scaling;
+     bool _need_font_update;
+     Geom::Affine _text_matrix;
+-- 
+2.19.0
+

diff --git a/media-gfx/inkscape/inkscape-0.92.3-r1.ebuild 
b/media-gfx/inkscape/inkscape-0.92.3-r1.ebuild
new file mode 100644
index 00000000000..36a68a10d4e
--- /dev/null
+++ b/media-gfx/inkscape/inkscape-0.92.3-r1.ebuild
@@ -0,0 +1,180 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=( python2_7 )
+PYTHON_REQ_USE="xml"
+
+inherit autotools flag-o-matic gnome2-utils xdg toolchain-funcs 
python-single-r1
+
+MY_P="${P/_/}"
+
+DESCRIPTION="A SVG based generic vector-drawing program"
+HOMEPAGE="https://inkscape.org/";
+SRC_URI="https://inkscape.global.ssl.fastly.net/media/resources/file/${P}.tar.bz2";
+
+LICENSE="GPL-2 LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~hppa ~ppc ~ppc64 ~x86"
+IUSE="cdr dia dbus exif gnome imagemagick openmp postscript inkjar jpeg latex"
+IUSE+=" lcms nls spell static-libs visio wpg"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+COMMON_DEPEND="
+       ${PYTHON_DEPS}
+       >=app-text/poppler-0.26.0:=[cairo]
+       >=dev-cpp/glibmm-2.48
+       >=dev-cpp/gtkmm-2.18.0:2.4
+       >=dev-cpp/cairomm-1.9.8
+       >=dev-libs/boehm-gc-7.1:=
+       >=dev-libs/glib-2.28
+       >=dev-libs/libsigc++-2.0.12
+       >=dev-libs/libxml2-2.6.20
+       >=dev-libs/libxslt-1.0.15
+       dev-libs/popt
+       dev-python/lxml[${PYTHON_USEDEP}]
+       media-gfx/potrace
+       media-gfx/scour[${PYTHON_USEDEP}]
+       media-libs/fontconfig
+       media-libs/freetype:2
+       media-libs/libpng:0
+       sci-libs/gsl:=
+       x11-libs/libX11
+       >=x11-libs/gtk+-2.10.7:2
+       >=x11-libs/pango-1.24
+       cdr? (
+               media-libs/libcdr
+               app-text/libwpg:0.3
+               dev-libs/librevenge
+       )
+       dbus? ( dev-libs/dbus-glib )
+       exif? ( media-libs/libexif )
+       gnome? ( >=gnome-base/gnome-vfs-2.0 )
+       imagemagick? ( media-gfx/imagemagick:=[cxx] )
+       jpeg? ( virtual/jpeg:0 )
+       lcms? ( media-libs/lcms:2 )
+       spell? (
+               app-text/aspell
+               app-text/gtkspell:2
+       )
+       visio? (
+               media-libs/libvisio
+               app-text/libwpg:0.3
+               dev-libs/librevenge
+       )
+       wpg? (
+               app-text/libwpg:0.3
+               dev-libs/librevenge
+       )
+"
+
+# These only use executables provided by these packages
+# See share/extensions for more details. inkscape can tell you to
+# install these so we could of course just not depend on those and rely
+# on that.
+RDEPEND="${COMMON_DEPEND}
+       dev-python/numpy[${PYTHON_USEDEP}]
+       media-gfx/uniconvertor
+       dia? ( app-office/dia )
+       latex? (
+               media-gfx/pstoedit[plotutils]
+               app-text/dvipsk
+               app-text/texlive-core
+       )
+       postscript? ( app-text/ghostscript-gpl )
+"
+
+DEPEND="${COMMON_DEPEND}
+       >=dev-libs/boost-1.36
+       >=dev-util/intltool-0.40
+       >=sys-devel/gettext-0.17
+       virtual/pkgconfig
+"
+
+PATCHES=(
+       "${FILESDIR}/${PN}-0.92.1-automagic.patch"
+       "${FILESDIR}/${PN}-0.91_pre3-cppflags.patch"
+       "${FILESDIR}/${PN}-0.92.1-desktop.patch"
+       "${FILESDIR}/${PN}-0.91_pre3-exif.patch"
+       "${FILESDIR}/${PN}-0.91_pre3-sk-man.patch"
+       "${FILESDIR}/${PN}-0.48.4-epython.patch"
+       "${FILESDIR}/${PN}-0.92.3-freetype_pkgconfig.patch"
+       "${FILESDIR}/${PN}-0.92.3-poppler-0.64.patch"
+       "${FILESDIR}/${PN}-0.92.3-poppler-0.65.patch"
+       "${FILESDIR}/${PN}-0.92.3-poppler-0.64-2.patch"
+)
+
+S="${WORKDIR}/${MY_P}"
+
+RESTRICT="test"
+
+pkg_pretend() {
+       if use openmp; then
+               tc-has-openmp || die "Please switch to an openmp compatible 
compiler"
+       fi
+}
+
+src_prepare() {
+       default
+
+       sed -i "s#@EPYTHON@#${EPYTHON}#" \
+               src/extension/implementation/script.cpp || die
+
+       eautoreconf
+
+       # bug 421111
+       python_fix_shebang share/extensions
+}
+
+src_configure() {
+       # aliasing unsafe wrt #310393
+       append-flags -fno-strict-aliasing
+
+       local myeconfargs=(
+               $(use_enable static-libs static)
+               $(use_enable nls)
+               $(use_enable openmp)
+               $(use_enable exif)
+               $(use_enable jpeg)
+               $(use_enable lcms)
+               --enable-poppler-cairo
+               $(use_enable wpg)
+               $(use_enable visio)
+               $(use_enable cdr)
+               $(use_enable dbus dbusapi)
+               $(use_enable imagemagick magick)
+               $(use_with gnome gnome-vfs)
+               $(use_with inkjar)
+               $(use_with spell gtkspell)
+               $(use_with spell aspell)
+       )
+       econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+       emake AR="$(tc-getAR)"
+}
+
+src_install() {
+       default
+
+       find "${ED}" -name "*.la" -delete || die
+       python_optimize "${ED%/}"/usr/share/${PN}/extensions
+}
+
+pkg_preinst() {
+       gnome2_icon_savelist
+}
+
+pkg_postinst() {
+       gnome2_icon_cache_update
+       xdg_mimeinfo_database_update
+       xdg_desktop_database_update
+}
+
+pkg_postrm() {
+       gnome2_icon_cache_update
+       xdg_mimeinfo_database_update
+       xdg_desktop_database_update
+}

Reply via email to