- Fix another regression caused by new feature to merge sibling groups (#260)
- Fix regression caused by new feature to merge sibling groups (#260)
- Fix issue with dropping xlink:href attribute when collapsing referenced gradients (#206)
- Fix issue with dropping ID while de-duplicating gradients (#207)
- Improve
--shorten-ids
so it re-maps IDs that are already used in the document if they're shorter (#187) - Fix whitespace handling for SVG 1.2 flowed text (#235)
- Improvement: Merge sibling
<g>
nodes with identical attributes (#208) - Improve performance of XML serialization (#247)
- Improve performance of gradient de-duplication (#248)
- Some general performance improvements (#249)
- Fix escaping of quotes in attribute values. (#152)
- A lot of performance improvements making processing significantly faster in many cases. (#167, #169, #171, #185)
- Fix exception when removing duplicated gradients while
--keep-unreferenced-defs
is used (#173) - Remove some illegal optimizations of
m0 0
sub-path commands (#178) - Fix and improve handling of boolean flags in elliptical arc path commands (#183)
- Fix exception when shorthand transform
scale(1)
with single number is used (#191) - Fix exception when using two-number forms of the filter attributes
baseFrequency
,order
,radius
andstdDeviation
(#192) - Improve whitespace handling in text nodes fixing an issue where scouring added spaces in error and reducing file size in many cases (#199)
- Drop official support for Python 3.3. (While it will probably continue to work for a while compatibility is not guaranteed anymore. If you continue to use Scour with Python 3.3 and should find/fix any compatibility issues pull requests are welcome, though.)
- Fix embedding of raster images which was broken in most cases and did not work at all in Python 3. (#120)
- Some minor fixes for statistics output.
- Greatly improve the algorithm to reduce numeric precision.
- Precision was not properly reduced for some numbers.
- Only use reduced precision if it results in a shorter string representation, otherwise preserve full precision in output (e.g. use "123" instead of "1e2" when precision is set to 1).
- Reduce precision of lengths in
viewBox
(#127) - Add option
--set-c-precision
which allows to set a reduced numeric precision for control points.
Control points determine how a path is bent in between two nodes and are less sensitive to a reduced precision than the position coordinates of the nodes themselves. This option can be used to save a few additional bytes without affecting visual appearance negatively.
- Fix: Unnecessary whitespace was not stripped from elliptical paths. (#89)
- Improve and fix functionality to collapse straight paths segments. (#146)
- Collapse subpaths of moveto
m
and linetol
commands if they have the same direction (before we only collapsed horizontal/verticalh
/v
lineto commands). - Attempt to collapse lineto
l
commands into a preceding movetom
command (these are then called "implicit lineto commands") - Do not collapse straight path segments in paths that have intermediate markers. (#145)
- Preserve empty path segments if they have
stroke-linecap
set toround
orsquare
. They render no visible line but a tiny dot or square.
- Collapse subpaths of moveto
- Drop official support for Python 2.6. (While it will probably continue to work for a while compatibility is not guaranteed anymore. If you continue to use Scour with Python 2.6 and should find/fix any compatibility issues pull requests are welcome, though.)
- Fix: Unused IDs were not shortened when
--shorten-ids
was used. (#19) - Fix: Most elements were still removed from
<defs>
when--keep-unreferenced-defs
was used. (#62) - Improve escaping of single/double quotes ('/") in attributes. (#64)
- Print usage information if no input file was specified (and no data is available from
stdin
). (#65) - Redirect informational output to
stderr
when SVG is output tostdout
. (#67) - Allow elements to be found via
Document.getElementById()
in the minidom document returned by scourXmlFile(). (#68) - Improve code to remove default attribute values and add a lot of new default values. (#70)
- Fix: Only attempt to group elements that the content model allows to be children of a
<g>
when--create-groups
is specified. (#98) - Fix: Update list of SVG presentation attributes allowing more styles to be converted to attributes and remove two entries (
line-height
andvisibility
) that were actually invalid. (#99) - Add three options that work analogous to
--remove-metadata
(removes<metadata>
elements) (#102)--remove-titles
(removes<title>
elements)--remove-descriptions
(removes<desc>
elements)--remove-descriptive-elements
(removes all of the descriptive elements, i.e.<title>
,<desc>
and<metadata>
)
- Fix removal rules for the
overflow
attribute. (#104) - Improvement: Automatically order all attributes (#105), as well as
style
declarations (#107) allowing for a constant output across multiple runs of Scour. Before order could change arbitrarily. - Improve path scouring. (#108)
Notably Scour performs all calculations with enhanced precision now, guaranteeing maximum accuracy when optimizing path data. Numerical precision is reduced as a last step of the optimization according to the--precision
option. - Fix replacement of removed duplicate gradients if the
fill
/stroke
properties contained a fallback. (#109) - Fix conversion of cubic Bézier "curveto" commands into "shorthand/smooth curveto" commands. (#110)
- Fix some issues due to removal of properties without considering inheritance rules. (#111)
- Add a function to sanitize an arbitrary Python object containing options for Scour as attributes (usage:
Scour.sanitizeOptions(options)
).
This simplifies usage of the Scour module by other scripts while avoiding any compatibility issues that might arise when options are added/removed/renamed in Scour. (#44) - Input/output file can now be specified as positional arguments (e.g.
scour input.svg output.svg
). (#46) - Improve
--help
output by intuitively arranging options in groups. (#46) - Add option
--error-on-flowtext
to raise an exception whenever a non-standard<flowText>
element is found (which is only supported in Inkscape). If this option is not specified a warning will be shown. (#53) - Automate tests with continuous integration via Travis. (#52)
- Add support for removal of editor data of Sketch. (#37)
- Add option
--verbose
(or-v
) to show detailed statistics after running Scour. By default only a single line containing the most important information is output now.
- Add functionality to remove unused XML namespace declarations from the
<svg>
root element. (#14) - Restore unittests which were lost during move to GitHub. (#24)
- Fix a potential regex matching issue in
points
attribute of<polygon>
and<polyline>
elements. (#24) - Fix a crash with
points
attribute of<polygon>
and<polyline>
starting with a negative number. (#24) - Fix encoding issues when input file contained unicode characters. (#27)
- Fix encoding issues when using
stding
/stdout
as input/output. (#27) - Fix removal of comments. If a node contained multiple comments usually not all of them were removed. (#28)
- Ensure Python 3 compatibility. (#8)
- Add option
--nindent
to set the number of spaces/tabs used for indentation (defaults to 1). (#13) - Add option
--no-line-breaks
to suppress output of line breaks and indentation altogether. (#13) - Add option
--strip-xml-space
which removes the specification ofxml:space="preserve"
on the<svg>
root element which would otherwise disallow Scour to make any whitespace changes in output. (#13)
- Fix ignoring of additional args when invoked from scons.
- Add option
--keep-unreferenced-defs
to preserve elements in<defs>
that are not referenced and would be removed otherwise. (#2) - Add option to ignore unknown cmd line opts.
- Add option
--shorten-ids-prefix
which allows to add a custom prefix to all shortened IDs. (#1)
- Allow direct calling of the Scour module.
- Re-release of Scour 0.26, re-packaged as a Python module available from PyPI (Thanks to Tobias Oberstet!).
- Development moved to GitHub (https://github.com/scour-project/scour).
- Fix Bug 702423 to function well in the presence of multiple identical gradients and
--disable-style-to-xml
. - Fix Bug 722544 to properly optimize transformation matrices. Also optimize more things away in transformation specifications. (Thanks to Johan Sundström for the patch.)
- Fix Bug 616150 to run faster using the
--create-groups
option. - Fix Bug 708515 to handle raster embedding better in the presence of file:// URLs.
- Fix Bug 714717 to avoid deleting renderable CurveTo commands in paths, which happen to end where they started.
- Per Bug 714727 and Bug 714720, Scour now deletes text attributes, including "text-align", from elements and groups of elements that only contain shapes. (Thanks to Jan Thor for the patches.)
- Per Bug 714731, remove the default value of more SVG attributes. (Thanks to Jan Thor for the patch.)
- Fix Bug 717826 to emit the correct line terminator (CR LF) in optimized SVG content on the version of Scour used in Inkscape on Windows.
- Fix Bug 734933 to avoid deleting renderable LineTo commands in paths, which happen to end where they started, if their stroke-linecap property has the value "round".
- Fix Bug 717254 to delete
<defs>
elements that become empty after unreferenced element removal. (Thanks to Jan Thor for the patch.) - Fix Bug 627372 to future-proof the parameter passing between Scour and Inkscape. (Thanks to Bernd Feige for the patch.)
- Fix Bug 638764, which crashed Scour due to Python Issue 2531 regarding floating-point handling in ArcTo path commands. (Thanks to Walther for investigating this bug.)
- Per Bug 654759, enable librsvg workarounds by default in Scour.
- Added ID change and removal protection options per bug 492277:
--protect-ids-noninkscape
,--protect-ids-prefix
,--protect-ids-list
. (Thanks to Jan Thor for this patch.)
- Fix Bug 541889 to parse polygon/polyline points missing whitespace/comma separating a negative value. Always output points attributes as comma-separated.
- Fix Bug 519698 to properly parse move commands that have line segments.
- Fix Bug 577940 to include stroke-dasharray into list of style properties turned into XML attributes.
- Fix Bug 562784, typo in Inkscape description
- Fix Bug 603988, do not commonize attributes if the element is referenced elsewhere.
- Fix Bug 604000, correctly remove default overflow attributes.
- Fix Bug 603994, fix parsing of
<style>
element contents when a CDATA is present - Fix Bug 583758, added a bit to the Inkscape help text saying that groups aren't collapsed if IDs are also not stripped.
- Fix Bug 583458, another typo in the Inkscape help tab.
- Fix Bug 594930, In a
<switch>
, require one level of<g>
if there was a<g>
in the file already. Otherwise, only the first subelement of the<g>
is chosen and rendered. - Fix Bug 576958, "Viewbox option doesn't work when units are set", when renderer workarounds are disabled.
- Added many options:
--remove-metadata
,--quiet
,--enable-comment-stripping
,--shorten-ids
,--renderer-workaround
.
- Fix Bug 517064 to make XML well-formed again
- Fix Bug 503750 fix Inkscape extension to correctly pass
--enable-viewboxing
- Fix Bug 511186 to allow comments outside of the root
<svg>
node
- Fix Bug 482215 by using os.linesep to end lines
- Fix unittests to run properly in Windows
- Removed default scaling of image to 100%/100% and creating a viewBox. Added
--enable-viewboxing
option to explicitly turn that on - Fix Bug 503034 by only removing children of a group if the group itself has not been referenced anywhere else in the file
- Fix Bug 449803 by ensuring input and output filenames differ.
- Fix Bug 453737 by updated Inkscape's scour extension with a UI
- Fix whitespace collapsing on non-textual elements that had xml:space="preserve"
- Fix Bug 479669 to handle empty
<style>
elements.
- Fix Bug 427309 by updated Scour inkscape extension file to include yocto_css.py
- Fix Bug 435689 by properly preserving whitespace in XML serialization
- Fix Bug 436569 by getting
xlink:href
prefix correct with invalid SVG
- Fix Bug 368716 by implementing a really tiny CSS parser to find out if any style element have rules referencing gradients, filters, etc
- Remove unused attributes from parent elements
- Fix a bug with polygon/polyline point parsing if there was whitespace at the end
- Fix XML serialization bug:
xmlns:XXX
prefixes not preserved when not in default namespace - Fix XML serialization bug: remapping to default namespace was not actually removing the old prefix
- Move common attributes to ancestor elements
- Fix Bug 412754: Elliptical arc commands must have comma/whitespace separating the coordinates
- Scour lengths for svg x,y,width,height,*opacity,stroke-width,stroke-miterlimit
- Remove attributes of gradients if they contain default values
- Reduce bezier/quadratic (c/q) segments to their shorthand equivalents (s/t)
- Move to a custom XML serialization such that
id
/xml:id
is printed first (Thanks to Richard Hutch for the suggestion) - Added
--indent
option to specify indentation type (default='space', other options: 'none', 'tab')
- Only convert to #RRGGBB format if the color name will actually be shorter
- Remove duplicate gradients
- Remove empty q,a path segments
- Scour polyline coordinates just like path/polygon
- Scour lengths from most attributes
- Remove redundant SVG namespace declarations and prefixes
- Fix Bug 401628: Keep namespace declarations when using
--keep-editor-data
(Thanks YoNoSoyTu!) - Remove trailing zeros after decimal places for all path coordinates
- Use scientific notation in path coordinates if that representation is shorter
- Scour polygon coordinates just like path coordinates
- Add XML prolog to scour output to ensure valid XML, added
--strip-xml-prolog
option
- added
--keep-editor-data
command-line option - Fix Bug 395645: Keep all identified children inside a defs (Thanks Frederik!)
- Fix Bug 395647: Do not remove closepath (Z) path segments
- Collapse adjacent commands of the same type
- Convert straight curves into line commands
- Eliminate last segment in a polygon
- Rework command-line argument parsing
- Fix bug in embedRasters() caused by new command-line parsing
- added
--disable-embed-rasters
command-line option
- properly deal with
fill="url("#foo")"
- properly handle paths with more than 1 pair of coordinates in the first Move command
- remove font/text styles from shape elements (font-weight, font-size, line-height, etc)
- remove -inkscape-font-specification styles
- added
--set-precision
argument to set the number of significant digits (defaults to 5 now) - collapse consecutive h,v coords/segments that go in the same direction
- upgraded enthought's path parser to handle scientific notation in path coordinates
- convert colors to #RRGGBB format
- added option to disable color conversion
- convert gradient stop offsets from percentages to float
- convert gradient stop offsets to integers if possible (0 or 1)
- fix bug in line-to-hv conversion
- handle non-ASCII characters (Unicode)
- remove empty line or curve segments from path
- added option to prevent style-to-xml conversion
- handle compressed svg (svgz) on the input and output
- added total time taken to the report
- Removed XML pretty printing because of this problem.
- Remove path with empty d attributes
- Sanitize path data (remove unnecessary whitespace)
- Convert from absolute to relative path data
- Remove trailing zeroes from path data
- Limit to no more than 6 digits of precision
- Remove empty line segments
- Convert lines to horiz/vertical line segments where possible
- Remove some more default styles (
display:none
,visibility:visible
,overflow:visible
,marker:none
)
- Fix bug when removing stroke styles
- Remove gradients that are only referenced by one other gradient
- Added option to prevent group collapsing
- Prevent groups with title/desc children from being collapsed
- Remove stroke="none"
- Remove unnecessary nested
<g>
elements - Remove duplicate gradient stops (same offset, stop-color, stop-opacity)
- Always keep fonts inside
<defs>
, always keep ids on fonts - made ID stripping optional (disabled by default)
- moved all functionality into a module level function named 'scour' and began adding unit tests
- prevent metadata from being removed if they contain only text nodes
- Remove unreferenced pattern and gradient elements outside of defs
- Removal of extra whitespace, pretty printing of XML
- Prevent error when stroke-width property value has a unit
- Convert width/height into a viewBox where possible
- Convert all referenced rasters into base64 encoded URLs if the files can be found
- Removes unreferenced elements in a
<defs>
- Removes all inkscape, sodipodi, adobe elements
- Removes all inkscape, sodipodi, adobe attributes
- Remove all unused namespace declarations on the document element
- Removes any empty
<defs>
,<metadata>
, or<g>
elements - Style fix-ups:
- Fixes any style properties like this:
style="fill: url(#linearGradient1000) rgb(0, 0, 0);"
- Removes any style property of:
opacity: 1;
- Removes any stroke properties when
stroke=none
orstroke-opacity=0
orstroke-width=0
- Removes any fill properties when
fill=none
orfill-opacity=0
- Removes all fill/stroke properties when
opacity=0
- Removes any
stop-opacity: 1
- Removes any
fill-opacity: 1
- Removes any
stroke-opacity: 1
- Removes any style property of:
- Convert style properties into SVG attributes