summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cdr-input.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/extension/internal/cdr-input.cpp')
-rw-r--r--src/extension/internal/cdr-input.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/extension/internal/cdr-input.cpp b/src/extension/internal/cdr-input.cpp
index f4789a08f..a4e26e224 100644
--- a/src/extension/internal/cdr-input.cpp
+++ b/src/extension/internal/cdr-input.cpp
@@ -22,6 +22,7 @@
#include <string>
#include <cstring>
+#include <glibmm/regex.h>
#include <libcdr/libcdr.h>
@@ -281,7 +282,12 @@ SPDocument *CdrInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * u
}
}
- SPDocument * doc = SPDocument::createNewDocFromMem(tmpSVGOutput[page_num-1].cstr(), strlen(tmpSVGOutput[page_num-1].cstr()), TRUE);
+ // remove consecutive closepath commands (see bug 1492153)
+ Glib::RefPtr<Glib::Regex> regex = Glib::Regex::create("(Z(?:\\s+Z)+)(?=[^<]+\")");
+ Glib::ustring outString1 = Glib::ustring(tmpSVGOutput[page_num-1].cstr());
+ Glib::ustring outString2 = regex->replace(outString1, 0, "Z", Glib::REGEX_MATCH_NEWLINE_ANY);
+
+ SPDocument * doc = SPDocument::createNewDocFromMem(outString2.c_str(), outString2.bytes(), TRUE);
// Set viewBox if it doesn't exist
if (doc && !doc->getRoot()->viewBox_set) {