From: Jan Rękorajski Date: Sun, 30 Dec 2018 15:14:09 +0000 (+0900) Subject: - updated poppler fixes from upstream X-Git-Tag: auto/th/inkscape-0.92.3-5~1 X-Git-Url: http://git.pld-linux.org/?p=packages%2Finkscape.git;a=commitdiff_plain;h=b91507e - updated poppler fixes from upstream --- diff --git a/inkscape-poppler.patch b/inkscape-poppler.patch index d48380c..cf8bb19 100644 --- a/inkscape-poppler.patch +++ b/inkscape-poppler.patch @@ -1,12 +1,17 @@ -From f0697de012598ea84edafea9a326e5e101eccd2a Mon Sep 17 00:00:00 2001 +From a600c6438fef2f4c06f9a4a7d933d99fb054a973 Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Tue, 24 Apr 2018 19:18:26 +0200 -Subject: Fix compilation with poppler 0.64 +Subject: [PATCH] Fix compilation with poppler 0.64 -(cherry picked from commit a600c6438fef2f4c06f9a4a7d933d99fb054a973) +--- + src/extension/internal/pdfinput/pdf-parser.cpp | 10 +++++----- + src/extension/internal/pdfinput/pdf-parser.h | 2 +- + src/extension/internal/pdfinput/svg-builder.cpp | 4 ++-- + src/extension/internal/pdfinput/svg-builder.h | 3 +-- + 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp -index 604b7f8..721524e 100644 +index 15bc2d746d..6c498f9812 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -2582,7 +2582,7 @@ void PdfParser::opShowSpaceText(Object args[], int /*numArgs*/) @@ -55,7 +60,7 @@ index 604b7f8..721524e 100644 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 e28fecc..f985b15 100644 +index e28fecc2e1..f985b15cad 100644 --- a/src/extension/internal/pdfinput/pdf-parser.h +++ b/src/extension/internal/pdfinput/pdf-parser.h @@ -287,7 +287,7 @@ private: @@ -68,10 +73,10 @@ index e28fecc..f985b15 100644 // 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 a448be6..6178619 100644 +index 158c5ae068..8e5a5f6396 100644 --- a/src/extension/internal/pdfinput/svg-builder.cpp +++ b/src/extension/internal/pdfinput/svg-builder.cpp -@@ -1020,7 +1020,7 @@ void SvgBuilder::updateFont(GfxState *state) { +@@ -1021,7 +1021,7 @@ void SvgBuilder::updateFont(GfxState *state) { GfxFont *font = state->getFont(); // Store original name if (font->getName()) { @@ -80,7 +85,7 @@ index a448be6..6178619 100644 } else { _font_specification = (char*) "Arial"; } -@@ -1361,7 +1361,7 @@ void SvgBuilder::_flushText() { +@@ -1362,7 +1362,7 @@ void SvgBuilder::_flushText() { _glyphs.clear(); } @@ -90,7 +95,7 @@ index a448be6..6178619 100644 updateFont(state); } diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h -index ad15c9c..ed2a4d4 100644 +index ad15c9c06f..ed2a4d48e0 100644 --- a/src/extension/internal/pdfinput/svg-builder.h +++ b/src/extension/internal/pdfinput/svg-builder.h @@ -29,7 +29,6 @@ namespace Inkscape { @@ -111,34 +116,2159 @@ index ad15c9c..ed2a4d4 100644 void addChar(GfxState *state, double x, double y, double dx, double dy, -- -cgit v0.10.2 +2.18.1 -From 332a80f4847715546be9a00756f693b4aa1316e2 Mon Sep 17 00:00:00 2001 -From: Jan Palus -Date: Fri, 25 May 2018 00:30:17 +0200 -Subject: [PATCH] Fix compilation with poppler 0.65.0 +From 722e121361d0f784083d10e897155b7d4e44e515 Mon Sep 17 00:00:00 2001 +From: Eduard Braun +Date: Wed, 5 Sep 2018 00:31:06 +0200 +Subject: [PATCH] Modified fix for compatibility with poppler 0.64 -replace unused includes with one that is actually used +This is slightly uglier than a600c6438fef2f4c06f9a4a7d933d99fb054a973 +but avoids duplicating strings (which is unnecessary and leaked memory). -Signed-off-by: Jan Palus +It's also closer to what upstream intended with the changes in 0.64. --- - src/extension/internal/pdfinput/pdf-parser.cpp | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) + .../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 6c498f9..caaeca1 100644 +index 5fa21263ab..a3a8ff25a6 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp -@@ -37,8 +37,7 @@ extern "C" { +@@ -32,6 +32,7 @@ + #include "pdf-parser.h" #include "util/units.h" ++#include "glib/poppler-features.h" #include "goo/gmem.h" --#include "goo/GooTimer.h" --#include "goo/GooHash.h" -+#include "goo/GooString.h" + #include "goo/GooString.h" #include "GlobalParams.h" - #include "CharTypes.h" +@@ -2577,7 +2578,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; +@@ -2590,7 +2595,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(); +@@ -2626,7 +2635,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, +@@ -2681,7 +2690,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, +@@ -2727,7 +2736,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 755e6741b0..b27a29cfbf 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 50a7685b89..9d0df7c04d 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 499724a4cd..729cdc944c 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.18.1 + +From 402c0274420fe39fd2f3393bc7d8d8879d436358 Mon Sep 17 00:00:00 2001 +From: Thomas Holder +Date: Fri, 28 Sep 2018 18:05:30 +0000 +Subject: [PATCH] fix 1789208 poppler 0.69 + +--- + CMakeScripts/DefineDependsandFlags.cmake | 12 ----- + src/extension/internal/pdfinput/pdf-input.cpp | 2 +- + src/extension/internal/pdfinput/pdf-input.h | 1 + + .../internal/pdfinput/pdf-parser.cpp | 46 ++++++++----------- + src/extension/internal/pdfinput/pdf-parser.h | 12 +++-- + .../pdfinput/poppler-transition-api.h | 39 ++++++++++++++++ + .../internal/pdfinput/svg-builder.cpp | 22 ++++----- + src/extension/internal/pdfinput/svg-builder.h | 3 +- + 8 files changed, 80 insertions(+), 57 deletions(-) + create mode 100644 src/extension/internal/pdfinput/poppler-transition-api.h + +diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake +index 40ca7aa65c..9457d58df0 100644 +--- a/CMakeScripts/DefineDependsandFlags.cmake ++++ b/CMakeScripts/DefineDependsandFlags.cmake +@@ -126,18 +126,6 @@ if(ENABLE_POPPLER) + set(HAVE_POPPLER_GLIB ON) + endif() + endif() +- if(POPPLER_VERSION VERSION_GREATER "0.26.0" OR +- POPPLER_VERSION VERSION_EQUAL "0.26.0") +- set(POPPLER_EVEN_NEWER_COLOR_SPACE_API ON) +- endif() +- if(POPPLER_VERSION VERSION_GREATER "0.29.0" OR +- POPPLER_VERSION VERSION_EQUAL "0.29.0") +- set(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API ON) +- endif() +- if(POPPLER_VERSION VERSION_GREATER "0.58.0" OR +- POPPLER_VERSION VERSION_EQUAL "0.58.0") +- set(POPPLER_NEW_OBJECT_API ON) +- endif() + else() + set(ENABLE_POPPLER_CAIRO OFF) + endif() +diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp +index fa9942230b..21a91fa34f 100644 +--- a/src/extension/internal/pdfinput/pdf-input.cpp ++++ b/src/extension/internal/pdfinput/pdf-input.cpp +@@ -804,7 +804,7 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) { + dlg->getImportSettings(prefs); + + // Apply crop settings +- PDFRectangle *clipToBox = NULL; ++ _POPPLER_CONST PDFRectangle *clipToBox = NULL; + double crop_setting; + sp_repr_get_double(prefs, "cropTo", &crop_setting); + +diff --git a/src/extension/internal/pdfinput/pdf-input.h b/src/extension/internal/pdfinput/pdf-input.h +index ddcb8f222b..88a894f1c0 100644 +--- a/src/extension/internal/pdfinput/pdf-input.h ++++ b/src/extension/internal/pdfinput/pdf-input.h +@@ -15,6 +15,7 @@ + #endif + + #ifdef HAVE_POPPLER ++#include "poppler-transition-api.h" + + #include + +diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp +index a3a8ff25a6..96313e1f19 100644 +--- a/src/extension/internal/pdfinput/pdf-parser.cpp ++++ b/src/extension/internal/pdfinput/pdf-parser.cpp +@@ -291,8 +291,8 @@ PdfParser::PdfParser(XRef *xrefA, + int /*pageNum*/, + int rotate, + Dict *resDict, +- PDFRectangle *box, +- PDFRectangle *cropBox) : ++ _POPPLER_CONST PDFRectangle *box, ++ _POPPLER_CONST PDFRectangle *cropBox) : + xref(xrefA), + builder(builderA), + subPage(gFalse), +@@ -314,7 +314,7 @@ PdfParser::PdfParser(XRef *xrefA, + builder->setDocumentSize(Inkscape::Util::Quantity::convert(state->getPageWidth(), "pt", "px"), + Inkscape::Util::Quantity::convert(state->getPageHeight(), "pt", "px")); + +- double *ctm = state->getCTM(); ++ const double *ctm = state->getCTM(); + double scaledCTM[6]; + for (int i = 0; i < 6; ++i) { + baseMatrix[i] = ctm[i]; +@@ -349,7 +349,7 @@ PdfParser::PdfParser(XRef *xrefA, + PdfParser::PdfParser(XRef *xrefA, + Inkscape::Extension::Internal::SvgBuilder *builderA, + Dict *resDict, +- PDFRectangle *box) : ++ _POPPLER_CONST PDFRectangle *box) : + xref(xrefA), + builder(builderA), + subPage(gTrue), +@@ -568,7 +568,7 @@ const char *PdfParser::getPreviousOperator(unsigned int look_back) { + + void PdfParser::execOp(Object *cmd, Object args[], int numArgs) { + PdfOperator *op; +- char *name; ++ const char *name; + Object *argPtr; + int i; + +@@ -616,7 +616,7 @@ void PdfParser::execOp(Object *cmd, Object args[], int numArgs) { + (this->*op->func)(argPtr, numArgs); + } + +-PdfOperator* PdfParser::findOp(char *name) { ++PdfOperator* PdfParser::findOp(const char *name) { + int a = -1; + int b = numOps; + int cmp = -1; +@@ -1748,7 +1748,7 @@ void PdfParser::doShadingPatternFillFallback(GfxShadingPattern *sPat, + GBool stroke, GBool eoFill) { + GfxShading *shading; + GfxPath *savedPath; +- double *ctm, *btm, *ptm; ++ const double *ctm, *btm, *ptm; + double m[6], ictm[6], m1[6]; + double xMin, yMin, xMax, yMax; + double det; +@@ -1990,7 +1990,7 @@ void PdfParser::doFunctionShFill1(GfxFunctionShading *shading, + GfxColor color0M, color1M, colorM0, colorM1, colorMM; + GfxColor colors2[4]; + double functionColorDelta = colorDeltas[pdfFunctionShading-1]; +- double *matrix; ++ const double *matrix; + double xM, yM; + int nComps, i, j; + +@@ -2170,7 +2170,7 @@ void PdfParser::doPatchMeshShFill(GfxPatchMeshShading *shading) { + } + } + +-void PdfParser::fillPatch(GfxPatch *patch, int nComps, int depth) { ++void PdfParser::fillPatch(_POPPLER_CONST GfxPatch *patch, int nComps, int depth) { + GfxPatch patch00 = blankPatch(); + GfxPatch patch01 = blankPatch(); + GfxPatch patch10 = blankPatch(); +@@ -2591,7 +2591,7 @@ void PdfParser::doShowText(GooString *s) { + double x, y, dx, dy, tdx, tdy; + double originX, originY, tOriginX, tOriginY; + double oldCTM[6], newCTM[6]; +- double *mat; ++ const double *mat; + Object charProc; + Dict *resDict; + Parser *oldParser; +@@ -3665,7 +3665,6 @@ void PdfParser::opBeginImage(Object /*args*/[], int /*numArgs*/) + Stream *PdfParser::buildImageStream() { + Object dict; + Object obj; +- char *key; + Stream *str; + + // build dictionary +@@ -3683,26 +3682,17 @@ Stream *PdfParser::buildImageStream() { + obj.free(); + #endif + } else { +- key = copyString(obj.getName()); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj = parser->getObj(); +-#else +- obj.free(); +- parser->getObj(&obj); +-#endif +- if (obj.isEOF() || obj.isError()) { +- gfree(key); ++ Object obj2; ++ _POPPLER_CALL(obj2, parser->getObj); ++ if (obj2.isEOF() || obj2.isError()) { ++ _POPPLER_FREE(obj); + break; + } +-#if defined(POPPLER_NEW_OBJECT_API) +- dict.dictAdd(key, std::move(obj)); ++ _POPPLER_DICTADD(dict, obj.getName(), obj2); ++ _POPPLER_FREE(obj); ++ _POPPLER_FREE(obj2); + } +- obj = parser->getObj(); +-#else +- dict.dictAdd(key, &obj); +- } +- parser->getObj(&obj); +-#endif ++ _POPPLER_CALL(obj, parser->getObj); + } + if (obj.isEOF()) { + error(errSyntaxError, getPos(), "End of file in inline image"); +diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h +index b27a29cfbf..17eb025468 100644 +--- a/src/extension/internal/pdfinput/pdf-parser.h ++++ b/src/extension/internal/pdfinput/pdf-parser.h +@@ -9,6 +9,7 @@ + #define PDF_PARSER_H + + #ifdef HAVE_POPPLER ++#include "poppler-transition-api.h" + + #ifdef USE_GCC_PRAGMAS + #pragma interface +@@ -128,11 +129,14 @@ public: + + // Constructor for regular output. + PdfParser(XRef *xrefA, SvgBuilder *builderA, int pageNum, int rotate, +- Dict *resDict, PDFRectangle *box, PDFRectangle *cropBox); ++ Dict *resDict, ++ _POPPLER_CONST PDFRectangle *box, ++ _POPPLER_CONST PDFRectangle *cropBox); + + // Constructor for a sub-page object. + PdfParser(XRef *xrefA, Inkscape::Extension::Internal::SvgBuilder *builderA, +- Dict *resDict, PDFRectangle *box); ++ Dict *resDict, ++ _POPPLER_CONST PDFRectangle *box); + + virtual ~PdfParser(); + +@@ -186,7 +190,7 @@ private: + + void go(GBool topLevel); + void execOp(Object *cmd, Object args[], int numArgs); +- PdfOperator *findOp(char *name); ++ PdfOperator *findOp(const char *name); + GBool checkArg(Object *arg, TchkType type); + int getPos(); + +@@ -257,7 +261,7 @@ private: + double x2, double y2, GfxColor *color2, + int nComps, int depth); + void doPatchMeshShFill(GfxPatchMeshShading *shading); +- void fillPatch(GfxPatch *patch, int nComps, int depth); ++ void fillPatch(_POPPLER_CONST GfxPatch *patch, int nComps, int depth); + void doEndPath(); + + // path clipping operators +diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h +new file mode 100644 +index 0000000000..898e64bf2b +--- /dev/null ++++ b/src/extension/internal/pdfinput/poppler-transition-api.h +@@ -0,0 +1,39 @@ ++#ifndef SEEN_POPPLER_TRANSITION_API_H ++#define SEEN_POPPLER_TRANSITION_API_H ++ ++#include ++ ++#if POPPLER_CHECK_VERSION(0,70,0) ++#define _POPPLER_CONST const ++#else ++#define _POPPLER_CONST ++#endif ++ ++#if POPPLER_CHECK_VERSION(0,69,0) ++#define _POPPLER_DICTADD(dict, key, obj) (dict).dictAdd(key, std::move(obj)) ++#elif POPPLER_CHECK_VERSION(0,58,0) ++#define _POPPLER_DICTADD(dict, key, obj) (dict).dictAdd(copyString(key), std::move(obj)) ++#else ++#define _POPPLER_DICTADD(dict, key, obj) (dict).dictAdd(copyString(key), &obj) ++#endif ++ ++#if POPPLER_CHECK_VERSION(0,58,0) ++#define POPPLER_NEW_OBJECT_API ++#define _POPPLER_FREE(obj) ++#define _POPPLER_CALL(ret, func) (ret = func()) ++#define _POPPLER_CALL_ARGS(ret, func, ...) (ret = func(__VA_ARGS__)) ++#else ++#define _POPPLER_FREE(obj) (obj).free() ++#define _POPPLER_CALL(ret, func) (*func(&ret)) ++#define _POPPLER_CALL_ARGS(ret, func, ...) (*func(__VA_ARGS__, &ret)) ++#endif ++ ++#if POPPLER_CHECK_VERSION(0, 29, 0) ++#define POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API ++#endif ++ ++#if POPPLER_CHECK_VERSION(0, 25, 0) ++#define POPPLER_EVEN_NEWER_COLOR_SPACE_API ++#endif ++ ++#endif +diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp +index 9d0df7c04d..a59397a100 100644 +--- a/src/extension/internal/pdfinput/svg-builder.cpp ++++ b/src/extension/internal/pdfinput/svg-builder.cpp +@@ -625,7 +625,7 @@ gchar *SvgBuilder::_createPattern(GfxPattern *pattern, GfxState *state, bool is_ + if ( pattern != nullptr ) { + if ( pattern->getType() == 2 ) { // Shading pattern + GfxShadingPattern *shading_pattern = static_cast(pattern); +- double *ptm; ++ const double *ptm; + double m[6] = {1, 0, 0, 1, 0, 0}; + double det; + +@@ -672,7 +672,7 @@ gchar *SvgBuilder::_createTilingPattern(GfxTilingPattern *tiling_pattern, + + Inkscape::XML::Node *pattern_node = _xml_doc->createElement("svg:pattern"); + // Set pattern transform matrix +- double *p2u = tiling_pattern->getMatrix(); ++ const double *p2u = tiling_pattern->getMatrix(); + double m[6] = {1, 0, 0, 1, 0, 0}; + double det; + det = _ttm[0] * _ttm[3] - _ttm[1] * _ttm[2]; // see LP Bug 1168908 +@@ -698,7 +698,7 @@ gchar *SvgBuilder::_createTilingPattern(GfxTilingPattern *tiling_pattern, + pattern_node->setAttribute("patternUnits", "userSpaceOnUse"); + // Set pattern tiling + // FIXME: don't ignore XStep and YStep +- double *bbox = tiling_pattern->getBBox(); ++ const double *bbox = tiling_pattern->getBBox(); + sp_repr_set_svg_double(pattern_node, "x", 0.0); + sp_repr_set_svg_double(pattern_node, "y", 0.0); + sp_repr_set_svg_double(pattern_node, "width", bbox[2] - bbox[0]); +@@ -751,7 +751,7 @@ gchar *SvgBuilder::_createTilingPattern(GfxTilingPattern *tiling_pattern, + */ + gchar *SvgBuilder::_createGradient(GfxShading *shading, double *matrix, bool for_shading) { + Inkscape::XML::Node *gradient; +- Function *func; ++ _POPPLER_CONST Function *func; + int num_funcs; + bool extend0, extend1; + +@@ -865,7 +865,7 @@ static bool svgGetShadingColorRGB(GfxShading *shading, double offset, GfxRGB *re + + #define INT_EPSILON 8 + bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading, +- Function *func) { ++ _POPPLER_CONST Function *func) { + int type = func->getType(); + if ( type == 0 || type == 2 ) { // Sampled or exponential function + GfxRGB stop1, stop2; +@@ -877,9 +877,9 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh + _addStopToGradient(gradient, 1.0, &stop2, 1.0); + } + } else if ( type == 3 ) { // Stitching +- StitchingFunction *stitchingFunc = static_cast(func); +- double *bounds = stitchingFunc->getBounds(); +- double *encode = stitchingFunc->getEncode(); ++ auto stitchingFunc = static_cast<_POPPLER_CONST StitchingFunction*>(func); ++ const double *bounds = stitchingFunc->getBounds(); ++ const double *encode = stitchingFunc->getEncode(); + int num_funcs = stitchingFunc->getNumFuncs(); + + // Add stops from all the stitched functions +@@ -890,7 +890,7 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh + svgGetShadingColorRGB(shading, bounds[i + 1], &color); + // Add stops + if (stitchingFunc->getFunc(i)->getType() == 2) { // process exponential fxn +- double expE = (static_cast(stitchingFunc->getFunc(i)))->getE(); ++ double expE = (static_cast<_POPPLER_CONST ExponentialFunction*>(stitchingFunc->getFunc(i)))->getE(); + if (expE > 1.0) { + expE = (bounds[i + 1] - bounds[i])/expE; // approximate exponential as a single straight line at x=1 + if (encode[2*i] == 0) { // normal sequence +@@ -1148,7 +1148,7 @@ void SvgBuilder::updateFont(GfxState *state) { + Inkscape::CSSOStringStream os_font_size; + double css_font_size = _font_scaling * state->getFontSize(); + if ( font->getType() == fontType3 ) { +- double *font_matrix = font->getFontMatrix(); ++ const double *font_matrix = font->getFontMatrix(); + if ( font_matrix[0] != 0.0 ) { + css_font_size *= font_matrix[3] / font_matrix[0]; + } +@@ -1193,7 +1193,7 @@ void SvgBuilder::updateTextPosition(double tx, double ty) { + void SvgBuilder::updateTextMatrix(GfxState *state) { + _flushText(); + // Update text matrix +- double *text_matrix = state->getTextMat(); ++ const double *text_matrix = state->getTextMat(); + double w_scale = sqrt( text_matrix[0] * text_matrix[0] + text_matrix[2] * text_matrix[2] ); + double h_scale = sqrt( text_matrix[1] * text_matrix[1] + text_matrix[3] * text_matrix[3] ); + double max_scale; +diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h +index 729cdc944c..7fdb0b5fcd 100644 +--- a/src/extension/internal/pdfinput/svg-builder.h ++++ b/src/extension/internal/pdfinput/svg-builder.h +@@ -15,6 +15,7 @@ + #endif + + #ifdef HAVE_POPPLER ++#include "poppler-transition-api.h" + + class SPDocument; + namespace Inkscape { +@@ -174,7 +175,7 @@ private: + void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, + GfxRGB *color, double opacity); + bool _addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading, +- Function *func); ++ _POPPLER_CONST Function *func); + gchar *_createTilingPattern(GfxTilingPattern *tiling_pattern, GfxState *state, + bool is_stroke=false); + // Image/mask creation +-- +2.18.1 + +From 0ab3449247d9356f57c75893e1ecfa195d43b681 Mon Sep 17 00:00:00 2001 +From: Thomas Holder +Date: Sun, 30 Sep 2018 19:05:48 +0200 +Subject: [PATCH] use poppler-transition-api instead of ifdefs + +--- + .../internal/pdfinput/pdf-parser.cpp | 906 ++++-------------- + .../pdfinput/poppler-transition-api.h | 4 +- + 2 files changed, 208 insertions(+), 702 deletions(-) + +diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp +index 96313e1f19..9e4cd583fa 100644 +--- a/src/extension/internal/pdfinput/pdf-parser.cpp ++++ b/src/extension/internal/pdfinput/pdf-parser.cpp +@@ -410,21 +410,13 @@ void PdfParser::parse(Object *obj, GBool topLevel) { + + if (obj->isArray()) { + for (int i = 0; i < obj->arrayGetLength(); ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj2 = obj->arrayGet(i); +-#else +- obj->arrayGet(i, &obj2); +-#endif ++ _POPPLER_CALL_ARGS(obj2, obj->arrayGet, i); + if (!obj2.isStream()) { + error(errInternal, -1, "Weird page contents"); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + return; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + } + } else if (!obj->isStream()) { + error(errInternal, -1, "Weird page contents"); +@@ -443,11 +435,7 @@ void PdfParser::go(GBool /*topLevel*/) + + // scan a sequence of objects + int numArgs = 0; +-#if defined(POPPLER_NEW_OBJECT_API) +- obj = parser->getObj(); +-#else +- parser->getObj(&obj); +-#endif ++ _POPPLER_CALL(obj, parser->getObj); + while (!obj.isEOF()) { + + // got a command - execute it +@@ -466,19 +454,15 @@ void PdfParser::go(GBool /*topLevel*/) + execOp(&obj, args, numArgs); + + #if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); ++ _POPPLER_FREE(obj); + for (int i = 0; i < numArgs; ++i) +- args[i].free(); ++ _POPPLER_FREE(args[i]); + #endif + numArgs = 0; + + // got an argument - save it + } else if (numArgs < maxArgs) { +-#if defined(POPPLER_NEW_OBJECT_API) + args[numArgs++] = std::move(obj); +-#else +- args[numArgs++] = obj; +-#endif + + // too many arguments - something is wrong + } else { +@@ -489,21 +473,13 @@ void PdfParser::go(GBool /*topLevel*/) + printf("\n"); + fflush(stdout); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); +-#endif ++ _POPPLER_FREE(obj); + } + + // grab the next object +-#if defined(POPPLER_NEW_OBJECT_API) +- obj = parser->getObj(); +-#else +- parser->getObj(&obj); +-#endif ++ _POPPLER_CALL(obj, parser->getObj); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); +-#endif ++ _POPPLER_FREE(obj); + + // args at end with no command + if (numArgs > 0) { +@@ -519,7 +495,7 @@ void PdfParser::go(GBool /*topLevel*/) + } + #if !defined(POPPLER_NEW_OBJECT_API) + for (int i = 0; i < numArgs; ++i) +- args[i].free(); ++ _POPPLER_FREE(args[i]); + #endif + } + } +@@ -716,13 +692,9 @@ void PdfParser::opSetDash(Object args[], int /*numArgs*/) + if (length != 0) { + dash = (double *)gmallocn(length, sizeof(double)); + for (int i = 0; i < length; ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- dash[i] = a->get(i).getNum(); +-#else + Object obj; +- dash[i] = a->get(i, &obj)->getNum(); +- obj.free(); +-#endif ++ dash[i] = _POPPLER_CALL_ARGS_DEREF(obj, a->get, i).getNum(); ++ _POPPLER_FREE(obj); + } + } + state->setLineDash(dash, length, args[1].getNum()); +@@ -772,18 +744,13 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/) + GBool haveBackdropColor = gFalse; + GBool alpha = gFalse; + +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj1 = res->lookupGState(args[0].getName())).isNull()) { +-#else +- if (!res->lookupGState(args[0].getName(), &obj1)) { +-#endif ++ _POPPLER_CALL_ARGS(obj1, res->lookupGState, args[0].getName()); ++ if (obj1.isNull()) { + return; + } + if (!obj1.isDict()) { + error(errSyntaxError, getPos(), "ExtGState '{0:s}' is wrong type"), args[0].getName(); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + return; + } + if (printCommands) { +@@ -793,11 +760,7 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/) + } + + // transparency support: blend mode, fill/stroke opacity +-#if defined(POPPLER_NEW_OBJECT_API) +- if (!((obj2 = obj1.dictLookup(const_cast("BM"))).isNull())) { +-#else +- if (!obj1.dictLookup(const_cast("BM"), &obj2)->isNull()) { +-#endif ++ if (!_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "BM").isNull()) { + GfxBlendMode mode = gfxBlendNormal; + if (state->parseBlendMode(&obj2, &mode)) { + state->setBlendMode(mode); +@@ -805,71 +768,40 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/) + error(errSyntaxError, getPos(), "Invalid blend mode in ExtGState"); + } + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj2 = obj1.dictLookup(const_cast("ca"))).isNum()) { +-#else +- obj2.free(); +- if (obj1.dictLookup(const_cast("ca"), &obj2)->isNum()) { +-#endif ++ _POPPLER_FREE(obj2); ++ if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "ca").isNum()) { + state->setFillOpacity(obj2.getNum()); + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj2 = obj1.dictLookup(const_cast("CA"))).isNum()) { +-#else +- obj2.free(); +- if (obj1.dictLookup(const_cast("CA"), &obj2)->isNum()) { +-#endif ++ _POPPLER_FREE(obj2); ++ if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "CA").isNum()) { + state->setStrokeOpacity(obj2.getNum()); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + + // fill/stroke overprint + GBool haveFillOP = gFalse; +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((haveFillOP = (obj2 = obj1.dictLookup(const_cast("op"))).isBool())) { +-#else +- if ((haveFillOP = (obj1.dictLookup(const_cast("op"), &obj2)->isBool()))) { +-#endif ++ if ((haveFillOP = _POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "op").isBool())) { + state->setFillOverprint(obj2.getBool()); + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj2 = obj1.dictLookup(const_cast("OP"))).isBool()) { +-#else +- obj2.free(); +- if (obj1.dictLookup(const_cast("OP"), &obj2)->isBool()) { +-#endif ++ _POPPLER_FREE(obj2); ++ if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "OP").isBool()) { + state->setStrokeOverprint(obj2.getBool()); + if (!haveFillOP) { + state->setFillOverprint(obj2.getBool()); + } + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + + // stroke adjust +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj2 = obj1.dictLookup(const_cast("SA"))).isBool()) { +-#else +- if (obj1.dictLookup(const_cast("SA"), &obj2)->isBool()) { +-#endif ++ if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "SA").isBool()) { + state->setStrokeAdjust(obj2.getBool()); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + + // transfer function +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj2 = obj1.dictLookup(const_cast("TR2"))).isNull()) { +- obj2 = obj1.dictLookup(const_cast("TR")); +-#else +- if (obj1.dictLookup(const_cast("TR2"), &obj2)->isNull()) { +- obj2.free(); +- obj1.dictLookup(const_cast("TR"), &obj2); +-#endif ++ if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "TR2").isNull()) { ++ _POPPLER_FREE(obj2); ++ _POPPLER_CALL_ARGS(obj2, obj1.dictLookup, "TR"); + } + if (obj2.isName(const_cast("Default")) || + obj2.isName(const_cast("Identity"))) { +@@ -878,15 +810,9 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/) + } else if (obj2.isArray() && obj2.arrayGetLength() == 4) { + int pos = 4; + for (int i = 0; i < 4; ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj3 = obj2.arrayGet(i); +-#else +- obj2.arrayGet(i, &obj3); +-#endif ++ _POPPLER_CALL_ARGS(obj3, obj2.arrayGet, i); + funcs[i] = Function::parse(&obj3); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj3.free(); +-#endif ++ _POPPLER_FREE(obj3); + if (!funcs[i]) { + pos = i; + break; +@@ -903,37 +829,21 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/) + } else if (!obj2.isNull()) { + error(errSyntaxError, getPos(), "Invalid transfer function in ExtGState"); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + + // soft mask +-#if defined(POPPLER_NEW_OBJECT_API) +- if (!((obj2 = obj1.dictLookup(const_cast("SMask"))).isNull())) { +-#else +- if (!obj1.dictLookup(const_cast("SMask"), &obj2)->isNull()) { +-#endif ++ if (!_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "SMask").isNull()) { + if (obj2.isName(const_cast("None"))) { + builder->clearSoftMask(state); + } else if (obj2.isDict()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj3 = obj2.dictLookup(const_cast("S"))).isName(const_cast("Alpha"))) { +-#else +- if (obj2.dictLookup(const_cast("S"), &obj3)->isName(const_cast("Alpha"))) { +-#endif ++ if (_POPPLER_CALL_ARGS_DEREF(obj3, obj2.dictLookup, "S").isName("Alpha")) { + alpha = gTrue; + } else { // "Luminosity" + alpha = gFalse; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj3.free(); +-#endif ++ _POPPLER_FREE(obj3); + funcs[0] = NULL; +-#if defined(POPPLER_NEW_OBJECT_API) +- if (!((obj3 = obj2.dictLookup(const_cast("TR"))).isNull())) { +-#else +- if (!obj2.dictLookup(const_cast("TR"), &obj3)->isNull()) { +-#endif ++ if (!_POPPLER_CALL_ARGS_DEREF(obj3, obj2.dictLookup, "TR").isNull()) { + funcs[0] = Function::parse(&obj3); + if (funcs[0]->getInputSize() != 1 || + funcs[0]->getOutputSize() != 1) { +@@ -942,45 +852,26 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/) + funcs[0] = NULL; + } + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((haveBackdropColor = (obj3 = obj2.dictLookup(const_cast("BC"))).isArray())) { +-#else +- obj3.free(); +- if ((haveBackdropColor = obj2.dictLookup(const_cast("BC"), &obj3)->isArray())) { +-#endif ++ _POPPLER_FREE(obj3); ++ if ((haveBackdropColor = _POPPLER_CALL_ARGS_DEREF(obj3, obj2.dictLookup, "BC").isArray())) { + for (int i = 0; i < gfxColorMaxComps; ++i) { + backdropColor.c[i] = 0; + } + for (int i = 0; i < obj3.arrayGetLength() && i < gfxColorMaxComps; ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj4 = obj3.arrayGet(i); +-#else +- obj3.arrayGet(i, &obj4); +-#endif ++ _POPPLER_CALL_ARGS(obj4, obj3.arrayGet, i); + if (obj4.isNum()) { + backdropColor.c[i] = dblToCol(obj4.getNum()); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj4.free(); +-#endif ++ _POPPLER_FREE(obj4); + } + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj3 = obj2.dictLookup(const_cast("G"))).isStream()) { +- if ((obj4 = obj3.streamGetDict()->lookup(const_cast("Group"))).isDict()) { +-#else +- obj3.free(); +- if (obj2.dictLookup(const_cast("G"), &obj3)->isStream()) { +- if (obj3.streamGetDict()->lookup(const_cast("Group"), &obj4)->isDict()) { +-#endif ++ _POPPLER_FREE(obj3); ++ if (_POPPLER_CALL_ARGS_DEREF(obj3, obj2.dictLookup, "G").isStream()) { ++ if (_POPPLER_CALL_ARGS_DEREF(obj4, obj3.streamGetDict()->lookup, "Group").isDict()) { + GfxColorSpace *blendingColorSpace = 0; + GBool isolated = gFalse; + GBool knockout = gFalse; +-#if defined(POPPLER_NEW_OBJECT_API) +- if (!((obj5 = obj4.dictLookup(const_cast("CS"))).isNull())) { +-#else +- if (!obj4.dictLookup(const_cast("CS"), &obj5)->isNull()) { +-#endif ++ if (!_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, "CS").isNull()) { + #if defined(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API) + blendingColorSpace = GfxColorSpace::parse(NULL, &obj5, NULL, NULL); + #elif defined(POPPLER_EVEN_NEWER_COLOR_SPACE_API) +@@ -989,25 +880,15 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/) + blendingColorSpace = GfxColorSpace::parse(&obj5, NULL, NULL); + #endif + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj5 = obj4.dictLookup(const_cast("I"))).isBool()) { +-#else +- obj5.free(); +- if (obj4.dictLookup(const_cast("I"), &obj5)->isBool()) { +-#endif ++ _POPPLER_FREE(obj5); ++ if (_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, "I").isBool()) { + isolated = obj5.getBool(); + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj5 = obj4.dictLookup(const_cast("K"))).isBool()) { +-#else +- obj5.free(); +- if (obj4.dictLookup(const_cast("K"), &obj5)->isBool()) { +-#endif ++ _POPPLER_FREE(obj5); ++ if (_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, "K").isBool()) { + knockout = obj5.getBool(); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj5.free(); +-#endif ++ _POPPLER_FREE(obj5); + if (!haveBackdropColor) { + if (blendingColorSpace) { + blendingColorSpace->getDefaultColor(&backdropColor); +@@ -1026,24 +907,18 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/) + } else { + error(errSyntaxError, getPos(), "Invalid soft mask in ExtGState - missing group"); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj4.free(); +-#endif ++ _POPPLER_FREE(obj4); + } else { + error(errSyntaxError, getPos(), "Invalid soft mask in ExtGState - missing group"); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj3.free(); +-#endif ++ _POPPLER_FREE(obj3); + } else if (!obj2.isNull()) { + error(errSyntaxError, getPos(), "Invalid soft mask in ExtGState"); + } + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); ++ _POPPLER_FREE(obj2); + +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + } + + void PdfParser::doSoftMask(Object *str, GBool alpha, +@@ -1064,79 +939,43 @@ void PdfParser::doSoftMask(Object *str, GBool alpha, + dict = str->streamGetDict(); + + // check form type +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("FormType")); +-#else +- dict->lookup(const_cast("FormType"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "FormType"); + if (!(obj1.isNull() || (obj1.isInt() && obj1.getInt() == 1))) { + error(errSyntaxError, getPos(), "Unknown form type"); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + + // get bounding box +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("BBox")); +-#else +- dict->lookup(const_cast("BBox"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "BBox"); + if (!obj1.isArray()) { +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + error(errSyntaxError, getPos(), "Bad form bounding box"); + return; + } + for (i = 0; i < 4; ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj2 = obj1.arrayGet(i); +-#else +- obj1.arrayGet(i, &obj2); +-#endif ++ _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, i); + bbox[i] = obj2.getNum(); +-#if defined(POPPLER_NEW_OBJECT_API) +- } +-#else +- obj2.free(); ++ _POPPLER_FREE(obj2); + } +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + + // get matrix +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("Matrix")); +-#else +- dict->lookup(const_cast("Matrix"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "Matrix"); + if (obj1.isArray()) { + for (i = 0; i < 6; ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj2 = obj1.arrayGet(i); +-#else +- obj1.arrayGet(i, &obj2); +-#endif ++ _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, i); + m[i] = obj2.getNum(); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + } + } else { + m[0] = 1; m[1] = 0; + m[2] = 0; m[3] = 1; + m[4] = 0; m[5] = 0; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + + // get resources +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("Resources")); +-#else +- dict->lookup(const_cast("Resources"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "Resources"); + resDict = obj1.isDict() ? obj1.getDict() : (Dict *)NULL; + + // draw it +@@ -1149,9 +988,7 @@ void PdfParser::doSoftMask(Object *str, GBool alpha, + if (blendingColorSpace) { + delete blendingColorSpace; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + } + + void PdfParser::opSetRenderingIntent(Object /*args*/[], int /*numArgs*/) +@@ -1248,11 +1085,7 @@ void PdfParser::opSetFillColorSpace(Object args[], int /*numArgs*/) + Object obj; + + state->setFillPattern(NULL); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj = res->lookupColorSpace(args[0].getName()); +-#else +- res->lookupColorSpace(args[0].getName(), &obj); +-#endif ++ _POPPLER_CALL_ARGS(obj, res->lookupColorSpace, args[0].getName()); + + GfxColorSpace *colorSpace = NULL; + #if defined(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API) +@@ -1274,9 +1107,7 @@ void PdfParser::opSetFillColorSpace(Object args[], int /*numArgs*/) + colorSpace = GfxColorSpace::parse(&obj, NULL); + } + #endif +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); +-#endif ++ _POPPLER_FREE(obj); + if (colorSpace) { + GfxColor color; + state->setFillColorSpace(colorSpace); +@@ -1295,11 +1126,7 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int /*numArgs*/) + GfxColorSpace *colorSpace = NULL; + + state->setStrokePattern(NULL); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj = res->lookupColorSpace(args[0].getName()); +-#else +- res->lookupColorSpace(args[0].getName(), &obj); +-#endif ++ _POPPLER_CALL_ARGS(obj, res->lookupColorSpace, args[0].getName()); + #if defined(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API) + if (obj.isNull()) { + colorSpace = GfxColorSpace::parse(NULL, &args[0], NULL, NULL); +@@ -1319,9 +1146,7 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int /*numArgs*/) + colorSpace = GfxColorSpace::parse(&obj, NULL); + } + #endif +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); +-#endif ++ _POPPLER_FREE(obj); + if (colorSpace) { + GfxColor color; + state->setStrokeColorSpace(colorSpace); +@@ -2551,11 +2376,7 @@ void PdfParser::opShowSpaceText(Object args[], int /*numArgs*/) + wMode = state->getFont()->getWMode(); + a = args[0].getArray(); + for (int i = 0; i < a->getLength(); ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj = a->get(i); +-#else +- a->get(i, &obj); +-#endif ++ _POPPLER_CALL_ARGS(obj, a->get, i); + if (obj.isNum()) { + // this uses the absolute value of the font size to match + // Acrobat's behavior +@@ -2572,9 +2393,7 @@ void PdfParser::opShowSpaceText(Object args[], int /*numArgs*/) + } else { + error(errSyntaxError, getPos(), "Element of show/space array must be number or string"); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); +-#endif ++ _POPPLER_FREE(obj); + } + } + +@@ -2655,11 +2474,7 @@ void PdfParser::doShowText(GooString *s) { + //out->updateCTM(state, 1, 0, 0, 1, 0, 0); + if (false){ /*!out->beginType3Char(state, curX + riseX, curY + riseY, tdx, tdy, + code, u, uLen)) {*/ +-#if defined(POPPLER_NEW_OBJECT_API) +- charProc = ((Gfx8BitFont *)font)->getCharProc(code); +-#else +- ((Gfx8BitFont *)font)->getCharProc(code, &charProc); +-#endif ++ _POPPLER_CALL_ARGS(charProc, ((Gfx8BitFont *)font)->getCharProc, code); + if ((resDict = ((Gfx8BitFont *)font)->getResources())) { + pushResources(resDict); + } +@@ -2672,9 +2487,7 @@ void PdfParser::doShowText(GooString *s) { + if (resDict) { + popResources(); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- charProc.free(); +-#endif ++ _POPPLER_FREE(charProc); + } + restoreState(); + // GfxState::restore() does *not* restore the current position, +@@ -2741,43 +2554,24 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/) + #else + char *name = args[0].getName(); + #endif +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj1 = res->lookupXObject(name)).isNull()) { +-#else +- if (!res->lookupXObject(name, &obj1)) { +-#endif ++ _POPPLER_CALL_ARGS(obj1, res->lookupXObject, name); ++ if (obj1.isNull()) { + return; + } + if (!obj1.isStream()) { + error(errSyntaxError, getPos(), "XObject '{0:s}' is wrong type", name); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + return; + } +-#if defined(POPPLER_NEW_OBJECT_API) +- obj2 = obj1.streamGetDict()->lookup(const_cast("Subtype")); +-#else +- obj1.streamGetDict()->lookup(const_cast("Subtype"), &obj2); +-#endif ++ _POPPLER_CALL_ARGS(obj2, obj1.streamGetDict()->lookup, "Subtype"); + if (obj2.isName(const_cast("Image"))) { +-#if defined(POPPLER_NEW_OBJECT_API) +- refObj = res->lookupXObjectNF(name); +-#else +- res->lookupXObjectNF(name, &refObj); +-#endif ++ _POPPLER_CALL_ARGS(refObj, res->lookupXObjectNF, name); + doImage(&refObj, obj1.getStream(), gFalse); +-#if !defined(POPPLER_NEW_OBJECT_API) +- refObj.free(); +-#endif ++ _POPPLER_FREE(refObj); + } else if (obj2.isName(const_cast("Form"))) { + doForm(&obj1); + } else if (obj2.isName(const_cast("PS"))) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj3 = obj1.streamGetDict()->lookup(const_cast("Level1")); +-#else +- obj1.streamGetDict()->lookup(const_cast("Level1"), &obj3); +-#endif ++ _POPPLER_CALL_ARGS(obj3, obj1.streamGetDict()->lookup, "Level1"); + /* out->psXObject(obj1.getStream(), + obj3.isStream() ? obj3.getStream() : (Stream *)NULL);*/ + } else if (obj2.isName()) { +@@ -2785,10 +2579,8 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/) + } else { + error(errSyntaxError, getPos(), "XObject subtype is missing or wrong type"); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj2); ++ _POPPLER_FREE(obj1); + } + + void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) +@@ -2815,18 +2607,10 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + dict = str->getDict(); + + // get size +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("Width")); +-#else +- dict->lookup(const_cast("Width"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "Width"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("W")); +-#else +- obj1.free(); +- dict->lookup(const_cast("W"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "W"); + } + if (obj1.isInt()){ + width = obj1.getInt(); +@@ -2837,19 +2621,11 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + else { + goto err2; + } +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("Height")); +-#else +- obj1.free(); +- dict->lookup(const_cast("Height"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "Height"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("H")); +-#else +- obj1.free(); +- dict->lookup(const_cast("H"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "H"); + } + if (obj1.isInt()) { + height = obj1.getInt(); +@@ -2860,46 +2636,26 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + else { + goto err2; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + + // image interpolation +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup("Interpolate"); +-#else +- dict->lookup("Interpolate", &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "Interpolate"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup("I"); +-#else +- obj1.free(); +- dict->lookup("I", &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "I"); + } + if (obj1.isBool()) + interpolate = obj1.getBool(); + else + interpolate = gFalse; +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + maskInterpolate = gFalse; + + // image or mask? +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("ImageMask")); +-#else +- dict->lookup(const_cast("ImageMask"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "ImageMask"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("IM")); +-#else +- obj1.free(); +- dict->lookup(const_cast("IM"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "IM"); + } + mask = gFalse; + if (obj1.isBool()) { +@@ -2908,24 +2664,14 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + else if (!obj1.isNull()) { + goto err2; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + + // bit depth + if (bits == 0) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("BitsPerComponent")); +-#else +- dict->lookup(const_cast("BitsPerComponent"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "BitsPerComponent"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("BPC")); +-#else +- obj1.free(); +- dict->lookup(const_cast("BPC"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "BPC"); + } + if (obj1.isInt()) { + bits = obj1.getInt(); +@@ -2934,9 +2680,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + } else { + goto err2; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + } + + // display a mask +@@ -2946,37 +2690,21 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + goto err1; + } + invert = gFalse; +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("Decode")); +-#else +- dict->lookup(const_cast("Decode"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "Decode"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("D")); +-#else +- obj1.free(); +- dict->lookup(const_cast("D"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "D"); + } + if (obj1.isArray()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj2 = obj1.arrayGet(0); +-#else +- obj1.arrayGet(0, &obj2); +-#endif ++ _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, 0); + if (obj2.isInt() && obj2.getInt() == 1) { + invert = gTrue; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + } else if (!obj1.isNull()) { + goto err2; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + + // draw it + builder->addImageMask(state, str, width, height, invert, interpolate); +@@ -2984,36 +2712,18 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + } else { + // get color space and color map + GfxColorSpace *colorSpace; +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("ColorSpace")); +-#else +- dict->lookup(const_cast("ColorSpace"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "ColorSpace"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("CS")); +-#else +- obj1.free(); +- dict->lookup(const_cast("CS"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "CS"); + } + if (obj1.isName()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj2 = res->lookupColorSpace(obj1.getName()); +-#else +- res->lookupColorSpace(obj1.getName(), &obj2); +-#endif ++ _POPPLER_CALL_ARGS(obj2, res->lookupColorSpace, obj1.getName()); + if (!obj2.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) ++ _POPPLER_FREE(obj1); + obj1 = std::move(obj2); +-#else +- obj1.free(); +- obj1 = obj2; +-#endif + } else { +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + } + } + if (!obj1.isNull()) { +@@ -3033,29 +2743,17 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + } else { + colorSpace = NULL; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + if (!colorSpace) { + goto err1; + } +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("Decode")); +-#else +- dict->lookup(const_cast("Decode"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "Decode"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("D")); +-#else +- obj1.free(); +- dict->lookup(const_cast("D"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "D"); + } + GfxImageColorMap *colorMap = new GfxImageColorMap(bits, &obj1, colorSpace); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + if (!colorMap->isOk()) { + delete colorMap; + goto err1; +@@ -3069,13 +2767,8 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + int maskHeight = 0; + maskInvert = gFalse; + GfxImageColorMap *maskColorMap = NULL; +-#if defined(POPPLER_NEW_OBJECT_API) +- maskObj = dict->lookup(const_cast("Mask")); +- smaskObj = dict->lookup(const_cast("SMask")); +-#else +- dict->lookup(const_cast("Mask"), &maskObj); +- dict->lookup(const_cast("SMask"), &smaskObj); +-#endif ++ _POPPLER_CALL_ARGS(maskObj, dict->lookup, "Mask"); ++ _POPPLER_CALL_ARGS(smaskObj, dict->lookup, "SMask"); + Dict* maskDict; + if (smaskObj.isStream()) { + // soft mask +@@ -3084,108 +2777,58 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + } + maskStr = smaskObj.getStream(); + maskDict = smaskObj.streamGetDict(); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("Width")); +-#else +- maskDict->lookup(const_cast("Width"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Width"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("W")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("W"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "W"); + } + if (!obj1.isInt()) { + goto err2; + } + maskWidth = obj1.getInt(); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("Height")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("Height"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Height"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("H")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("H"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "H"); + } + if (!obj1.isInt()) { + goto err2; + } + maskHeight = obj1.getInt(); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("BitsPerComponent")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("BitsPerComponent"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "BitsPerComponent"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("BPC")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("BPC"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "BPC"); + } + if (!obj1.isInt()) { + goto err2; + } + int maskBits = obj1.getInt(); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("Interpolate")); +-#else +- obj1.free(); +- maskDict->lookup("Interpolate", &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Interpolate"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("I")); +-#else +- obj1.free(); +- maskDict->lookup("I", &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "I"); + } + if (obj1.isBool()) + maskInterpolate = obj1.getBool(); + else + maskInterpolate = gFalse; +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("ColorSpace")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("ColorSpace"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "ColorSpace"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("CS")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("CS"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "CS"); + } + if (obj1.isName()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj2 = res->lookupColorSpace(obj1.getName()); +-#else +- res->lookupColorSpace(obj1.getName(), &obj2); +-#endif ++ _POPPLER_CALL_ARGS(obj2, res->lookupColorSpace, obj1.getName()); + if (!obj2.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) ++ _POPPLER_FREE(obj1); + obj1 = std::move(obj2); +-#else +- obj1.free(); +- obj1 = obj2; +-#endif + } else { +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + } + } + #if defined(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API) +@@ -3195,29 +2838,17 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + #else + GfxColorSpace *maskColorSpace = GfxColorSpace::parse(&obj1, NULL); + #endif +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { + goto err1; + } +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("Decode")); +-#else +- maskDict->lookup(const_cast("Decode"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Decode"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("D")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("D"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "D"); + } + maskColorMap = new GfxImageColorMap(maskBits, &obj1, maskColorSpace); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + if (!maskColorMap->isOk()) { + delete maskColorMap; + goto err1; +@@ -3228,15 +2859,9 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + // color key mask + int i; + for (i = 0; i < maskObj.arrayGetLength() && i < 2*gfxColorMaxComps; ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskObj.arrayGet(i); +-#else +- maskObj.arrayGet(i, &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, maskObj.arrayGet, i); + maskColors[i] = obj1.getInt(); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + } + haveColorKeyMask = gTrue; + } else if (maskObj.isStream()) { +@@ -3246,111 +2871,61 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + } + maskStr = maskObj.getStream(); + maskDict = maskObj.streamGetDict(); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("Width")); +-#else +- maskDict->lookup(const_cast("Width"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Width"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("W")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("W"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "W"); + } + if (!obj1.isInt()) { + goto err2; + } + maskWidth = obj1.getInt(); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("Height")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("Height"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Height"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("H")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("H"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "H"); + } + if (!obj1.isInt()) { + goto err2; + } + maskHeight = obj1.getInt(); +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("ImageMask")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("ImageMask"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "ImageMask"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("IM")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("IM"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "IM"); + } + if (!obj1.isBool() || !obj1.getBool()) { + goto err2; + } +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup("Interpolate"); +-#else +- obj1.free(); +- maskDict->lookup("Interpolate", &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Interpolate"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup("I"); +-#else +- obj1.free(); +- maskDict->lookup("I", &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "I"); + } + if (obj1.isBool()) + maskInterpolate = obj1.getBool(); + else + maskInterpolate = gFalse; +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + maskInvert = gFalse; +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("Decode")); +-#else +- maskDict->lookup(const_cast("Decode"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Decode"); + if (obj1.isNull()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = maskDict->lookup(const_cast("D")); +-#else +- obj1.free(); +- maskDict->lookup(const_cast("D"), &obj1); +-#endif ++ _POPPLER_FREE(obj1); ++ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "D"); + } + if (obj1.isArray()) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj2 = obj1.arrayGet(0); +-#else +- obj1.arrayGet(0, &obj2); +-#endif ++ _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, 0); + if (obj2.isInt() && obj2.getInt() == 1) { + maskInvert = gTrue; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj2.free(); +-#endif ++ _POPPLER_FREE(obj2); + } else if (!obj1.isNull()) { + goto err2; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + haveExplicitMask = gTrue; + } + +@@ -3368,18 +2943,14 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg) + } + delete colorMap; + +-#if !defined(POPPLER_NEW_OBJECT_API) +- maskObj.free(); +- smaskObj.free(); +-#endif ++ _POPPLER_FREE(maskObj); ++ _POPPLER_FREE(smaskObj); + } + + return; + + err2: +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + err1: + error(errSyntaxError, getPos(), "Bad image parameters"); + } +@@ -3404,97 +2975,52 @@ void PdfParser::doForm(Object *str) { + dict = str->streamGetDict(); + + // check form type +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = dict->lookup(const_cast("FormType")); +-#else +- dict->lookup(const_cast("FormType"), &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, dict->lookup, "FormType"); + if (!(obj1.isNull() || (obj1.isInt() && obj1.getInt() == 1))) { + error(errSyntaxError, getPos(), "Unknown form type"); + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + + // get bounding box +-#if defined(POPPLER_NEW_OBJECT_API) +- bboxObj = dict->lookup(const_cast("BBox")); +-#else +- dict->lookup(const_cast("BBox"), &bboxObj); +-#endif ++ _POPPLER_CALL_ARGS(bboxObj, dict->lookup, "BBox"); + if (!bboxObj.isArray()) { +-#if !defined(POPPLER_NEW_OBJECT_API) +- bboxObj.free(); +-#endif ++ _POPPLER_FREE(bboxObj); + error(errSyntaxError, getPos(), "Bad form bounding box"); + return; + } + for (i = 0; i < 4; ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = bboxObj.arrayGet(i); +-#else +- bboxObj.arrayGet(i, &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, bboxObj.arrayGet, i); + bbox[i] = obj1.getNum(); +-#if defined(POPPLER_NEW_OBJECT_API) +- } +-#else +- obj1.free(); ++ _POPPLER_FREE(obj1); + } +- bboxObj.free(); +-#endif ++ _POPPLER_FREE(bboxObj); + + // get matrix +-#if defined(POPPLER_NEW_OBJECT_API) +- matrixObj = dict->lookup(const_cast("Matrix")); +-#else +- dict->lookup(const_cast("Matrix"), &matrixObj); +-#endif ++ _POPPLER_CALL_ARGS(matrixObj, dict->lookup, "Matrix"); + if (matrixObj.isArray()) { + for (i = 0; i < 6; ++i) { +-#if defined(POPPLER_NEW_OBJECT_API) +- obj1 = matrixObj.arrayGet(i); +-#else +- matrixObj.arrayGet(i, &obj1); +-#endif ++ _POPPLER_CALL_ARGS(obj1, matrixObj.arrayGet, i); + m[i] = obj1.getNum(); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + } + } else { + m[0] = 1; m[1] = 0; + m[2] = 0; m[3] = 1; + m[4] = 0; m[5] = 0; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- matrixObj.free(); +-#endif ++ _POPPLER_FREE(matrixObj); + + // get resources +-#if defined(POPPLER_NEW_OBJECT_API) +- resObj = dict->lookup(const_cast("Resources")); +-#else +- dict->lookup(const_cast("Resources"), &resObj); +-#endif ++ _POPPLER_CALL_ARGS(resObj, dict->lookup, "Resources"); + resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; + + // check for a transparency group + transpGroup = isolated = knockout = gFalse; + blendingColorSpace = NULL; +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj1 = dict->lookup(const_cast("Group"))).isDict()) { +- if ((obj2 = obj1.dictLookup(const_cast("S"))).isName(const_cast("Transparency"))) { +-#else +- if (dict->lookup(const_cast("Group"), &obj1)->isDict()) { +- if (obj1.dictLookup(const_cast("S"), &obj2)->isName(const_cast("Transparency"))) { +-#endif ++ if (_POPPLER_CALL_ARGS_DEREF(obj1, dict->lookup, "Group").isDict()) { ++ if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "S").isName("Transparency")) { + transpGroup = gTrue; +-#if defined(POPPLER_NEW_OBJECT_API) +- if (!((obj3 = obj1.dictLookup(const_cast("CS"))).isNull())) { +-#else +- if (!obj1.dictLookup(const_cast("CS"), &obj3)->isNull()) { +-#endif ++ if (!_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "CS").isNull()) { + #if defined(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API) + blendingColorSpace = GfxColorSpace::parse(NULL, &obj3, NULL, NULL); + #elif defined(POPPLER_EVEN_NEWER_COLOR_SPACE_API) +@@ -3503,32 +3029,19 @@ void PdfParser::doForm(Object *str) { + blendingColorSpace = GfxColorSpace::parse(&obj3, NULL); + #endif + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj3 = obj1.dictLookup(const_cast("I"))).isBool()) { +-#else +- obj3.free(); +- if (obj1.dictLookup(const_cast("I"), &obj3)->isBool()) { +-#endif ++ _POPPLER_FREE(obj3); ++ if (_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "I").isBool()) { + isolated = obj3.getBool(); + } +-#if defined(POPPLER_NEW_OBJECT_API) +- if ((obj3 = obj1.dictLookup(const_cast("K"))).isBool()) { +-#else +- obj3.free(); +- if (obj1.dictLookup(const_cast("K"), &obj3)->isBool()) { +-#endif ++ _POPPLER_FREE(obj3); ++ if (_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "K").isBool()) { + knockout = obj3.getBool(); + } +-#if defined(POPPLER_NEW_OBJECT_API) ++ _POPPLER_FREE(obj3); + } ++ _POPPLER_FREE(obj2); + } +-#else +- obj3.free(); +- } +- obj2.free(); +- } +- obj1.free(); +-#endif ++ _POPPLER_FREE(obj1); + + // draw it + ++formDepth; +@@ -3539,9 +3052,7 @@ void PdfParser::doForm(Object *str) { + if (blendingColorSpace) { + delete blendingColorSpace; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- resObj.free(); +-#endif ++ _POPPLER_FREE(resObj); + } + + void PdfParser::doForm1(Object *str, Dict *resDict, double *matrix, double *bbox, +@@ -3670,17 +3181,14 @@ Stream *PdfParser::buildImageStream() { + // build dictionary + #if defined(POPPLER_NEW_OBJECT_API) + dict = Object(new Dict(xref)); +- obj = parser->getObj(); + #else + dict.initDict(xref); +- parser->getObj(&obj); + #endif ++ _POPPLER_CALL(obj, parser->getObj); + while (!obj.isCmd(const_cast("ID")) && !obj.isEOF()) { + if (!obj.isName()) { + error(errSyntaxError, getPos(), "Inline image dictionary key must be a name object"); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); +-#endif ++ _POPPLER_FREE(obj); + } else { + Object obj2; + _POPPLER_CALL(obj2, parser->getObj); +@@ -3696,15 +3204,11 @@ Stream *PdfParser::buildImageStream() { + } + if (obj.isEOF()) { + error(errSyntaxError, getPos(), "End of file in inline image"); +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); +- dict.free(); +-#endif ++ _POPPLER_FREE(obj); ++ _POPPLER_FREE(dict); + return NULL; + } +-#if !defined(POPPLER_NEW_OBJECT_API) +- obj.free(); +-#endif ++ _POPPLER_FREE(obj); + + // make stream + #if defined(POPPLER_NEW_OBJECT_API) +diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h +index 898e64bf2b..6ed911b04b 100644 +--- a/src/extension/internal/pdfinput/poppler-transition-api.h ++++ b/src/extension/internal/pdfinput/poppler-transition-api.h +@@ -22,10 +22,12 @@ + #define _POPPLER_FREE(obj) + #define _POPPLER_CALL(ret, func) (ret = func()) + #define _POPPLER_CALL_ARGS(ret, func, ...) (ret = func(__VA_ARGS__)) ++#define _POPPLER_CALL_ARGS_DEREF _POPPLER_CALL_ARGS + #else + #define _POPPLER_FREE(obj) (obj).free() + #define _POPPLER_CALL(ret, func) (*func(&ret)) +-#define _POPPLER_CALL_ARGS(ret, func, ...) (*func(__VA_ARGS__, &ret)) ++#define _POPPLER_CALL_ARGS(ret, func, ...) (func(__VA_ARGS__, &ret)) ++#define _POPPLER_CALL_ARGS_DEREF(...) (*_POPPLER_CALL_ARGS(__VA_ARGS__)) + #endif + + #if POPPLER_CHECK_VERSION(0, 29, 0) +-- +2.18.1 + +From d047859d90cef3784e2d13e40887a70d8d517897 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bart=C5=82omiej=20Szczepaniak?= + +Date: Tue, 6 Nov 2018 07:41:40 +0000 +Subject: [PATCH] fix poppler 0.71.0 build. + +--- + src/extension/internal/pdfinput/poppler-transition-api.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h +index 6ed911b04b..4437052593 100644 +--- a/src/extension/internal/pdfinput/poppler-transition-api.h ++++ b/src/extension/internal/pdfinput/poppler-transition-api.h +@@ -3,6 +3,12 @@ + + #include + ++#if POPPLER_CHECK_VERSION(0,71,0) ++typedef bool GBool; ++#define gTrue true ++#define gFalse false ++#endif ++ + #if POPPLER_CHECK_VERSION(0,70,0) + #define _POPPLER_CONST const + #else +-- +2.18.1 + +From b3d59cc8106da3bf6020a6c47eeb3b8a7bbae1a9 Mon Sep 17 00:00:00 2001 +From: Thomas Holder +Date: Sun, 9 Dec 2018 10:21:34 +0100 +Subject: [PATCH] fix poppler 0.72.0 build + +--- + src/extension/internal/pdfinput/pdf-parser.h | 1 - + src/extension/internal/pdfinput/poppler-transition-api.h | 4 ++++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h +index 2d4441a22c..31c84d51bb 100644 +--- a/src/extension/internal/pdfinput/pdf-parser.h ++++ b/src/extension/internal/pdfinput/pdf-parser.h +@@ -37,7 +37,6 @@ namespace Inkscape { + using Inkscape::Extension::Internal::SvgBuilder; + + #include "glib/poppler-features.h" +-#include "goo/gtypes.h" + #include "Object.h" + + class GooString; +diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h +index 5141bf8a73..61a15083a0 100644 +--- a/src/extension/internal/pdfinput/poppler-transition-api.h ++++ b/src/extension/internal/pdfinput/poppler-transition-api.h +@@ -14,6 +14,10 @@ + + #include + ++#if POPPLER_CHECK_VERSION(0, 72, 0) ++#define getCString c_str ++#endif ++ + #if POPPLER_CHECK_VERSION(0,71,0) + typedef bool GBool; + #define gTrue true -- -2.17.0 +2.18.1 diff --git a/inkscape.spec b/inkscape.spec index 85092c4..16fba5c 100644 --- a/inkscape.spec +++ b/inkscape.spec @@ -18,7 +18,6 @@ Source0: https://media.inkscape.org/dl/resources/file/%{name}-%{version}.tar.bz2 Patch0: %{name}-man.patch Patch1: %{name}-gtk3.patch Patch2: %{name}-poppler.patch -Patch3: poppler0.69.patch URL: http://www.inkscape.org/ BuildRequires: ImageMagick-c++-devel BuildRequires: aspell-devel @@ -109,7 +108,6 @@ dwuwymiarowej grafiki wektorowej. %patch0 -p1 %patch1 -p1 %patch2 -p1 -%patch3 -p1 %{__sed} -i -e 's,po/Makefile.in,,' configure.ac diff --git a/poppler0.69.patch b/poppler0.69.patch deleted file mode 100644 index e3e7565..0000000 --- a/poppler0.69.patch +++ /dev/null @@ -1,386 +0,0 @@ -commit 402c0274420fe39fd2f3393bc7d8d8879d436358 -Author: Thomas Holder -Date: Fri Sep 28 18:05:30 2018 +0000 - - fix 1789208 poppler 0.69 - -diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake -index 40ca7aa65c..9457d58df0 100644 ---- a/CMakeScripts/DefineDependsandFlags.cmake -+++ b/CMakeScripts/DefineDependsandFlags.cmake -@@ -126,18 +126,6 @@ if(ENABLE_POPPLER) - set(HAVE_POPPLER_GLIB ON) - endif() - endif() -- if(POPPLER_VERSION VERSION_GREATER "0.26.0" OR -- POPPLER_VERSION VERSION_EQUAL "0.26.0") -- set(POPPLER_EVEN_NEWER_COLOR_SPACE_API ON) -- endif() -- if(POPPLER_VERSION VERSION_GREATER "0.29.0" OR -- POPPLER_VERSION VERSION_EQUAL "0.29.0") -- set(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API ON) -- endif() -- if(POPPLER_VERSION VERSION_GREATER "0.58.0" OR -- POPPLER_VERSION VERSION_EQUAL "0.58.0") -- set(POPPLER_NEW_OBJECT_API ON) -- endif() - else() - set(ENABLE_POPPLER_CAIRO OFF) - endif() -diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp -index fa9942230b..21a91fa34f 100644 ---- a/src/extension/internal/pdfinput/pdf-input.cpp -+++ b/src/extension/internal/pdfinput/pdf-input.cpp -@@ -804,7 +804,7 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) { - dlg->getImportSettings(prefs); - - // Apply crop settings -- PDFRectangle *clipToBox = NULL; -+ _POPPLER_CONST PDFRectangle *clipToBox = nullptr; - double crop_setting; - sp_repr_get_double(prefs, "cropTo", &crop_setting); - -diff --git a/src/extension/internal/pdfinput/pdf-input.h b/src/extension/internal/pdfinput/pdf-input.h -index ddcb8f222b..88a894f1c0 100644 ---- a/src/extension/internal/pdfinput/pdf-input.h -+++ b/src/extension/internal/pdfinput/pdf-input.h -@@ -15,6 +15,7 @@ - #endif - - #ifdef HAVE_POPPLER -+#include "poppler-transition-api.h" - - #include - -diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp -index a3a8ff25a6..96313e1f19 100644 ---- a/src/extension/internal/pdfinput/pdf-parser.cpp -+++ b/src/extension/internal/pdfinput/pdf-parser.cpp -@@ -291,8 +291,8 @@ PdfParser::PdfParser(XRef *xrefA, - int /*pageNum*/, - int rotate, - Dict *resDict, -- PDFRectangle *box, -- PDFRectangle *cropBox) : -+ _POPPLER_CONST PDFRectangle *box, -+ _POPPLER_CONST PDFRectangle *cropBox) : - xref(xrefA), - builder(builderA), - subPage(gFalse), -@@ -314,7 +314,7 @@ PdfParser::PdfParser(XRef *xrefA, - builder->setDocumentSize(Inkscape::Util::Quantity::convert(state->getPageWidth(), "pt", "px"), - Inkscape::Util::Quantity::convert(state->getPageHeight(), "pt", "px")); - -- double *ctm = state->getCTM(); -+ const double *ctm = state->getCTM(); - double scaledCTM[6]; - for (int i = 0; i < 6; ++i) { - baseMatrix[i] = ctm[i]; -@@ -349,7 +349,7 @@ PdfParser::PdfParser(XRef *xrefA, - PdfParser::PdfParser(XRef *xrefA, - Inkscape::Extension::Internal::SvgBuilder *builderA, - Dict *resDict, -- PDFRectangle *box) : -+ _POPPLER_CONST PDFRectangle *box) : - xref(xrefA), - builder(builderA), - subPage(gTrue), -@@ -568,7 +568,7 @@ const char *PdfParser::getPreviousOperator(unsigned int look_back) { - - void PdfParser::execOp(Object *cmd, Object args[], int numArgs) { - PdfOperator *op; -- char *name; -+ const char *name; - Object *argPtr; - int i; - -@@ -616,7 +616,7 @@ void PdfParser::execOp(Object *cmd, Object args[], int numArgs) { - (this->*op->func)(argPtr, numArgs); - } - --PdfOperator* PdfParser::findOp(char *name) { -+PdfOperator* PdfParser::findOp(const char *name) { - int a = -1; - int b = numOps; - int cmp = -1; -@@ -1748,7 +1748,7 @@ void PdfParser::doShadingPatternFillFallback(GfxShadingPattern *sPat, - GBool stroke, GBool eoFill) { - GfxShading *shading; - GfxPath *savedPath; -- double *ctm, *btm, *ptm; -+ const double *ctm, *btm, *ptm; - double m[6], ictm[6], m1[6]; - double xMin, yMin, xMax, yMax; - double det; -@@ -1990,7 +1990,7 @@ void PdfParser::doFunctionShFill1(GfxFunctionShading *shading, - GfxColor color0M, color1M, colorM0, colorM1, colorMM; - GfxColor colors2[4]; - double functionColorDelta = colorDeltas[pdfFunctionShading-1]; -- double *matrix; -+ const double *matrix; - double xM, yM; - int nComps, i, j; - -@@ -2170,7 +2170,7 @@ void PdfParser::doPatchMeshShFill(GfxPatchMeshShading *shading) { - } - } - --void PdfParser::fillPatch(GfxPatch *patch, int nComps, int depth) { -+void PdfParser::fillPatch(_POPPLER_CONST GfxPatch *patch, int nComps, int depth) { - GfxPatch patch00 = blankPatch(); - GfxPatch patch01 = blankPatch(); - GfxPatch patch10 = blankPatch(); -@@ -2591,7 +2591,7 @@ void PdfParser::doShowText(GooString *s) { - double x, y, dx, dy, tdx, tdy; - double originX, originY, tOriginX, tOriginY; - double oldCTM[6], newCTM[6]; -- double *mat; -+ const double *mat; - Object charProc; - Dict *resDict; - Parser *oldParser; -@@ -3665,7 +3665,6 @@ void PdfParser::opBeginImage(Object /*args*/[], int /*numArgs*/) - Stream *PdfParser::buildImageStream() { - Object dict; - Object obj; -- char *key; - Stream *str; - - // build dictionary -@@ -3683,26 +3682,17 @@ Stream *PdfParser::buildImageStream() { - obj.free(); - #endif - } else { -- key = copyString(obj.getName()); --#if defined(POPPLER_NEW_OBJECT_API) -- obj = parser->getObj(); --#else -- obj.free(); -- parser->getObj(&obj); --#endif -- if (obj.isEOF() || obj.isError()) { -- gfree(key); -+ Object obj2; -+ _POPPLER_CALL(obj2, parser->getObj); -+ if (obj2.isEOF() || obj2.isError()) { -+ _POPPLER_FREE(obj); - break; - } --#if defined(POPPLER_NEW_OBJECT_API) -- dict.dictAdd(key, std::move(obj)); -+ _POPPLER_DICTADD(dict, obj.getName(), obj2); -+ _POPPLER_FREE(obj); -+ _POPPLER_FREE(obj2); - } -- obj = parser->getObj(); --#else -- dict.dictAdd(key, &obj); -- } -- parser->getObj(&obj); --#endif -+ _POPPLER_CALL(obj, parser->getObj); - } - if (obj.isEOF()) { - error(errSyntaxError, getPos(), "End of file in inline image"); -diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h -index b27a29cfbf..17eb025468 100644 ---- a/src/extension/internal/pdfinput/pdf-parser.h -+++ b/src/extension/internal/pdfinput/pdf-parser.h -@@ -9,6 +9,7 @@ - #define PDF_PARSER_H - - #ifdef HAVE_POPPLER -+#include "poppler-transition-api.h" - - #ifdef USE_GCC_PRAGMAS - #pragma interface -@@ -128,11 +129,14 @@ public: - - // Constructor for regular output. - PdfParser(XRef *xrefA, SvgBuilder *builderA, int pageNum, int rotate, -- Dict *resDict, PDFRectangle *box, PDFRectangle *cropBox); -+ Dict *resDict, -+ _POPPLER_CONST PDFRectangle *box, -+ _POPPLER_CONST PDFRectangle *cropBox); - - // Constructor for a sub-page object. - PdfParser(XRef *xrefA, Inkscape::Extension::Internal::SvgBuilder *builderA, -- Dict *resDict, PDFRectangle *box); -+ Dict *resDict, -+ _POPPLER_CONST PDFRectangle *box); - - virtual ~PdfParser(); - -@@ -186,7 +190,7 @@ private: - - void go(GBool topLevel); - void execOp(Object *cmd, Object args[], int numArgs); -- PdfOperator *findOp(char *name); -+ PdfOperator *findOp(const char *name); - GBool checkArg(Object *arg, TchkType type); - int getPos(); - -@@ -257,7 +261,7 @@ private: - double x2, double y2, GfxColor *color2, - int nComps, int depth); - void doPatchMeshShFill(GfxPatchMeshShading *shading); -- void fillPatch(GfxPatch *patch, int nComps, int depth); -+ void fillPatch(_POPPLER_CONST GfxPatch *patch, int nComps, int depth); - void doEndPath(); - - // path clipping operators -diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h -new file mode 100644 -index 0000000000..898e64bf2b ---- /dev/null -+++ b/src/extension/internal/pdfinput/poppler-transition-api.h -@@ -0,0 +1,39 @@ -+#ifndef SEEN_POPPLER_TRANSITION_API_H -+#define SEEN_POPPLER_TRANSITION_API_H -+ -+#include -+ -+#if POPPLER_CHECK_VERSION(0,70,0) -+#define _POPPLER_CONST const -+#else -+#define _POPPLER_CONST -+#endif -+ -+#if POPPLER_CHECK_VERSION(0,69,0) -+#define _POPPLER_DICTADD(dict, key, obj) (dict).dictAdd(key, std::move(obj)) -+#elif POPPLER_CHECK_VERSION(0,58,0) -+#define _POPPLER_DICTADD(dict, key, obj) (dict).dictAdd(copyString(key), std::move(obj)) -+#else -+#define _POPPLER_DICTADD(dict, key, obj) (dict).dictAdd(copyString(key), &obj) -+#endif -+ -+#if POPPLER_CHECK_VERSION(0,58,0) -+#define POPPLER_NEW_OBJECT_API -+#define _POPPLER_FREE(obj) -+#define _POPPLER_CALL(ret, func) (ret = func()) -+#define _POPPLER_CALL_ARGS(ret, func, ...) (ret = func(__VA_ARGS__)) -+#else -+#define _POPPLER_FREE(obj) (obj).free() -+#define _POPPLER_CALL(ret, func) (*func(&ret)) -+#define _POPPLER_CALL_ARGS(ret, func, ...) (*func(__VA_ARGS__, &ret)) -+#endif -+ -+#if POPPLER_CHECK_VERSION(0, 29, 0) -+#define POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API -+#endif -+ -+#if POPPLER_CHECK_VERSION(0, 25, 0) -+#define POPPLER_EVEN_NEWER_COLOR_SPACE_API -+#endif -+ -+#endif -diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp -index 9d0df7c04d..a59397a100 100644 ---- a/src/extension/internal/pdfinput/svg-builder.cpp -+++ b/src/extension/internal/pdfinput/svg-builder.cpp -@@ -625,7 +625,7 @@ gchar *SvgBuilder::_createPattern(GfxPattern *pattern, GfxState *state, bool is_ - if ( pattern != nullptr ) { - if ( pattern->getType() == 2 ) { // Shading pattern - GfxShadingPattern *shading_pattern = static_cast(pattern); -- double *ptm; -+ const double *ptm; - double m[6] = {1, 0, 0, 1, 0, 0}; - double det; - -@@ -672,7 +672,7 @@ gchar *SvgBuilder::_createTilingPattern(GfxTilingPattern *tiling_pattern, - - Inkscape::XML::Node *pattern_node = _xml_doc->createElement("svg:pattern"); - // Set pattern transform matrix -- double *p2u = tiling_pattern->getMatrix(); -+ const double *p2u = tiling_pattern->getMatrix(); - double m[6] = {1, 0, 0, 1, 0, 0}; - double det; - det = _ttm[0] * _ttm[3] - _ttm[1] * _ttm[2]; // see LP Bug 1168908 -@@ -698,7 +698,7 @@ gchar *SvgBuilder::_createTilingPattern(GfxTilingPattern *tiling_pattern, - pattern_node->setAttribute("patternUnits", "userSpaceOnUse"); - // Set pattern tiling - // FIXME: don't ignore XStep and YStep -- double *bbox = tiling_pattern->getBBox(); -+ const double *bbox = tiling_pattern->getBBox(); - sp_repr_set_svg_double(pattern_node, "x", 0.0); - sp_repr_set_svg_double(pattern_node, "y", 0.0); - sp_repr_set_svg_double(pattern_node, "width", bbox[2] - bbox[0]); -@@ -751,7 +751,7 @@ gchar *SvgBuilder::_createTilingPattern(GfxTilingPattern *tiling_pattern, - */ - gchar *SvgBuilder::_createGradient(GfxShading *shading, double *matrix, bool for_shading) { - Inkscape::XML::Node *gradient; -- Function *func; -+ _POPPLER_CONST Function *func; - int num_funcs; - bool extend0, extend1; - -@@ -865,7 +865,7 @@ static bool svgGetShadingColorRGB(GfxShading *shading, double offset, GfxRGB *re - - #define INT_EPSILON 8 - bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading, -- Function *func) { -+ _POPPLER_CONST Function *func) { - int type = func->getType(); - if ( type == 0 || type == 2 ) { // Sampled or exponential function - GfxRGB stop1, stop2; -@@ -877,9 +877,9 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh - _addStopToGradient(gradient, 1.0, &stop2, 1.0); - } - } else if ( type == 3 ) { // Stitching -- StitchingFunction *stitchingFunc = static_cast(func); -- double *bounds = stitchingFunc->getBounds(); -- double *encode = stitchingFunc->getEncode(); -+ auto stitchingFunc = static_cast<_POPPLER_CONST StitchingFunction*>(func); -+ const double *bounds = stitchingFunc->getBounds(); -+ const double *encode = stitchingFunc->getEncode(); - int num_funcs = stitchingFunc->getNumFuncs(); - - // Add stops from all the stitched functions -@@ -890,7 +890,7 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh - svgGetShadingColorRGB(shading, bounds[i + 1], &color); - // Add stops - if (stitchingFunc->getFunc(i)->getType() == 2) { // process exponential fxn -- double expE = (static_cast(stitchingFunc->getFunc(i)))->getE(); -+ double expE = (static_cast<_POPPLER_CONST ExponentialFunction*>(stitchingFunc->getFunc(i)))->getE(); - if (expE > 1.0) { - expE = (bounds[i + 1] - bounds[i])/expE; // approximate exponential as a single straight line at x=1 - if (encode[2*i] == 0) { // normal sequence -@@ -1148,7 +1148,7 @@ void SvgBuilder::updateFont(GfxState *state) { - Inkscape::CSSOStringStream os_font_size; - double css_font_size = _font_scaling * state->getFontSize(); - if ( font->getType() == fontType3 ) { -- double *font_matrix = font->getFontMatrix(); -+ const double *font_matrix = font->getFontMatrix(); - if ( font_matrix[0] != 0.0 ) { - css_font_size *= font_matrix[3] / font_matrix[0]; - } -@@ -1193,7 +1193,7 @@ void SvgBuilder::updateTextPosition(double tx, double ty) { - void SvgBuilder::updateTextMatrix(GfxState *state) { - _flushText(); - // Update text matrix -- double *text_matrix = state->getTextMat(); -+ const double *text_matrix = state->getTextMat(); - double w_scale = sqrt( text_matrix[0] * text_matrix[0] + text_matrix[2] * text_matrix[2] ); - double h_scale = sqrt( text_matrix[1] * text_matrix[1] + text_matrix[3] * text_matrix[3] ); - double max_scale; -diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h -index 729cdc944c..7fdb0b5fcd 100644 ---- a/src/extension/internal/pdfinput/svg-builder.h -+++ b/src/extension/internal/pdfinput/svg-builder.h -@@ -15,6 +15,7 @@ - #endif - - #ifdef HAVE_POPPLER -+#include "poppler-transition-api.h" - - class SPDocument; - namespace Inkscape { -@@ -174,7 +175,7 @@ private: - void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, - GfxRGB *color, double opacity); - bool _addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading, -- Function *func); -+ _POPPLER_CONST Function *func); - gchar *_createTilingPattern(GfxTilingPattern *tiling_pattern, GfxState *state, - bool is_stroke=false); - // Image/mask creation