From 2e2d12079c6034d82a8d70db7e2c8a0f0199ff5f Mon Sep 17 00:00:00 2001 From: Josh Andler Date: Wed, 16 Dec 2009 13:27:19 -0800 Subject: Patches 3-11 from 488862 for a number of memleaks and allocation/deallocation issues. (bzr r8891) --- src/extension/dxf2svg/entities2elements.cpp | 4 ++-- src/extension/internal/emf-win32-inout.cpp | 1 + src/extension/internal/odf.cpp | 4 ++-- src/extension/internal/pdfinput/pdf-input.cpp | 1 + src/extension/internal/pdfinput/svg-builder.cpp | 4 ++-- 5 files changed, 8 insertions(+), 6 deletions(-) (limited to 'src/extension') diff --git a/src/extension/dxf2svg/entities2elements.cpp b/src/extension/dxf2svg/entities2elements.cpp index cf42dac32..ab160e265 100644 --- a/src/extension/dxf2svg/entities2elements.cpp +++ b/src/extension/dxf2svg/entities2elements.cpp @@ -80,7 +80,7 @@ void pline2svg(polyline pline, int type, int precision, char * units, double sca // 2 is pline2polygon - char delim[1]; + char delim[2]; double mag_bulge = 0; double prev_mag_bulge = 0; @@ -185,7 +185,7 @@ void lwpline2svg(lwpolyline pline, int type, int precision, char * units, double // 2 is pline2polygon - char delim[1]; + char delim[2]; double mag_bulge = 0; double prev_mag_bulge = 0; diff --git a/src/extension/internal/emf-win32-inout.cpp b/src/extension/internal/emf-win32-inout.cpp index f400a3649..9d25f3a7f 100644 --- a/src/extension/internal/emf-win32-inout.cpp +++ b/src/extension/internal/emf-win32-inout.cpp @@ -127,6 +127,7 @@ emf_print_document_to_file(SPDocument *doc, gchar const *filename) /* Print document */ ret = mod->begin(doc); if (ret) { + g_free(oldoutput); throw Inkscape::Extension::Output::save_failed(); } sp_item_invoke_print(mod->base, &context); diff --git a/src/extension/internal/odf.cpp b/src/extension/internal/odf.cpp index cc8489302..46e0361ce 100644 --- a/src/extension/internal/odf.cpp +++ b/src/extension/internal/odf.cpp @@ -795,8 +795,8 @@ void SingularValueDecomposition::calculate() } } - delete e; - delete work; + delete [] e; + delete [] work; } diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp index c2d417f2c..ba00fe343 100644 --- a/src/extension/internal/pdfinput/pdf-input.cpp +++ b/src/extension/internal/pdfinput/pdf-input.cpp @@ -734,6 +734,7 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) { delete builder; g_free(docname); delete pdf_doc; + delete dlg; // Restore undo sp_document_set_undo_sensitive(doc, saved); diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp index 00bd8fa4d..b9583545f 100644 --- a/src/extension/internal/pdfinput/svg-builder.cpp +++ b/src/extension/internal/pdfinput/svg-builder.cpp @@ -1536,7 +1536,7 @@ Inkscape::XML::Node *SvgBuilder::_createImage(Stream *str, int width, int height } png_write_row(png_ptr, (png_bytep)buffer); } - delete buffer; + delete [] buffer; } else if (color_map) { image_stream = new ImageStream(str, width, color_map->getNumPixelComps(), @@ -1575,7 +1575,7 @@ Inkscape::XML::Node *SvgBuilder::_createImage(Stream *str, int width, int height png_write_row(png_ptr, (png_bytep)buffer); } } - delete buffer; + delete [] buffer; } else { // A colormap must be provided, so quit png_destroy_write_struct(&png_ptr, &info_ptr); -- cgit v1.2.3 From e29cecc01b6fa0a8984ef780819e8e812b5505fc Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 20 Dec 2009 01:40:55 -0800 Subject: Warning cleanup (bzr r8895) --- src/extension/internal/cairo-ps-out.cpp | 24 ++++++++++++------------ src/extension/internal/cairo-render-context.h | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'src/extension') diff --git a/src/extension/internal/cairo-ps-out.cpp b/src/extension/internal/cairo-ps-out.cpp index 9ac19326f..737bb2885 100644 --- a/src/extension/internal/cairo-ps-out.cpp +++ b/src/extension/internal/cairo-ps-out.cpp @@ -42,22 +42,22 @@ namespace Inkscape { namespace Extension { namespace Internal { -bool -CairoPsOutput::check (Inkscape::Extension::Extension * module) +bool CairoPsOutput::check (Inkscape::Extension::Extension * /*module*/) { - if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PS)) - return FALSE; - - return TRUE; + if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PS)) { + return FALSE; + } else { + return TRUE; + } } -bool -CairoEpsOutput::check (Inkscape::Extension::Extension * module) +bool CairoEpsOutput::check (Inkscape::Extension::Extension * /*module*/) { - if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_EPS)) - return FALSE; - - return TRUE; + if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_EPS)) { + return FALSE; + } else { + return TRUE; + } } static bool diff --git a/src/extension/internal/cairo-render-context.h b/src/extension/internal/cairo-render-context.h index e6f2d698e..a1f902457 100644 --- a/src/extension/internal/cairo-render-context.h +++ b/src/extension/internal/cairo-render-context.h @@ -71,12 +71,12 @@ public: CairoRenderer *getRenderer(void) const; cairo_t *getCairoContext(void) const; - typedef enum CairoRenderMode { + enum CairoRenderMode { RENDER_MODE_NORMAL, RENDER_MODE_CLIP }; - typedef enum CairoClipMode { + enum CairoClipMode { CLIP_MODE_PATH, CLIP_MODE_MASK }; -- cgit v1.2.3 From bc576428c38521984964e4f9e6289c8da1157173 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Thu, 24 Dec 2009 21:10:43 +0100 Subject: refactoring the snapping code (laying the groundwork for my next commit which reduces snap jitter) (bzr r8906) --- src/extension/internal/pdfinput/pdf-parser.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'src/extension') diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp index 118896fd3..a32f1a67f 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -809,7 +809,7 @@ void PdfParser::opSetExtGState(Object args[], int numArgs) { blendingColorSpace = NULL; isolated = knockout = gFalse; if (!obj4.dictLookup(const_cast("CS"), &obj5)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj5); + blendingColorSpace = GfxColorSpace::parse(&obj5,(Gfx*)this); } obj5.free(); if (obj4.dictLookup(const_cast("I"), &obj5)->isBool()) { @@ -1009,9 +1009,9 @@ void PdfParser::opSetFillColorSpace(Object args[], int numArgs) { state->setFillPattern(NULL); res->lookupColorSpace(args[0].getName(), &obj); if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0]); + colorSpace = GfxColorSpace::parse(&args[0],(Gfx*)this); } else { - colorSpace = GfxColorSpace::parse(&obj); + colorSpace = GfxColorSpace::parse(&obj,(Gfx*)this); } obj.free(); if (colorSpace) { @@ -1032,9 +1032,9 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs) { state->setStrokePattern(NULL); res->lookupColorSpace(args[0].getName(), &obj); if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0]); + colorSpace = GfxColorSpace::parse(&args[0],(Gfx*)this); } else { - colorSpace = GfxColorSpace::parse(&obj); + colorSpace = GfxColorSpace::parse(&obj,(Gfx*)this); } obj.free(); if (colorSpace) { @@ -1101,7 +1101,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) { builder->updateStyle(state); } if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName()))) { + (pattern = res->lookupPattern(args[numArgs-1].getName(),(Gfx*)this))) { state->setFillPattern(pattern); builder->updateStyle(state); } @@ -1145,7 +1145,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) { builder->updateStyle(state); } if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName()))) { + (pattern = res->lookupPattern(args[numArgs-1].getName(),(Gfx*)this))) { state->setStrokePattern(pattern); builder->updateStyle(state); } @@ -1543,7 +1543,7 @@ void PdfParser::opShFill(Object args[], int numArgs) { double *matrix = NULL; GBool savedState = gFalse; - if (!(shading = res->lookupShading(args[0].getName()))) { + if (!(shading = res->lookupShading(args[0].getName(),(Gfx*)this))) { return; } @@ -2507,7 +2507,7 @@ void PdfParser::doImage(Object *ref, Stream *str, GBool inlineImg) { } } if (!obj1.isNull()) { - colorSpace = GfxColorSpace::parse(&obj1); + colorSpace = GfxColorSpace::parse(&obj1,(Gfx*)this); } else if (csMode == streamCSDeviceGray) { colorSpace = new GfxDeviceGrayColorSpace(); } else if (csMode == streamCSDeviceRGB) { @@ -2592,7 +2592,7 @@ void PdfParser::doImage(Object *ref, Stream *str, GBool inlineImg) { obj2.free(); } } - maskColorSpace = GfxColorSpace::parse(&obj1); + maskColorSpace = GfxColorSpace::parse(&obj1,(Gfx*)this); obj1.free(); if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { goto err1; @@ -2767,7 +2767,7 @@ void PdfParser::doForm(Object *str) { if (obj1.dictLookup(const_cast("S"), &obj2)->isName(const_cast("Transparency"))) { transpGroup = gTrue; if (!obj1.dictLookup(const_cast("CS"), &obj3)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj3); + blendingColorSpace = GfxColorSpace::parse(&obj3,(Gfx*)this); } obj3.free(); if (obj1.dictLookup(const_cast("I"), &obj3)->isBool()) { -- cgit v1.2.3 From e221da33f897a2d70e33e254591fe9da8a6927e5 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Fri, 25 Dec 2009 10:14:47 +0100 Subject: fix build again for old poppler libs, by reverting a part of my previous commit (bzr r8908) --- src/extension/internal/pdfinput/pdf-parser.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'src/extension') diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp index a32f1a67f..118896fd3 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -809,7 +809,7 @@ void PdfParser::opSetExtGState(Object args[], int numArgs) { blendingColorSpace = NULL; isolated = knockout = gFalse; if (!obj4.dictLookup(const_cast("CS"), &obj5)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj5,(Gfx*)this); + blendingColorSpace = GfxColorSpace::parse(&obj5); } obj5.free(); if (obj4.dictLookup(const_cast("I"), &obj5)->isBool()) { @@ -1009,9 +1009,9 @@ void PdfParser::opSetFillColorSpace(Object args[], int numArgs) { state->setFillPattern(NULL); res->lookupColorSpace(args[0].getName(), &obj); if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0],(Gfx*)this); + colorSpace = GfxColorSpace::parse(&args[0]); } else { - colorSpace = GfxColorSpace::parse(&obj,(Gfx*)this); + colorSpace = GfxColorSpace::parse(&obj); } obj.free(); if (colorSpace) { @@ -1032,9 +1032,9 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs) { state->setStrokePattern(NULL); res->lookupColorSpace(args[0].getName(), &obj); if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0],(Gfx*)this); + colorSpace = GfxColorSpace::parse(&args[0]); } else { - colorSpace = GfxColorSpace::parse(&obj,(Gfx*)this); + colorSpace = GfxColorSpace::parse(&obj); } obj.free(); if (colorSpace) { @@ -1101,7 +1101,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) { builder->updateStyle(state); } if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName(),(Gfx*)this))) { + (pattern = res->lookupPattern(args[numArgs-1].getName()))) { state->setFillPattern(pattern); builder->updateStyle(state); } @@ -1145,7 +1145,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) { builder->updateStyle(state); } if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName(),(Gfx*)this))) { + (pattern = res->lookupPattern(args[numArgs-1].getName()))) { state->setStrokePattern(pattern); builder->updateStyle(state); } @@ -1543,7 +1543,7 @@ void PdfParser::opShFill(Object args[], int numArgs) { double *matrix = NULL; GBool savedState = gFalse; - if (!(shading = res->lookupShading(args[0].getName(),(Gfx*)this))) { + if (!(shading = res->lookupShading(args[0].getName()))) { return; } @@ -2507,7 +2507,7 @@ void PdfParser::doImage(Object *ref, Stream *str, GBool inlineImg) { } } if (!obj1.isNull()) { - colorSpace = GfxColorSpace::parse(&obj1,(Gfx*)this); + colorSpace = GfxColorSpace::parse(&obj1); } else if (csMode == streamCSDeviceGray) { colorSpace = new GfxDeviceGrayColorSpace(); } else if (csMode == streamCSDeviceRGB) { @@ -2592,7 +2592,7 @@ void PdfParser::doImage(Object *ref, Stream *str, GBool inlineImg) { obj2.free(); } } - maskColorSpace = GfxColorSpace::parse(&obj1,(Gfx*)this); + maskColorSpace = GfxColorSpace::parse(&obj1); obj1.free(); if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { goto err1; @@ -2767,7 +2767,7 @@ void PdfParser::doForm(Object *str) { if (obj1.dictLookup(const_cast("S"), &obj2)->isName(const_cast("Transparency"))) { transpGroup = gTrue; if (!obj1.dictLookup(const_cast("CS"), &obj3)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj3,(Gfx*)this); + blendingColorSpace = GfxColorSpace::parse(&obj3); } obj3.free(); if (obj1.dictLookup(const_cast("I"), &obj3)->isBool()) { -- cgit v1.2.3 From 7f17e512ed7d598e3f7d6cb1074a1c13f8d6cb19 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Wed, 30 Dec 2009 21:52:44 +0100 Subject: When combining paths: clear the selection before deleting the original objects Fixed bugs: - https://launchpad.net/bugs/495483 (bzr r8927) --- src/extension/internal/pdfinput/pdf-parser.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'src/extension') diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp index 118896fd3..a32f1a67f 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -809,7 +809,7 @@ void PdfParser::opSetExtGState(Object args[], int numArgs) { blendingColorSpace = NULL; isolated = knockout = gFalse; if (!obj4.dictLookup(const_cast("CS"), &obj5)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj5); + blendingColorSpace = GfxColorSpace::parse(&obj5,(Gfx*)this); } obj5.free(); if (obj4.dictLookup(const_cast("I"), &obj5)->isBool()) { @@ -1009,9 +1009,9 @@ void PdfParser::opSetFillColorSpace(Object args[], int numArgs) { state->setFillPattern(NULL); res->lookupColorSpace(args[0].getName(), &obj); if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0]); + colorSpace = GfxColorSpace::parse(&args[0],(Gfx*)this); } else { - colorSpace = GfxColorSpace::parse(&obj); + colorSpace = GfxColorSpace::parse(&obj,(Gfx*)this); } obj.free(); if (colorSpace) { @@ -1032,9 +1032,9 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs) { state->setStrokePattern(NULL); res->lookupColorSpace(args[0].getName(), &obj); if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0]); + colorSpace = GfxColorSpace::parse(&args[0],(Gfx*)this); } else { - colorSpace = GfxColorSpace::parse(&obj); + colorSpace = GfxColorSpace::parse(&obj,(Gfx*)this); } obj.free(); if (colorSpace) { @@ -1101,7 +1101,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) { builder->updateStyle(state); } if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName()))) { + (pattern = res->lookupPattern(args[numArgs-1].getName(),(Gfx*)this))) { state->setFillPattern(pattern); builder->updateStyle(state); } @@ -1145,7 +1145,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) { builder->updateStyle(state); } if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName()))) { + (pattern = res->lookupPattern(args[numArgs-1].getName(),(Gfx*)this))) { state->setStrokePattern(pattern); builder->updateStyle(state); } @@ -1543,7 +1543,7 @@ void PdfParser::opShFill(Object args[], int numArgs) { double *matrix = NULL; GBool savedState = gFalse; - if (!(shading = res->lookupShading(args[0].getName()))) { + if (!(shading = res->lookupShading(args[0].getName(),(Gfx*)this))) { return; } @@ -2507,7 +2507,7 @@ void PdfParser::doImage(Object *ref, Stream *str, GBool inlineImg) { } } if (!obj1.isNull()) { - colorSpace = GfxColorSpace::parse(&obj1); + colorSpace = GfxColorSpace::parse(&obj1,(Gfx*)this); } else if (csMode == streamCSDeviceGray) { colorSpace = new GfxDeviceGrayColorSpace(); } else if (csMode == streamCSDeviceRGB) { @@ -2592,7 +2592,7 @@ void PdfParser::doImage(Object *ref, Stream *str, GBool inlineImg) { obj2.free(); } } - maskColorSpace = GfxColorSpace::parse(&obj1); + maskColorSpace = GfxColorSpace::parse(&obj1,(Gfx*)this); obj1.free(); if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { goto err1; @@ -2767,7 +2767,7 @@ void PdfParser::doForm(Object *str) { if (obj1.dictLookup(const_cast("S"), &obj2)->isName(const_cast("Transparency"))) { transpGroup = gTrue; if (!obj1.dictLookup(const_cast("CS"), &obj3)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj3); + blendingColorSpace = GfxColorSpace::parse(&obj3,(Gfx*)this); } obj3.free(); if (obj1.dictLookup(const_cast("I"), &obj3)->isBool()) { -- cgit v1.2.3 From e056fb991aa3d948c9fe82c4b457274397491a48 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Wed, 30 Dec 2009 22:00:28 +0100 Subject: Restore files that shouldn't have been touched. Grrr (bzr r8928) --- src/extension/internal/pdfinput/pdf-parser.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'src/extension') diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp index a32f1a67f..118896fd3 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -809,7 +809,7 @@ void PdfParser::opSetExtGState(Object args[], int numArgs) { blendingColorSpace = NULL; isolated = knockout = gFalse; if (!obj4.dictLookup(const_cast("CS"), &obj5)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj5,(Gfx*)this); + blendingColorSpace = GfxColorSpace::parse(&obj5); } obj5.free(); if (obj4.dictLookup(const_cast("I"), &obj5)->isBool()) { @@ -1009,9 +1009,9 @@ void PdfParser::opSetFillColorSpace(Object args[], int numArgs) { state->setFillPattern(NULL); res->lookupColorSpace(args[0].getName(), &obj); if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0],(Gfx*)this); + colorSpace = GfxColorSpace::parse(&args[0]); } else { - colorSpace = GfxColorSpace::parse(&obj,(Gfx*)this); + colorSpace = GfxColorSpace::parse(&obj); } obj.free(); if (colorSpace) { @@ -1032,9 +1032,9 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs) { state->setStrokePattern(NULL); res->lookupColorSpace(args[0].getName(), &obj); if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0],(Gfx*)this); + colorSpace = GfxColorSpace::parse(&args[0]); } else { - colorSpace = GfxColorSpace::parse(&obj,(Gfx*)this); + colorSpace = GfxColorSpace::parse(&obj); } obj.free(); if (colorSpace) { @@ -1101,7 +1101,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) { builder->updateStyle(state); } if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName(),(Gfx*)this))) { + (pattern = res->lookupPattern(args[numArgs-1].getName()))) { state->setFillPattern(pattern); builder->updateStyle(state); } @@ -1145,7 +1145,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) { builder->updateStyle(state); } if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName(),(Gfx*)this))) { + (pattern = res->lookupPattern(args[numArgs-1].getName()))) { state->setStrokePattern(pattern); builder->updateStyle(state); } @@ -1543,7 +1543,7 @@ void PdfParser::opShFill(Object args[], int numArgs) { double *matrix = NULL; GBool savedState = gFalse; - if (!(shading = res->lookupShading(args[0].getName(),(Gfx*)this))) { + if (!(shading = res->lookupShading(args[0].getName()))) { return; } @@ -2507,7 +2507,7 @@ void PdfParser::doImage(Object *ref, Stream *str, GBool inlineImg) { } } if (!obj1.isNull()) { - colorSpace = GfxColorSpace::parse(&obj1,(Gfx*)this); + colorSpace = GfxColorSpace::parse(&obj1); } else if (csMode == streamCSDeviceGray) { colorSpace = new GfxDeviceGrayColorSpace(); } else if (csMode == streamCSDeviceRGB) { @@ -2592,7 +2592,7 @@ void PdfParser::doImage(Object *ref, Stream *str, GBool inlineImg) { obj2.free(); } } - maskColorSpace = GfxColorSpace::parse(&obj1,(Gfx*)this); + maskColorSpace = GfxColorSpace::parse(&obj1); obj1.free(); if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { goto err1; @@ -2767,7 +2767,7 @@ void PdfParser::doForm(Object *str) { if (obj1.dictLookup(const_cast("S"), &obj2)->isName(const_cast("Transparency"))) { transpGroup = gTrue; if (!obj1.dictLookup(const_cast("CS"), &obj3)->isNull()) { - blendingColorSpace = GfxColorSpace::parse(&obj3,(Gfx*)this); + blendingColorSpace = GfxColorSpace::parse(&obj3); } obj3.free(); if (obj1.dictLookup(const_cast("I"), &obj3)->isBool()) { -- cgit v1.2.3 From 1607d480ed2a45fcdf68c428fd40f91ee2336e51 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Fri, 1 Jan 2010 23:15:16 -0800 Subject: Remove any "inkscape:*" or "sodipodi:*" attributes when saving as "plain SVG". Fixes bug #500440. Fixed bugs: - https://launchpad.net/bugs/500440 (bzr r8933) --- src/extension/internal/svg.cpp | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'src/extension') diff --git a/src/extension/internal/svg.cpp b/src/extension/internal/svg.cpp index a3589e905..b10aa87ec 100644 --- a/src/extension/internal/svg.cpp +++ b/src/extension/internal/svg.cpp @@ -21,6 +21,7 @@ #include "extension/system.h" #include "extension/output.h" #include +#include "xml/attribute-record.h" #ifdef WITH_GNOME_VFS # include @@ -32,6 +33,37 @@ namespace Internal { #include "clear-n_.h" + +using Inkscape::Util::List; +using Inkscape::XML::AttributeRecord; +using Inkscape::XML::Node; + + + +void pruneExtendedAttributes( Inkscape::XML::Node *repr ) +{ + if (repr) { + if ( repr->type() == Inkscape::XML::ELEMENT_NODE ) { + std::vector toBeRemoved; + for ( List it = repr->attributeList(); it; ++it ) { + const gchar* attrName = g_quark_to_string(it->key); + if ((strncmp("inkscape:", attrName, 9) == 0) || (strncmp("sodipodi:", attrName, 9) == 0)) { + toBeRemoved.push_back(attrName); + } + } + // Can't change the set we're interating over while we are iterating. + for ( std::vector::iterator it = toBeRemoved.begin(); it != toBeRemoved.end(); ++it ) { + repr->setAttribute(*it, 0); + } + } + + for ( Node *child = repr->firstChild(); child; child = child->next() ) { + pruneExtendedAttributes(child); + } + } +} + + /** \return None \brief What would an SVG editor be without loading/saving SVG @@ -179,7 +211,7 @@ Svg::open (Inkscape::Extension::Input */*mod*/, const gchar *uri) we're getting good data. It also checks the module ID of the incoming module to figure out whether this save should include the Inkscape namespace stuff or not. The result of that comparison - is stored in the spns variable. + is stored in the exportExtensions variable. If there is not to be Inkscape name spaces a new document is created without. (I think, I'm not sure on this code) @@ -198,18 +230,20 @@ Svg::save(Inkscape::Extension::Output *mod, SPDocument *doc, gchar const *filena gchar *save_path = g_path_get_dirname(filename); - bool const spns = ( !mod->get_id() + bool const exportExtensions = ( !mod->get_id() || !strcmp (mod->get_id(), SP_MODULE_KEY_OUTPUT_SVG_INKSCAPE) || !strcmp (mod->get_id(), SP_MODULE_KEY_OUTPUT_SVGZ_INKSCAPE)); Inkscape::XML::Document *rdoc = NULL; Inkscape::XML::Node *repr = NULL; - if (spns) { + if (exportExtensions) { repr = sp_document_repr_root (doc); } else { rdoc = sp_repr_document_new ("svg:svg"); repr = rdoc->root(); repr = sp_document_root (doc)->updateRepr(rdoc, repr, SP_OBJECT_WRITE_BUILD); + + pruneExtendedAttributes(repr); } if (!sp_repr_save_rebased_file(repr->document(), filename, SP_SVG_NS_URI, @@ -217,7 +251,7 @@ Svg::save(Inkscape::Extension::Output *mod, SPDocument *doc, gchar const *filena throw Inkscape::Extension::Output::save_failed(); } - if (!spns) { + if (!exportExtensions) { Inkscape::GC::release(rdoc); } -- cgit v1.2.3