From f4cca44faf27f0fb17778a1948d0bd620e21b845 Mon Sep 17 00:00:00 2001 From: Cynthia Gauthier Date: Tue, 15 Jun 2010 20:58:57 -0400 Subject: [PATCH] Merge branch lp:~louis-simard/scour/rework. Summary of changes: scour.py, scour.inkscape.py, scour.inx: * Add options --quiet, --enable-comment-stripping, --shorten-ids, --remove-metadata, --renderer-workaround. scour.py: * Optimisations in time (so Scour runs faster) and space (so Scour allocates less memory, less often). * Change #E+# to #e#, #E-# to #e-#, 0.# to .# and -0.# into -.# in path/polygon/polyline data + lengths, if renderer workarounds are disabled. Use spaces instead of commas in path/polygon/polyline data. Use lower-case #rrggbb and #rgb instead of upper-case. All of this makes gzip work better, since the rest of SVG documents mostly has lower-case letters in tag names and spaces to separate XML attributes etc. * Fix a bug whereby an SVG document would become filled with black if all elements had the same fill color. * Fix a bug whereby a path's second command would not start at the right coordinates if the first command was a relative moveto 'm' with at least 1 implied lineto. * Fix a bug whereby a path's absolute lineto 'L' commands would not become the right relative lineto 'l' commands. * Allow the implicit linetos after a path's moveto 'M'/'m' to be converted into relative horizontal linetos 'h' and vertical 'v' too. scour.inx: * Fix help typos. Make options more descriptive in the plugin option window. Add something about enable-group-collapsing requiring enable-id-stripping. testscour.py: * Rework tests that relied on #E+#, #E-#, 0.# and -0.# so that they accept the changes to scour.py. Add unit tests for strip-xml-prolog, enable-comment-stripping and remove-metadata. --- scour.inkscape.py | 13 +- scour.inx | 37 +- scour.py | 1208 ++++++++++++++++--------- svg_regex.py | 42 +- svg_transform.py | 233 +++++ testscour.py | 102 ++- unittests/comment-beside-xml-decl.svg | 4 + unittests/full-metadata.svg | 22 + unittests/shorten-ids.svg | 10 + 9 files changed, 1153 insertions(+), 518 deletions(-) create mode 100644 svg_transform.py create mode 100644 unittests/comment-beside-xml-decl.svg create mode 100644 unittests/full-metadata.svg create mode 100644 unittests/shorten-ids.svg diff --git a/scour.inkscape.py b/scour.inkscape.py index f21e223..ad3bfcd 100755 --- a/scour.inkscape.py +++ b/scour.inkscape.py @@ -22,12 +22,18 @@ class ScourInkscape (inkex.Effect): self.OptionParser.add_option("--enable-id-stripping", type="inkbool", action="store", dest="strip_ids", default=False, help="remove all un-referenced ID attributes") + self.OptionParser.add_option("--shorten-ids", type="inkbool", + action="store", dest="shorten_ids", default=False, + help="shorten all ID attributes to the least number of letters possible") self.OptionParser.add_option("--embed-rasters", type="inkbool", action="store", dest="embed_rasters", default=True, help="won't embed rasters as base64-encoded data") self.OptionParser.add_option("--keep-editor-data", type="inkbool", action="store", dest="keep_editor_data", default=False, help="won't remove Inkscape, Sodipodi or Adobe Illustrator elements and attributes") + self.OptionParser.add_option("--remove-metadata", type="inkbool", + action="store", dest="remove_metadata", default=False, + help="remove elements (which may contain license metadata etc.)") self.OptionParser.add_option("--strip-xml-prolog", type="inkbool", action="store", dest="strip_xml_prolog", default=False, help="won't output the prolog") @@ -40,7 +46,12 @@ class ScourInkscape (inkex.Effect): self.OptionParser.add_option("--enable-viewboxing", type="inkbool", action="store", dest="enable_viewboxing", default=False, help="changes document width/height to 100%/100% and creates viewbox coordinates") - + self.OptionParser.add_option("--enable-comment-stripping", type="inkbool", + action="store", dest="strip_comments", default=False, + help="remove all comments") + self.OptionParser.add_option("--renderer-workaround", type="inkbool", + action="store", dest="renderer_workaround", default=False, + help="work around various renderer bugs (currently only librsvg)") def effect(self): input = file(sys.argv[12], "r") diff --git a/scour.inx b/scour.inx index 63050e8..4254882 100644 --- a/scour.inx +++ b/scour.inx @@ -7,16 +7,20 @@ yocto_css.py - true - true + true + true true - false + false + false true false + false + false + false false - false - 5 - + false + 5 + <_item value="space">Space <_item value="tab">Tab <_item value="none">None @@ -24,16 +28,19 @@ <_param name="instructions" type="description" xml:space="preserve">This extension optimizes the SVG file according to the following options: - * Simplify colors: convert all colors to #RRGGBB format. - * Style to xml: convert styles into XML attributes. - * Group collapsing: collapse group elements. - * Enable id stripping: remove all un-referenced ID attributes. - * Embed rasters: embed rasters as base64-encoded data. + * Shorten color names: convert all colors to #RRGGBB or #RGB format. + * Convert CSS attributes to XML attributes: convert styles from