summaryrefslogtreecommitdiffstats
path: root/share/extensions/output_scour.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:24:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:24:48 +0000
commitcca66b9ec4e494c1d919bff0f71a820d8afab1fa (patch)
tree146f39ded1c938019e1ed42d30923c2ac9e86789 /share/extensions/output_scour.py
parentInitial commit. (diff)
downloadinkscape-12fc8abae6d434cac7670a59ed3a67301cc2eb10.tar.xz
inkscape-12fc8abae6d434cac7670a59ed3a67301cc2eb10.zip
Adding upstream version 1.2.2.upstream/1.2.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-xshare/extensions/output_scour.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/share/extensions/output_scour.py b/share/extensions/output_scour.py
new file mode 100755
index 0000000..185ea97
--- /dev/null
+++ b/share/extensions/output_scour.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+"""
+Run the scour module on the svg output.
+"""
+
+
+import inkex
+from inkex.localization import inkex_gettext as _
+
+try:
+ from packaging.version import Version
+except ImportError:
+ raise inkex.DependencyError(
+ _(
+ """Failed to import module 'packaging'.
+Please make sure it is installed (e.g. using 'pip install packaging'
+or 'sudo apt-get install python3-packaging') and try again.
+"""
+ )
+ )
+
+try:
+ import scour
+ from scour.scour import scourString
+except ImportError:
+ raise inkex.DependencyError(
+ _(
+ """Failed to import module 'scour'.
+Please make sure it is installed (e.g. using 'pip install scour'
+ or 'sudo apt-get install python3-scour') and try again.
+"""
+ )
+ )
+
+
+class ScourInkscape(inkex.OutputExtension):
+ """Scour Inkscape Extension"""
+
+ # Scour options
+ def add_arguments(self, pars):
+ pars.add_argument("--tab")
+ pars.add_argument("--simplify-colors", type=inkex.Boolean, dest="simple_colors")
+ pars.add_argument("--style-to-xml", type=inkex.Boolean)
+ pars.add_argument(
+ "--group-collapsing", type=inkex.Boolean, dest="group_collapse"
+ )
+ pars.add_argument("--create-groups", type=inkex.Boolean, dest="group_create")
+ pars.add_argument("--enable-id-stripping", type=inkex.Boolean, dest="strip_ids")
+ pars.add_argument("--shorten-ids", type=inkex.Boolean)
+ pars.add_argument("--shorten-ids-prefix")
+ pars.add_argument("--embed-rasters", type=inkex.Boolean)
+ pars.add_argument(
+ "--keep-unreferenced-defs", type=inkex.Boolean, dest="keep_defs"
+ )
+ pars.add_argument("--keep-editor-data", type=inkex.Boolean)
+ pars.add_argument("--remove-metadata", type=inkex.Boolean)
+ pars.add_argument("--strip-xml-prolog", type=inkex.Boolean)
+ pars.add_argument("--set-precision", type=int, dest="digits")
+ pars.add_argument("--indent", dest="indent_type")
+ pars.add_argument("--nindent", type=int, dest="indent_depth")
+ pars.add_argument("--line-breaks", type=inkex.Boolean, dest="newlines")
+ pars.add_argument(
+ "--strip-xml-space", type=inkex.Boolean, dest="strip_xml_space_attribute"
+ )
+ pars.add_argument("--protect-ids-noninkscape", type=inkex.Boolean)
+ pars.add_argument("--protect-ids-list")
+ pars.add_argument("--protect-ids-prefix")
+ pars.add_argument("--enable-viewboxing", type=inkex.Boolean)
+ pars.add_argument(
+ "--enable-comment-stripping", type=inkex.Boolean, dest="strip_comments"
+ )
+ pars.add_argument("--renderer-workaround", type=inkex.Boolean)
+
+ # options for internal use of the extension
+ pars.add_argument("--scour-version")
+ pars.add_argument("--scour-version-warn-old", type=inkex.Boolean)
+
+ def save(self, stream):
+ # version check if enabled in options
+ if self.options.scour_version_warn_old:
+ scour_version = scour.__version__
+ scour_version_min = self.options.scour_version
+ if Version(scour_version) < Version(scour_version_min):
+ raise inkex.AbortExtension(
+ f"""
+The extension 'Optimized SVG Output' is designed for Scour {scour_version_min} or later but you're
+ using the older version Scour {scour_version}.
+
+Note: You can permanently disable this message on the 'About' tab of the extension window."""
+ )
+ del self.options.scour_version
+ del self.options.scour_version_warn_old
+
+ # do the scouring
+ stream.write(scourString(self.svg.tostring(), self.options).encode("utf8"))
+
+
+if __name__ == "__main__":
+ ScourInkscape().run()