mirror of
https://github.com/void-linux/void-packages.git
synced 2025-07-31 18:02:57 +02:00
inkscape: update to 1.4.2
This commit is contained in:
parent
d7975b7d49
commit
7e868cdc1f
8 changed files with 398 additions and 958 deletions
|
@ -1,59 +0,0 @@
|
||||||
From 0399372ec240d23e0e70548237a541f2b5bf0f34 Mon Sep 17 00:00:00 2001
|
|
||||||
From: KrIr17 <elendil.krir17@gmail.com>
|
|
||||||
Date: Tue, 5 Nov 2024 00:40:15 +0100
|
|
||||||
Subject: [PATCH] Fix building with Poppler 24.11
|
|
||||||
|
|
||||||
Poppler 24.11 no longer sets the default value for faceIndex to 0 in
|
|
||||||
`FoFiTrueType::make()` and `FoFiTrueType::load()` [1], so we do it
|
|
||||||
on our end instead.
|
|
||||||
|
|
||||||
Fixes https://gitlab.com/inkscape/inkscape/-/issues/5370
|
|
||||||
|
|
||||||
[1] https://gitlab.freedesktop.org/poppler/poppler/-/commit/94467509a013dd5cf46c942baa598f2b296571f4
|
|
||||||
---
|
|
||||||
.../internal/pdfinput/poppler-cairo-font-engine.cpp | 12 ++++++------
|
|
||||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
|
||||||
index 34a8eed682d..728b1d1aac4 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
|
||||||
+++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
|
||||||
@@ -419,9 +419,9 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
FoFiTrueType *ff;
|
|
||||||
#endif
|
|
||||||
if (!font_data.empty()) {
|
|
||||||
- ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size());
|
|
||||||
+ ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
|
|
||||||
} else {
|
|
||||||
- ff = FoFiTrueType::load(fileName.c_str());
|
|
||||||
+ ff = FoFiTrueType::load(fileName.c_str(), 0);
|
|
||||||
}
|
|
||||||
if (!ff) {
|
|
||||||
goto err2;
|
|
||||||
@@ -444,9 +444,9 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
FoFiTrueType *ff;
|
|
||||||
#endif
|
|
||||||
if (!font_data.empty()) {
|
|
||||||
- ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size());
|
|
||||||
+ ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
|
|
||||||
} else {
|
|
||||||
- ff = FoFiTrueType::load(fileName.c_str());
|
|
||||||
+ ff = FoFiTrueType::load(fileName.c_str(), 0);
|
|
||||||
}
|
|
||||||
if (!ff) {
|
|
||||||
error(errSyntaxError, -1, "failed to load truetype font\n");
|
|
||||||
@@ -512,9 +512,9 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
FoFiTrueType *ff;
|
|
||||||
#endif
|
|
||||||
if (!font_data.empty()) {
|
|
||||||
- ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size());
|
|
||||||
+ ff = FoFiTrueType::make((fontchar)font_data.data(), font_data.size(), 0);
|
|
||||||
} else {
|
|
||||||
- ff = FoFiTrueType::load(fileName.c_str());
|
|
||||||
+ ff = FoFiTrueType::load(fileName.c_str(), 0);
|
|
||||||
}
|
|
||||||
if (ff) {
|
|
||||||
if (ff->isOpenTypeCFF()) {
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
|
@ -1,430 +0,0 @@
|
||||||
From 22304ae8034d067670a9f95022083a75fac92b4c Mon Sep 17 00:00:00 2001
|
|
||||||
From: PBS <pbs3141@gmail.com>
|
|
||||||
Date: Tue, 22 Oct 2024 14:48:31 +0100
|
|
||||||
Subject: [PATCH] Future-proof against poppler 24.10 changes
|
|
||||||
|
|
||||||
---
|
|
||||||
.../internal/pdfinput/pdf-parser.cpp | 120 ++++++++----------
|
|
||||||
src/extension/internal/pdfinput/pdf-parser.h | 4 +-
|
|
||||||
.../pdfinput/poppler-transition-api.h | 6 +
|
|
||||||
3 files changed, 61 insertions(+), 69 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
|
|
||||||
index 97b2909218a..28000a87b0c 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
|
|
||||||
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
|
|
||||||
@@ -817,11 +817,11 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
|
|
||||||
_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 = nullptr;
|
|
||||||
+ std::unique_ptr<GfxColorSpace> blendingColorSpace;
|
|
||||||
GBool isolated = gFalse;
|
|
||||||
GBool knockout = gFalse;
|
|
||||||
if (!_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, "CS").isNull()) {
|
|
||||||
- blendingColorSpace = GfxColorSpace::parse(nullptr, &obj5, nullptr, state);
|
|
||||||
+ blendingColorSpace = std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(nullptr, &obj5, nullptr, state));
|
|
||||||
}
|
|
||||||
_POPPLER_FREE(obj5);
|
|
||||||
if (_POPPLER_CALL_ARGS_DEREF(obj5, obj4.dictLookup, "I").isBool()) {
|
|
||||||
@@ -842,7 +842,7 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- doSoftMask(&obj3, alpha, blendingColorSpace, isolated, knockout, funcs[0], &backdropColor);
|
|
||||||
+ doSoftMask(&obj3, alpha, blendingColorSpace.get(), isolated, knockout, funcs[0], &backdropColor);
|
|
||||||
if (funcs[0]) {
|
|
||||||
delete funcs[0];
|
|
||||||
}
|
|
||||||
@@ -927,9 +927,6 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
|
|
||||||
alpha, transferFunc, backdropColor);
|
|
||||||
--formDepth;
|
|
||||||
|
|
||||||
- if (blendingColorSpace) {
|
|
||||||
- delete blendingColorSpace;
|
|
||||||
- }
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -946,42 +943,43 @@ void PdfParser::opSetRenderingIntent(Object /*args*/[], int /*numArgs*/)
|
|
||||||
*
|
|
||||||
* Maintains a cache for named color spaces to avoid expensive re-parsing.
|
|
||||||
*/
|
|
||||||
-GfxColorSpace *PdfParser::lookupColorSpaceCopy(Object &arg)
|
|
||||||
+std::unique_ptr<GfxColorSpace> PdfParser::lookupColorSpaceCopy(Object &arg)
|
|
||||||
{
|
|
||||||
assert(!arg.isNull());
|
|
||||||
- GfxColorSpace *colorSpace = nullptr;
|
|
||||||
|
|
||||||
if (char const *name = arg.isName() ? arg.getName() : nullptr) {
|
|
||||||
auto const cache_name = std::to_string(formDepth) + "-" + name;
|
|
||||||
- if ((colorSpace = colorSpacesCache[cache_name].get())) {
|
|
||||||
- return colorSpace->copy();
|
|
||||||
+ if (auto cached = colorSpacesCache[cache_name].get()) {
|
|
||||||
+ return std::unique_ptr<GfxColorSpace>(cached->copy());
|
|
||||||
}
|
|
||||||
|
|
||||||
- Object obj = res->lookupColorSpace(name);
|
|
||||||
- if (obj.isNull()) {
|
|
||||||
- colorSpace = GfxColorSpace::parse(res, &arg, nullptr, state);
|
|
||||||
+ std::unique_ptr<GfxColorSpace> colorSpace;
|
|
||||||
+ if (auto obj = res->lookupColorSpace(name); !obj.isNull()) {
|
|
||||||
+ colorSpace = std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &obj, nullptr, state));
|
|
||||||
} else {
|
|
||||||
- colorSpace = GfxColorSpace::parse(res, &obj, nullptr, state);
|
|
||||||
+ colorSpace = std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &arg, nullptr, state));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (colorSpace && colorSpace->getMode() != csPattern) {
|
|
||||||
- colorSpacesCache[cache_name].reset(colorSpace->copy());
|
|
||||||
+ colorSpacesCache[cache_name] = std::unique_ptr<GfxColorSpace>(colorSpace->copy());
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ return colorSpace;
|
|
||||||
} else {
|
|
||||||
// We were passed in an object directly.
|
|
||||||
- colorSpace = GfxColorSpace::parse(res, &arg, nullptr, state);
|
|
||||||
+ return std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(res, &arg, nullptr, state));
|
|
||||||
}
|
|
||||||
- return colorSpace;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Look up pattern/gradients from the GfxResource dictionary
|
|
||||||
*/
|
|
||||||
-GfxPattern *PdfParser::lookupPattern(Object *obj, GfxState *state)
|
|
||||||
+std::unique_ptr<GfxPattern> PdfParser::lookupPattern(Object *obj, GfxState *state)
|
|
||||||
{
|
|
||||||
- if (!obj->isName())
|
|
||||||
- return nullptr;
|
|
||||||
- return res->lookupPattern(obj->getName(), nullptr, state);
|
|
||||||
+ if (!obj->isName()) {
|
|
||||||
+ return {};
|
|
||||||
+ }
|
|
||||||
+ return std::unique_ptr<GfxPattern>(res->lookupPattern(obj->getName(), nullptr, state));
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO not good that numArgs is ignored but args[] is used:
|
|
||||||
@@ -990,7 +988,7 @@ void PdfParser::opSetFillGray(Object args[], int /*numArgs*/)
|
|
||||||
GfxColor color;
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
state->setFillPattern(nullptr);
|
|
||||||
- state->setFillColorSpace(new GfxDeviceGrayColorSpace());
|
|
||||||
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
|
|
||||||
color.c[0] = dblToCol(args[0].getNum());
|
|
||||||
state->setFillColor(&color);
|
|
||||||
builder->updateStyle(state);
|
|
||||||
@@ -1002,7 +1000,7 @@ void PdfParser::opSetStrokeGray(Object args[], int /*numArgs*/)
|
|
||||||
GfxColor color;
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
state->setStrokePattern(nullptr);
|
|
||||||
- state->setStrokeColorSpace(new GfxDeviceGrayColorSpace());
|
|
||||||
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
|
|
||||||
color.c[0] = dblToCol(args[0].getNum());
|
|
||||||
state->setStrokeColor(&color);
|
|
||||||
builder->updateStyle(state);
|
|
||||||
@@ -1015,7 +1013,7 @@ void PdfParser::opSetFillCMYKColor(Object args[], int /*numArgs*/)
|
|
||||||
int i;
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
state->setFillPattern(nullptr);
|
|
||||||
- state->setFillColorSpace(new GfxDeviceCMYKColorSpace());
|
|
||||||
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceCMYKColorSpace>()));
|
|
||||||
for (i = 0; i < 4; ++i) {
|
|
||||||
color.c[i] = dblToCol(args[i].getNum());
|
|
||||||
}
|
|
||||||
@@ -1029,7 +1027,7 @@ void PdfParser::opSetStrokeCMYKColor(Object args[], int /*numArgs*/)
|
|
||||||
GfxColor color;
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
state->setStrokePattern(nullptr);
|
|
||||||
- state->setStrokeColorSpace(new GfxDeviceCMYKColorSpace());
|
|
||||||
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceCMYKColorSpace>()));
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
|
||||||
color.c[i] = dblToCol(args[i].getNum());
|
|
||||||
}
|
|
||||||
@@ -1043,7 +1041,7 @@ void PdfParser::opSetFillRGBColor(Object args[], int /*numArgs*/)
|
|
||||||
GfxColor color;
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
state->setFillPattern(nullptr);
|
|
||||||
- state->setFillColorSpace(new GfxDeviceRGBColorSpace());
|
|
||||||
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceRGBColorSpace>()));
|
|
||||||
for (int i = 0; i < 3; ++i) {
|
|
||||||
color.c[i] = dblToCol(args[i].getNum());
|
|
||||||
}
|
|
||||||
@@ -1056,7 +1054,7 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int /*numArgs*/) {
|
|
||||||
GfxColor color;
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
state->setStrokePattern(nullptr);
|
|
||||||
- state->setStrokeColorSpace(new GfxDeviceRGBColorSpace());
|
|
||||||
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceRGBColorSpace>()));
|
|
||||||
for (int i = 0; i < 3; ++i) {
|
|
||||||
color.c[i] = dblToCol(args[i].getNum());
|
|
||||||
}
|
|
||||||
@@ -1068,14 +1066,14 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int /*numArgs*/) {
|
|
||||||
void PdfParser::opSetFillColorSpace(Object args[], int numArgs)
|
|
||||||
{
|
|
||||||
assert(numArgs >= 1);
|
|
||||||
- GfxColorSpace *colorSpace = lookupColorSpaceCopy(args[0]);
|
|
||||||
+ auto colorSpace = lookupColorSpaceCopy(args[0]);
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
state->setFillPattern(nullptr);
|
|
||||||
|
|
||||||
if (colorSpace) {
|
|
||||||
GfxColor color;
|
|
||||||
- state->setFillColorSpace(colorSpace);
|
|
||||||
colorSpace->getDefaultColor(&color);
|
|
||||||
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
|
|
||||||
state->setFillColor(&color);
|
|
||||||
builder->updateStyle(state);
|
|
||||||
} else {
|
|
||||||
@@ -1089,14 +1087,14 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs)
|
|
||||||
assert(numArgs >= 1);
|
|
||||||
builder->beforeStateChange(state);
|
|
||||||
|
|
||||||
- GfxColorSpace *colorSpace = lookupColorSpaceCopy(args[0]);
|
|
||||||
+ auto colorSpace = lookupColorSpaceCopy(args[0]);
|
|
||||||
|
|
||||||
state->setStrokePattern(nullptr);
|
|
||||||
|
|
||||||
if (colorSpace) {
|
|
||||||
GfxColor color;
|
|
||||||
- state->setStrokeColorSpace(colorSpace);
|
|
||||||
colorSpace->getDefaultColor(&color);
|
|
||||||
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
|
|
||||||
state->setStrokeColor(&color);
|
|
||||||
builder->updateStyle(state);
|
|
||||||
} else {
|
|
||||||
@@ -1159,7 +1157,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) {
|
|
||||||
builder->updateStyle(state);
|
|
||||||
}
|
|
||||||
if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
|
|
||||||
- state->setFillPattern(pattern);
|
|
||||||
+ state->setFillPattern(_POPPLER_CONSUME_UNIQPTR_ARG(pattern));
|
|
||||||
builder->updateStyle(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1202,7 +1200,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) {
|
|
||||||
builder->updateStyle(state);
|
|
||||||
}
|
|
||||||
if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
|
|
||||||
- state->setStrokePattern(pattern);
|
|
||||||
+ state->setStrokePattern(_POPPLER_CONSUME_UNIQPTR_ARG(pattern));
|
|
||||||
builder->updateStyle(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1579,11 +1577,11 @@ void PdfParser::doShadingPatternFillFallback(GfxShadingPattern *sPat,
|
|
||||||
// TODO not good that numArgs is ignored but args[] is used:
|
|
||||||
void PdfParser::opShFill(Object args[], int /*numArgs*/)
|
|
||||||
{
|
|
||||||
- GfxShading *shading = nullptr;
|
|
||||||
GfxPath *savedPath = nullptr;
|
|
||||||
bool savedState = false;
|
|
||||||
|
|
||||||
- if (!(shading = res->lookupShading(args[0].getName(), nullptr, state))) {
|
|
||||||
+ auto shading = std::unique_ptr<GfxShading>(res->lookupShading(args[0].getName(), nullptr, state));
|
|
||||||
+ if (!shading) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1615,19 +1613,19 @@ void PdfParser::opShFill(Object args[], int /*numArgs*/)
|
|
||||||
// do shading type-specific operations
|
|
||||||
switch (shading->getType()) {
|
|
||||||
case 1: // Function-based shading
|
|
||||||
- doFunctionShFill(static_cast<GfxFunctionShading *>(shading));
|
|
||||||
+ doFunctionShFill(static_cast<GfxFunctionShading *>(shading.get()));
|
|
||||||
break;
|
|
||||||
case 2: // Axial shading
|
|
||||||
case 3: // Radial shading
|
|
||||||
- builder->addClippedFill(shading, stateToAffine(state));
|
|
||||||
+ builder->addClippedFill(shading.get(), stateToAffine(state));
|
|
||||||
break;
|
|
||||||
case 4: // Free-form Gouraud-shaded triangle mesh
|
|
||||||
case 5: // Lattice-form Gouraud-shaded triangle mesh
|
|
||||||
- doGouraudTriangleShFill(static_cast<GfxGouraudTriangleShading *>(shading));
|
|
||||||
+ doGouraudTriangleShFill(static_cast<GfxGouraudTriangleShading *>(shading.get()));
|
|
||||||
break;
|
|
||||||
case 6: // Coons patch mesh
|
|
||||||
case 7: // Tensor-product patch mesh
|
|
||||||
- doPatchMeshShFill(static_cast<GfxPatchMeshShading *>(shading));
|
|
||||||
+ doPatchMeshShFill(static_cast<GfxPatchMeshShading *>(shading.get()));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1636,8 +1634,6 @@ void PdfParser::opShFill(Object args[], int /*numArgs*/)
|
|
||||||
restoreState();
|
|
||||||
state->setPath(savedPath);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- delete shading;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PdfParser::doFunctionShFill(GfxFunctionShading *shading) {
|
|
||||||
@@ -2528,7 +2524,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// get color space and color map
|
|
||||||
- GfxColorSpace *colorSpace;
|
|
||||||
+ std::unique_ptr<GfxColorSpace> colorSpace;
|
|
||||||
_POPPLER_CALL_ARGS(obj1, dict->lookup, "ColorSpace");
|
|
||||||
if (obj1.isNull()) {
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
@@ -2537,13 +2533,11 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
if (!obj1.isNull()) {
|
|
||||||
colorSpace = lookupColorSpaceCopy(obj1);
|
|
||||||
} else if (csMode == streamCSDeviceGray) {
|
|
||||||
- colorSpace = new GfxDeviceGrayColorSpace();
|
|
||||||
+ colorSpace = std::make_unique<GfxDeviceGrayColorSpace>();
|
|
||||||
} else if (csMode == streamCSDeviceRGB) {
|
|
||||||
- colorSpace = new GfxDeviceRGBColorSpace();
|
|
||||||
+ colorSpace = std::make_unique<GfxDeviceRGBColorSpace>();
|
|
||||||
} else if (csMode == streamCSDeviceCMYK) {
|
|
||||||
- colorSpace = new GfxDeviceCMYKColorSpace();
|
|
||||||
- } else {
|
|
||||||
- colorSpace = nullptr;
|
|
||||||
+ colorSpace = std::make_unique<GfxDeviceCMYKColorSpace>();
|
|
||||||
}
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
if (!colorSpace) {
|
|
||||||
@@ -2554,10 +2548,9 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
_POPPLER_CALL_ARGS(obj1, dict->lookup, "D");
|
|
||||||
}
|
|
||||||
- GfxImageColorMap *colorMap = new GfxImageColorMap(bits, &obj1, colorSpace);
|
|
||||||
+ auto colorMap = std::make_unique<GfxImageColorMap>(bits, &obj1, _POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
if (!colorMap->isOk()) {
|
|
||||||
- delete colorMap;
|
|
||||||
goto err1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2568,7 +2561,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
int maskWidth = 0;
|
|
||||||
int maskHeight = 0;
|
|
||||||
maskInvert = gFalse;
|
|
||||||
- GfxImageColorMap *maskColorMap = nullptr;
|
|
||||||
+ std::unique_ptr<GfxImageColorMap> maskColorMap;
|
|
||||||
_POPPLER_CALL_ARGS(maskObj, dict->lookup, "Mask");
|
|
||||||
_POPPLER_CALL_ARGS(smaskObj, dict->lookup, "SMask");
|
|
||||||
Dict* maskDict;
|
|
||||||
@@ -2624,7 +2617,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
_POPPLER_CALL_ARGS(obj1, maskDict->lookup, "CS");
|
|
||||||
}
|
|
||||||
- GfxColorSpace *maskColorSpace = lookupColorSpaceCopy(obj1);
|
|
||||||
+ auto maskColorSpace = lookupColorSpaceCopy(obj1);
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) {
|
|
||||||
goto err1;
|
|
||||||
@@ -2634,10 +2627,9 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
_POPPLER_CALL_ARGS(obj1, maskDict->lookup, "D");
|
|
||||||
}
|
|
||||||
- maskColorMap = new GfxImageColorMap(maskBits, &obj1, maskColorSpace);
|
|
||||||
+ maskColorMap = std::make_unique<GfxImageColorMap>(maskBits, &obj1, _POPPLER_CONSUME_UNIQPTR_ARG(maskColorSpace));
|
|
||||||
_POPPLER_FREE(obj1);
|
|
||||||
if (!maskColorMap->isOk()) {
|
|
||||||
- delete maskColorMap;
|
|
||||||
goto err1;
|
|
||||||
}
|
|
||||||
//~ handle the Matte entry
|
|
||||||
@@ -2718,17 +2710,15 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
|
|
||||||
// draw it
|
|
||||||
if (haveSoftMask) {
|
|
||||||
- builder->addSoftMaskedImage(state, str, width, height, colorMap, interpolate,
|
|
||||||
- maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate);
|
|
||||||
- delete maskColorMap;
|
|
||||||
+ builder->addSoftMaskedImage(state, str, width, height, colorMap.get(), interpolate,
|
|
||||||
+ maskStr, maskWidth, maskHeight, maskColorMap.get(), maskInterpolate);
|
|
||||||
} else if (haveExplicitMask) {
|
|
||||||
- builder->addMaskedImage(state, str, width, height, colorMap, interpolate,
|
|
||||||
+ builder->addMaskedImage(state, str, width, height, colorMap.get(), interpolate,
|
|
||||||
maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate);
|
|
||||||
} else {
|
|
||||||
- builder->addImage(state, str, width, height, colorMap, interpolate,
|
|
||||||
- haveColorKeyMask ? maskColors : static_cast<int *>(nullptr));
|
|
||||||
+ builder->addImage(state, str, width, height, colorMap.get(), interpolate,
|
|
||||||
+ haveColorKeyMask ? maskColors : nullptr);
|
|
||||||
}
|
|
||||||
- delete colorMap;
|
|
||||||
|
|
||||||
_POPPLER_FREE(maskObj);
|
|
||||||
_POPPLER_FREE(smaskObj);
|
|
||||||
@@ -2746,7 +2736,6 @@ void PdfParser::doForm(Object *str, double *offset)
|
|
||||||
{
|
|
||||||
Dict *dict;
|
|
||||||
GBool transpGroup, isolated, knockout;
|
|
||||||
- GfxColorSpace *blendingColorSpace;
|
|
||||||
Object matrixObj, bboxObj;
|
|
||||||
double m[6], bbox[4];
|
|
||||||
Object resObj;
|
|
||||||
@@ -2812,12 +2801,12 @@ void PdfParser::doForm(Object *str, double *offset)
|
|
||||||
|
|
||||||
// check for a transparency group
|
|
||||||
transpGroup = isolated = knockout = gFalse;
|
|
||||||
- blendingColorSpace = nullptr;
|
|
||||||
+ std::unique_ptr<GfxColorSpace> blendingColorSpace;
|
|
||||||
if (_POPPLER_CALL_ARGS_DEREF(obj1, dict->lookup, "Group").isDict()) {
|
|
||||||
if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "S").isName("Transparency")) {
|
|
||||||
transpGroup = gTrue;
|
|
||||||
if (!_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "CS").isNull()) {
|
|
||||||
- blendingColorSpace = GfxColorSpace::parse(nullptr, &obj3, nullptr, state);
|
|
||||||
+ blendingColorSpace = std::unique_ptr<GfxColorSpace>(GfxColorSpace::parse(nullptr, &obj3, nullptr, state));
|
|
||||||
}
|
|
||||||
_POPPLER_FREE(obj3);
|
|
||||||
if (_POPPLER_CALL_ARGS_DEREF(obj3, obj1.dictLookup, "I").isBool()) {
|
|
||||||
@@ -2835,12 +2824,9 @@ void PdfParser::doForm(Object *str, double *offset)
|
|
||||||
|
|
||||||
// draw it
|
|
||||||
++formDepth;
|
|
||||||
- doForm1(str, resDict, m, bbox, transpGroup, gFalse, blendingColorSpace, isolated, knockout);
|
|
||||||
+ doForm1(str, resDict, m, bbox, transpGroup, gFalse, blendingColorSpace.get(), isolated, knockout);
|
|
||||||
--formDepth;
|
|
||||||
|
|
||||||
- if (blendingColorSpace) {
|
|
||||||
- delete blendingColorSpace;
|
|
||||||
- }
|
|
||||||
_POPPLER_FREE(resObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h
|
|
||||||
index c7c10caefed..8325ea24364 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/pdf-parser.h
|
|
||||||
+++ b/src/extension/internal/pdfinput/pdf-parser.h
|
|
||||||
@@ -137,7 +137,7 @@ public:
|
|
||||||
void loadPatternColorProfiles(Dict *resources);
|
|
||||||
void loadColorProfile();
|
|
||||||
void loadColorSpaceProfile(GfxColorSpace *space, Object *obj);
|
|
||||||
- GfxPattern *lookupPattern(Object *obj, GfxState *state);
|
|
||||||
+ std::unique_ptr<GfxPattern> lookupPattern(Object *obj, GfxState *state);
|
|
||||||
|
|
||||||
std::shared_ptr<CairoFontEngine> getFontEngine();
|
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ private:
|
|
||||||
//! Caches color spaces by name
|
|
||||||
std::map<std::string, std::unique_ptr<GfxColorSpace>> colorSpacesCache;
|
|
||||||
|
|
||||||
- GfxColorSpace *lookupColorSpaceCopy(Object &);
|
|
||||||
+ std::unique_ptr<GfxColorSpace> lookupColorSpaceCopy(Object &);
|
|
||||||
|
|
||||||
void setDefaultApproximationPrecision(); // init color deltas
|
|
||||||
void pushOperator(const char *name);
|
|
||||||
diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
index 481aefadf46..8f03aa17779 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
@@ -15,6 +15,12 @@
|
|
||||||
#include <glib/poppler-features.h>
|
|
||||||
#include <poppler/UTF.h>
|
|
||||||
|
|
||||||
+#if POPPLER_CHECK_VERSION(24, 10, 0)
|
|
||||||
+#define _POPPLER_CONSUME_UNIQPTR_ARG(value) std::move(value)
|
|
||||||
+#else
|
|
||||||
+#define _POPPLER_CONSUME_UNIQPTR_ARG(value) value.release()
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#if POPPLER_CHECK_VERSION(24, 5, 0)
|
|
||||||
#define _POPPLER_HAS_UNICODE_BOM(value) (hasUnicodeByteOrderMark(value->toStr()))
|
|
||||||
#define _POPPLER_HAS_UNICODE_BOMLE(value) (hasUnicodeByteOrderMarkLE(value->toStr()))
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
From 874dcfbd303bc7a1bddb6f34aebbb4dba8eda771 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rafael Siejakowski <rs@rs-math.net>
|
|
||||||
Date: Sun, 10 Nov 2024 13:20:48 +0100
|
|
||||||
Subject: [PATCH] Fix Poppler private includes
|
|
||||||
|
|
||||||
In the PDF parser, include the Poppler private headers using
|
|
||||||
the angular brackets and the poppler/ directory prefix, as is
|
|
||||||
done in other places in the code which need Poppler's private
|
|
||||||
headers.
|
|
||||||
|
|
||||||
This fixes build against Poppler installed at a custom path.
|
|
||||||
---
|
|
||||||
src/extension/internal/pdfinput/pdf-parser.h | 7 +++----
|
|
||||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h
|
|
||||||
index 8325ea24364..7d9189dfc0a 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/pdf-parser.h
|
|
||||||
+++ b/src/extension/internal/pdfinput/pdf-parser.h
|
|
||||||
@@ -24,13 +24,12 @@
|
|
||||||
#pragma interface
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#include "glib/poppler-features.h"
|
|
||||||
-#include "Object.h"
|
|
||||||
-
|
|
||||||
+#include <2geom/affine.h>
|
|
||||||
+#include <glib/poppler-features.h>
|
|
||||||
#include <map>
|
|
||||||
#include <memory>
|
|
||||||
+#include <poppler/Object.h>
|
|
||||||
#include <string>
|
|
||||||
-#include <2geom/affine.h>
|
|
||||||
|
|
||||||
#define Operator Operator_Gfx
|
|
||||||
#include <poppler/Gfx.h>
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
From c9046810d899a408bfbd489aad91872b1203ee6d Mon Sep 17 00:00:00 2001
|
|
||||||
From: KrIr17 <elendil.krir17@gmail.com>
|
|
||||||
Date: Thu, 5 Dec 2024 15:03:47 +0100
|
|
||||||
Subject: [PATCH] Fix building with poppler 24.12.0
|
|
||||||
|
|
||||||
Fixes https://gitlab.com/inkscape/inkscape/-/issues/5415
|
|
||||||
---
|
|
||||||
src/extension/internal/pdfinput/pdf-parser.cpp | 4 +++-
|
|
||||||
src/extension/internal/pdfinput/poppler-transition-api.h | 6 ++++++
|
|
||||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
|
|
||||||
index 28000a87b0c..9ea30b90a48 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
|
|
||||||
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
|
|
||||||
@@ -2403,6 +2403,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
int bits;
|
|
||||||
GBool interpolate;
|
|
||||||
StreamColorSpaceMode csMode;
|
|
||||||
+ GBool hasAlpha;
|
|
||||||
GBool mask;
|
|
||||||
GBool invert;
|
|
||||||
Object maskObj, smaskObj;
|
|
||||||
@@ -2414,7 +2415,8 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
|
|
||||||
// get info from the stream
|
|
||||||
bits = 0;
|
|
||||||
csMode = streamCSNone;
|
|
||||||
- str->getImageParams(&bits, &csMode);
|
|
||||||
+ hasAlpha = false;
|
|
||||||
+ str->_POPPLER_GET_IMAGE_PARAMS(&bits, &csMode, &hasAlpha);
|
|
||||||
|
|
||||||
// get stream dict
|
|
||||||
dict = str->getDict();
|
|
||||||
diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
index 8f03aa17779..b7a54828e74 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
@@ -39,6 +39,12 @@
|
|
||||||
#define _POPPLER_FUNCTION_TYPE_STITCHING 3
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if POPPLER_CHECK_VERSION(24,12,0)
|
|
||||||
+#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode, hasAlpha)
|
|
||||||
+#else
|
|
||||||
+#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#if POPPLER_CHECK_VERSION(22, 4, 0)
|
|
||||||
#define _POPPLER_FONTPTR_TO_GFX8(font_ptr) ((Gfx8BitFont *)font_ptr.get())
|
|
||||||
#else
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
|
@ -1,195 +0,0 @@
|
||||||
From 6c330d56fdf54cb002b8a84b33f73d2a8dd40879 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tavmjong Bah <tavmjong@free.fr>
|
|
||||||
Date: Fri, 8 Nov 2024 15:03:12 +0100
|
|
||||||
Subject: [PATCH] Fixes two problems related to emojis in PDF import.
|
|
||||||
|
|
||||||
1. UTF-8 conversion.
|
|
||||||
|
|
||||||
If a "ToUnicode" table is included in an OpenType font in a PDF
|
|
||||||
file, one can find the Unicode code point that corresponds to a
|
|
||||||
given glyph (or group of glyphs). This is often the only way one
|
|
||||||
can reconstruct text from a PDF (which might contain only glyphs
|
|
||||||
and glyph positions). For Emoji, the code points are outside the
|
|
||||||
"Basic Plane" (code points that can be encode by four or fewer
|
|
||||||
hexadecimal digits) and in are located the "Supplementary
|
|
||||||
Multilingual Plane", a.k.a. "Plane 1". Code points in "Plane 1" are
|
|
||||||
represented by a hexadecimal number of the form "1xxxx", where 'x'
|
|
||||||
is any hex digit.
|
|
||||||
|
|
||||||
Inkscape's PDF import code takes a Unicode code point and converts
|
|
||||||
it to its UTF-8 representation. This code assumes that the code
|
|
||||||
point can be represented by a gunichar2 which is typedef'ed from a
|
|
||||||
guint16. The glib function g_utf16_to_utf8 is then used for the
|
|
||||||
conversion. This in incorrect: a single guint16 can only represent
|
|
||||||
a 4 hex-digit code point and then not all possible values (some
|
|
||||||
values are used to indicate that a second 16-bit value is being used
|
|
||||||
to to enable encoding a code point outside the basic plane).
|
|
||||||
|
|
||||||
We already use std::wstring_convert<> and std::codecvt<> earlier in
|
|
||||||
the same function to build up a string to store the original text
|
|
||||||
in the 'aria-label' attribute. I changed the code to reuse that
|
|
||||||
result. Note that these are deprecated and will be removed in C++26
|
|
||||||
so we'll eventually need to find a different solution.
|
|
||||||
|
|
||||||
2. Empty paths.
|
|
||||||
|
|
||||||
Emoji fonts usually have color. There are four competing methods of
|
|
||||||
embedding color font data in an OpenType font. Two of these use
|
|
||||||
bitmaps. If a font has only bitmap glyph data then there is no
|
|
||||||
vector data to build a path. If there is no path, Inkscape's
|
|
||||||
current code returns 'nullptr' instead of a pointer to a Path
|
|
||||||
node. This triggers an assert. Simply removing the assert leads to
|
|
||||||
other problems down the line. The simplest solution is to return a
|
|
||||||
Path node with an empty "d" attribute. This also allows one to
|
|
||||||
store the original text in the "aria-label" attribute of the Path
|
|
||||||
node.
|
|
||||||
|
|
||||||
In the future, we should be able to render bitmaps from fonts in
|
|
||||||
the same way the same way that we render SVG OpenType fonts (which
|
|
||||||
caches the glyphs as bitmaps).
|
|
||||||
|
|
||||||
Unfixed problems:
|
|
||||||
|
|
||||||
If the "Noto-Color-Emoji" font is present, it will be used for
|
|
||||||
rendering emoji even if "Noto-Emoji" or "Symbola" is specified. It
|
|
||||||
will also be used as a fallback font for rendering emoji.
|
|
||||||
"Noto-Color-Emoji" has to "glyf" table and thus lacks vectorized
|
|
||||||
paths. This leads to empty paths. It would be good to block the use
|
|
||||||
of "Noto-Color-Emoji" in this case. It's not clear how easy it
|
|
||||||
would be to do this.
|
|
||||||
|
|
||||||
What is even stranger is that the terminal will not show an Emoji
|
|
||||||
if "Noto-Color-Emoji" is not installed even though the glyph that
|
|
||||||
is shown is not from "Noto-Color-Emoji"! (It's from "Symbola".)
|
|
||||||
|
|
||||||
There appears to be incorrect logic in SvgBuider::_flushTextPath().
|
|
||||||
If the style changes inside the function, the node existing node is
|
|
||||||
replaced, effectively orphaning the previous node. Whether this
|
|
||||||
actually happens in PDF input is unknown.
|
|
||||||
---
|
|
||||||
.../internal/pdfinput/svg-builder.cpp | 54 +++++++++----------
|
|
||||||
1 file changed, 26 insertions(+), 28 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
|
|
||||||
index 73f57f04952..bb2ce5145e8 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/svg-builder.cpp
|
|
||||||
+++ b/src/extension/internal/pdfinput/svg-builder.cpp
|
|
||||||
@@ -1250,7 +1250,7 @@ void SvgBuilder::updateFont(GfxState *state, std::shared_ptr<CairoFont> cairo_fo
|
|
||||||
TRACE(("updateFont()\n"));
|
|
||||||
updateTextMatrix(state, flip); // Ensure that we have a text matrix built
|
|
||||||
|
|
||||||
- auto font = state->getFont();
|
|
||||||
+ auto font = state->getFont(); // GfxFont
|
|
||||||
auto font_id = font->getID()->num;
|
|
||||||
|
|
||||||
auto new_font_size = state->getFontSize();
|
|
||||||
@@ -1711,6 +1711,10 @@ void SvgBuilder::_setTextStyle(Inkscape::XML::Node *node, GfxState *state, SPCSS
|
|
||||||
/**
|
|
||||||
* Renders the text as a path object using cairo and returns the node object.
|
|
||||||
*
|
|
||||||
+ * If the path is empty (e.g. due to trying to render a color bitmap font),
|
|
||||||
+ * return path node with empty "d" attribute. The aria attribute will still
|
|
||||||
+ * contain the original text.
|
|
||||||
+ *
|
|
||||||
* cairo_font - The font that cairo can use to convert text to path.
|
|
||||||
* font_size - The size of the text when drawing the path.
|
|
||||||
* transform - The matrix which will place the text on the page, this is critical
|
|
||||||
@@ -1722,8 +1726,13 @@ Inkscape::XML::Node *SvgBuilder::_renderText(std::shared_ptr<CairoFont> cairo_fo
|
|
||||||
const Geom::Affine &transform,
|
|
||||||
cairo_glyph_t *cairo_glyphs, unsigned int count)
|
|
||||||
{
|
|
||||||
- if (!cairo_glyphs || !cairo_font || _aria_label.empty())
|
|
||||||
- return nullptr;
|
|
||||||
+ Inkscape::XML::Node *path = _addToContainer("svg:path");
|
|
||||||
+ path->setAttribute("d", "");
|
|
||||||
+
|
|
||||||
+ if (!cairo_glyphs || !cairo_font || _aria_label.empty()) {
|
|
||||||
+ std::cerr << "SvgBuilder::_renderText: Invalid argument!" << std::endl;
|
|
||||||
+ return path;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
// The surface isn't actually used, no rendering in cairo takes place.
|
|
||||||
cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, _width, _height);
|
|
||||||
@@ -1738,16 +1747,17 @@ Inkscape::XML::Node *SvgBuilder::_renderText(std::shared_ptr<CairoFont> cairo_fo
|
|
||||||
|
|
||||||
// Failing to render text.
|
|
||||||
if (!pathv) {
|
|
||||||
- g_warning("Failed to render PDF text!");
|
|
||||||
- return nullptr;
|
|
||||||
+ std::cerr << "SvgBuilder::_renderText: Failed to render PDF text! " << _aria_label << std::endl;
|
|
||||||
+ return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto textpath = sp_svg_write_path(*pathv);
|
|
||||||
- if (textpath.empty())
|
|
||||||
- return nullptr;
|
|
||||||
-
|
|
||||||
- Inkscape::XML::Node *path = _addToContainer("svg:path");
|
|
||||||
path->setAttribute("d", textpath);
|
|
||||||
+
|
|
||||||
+ if (textpath.empty()) {
|
|
||||||
+ std::cerr << "SvgBuilder::_renderText: Empty path! " << _aria_label << std::endl;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1785,7 +1795,7 @@ void SvgBuilder::endString(GfxState *state)
|
|
||||||
* dx, dy: Advance of glyph.
|
|
||||||
* originX, originY
|
|
||||||
* code: 8-bit char code, 16 bit CID, or Unicode of glyph.
|
|
||||||
- * u: Unicode mapping of character.
|
|
||||||
+ * u: Unicode mapping of character. "Unicode" is an unsigned int.
|
|
||||||
*/
|
|
||||||
void SvgBuilder::addChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY,
|
|
||||||
CharCode code, int /*nBytes*/, Unicode const *u, int uLen)
|
|
||||||
@@ -1801,9 +1811,13 @@ void SvgBuilder::addChar(GfxState *state, double x, double y, double dx, double
|
|
||||||
}
|
|
||||||
_aria_space = false;
|
|
||||||
|
|
||||||
+ std::string utf8_code;
|
|
||||||
static std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> conv1;
|
|
||||||
+ // Note std::wstring_convert and std::codecvt_utf are deprecated and will be removed in C++26.
|
|
||||||
if (u) {
|
|
||||||
- _aria_label += conv1.to_bytes(*u);
|
|
||||||
+ // 'u' maybe null if there is not a "ToUnicode" table in the PDF!
|
|
||||||
+ utf8_code = conv1.to_bytes(*u);
|
|
||||||
+ _aria_label += utf8_code;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Skip control characters, found in LaTeX generated PDFs
|
|
||||||
@@ -1835,6 +1849,7 @@ void SvgBuilder::addChar(GfxState *state, double x, double y, double dx, double
|
|
||||||
}
|
|
||||||
|
|
||||||
SvgGlyph new_glyph;
|
|
||||||
+ new_glyph.code = utf8_code;
|
|
||||||
new_glyph.is_space = is_space;
|
|
||||||
new_glyph.delta = delta;
|
|
||||||
new_glyph.position = Geom::Point( x - originX, y - originY );
|
|
||||||
@@ -1849,23 +1864,6 @@ void SvgBuilder::addChar(GfxState *state, double x, double y, double dx, double
|
|
||||||
}
|
|
||||||
_text_position += delta;
|
|
||||||
|
|
||||||
- // Convert the character to UTF-8 since that's our SVG document's encoding
|
|
||||||
- {
|
|
||||||
- gunichar2 uu[8] = {0};
|
|
||||||
-
|
|
||||||
- for (int i = 0; i < uLen; i++) {
|
|
||||||
- uu[i] = u[i];
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- gchar *tmp = g_utf16_to_utf8(uu, uLen, nullptr, nullptr, nullptr);
|
|
||||||
- if ( tmp && *tmp ) {
|
|
||||||
- new_glyph.code = tmp;
|
|
||||||
- } else {
|
|
||||||
- new_glyph.code.clear();
|
|
||||||
- }
|
|
||||||
- g_free(tmp);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
// Copy current style if it has changed since the previous glyph
|
|
||||||
if (_invalidated_style || _glyphs.empty()) {
|
|
||||||
_invalidated_style = false;
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
395
srcpkgs/inkscape/patches/fix_poppler_25.06.0.patch
Normal file
395
srcpkgs/inkscape/patches/fix_poppler_25.06.0.patch
Normal file
|
@ -0,0 +1,395 @@
|
||||||
|
From 97bd8f29a61e691ceea98ca2444b974cf4256ae0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rafael Siejakowski <rs@rs-math.net>
|
||||||
|
Date: Sun, 8 Jun 2025 21:30:44 +0200
|
||||||
|
Subject: [PATCH 1/2] Fix build against Poppler 25.06
|
||||||
|
|
||||||
|
Accommodate for the private API change, whereby an array of pointers
|
||||||
|
has been replaced with a vector of unique_ptr.
|
||||||
|
|
||||||
|
Backported from MR 7261
|
||||||
|
https://gitlab.com/inkscape/inkscape/-/merge_requests/7261
|
||||||
|
|
||||||
|
Fixes https://gitlab.com/inkscape/inkscape/-/issues/5836
|
||||||
|
---
|
||||||
|
.../internal/pdfinput/pdf-parser.cpp | 23 +++++++++++--------
|
||||||
|
.../pdfinput/poppler-transition-api.h | 12 ++++++++++
|
||||||
|
2 files changed, 25 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
|
||||||
|
index 01d7bf6ef0e..0d31eda16f4 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
|
||||||
|
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
+#include <memory>
|
||||||
|
#include <mutex> // std::call_once()
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
@@ -686,7 +687,6 @@ void PdfParser::opSetLineWidth(Object args[], int /*numArgs*/)
|
||||||
|
void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
|
||||||
|
{
|
||||||
|
Object obj1, obj2, obj3, obj4, obj5;
|
||||||
|
- Function *funcs[4] = {nullptr, nullptr, nullptr, nullptr};
|
||||||
|
GfxColor backdropColor;
|
||||||
|
GBool haveBackdropColor = gFalse;
|
||||||
|
GBool alpha = gFalse;
|
||||||
|
@@ -744,13 +744,14 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
|
||||||
|
state->setLineWidth(obj2.getNum());
|
||||||
|
}
|
||||||
|
|
||||||
|
+ _POPPLER_DECLARE_TRANSFER_FUNCTION_VECTOR(funcs);
|
||||||
|
+
|
||||||
|
// transfer function
|
||||||
|
if (_POPPLER_CALL_ARGS_DEREF(obj2, obj1.dictLookup, "TR2").isNull()) {
|
||||||
|
_POPPLER_CALL_ARGS(obj2, obj1.dictLookup, "TR");
|
||||||
|
}
|
||||||
|
if (obj2.isName(const_cast<char *>("Default")) || obj2.isName(const_cast<char *>("Identity"))) {
|
||||||
|
- funcs[0] = funcs[1] = funcs[2] = funcs[3] = nullptr;
|
||||||
|
- state->setTransfer(funcs);
|
||||||
|
+ state->setTransfer(std::move(funcs));
|
||||||
|
} else if (obj2.isArray() && obj2.arrayGetLength() == 4) {
|
||||||
|
int pos = 4;
|
||||||
|
for (int i = 0; i < 4; ++i) {
|
||||||
|
@@ -763,12 +764,14 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
|
||||||
|
}
|
||||||
|
_POPPLER_FREE(obj3);
|
||||||
|
if (pos == 4) {
|
||||||
|
- state->setTransfer(funcs);
|
||||||
|
+ state->setTransfer(std::move(funcs));
|
||||||
|
}
|
||||||
|
} else if (obj2.isName() || obj2.isDict() || obj2.isStream()) {
|
||||||
|
if ((funcs[0] = Function::parse(&obj2))) {
|
||||||
|
- funcs[1] = funcs[2] = funcs[3] = nullptr;
|
||||||
|
- state->setTransfer(funcs);
|
||||||
|
+ funcs[1] = nullptr;
|
||||||
|
+ funcs[2] = nullptr;
|
||||||
|
+ funcs[3] = nullptr;
|
||||||
|
+ state->setTransfer(std::move(funcs));
|
||||||
|
}
|
||||||
|
} else if (!obj2.isNull()) {
|
||||||
|
error(errSyntaxError, getPos(), "Invalid transfer function in ExtGState");
|
||||||
|
@@ -790,8 +793,7 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
|
||||||
|
funcs[0] = Function::parse(&obj3);
|
||||||
|
if (funcs[0]->getInputSize() != 1 || funcs[0]->getOutputSize() != 1) {
|
||||||
|
error(errSyntaxError, getPos(), "Invalid transfer function in soft mask in ExtGState");
|
||||||
|
- delete funcs[0];
|
||||||
|
- funcs[0] = nullptr;
|
||||||
|
+ _POPPLER_DELETE_TRANSFER_FUNCTION(funcs[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_POPPLER_FREE(obj3);
|
||||||
|
@@ -835,9 +837,10 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- doSoftMask(&obj3, alpha, blendingColorSpace.get(), isolated, knockout, funcs[0], &backdropColor);
|
||||||
|
+ doSoftMask(&obj3, alpha, blendingColorSpace.get(), isolated, knockout,
|
||||||
|
+ _POPPLER_GET_TRANSFER_FUNCTION_POINTER(funcs[0]), &backdropColor);
|
||||||
|
if (funcs[0]) {
|
||||||
|
- delete funcs[0];
|
||||||
|
+ _POPPLER_DELETE_TRANSFER_FUNCTION(funcs[0]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
error(errSyntaxError, getPos(), "Invalid soft mask in ExtGState - missing group");
|
||||||
|
diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
|
||||||
|
index a67132ba6bd..d04412757bc 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/poppler-transition-api.h
|
||||||
|
+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
|
||||||
|
@@ -15,6 +15,18 @@
|
||||||
|
#include <glib/poppler-features.h>
|
||||||
|
#include <poppler/UTF.h>
|
||||||
|
|
||||||
|
+#if POPPLER_CHECK_VERSION(25, 6, 0)
|
||||||
|
+#define _POPPLER_DECLARE_TRANSFER_FUNCTION_VECTOR(name) std::vector<std::unique_ptr<Function>> name(4)
|
||||||
|
+#define _POPPLER_DELETE_TRANSFER_FUNCTION(name) name.reset()
|
||||||
|
+#define _POPPLER_GET_TRANSFER_FUNCTION_POINTER(name) name.get()
|
||||||
|
+#else
|
||||||
|
+#define _POPPLER_DECLARE_TRANSFER_FUNCTION_VECTOR(name) Function *name[4] = {}
|
||||||
|
+#define _POPPLER_DELETE_TRANSFER_FUNCTION(name) \
|
||||||
|
+ delete name; \
|
||||||
|
+ name = nullptr
|
||||||
|
+#define _POPPLER_GET_TRANSFER_FUNCTION_POINTER(name) name
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#if POPPLER_CHECK_VERSION(25,2,0)
|
||||||
|
#define _POPPLER_GET_CODE_TO_GID_MAP(ff, len) getCodeToGIDMap(ff)
|
||||||
|
#define _POPPLER_GET_CID_TO_GID_MAP(len) getCIDToGIDMap()
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
||||||
|
|
||||||
|
From b4fcfc7969329513afa83e8c0cf52e3e36eae041 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rafael Siejakowski <rs@rs-math.net>
|
||||||
|
Date: Mon, 9 Jun 2025 13:51:59 +0200
|
||||||
|
Subject: [PATCH 2/2] Fix includes in PDF input extensions
|
||||||
|
|
||||||
|
This commit fixes a build error against a non-system libpoppler.
|
||||||
|
|
||||||
|
The include directives referencing Poppler's private headers are "system"
|
||||||
|
includes, so they should use angular brackets. The path prefix "poppler/"
|
||||||
|
is necessary to ensure they work correctly against a custom Poppler
|
||||||
|
installation.
|
||||||
|
|
||||||
|
In addition, several includes of lib2geom are also converted to angular
|
||||||
|
brackets. A handful of unused includes are removed.
|
||||||
|
---
|
||||||
|
.../internal/pdfinput/pdf-parser.cpp | 42 +++++++++----------
|
||||||
|
src/extension/internal/pdfinput/pdf-parser.h | 9 ++--
|
||||||
|
src/extension/internal/pdfinput/pdf-utils.h | 9 ++--
|
||||||
|
.../pdfinput/poppler-cairo-font-engine.cpp | 13 +++---
|
||||||
|
.../pdfinput/poppler-cairo-font-engine.h | 4 +-
|
||||||
|
.../internal/pdfinput/poppler-utils.cpp | 8 ++--
|
||||||
|
.../internal/pdfinput/svg-builder.cpp | 28 ++++++-------
|
||||||
|
src/extension/internal/pdfinput/svg-builder.h | 4 +-
|
||||||
|
8 files changed, 56 insertions(+), 61 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
|
||||||
|
index 0d31eda16f4..0773e389085 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
|
||||||
|
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
|
||||||
|
@@ -22,42 +22,40 @@
|
||||||
|
#pragma implementation
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#include <2geom/transforms.h>
|
||||||
|
#include <cmath>
|
||||||
|
-#include <cstddef>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
+#include <glib/poppler-features.h>
|
||||||
|
+#include <goo/GooString.h>
|
||||||
|
+#include <goo/gmem.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <mutex> // std::call_once()
|
||||||
|
+#include <poppler/Annot.h>
|
||||||
|
+#include <poppler/Array.h>
|
||||||
|
+#include <poppler/CharTypes.h>
|
||||||
|
+#include <poppler/Dict.h>
|
||||||
|
+#include <poppler/Error.h>
|
||||||
|
+#include <poppler/Gfx.h>
|
||||||
|
+#include <poppler/GfxFont.h>
|
||||||
|
+#include <poppler/GfxState.h>
|
||||||
|
+#include <poppler/GlobalParams.h>
|
||||||
|
+#include <poppler/Lexer.h>
|
||||||
|
+#include <poppler/Object.h>
|
||||||
|
+#include <poppler/OutputDev.h>
|
||||||
|
+#include <poppler/PDFDoc.h>
|
||||||
|
+#include <poppler/Page.h>
|
||||||
|
+#include <poppler/Parser.h>
|
||||||
|
+#include <poppler/Stream.h>
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
-#include <2geom/transforms.h>
|
||||||
|
|
||||||
|
-#include "Annot.h"
|
||||||
|
-#include "Array.h"
|
||||||
|
-#include "CharTypes.h"
|
||||||
|
-#include "Dict.h"
|
||||||
|
-#include "Error.h"
|
||||||
|
-#include "Gfx.h"
|
||||||
|
-#include "GfxFont.h"
|
||||||
|
-#include "GfxState.h"
|
||||||
|
-#include "GlobalParams.h"
|
||||||
|
-#include "Lexer.h"
|
||||||
|
-#include "Object.h"
|
||||||
|
-#include "OutputDev.h"
|
||||||
|
-#include "PDFDoc.h"
|
||||||
|
-#include "Page.h"
|
||||||
|
-#include "Parser.h"
|
||||||
|
-#include "Stream.h"
|
||||||
|
-#include "glib/poppler-features.h"
|
||||||
|
-#include "goo/GooString.h"
|
||||||
|
-#include "goo/gmem.h"
|
||||||
|
#include "pdf-utils.h"
|
||||||
|
#include "poppler-cairo-font-engine.h"
|
||||||
|
#include "poppler-transition-api.h"
|
||||||
|
#include "poppler-utils.h"
|
||||||
|
#include "svg-builder.h"
|
||||||
|
-#include "util/units.h"
|
||||||
|
|
||||||
|
// the MSVC math.h doesn't define this
|
||||||
|
#ifndef M_PI
|
||||||
|
diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h
|
||||||
|
index 99a205d186d..2c3a57bf50c 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/pdf-parser.h
|
||||||
|
+++ b/src/extension/internal/pdfinput/pdf-parser.h
|
||||||
|
@@ -25,16 +25,15 @@
|
||||||
|
#pragma interface
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#include "glib/poppler-features.h"
|
||||||
|
-#include "Object.h"
|
||||||
|
-
|
||||||
|
+#include <2geom/affine.h>
|
||||||
|
+#include <glib/poppler-features.h>
|
||||||
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
|
+#include <poppler/Object.h>
|
||||||
|
#include <string>
|
||||||
|
-#include <2geom/affine.h>
|
||||||
|
|
||||||
|
#define Operator Operator_Gfx
|
||||||
|
-#include <Gfx.h>
|
||||||
|
+#include <poppler/Gfx.h>
|
||||||
|
#undef Operator
|
||||||
|
|
||||||
|
namespace Inkscape::Extension::Internal {
|
||||||
|
diff --git a/src/extension/internal/pdfinput/pdf-utils.h b/src/extension/internal/pdfinput/pdf-utils.h
|
||||||
|
index e1a449a4e38..c1d602bec00 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/pdf-utils.h
|
||||||
|
+++ b/src/extension/internal/pdfinput/pdf-utils.h
|
||||||
|
@@ -11,12 +11,13 @@
|
||||||
|
#ifndef PDF_UTILS_H
|
||||||
|
#define PDF_UTILS_H
|
||||||
|
|
||||||
|
+#include <2geom/affine.h>
|
||||||
|
#include <2geom/rect.h>
|
||||||
|
+#include <poppler/Gfx.h>
|
||||||
|
+#include <poppler/GfxState.h>
|
||||||
|
+#include <poppler/Page.h>
|
||||||
|
+
|
||||||
|
#include "poppler-transition-api.h"
|
||||||
|
-#include "2geom/affine.h"
|
||||||
|
-#include "Gfx.h"
|
||||||
|
-#include "GfxState.h"
|
||||||
|
-#include "Page.h"
|
||||||
|
|
||||||
|
class ClipHistoryEntry
|
||||||
|
{
|
||||||
|
diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
||||||
|
index 5e1a6426250..dff615cb616 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
||||||
|
+++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
||||||
|
@@ -47,14 +47,11 @@
|
||||||
|
#include <cstring>
|
||||||
|
#include <fofi/FoFiTrueType.h>
|
||||||
|
#include <fofi/FoFiType1C.h>
|
||||||
|
-#include <fstream>
|
||||||
|
-
|
||||||
|
-#include "Error.h"
|
||||||
|
-#include "Gfx.h"
|
||||||
|
-#include "GlobalParams.h"
|
||||||
|
-#include "Page.h"
|
||||||
|
-#include "XRef.h"
|
||||||
|
-#include "goo/gfile.h"
|
||||||
|
+#include <poppler/Error.h>
|
||||||
|
+#include <poppler/Gfx.h>
|
||||||
|
+#include <poppler/GlobalParams.h>
|
||||||
|
+#include <poppler/Page.h>
|
||||||
|
+#include <poppler/XRef.h>
|
||||||
|
|
||||||
|
//========================================================================
|
||||||
|
//
|
||||||
|
diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.h b/src/extension/internal/pdfinput/poppler-cairo-font-engine.h
|
||||||
|
index d3e1a94e845..114a23181a7 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.h
|
||||||
|
+++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.h
|
||||||
|
@@ -36,11 +36,11 @@
|
||||||
|
#include <memory>
|
||||||
|
#include <mutex>
|
||||||
|
#include <optional>
|
||||||
|
+#include <poppler/GfxFont.h>
|
||||||
|
+#include <poppler/PDFDoc.h>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
-#include "GfxFont.h"
|
||||||
|
-#include "PDFDoc.h"
|
||||||
|
#include "poppler-config.h"
|
||||||
|
#include "poppler-transition-api.h"
|
||||||
|
|
||||||
|
diff --git a/src/extension/internal/pdfinput/poppler-utils.cpp b/src/extension/internal/pdfinput/poppler-utils.cpp
|
||||||
|
index ad0dd236a2a..a579ffcacf3 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/poppler-utils.cpp
|
||||||
|
+++ b/src/extension/internal/pdfinput/poppler-utils.cpp
|
||||||
|
@@ -12,12 +12,12 @@
|
||||||
|
|
||||||
|
#include "poppler-utils.h"
|
||||||
|
|
||||||
|
+#include <2geom/affine.h>
|
||||||
|
+#include <poppler/GfxFont.h>
|
||||||
|
+#include <poppler/GfxState.h>
|
||||||
|
+#include <poppler/PDFDoc.h>
|
||||||
|
#include <poppler/UTF.h>
|
||||||
|
|
||||||
|
-#include "2geom/affine.h"
|
||||||
|
-#include "GfxFont.h"
|
||||||
|
-#include "GfxState.h"
|
||||||
|
-#include "PDFDoc.h"
|
||||||
|
#include "libnrtype/font-factory.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
|
||||||
|
index cdd8d755e82..f14be1ec62e 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/svg-builder.cpp
|
||||||
|
+++ b/src/extension/internal/pdfinput/svg-builder.cpp
|
||||||
|
@@ -27,26 +27,28 @@
|
||||||
|
|
||||||
|
#ifdef HAVE_POPPLER
|
||||||
|
|
||||||
|
-#include "Function.h"
|
||||||
|
-#include "GfxFont.h"
|
||||||
|
-#include "GfxState.h"
|
||||||
|
-#include "Page.h"
|
||||||
|
-#include "Stream.h"
|
||||||
|
+#include <poppler/Function.h>
|
||||||
|
+#include <poppler/GfxFont.h>
|
||||||
|
+#include <poppler/GfxState.h>
|
||||||
|
+#include <poppler/Page.h>
|
||||||
|
+#include <poppler/Stream.h>
|
||||||
|
+
|
||||||
|
#include "color.h"
|
||||||
|
+#include "color/cms-util.h"
|
||||||
|
+#include "display/cairo-utils.h"
|
||||||
|
+#include "display/nr-filter-utils.h"
|
||||||
|
#include "document.h"
|
||||||
|
#include "extract-uri.h"
|
||||||
|
+#include "helper/geom.h"
|
||||||
|
+#include "object/sp-defs.h"
|
||||||
|
+#include "object/sp-item-group.h"
|
||||||
|
+#include "object/sp-namedview.h"
|
||||||
|
+#include "object/sp-text.h"
|
||||||
|
#include "pdf-parser.h"
|
||||||
|
#include "pdf-utils.h"
|
||||||
|
#include "png.h"
|
||||||
|
#include "poppler-cairo-font-engine.h"
|
||||||
|
#include "profile-manager.h"
|
||||||
|
-
|
||||||
|
-#include "color/cms-util.h"
|
||||||
|
-#include "display/cairo-utils.h"
|
||||||
|
-#include "display/nr-filter-utils.h"
|
||||||
|
-#include "object/sp-defs.h"
|
||||||
|
-#include "object/sp-item-group.h"
|
||||||
|
-#include "object/sp-namedview.h"
|
||||||
|
#include "svg/css-ostringstream.h"
|
||||||
|
#include "svg/path-string.h"
|
||||||
|
#include "svg/svg.h"
|
||||||
|
diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h
|
||||||
|
index ae6b916bcb0..db42f81b87d 100644
|
||||||
|
--- a/src/extension/internal/pdfinput/svg-builder.h
|
||||||
|
+++ b/src/extension/internal/pdfinput/svg-builder.h
|
||||||
|
@@ -27,7 +27,7 @@ namespace Inkscape {
|
||||||
|
}
|
||||||
|
|
||||||
|
#define Operator Operator_Gfx
|
||||||
|
-#include <Gfx.h>
|
||||||
|
+#include <poppler/Gfx.h>
|
||||||
|
#undef Operator
|
||||||
|
|
||||||
|
#include <2geom/affine.h>
|
||||||
|
@@ -35,8 +35,8 @@ namespace Inkscape {
|
||||||
|
#include <cairo-ft.h>
|
||||||
|
#include <glibmm/ustring.h>
|
||||||
|
#include <lcms2.h>
|
||||||
|
+#include <poppler/CharTypes.h>
|
||||||
|
|
||||||
|
-#include "CharTypes.h"
|
||||||
|
#include "enums.h"
|
||||||
|
#include "poppler-utils.h"
|
||||||
|
class Function;
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
|
@ -1,179 +0,0 @@
|
||||||
From 5c4c6d116dae5250d75d34a45f0d9220824d2e20 Mon Sep 17 00:00:00 2001
|
|
||||||
From: KrIr17 <elendil.krir17@gmail.com>
|
|
||||||
Date: Sun, 9 Feb 2025 22:52:53 +0530
|
|
||||||
Subject: [PATCH] Fix building with poppler 25.02.0
|
|
||||||
|
|
||||||
1. `getCodeToGIDMap`, `getCIDToGID`, `getCIDToGIDMap` are now `std::vector`
|
|
||||||
|
|
||||||
2. `pdfDocEncodingToUTF16` returns an `std::string`
|
|
||||||
---
|
|
||||||
.../pdfinput/poppler-cairo-font-engine.cpp | 50 +++++++++++++++----
|
|
||||||
.../pdfinput/poppler-transition-api.h | 20 +++++---
|
|
||||||
3 files changed, 63 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
|
||||||
index 728b1d1aac4..bd1d4e49367 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
|
||||||
+++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
|
|
||||||
@@ -405,14 +405,22 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
break;
|
|
||||||
case fontCIDType2:
|
|
||||||
case fontCIDType2OT:
|
|
||||||
+#if POPPLER_CHECK_VERSION(25,2,0)
|
|
||||||
+ if (!gfxcid->getCIDToGID().empty()) {
|
|
||||||
+ const auto src = gfxcid->getCIDToGID();
|
|
||||||
+ codeToGID = std::move(src);
|
|
||||||
+ }
|
|
||||||
+#else
|
|
||||||
if (gfxcid->getCIDToGID()) {
|
|
||||||
n = gfxcid->getCIDToGIDLen();
|
|
||||||
if (n) {
|
|
||||||
- const int *src = gfxcid->getCIDToGID();
|
|
||||||
+ const auto src = gfxcid->getCIDToGID();
|
|
||||||
codeToGID.reserve(n);
|
|
||||||
codeToGID.insert(codeToGID.begin(), src, src + n);
|
|
||||||
}
|
|
||||||
- } else {
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+ else {
|
|
||||||
#if POPPLER_CHECK_VERSION(22, 1, 0)
|
|
||||||
std::unique_ptr<FoFiTrueType> ff;
|
|
||||||
#else
|
|
||||||
@@ -427,13 +435,18 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
goto err2;
|
|
||||||
}
|
|
||||||
#if POPPLER_CHECK_VERSION(22, 1, 0)
|
|
||||||
- int *src = gfxcid->getCodeToGIDMap(ff.get(), &n);
|
|
||||||
+ auto src = gfxcid->_POPPLER_GET_CODE_TO_GID_MAP(ff.get(), &n);
|
|
||||||
#else
|
|
||||||
- int *src = gfxcid->getCodeToGIDMap(ff, &n);
|
|
||||||
+ auto src = gfxcid->_POPPLER_GET_CODE_TO_GID_MAP(ff, &n);
|
|
||||||
#endif
|
|
||||||
+
|
|
||||||
+#if POPPLER_CHECK_VERSION(25,2,0)
|
|
||||||
+ codeToGID = std::move(src);
|
|
||||||
+#else
|
|
||||||
codeToGID.reserve(n);
|
|
||||||
codeToGID.insert(codeToGID.begin(), src, src + n);
|
|
||||||
gfree(src);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
/* Fall through */
|
|
||||||
case fontTrueType:
|
|
||||||
@@ -455,13 +468,17 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
/* This might be set already for the CIDType2 case */
|
|
||||||
if (fontType == fontTrueType || fontType == fontTrueTypeOT) {
|
|
||||||
#if POPPLER_CHECK_VERSION(22, 1, 0)
|
|
||||||
- int *src = gfx8bit->getCodeToGIDMap(ff.get());
|
|
||||||
+ auto src = gfx8bit->getCodeToGIDMap(ff.get());
|
|
||||||
#else
|
|
||||||
- int *src = gfx8bit->getCodeToGIDMap(ff);
|
|
||||||
+ auto src = gfx8bit->getCodeToGIDMap(ff);
|
|
||||||
#endif
|
|
||||||
+#if POPPLER_CHECK_VERSION(25,2,0)
|
|
||||||
+ codeToGID = std::move(src);
|
|
||||||
+#else
|
|
||||||
codeToGID.reserve(256);
|
|
||||||
codeToGID.insert(codeToGID.begin(), src, src + 256);
|
|
||||||
gfree(src);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
font_face = getFreeTypeFontFace(fontEngine, lib, fileName, std::move(font_data));
|
|
||||||
if (!font_face) {
|
|
||||||
@@ -479,10 +496,14 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
ff1c = FoFiType1C::load(fileName.c_str());
|
|
||||||
}
|
|
||||||
if (ff1c) {
|
|
||||||
- int *src = ff1c->getCIDToGIDMap(&n);
|
|
||||||
+ auto src = ff1c->_POPPLER_GET_CID_TO_GID_MAP(&n);
|
|
||||||
+#if POPPLER_CHECK_VERSION(25,2,0)
|
|
||||||
+ codeToGID = std::move(src);
|
|
||||||
+#else
|
|
||||||
codeToGID.reserve(n);
|
|
||||||
codeToGID.insert(codeToGID.begin(), src, src + n);
|
|
||||||
gfree(src);
|
|
||||||
+#endif
|
|
||||||
delete ff1c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -495,14 +516,21 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
break;
|
|
||||||
|
|
||||||
case fontCIDType0COT:
|
|
||||||
+#if POPPLER_CHECK_VERSION(25,2,0)
|
|
||||||
+ if (!gfxcid->getCIDToGID().empty()) {
|
|
||||||
+ const auto src = gfxcid->getCIDToGID();
|
|
||||||
+ codeToGID = std::move(src);
|
|
||||||
+ }
|
|
||||||
+#else
|
|
||||||
if (gfxcid->getCIDToGID()) {
|
|
||||||
n = gfxcid->getCIDToGIDLen();
|
|
||||||
if (n) {
|
|
||||||
- const int *src = gfxcid->getCIDToGID();
|
|
||||||
+ const auto src = gfxcid->getCIDToGID();
|
|
||||||
codeToGID.reserve(n);
|
|
||||||
codeToGID.insert(codeToGID.begin(), src, src + n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (codeToGID.empty()) {
|
|
||||||
if (!useCIDs) {
|
|
||||||
@@ -518,10 +546,14 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Li
|
|
||||||
}
|
|
||||||
if (ff) {
|
|
||||||
if (ff->isOpenTypeCFF()) {
|
|
||||||
- int *src = ff->getCIDToGIDMap(&n);
|
|
||||||
+ auto src = ff1c->_POPPLER_GET_CID_TO_GID_MAP(&n);
|
|
||||||
+#if POPPLER_CHECK_VERSION(25,2,0)
|
|
||||||
+ codeToGID = std::move(src);
|
|
||||||
+#else
|
|
||||||
codeToGID.reserve(n);
|
|
||||||
codeToGID.insert(codeToGID.begin(), src, src + n);
|
|
||||||
gfree(src);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
index b7a54828e74..a67132ba6bd 100644
|
|
||||||
--- a/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
+++ b/src/extension/internal/pdfinput/poppler-transition-api.h
|
|
||||||
@@ -15,6 +15,20 @@
|
|
||||||
#include <glib/poppler-features.h>
|
|
||||||
#include <poppler/UTF.h>
|
|
||||||
|
|
||||||
+#if POPPLER_CHECK_VERSION(25,2,0)
|
|
||||||
+#define _POPPLER_GET_CODE_TO_GID_MAP(ff, len) getCodeToGIDMap(ff)
|
|
||||||
+#define _POPPLER_GET_CID_TO_GID_MAP(len) getCIDToGIDMap()
|
|
||||||
+#else
|
|
||||||
+#define _POPPLER_GET_CODE_TO_GID_MAP(ff, len) getCodeToGIDMap(ff, len)
|
|
||||||
+#define _POPPLER_GET_CID_TO_GID_MAP(len) getCIDToGIDMap(len)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#if POPPLER_CHECK_VERSION(24,12,0)
|
|
||||||
+#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode, hasAlpha)
|
|
||||||
+#else
|
|
||||||
+#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#if POPPLER_CHECK_VERSION(24, 10, 0)
|
|
||||||
#define _POPPLER_CONSUME_UNIQPTR_ARG(value) std::move(value)
|
|
||||||
#else
|
|
||||||
@@ -39,12 +53,6 @@
|
|
||||||
#define _POPPLER_FUNCTION_TYPE_STITCHING 3
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#if POPPLER_CHECK_VERSION(24,12,0)
|
|
||||||
-#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode, hasAlpha)
|
|
||||||
-#else
|
|
||||||
-#define _POPPLER_GET_IMAGE_PARAMS(bits, csMode, hasAlpha) getImageParams(bits, csMode)
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
#if POPPLER_CHECK_VERSION(22, 4, 0)
|
|
||||||
#define _POPPLER_FONTPTR_TO_GFX8(font_ptr) ((Gfx8BitFont *)font_ptr.get())
|
|
||||||
#else
|
|
||||||
--
|
|
||||||
GitLab
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Template file for 'inkscape'
|
# Template file for 'inkscape'
|
||||||
pkgname=inkscape
|
pkgname=inkscape
|
||||||
version=1.4
|
version=1.4.2
|
||||||
revision=3
|
revision=1
|
||||||
build_style=cmake
|
build_style=cmake
|
||||||
make_check_target="check"
|
make_check_target="check"
|
||||||
hostmakedepends="automake gettext glib-devel intltool libgraphicsmagick-devel
|
hostmakedepends="automake gettext glib-devel intltool libgraphicsmagick-devel
|
||||||
|
@ -21,7 +21,7 @@ maintainer="Alex Lohr <alexthkloss@web.de>"
|
||||||
license="GPL-2.0-only, LGPL-2.1-or-later"
|
license="GPL-2.0-only, LGPL-2.1-or-later"
|
||||||
homepage="https://inkscape.org/"
|
homepage="https://inkscape.org/"
|
||||||
distfiles="https://media.inkscape.org/dl/resources/file/inkscape-${version}.tar.xz"
|
distfiles="https://media.inkscape.org/dl/resources/file/inkscape-${version}.tar.xz"
|
||||||
checksum=c59a85453b699addebcd51c1dc07684dd96a10c8aec716b19551db50562e13f5
|
checksum=2000530c7917e5260c9e8575a7154ff6926643d2006487d714e304a963f0c782
|
||||||
python_version=3
|
python_version=3
|
||||||
# some tests still fail on musl: https://gitlab.com/inkscape/inkscape/-/issues/2241
|
# some tests still fail on musl: https://gitlab.com/inkscape/inkscape/-/issues/2241
|
||||||
make_check=no
|
make_check=no
|
||||||
|
|
Loading…
Add table
Reference in a new issue