summaryrefslogtreecommitdiff
path: root/renderer/support/inkscape_svg_filter_layers.py
diff options
context:
space:
mode:
authorjaseg <git@jaseg.net>2019-09-27 10:07:38 +0200
committerjaseg <git@jaseg.net>2019-09-27 10:07:38 +0200
commit6002d409143a6726899a4de15c3a6b279a6b1d71 (patch)
treefcde90f9b0ece9d552164effcc710b7fad978126 /renderer/support/inkscape_svg_filter_layers.py
parent3340885ade322e8ae6b75257cc760ff48e218a0a (diff)
downloadpogojig-6002d409143a6726899a4de15c3a6b279a6b1d71.tar.gz
pogojig-6002d409143a6726899a4de15c3a6b279a6b1d71.tar.bz2
pogojig-6002d409143a6726899a4de15c3a6b279a6b1d71.zip
Directory reorg: Put renderer into its own subdir
Diffstat (limited to 'renderer/support/inkscape_svg_filter_layers.py')
-rwxr-xr-xrenderer/support/inkscape_svg_filter_layers.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/renderer/support/inkscape_svg_filter_layers.py b/renderer/support/inkscape_svg_filter_layers.py
new file mode 100755
index 0000000..9301e1e
--- /dev/null
+++ b/renderer/support/inkscape_svg_filter_layers.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python3
+
+import xml.etree.ElementTree as xe
+import argparse
+import re
+
+
+if __name__ != '__main__':
+ raise SystemError('Not running as shell script')
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument('infile', metavar='input.svg', type=argparse.FileType('r'))
+parser.add_argument('outfile', metavar='output.svg', type=argparse.FileType('wb'))
+parser.add_argument('-n', '--name', nargs='+', default=[], help='Remove layers with this exact name (case-insensitive)')
+parser.add_argument('-r', '--regex', nargs='+', default=[], help='Remove layers with names matching this regex')
+parser.add_argument('-i', '--invisible', action='store_true', help='Remove hidden (invisible) layers')
+parser.add_argument('-o', '--only', action='store_true', help='Invert logic, i.e. keep matched layers and discard others')
+parser.add_argument('-d', '--strip-defs', action='store_true', help='Also strip any <defs> tags (off by default)')
+args = parser.parse_args()
+
+doc = xe.fromstring(args.infile.read())
+ns = {
+ 'svg': 'http://www.w3.org/2000/svg',
+ 'inkscape': 'http://www.inkscape.org/namespaces/inkscape',
+ 'sodipodi': 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'
+}
+
+if args.strip_defs:
+ for elem in doc.findall('svg:defs', ns):
+ doc.remove(elem)
+
+for i, g in enumerate(doc.findall('svg:g', ns)):
+ if g.attrib.get(f'{{{ns["inkscape"]}}}groupmode') != 'layer':
+ continue
+
+ label = g.attrib.get(f'{{{ns["inkscape"]}}}label', '')
+ match = (
+ any(label == name for name in args.name) or
+ any(re.match(regex, label) for regex in args.regex) or
+ ('display:none' in g.attrib.get('style', '') and args.hidden)
+ )
+ print(f'Layer {i} "{label}": {"match" if match else "not found"}', end='')
+
+ if match != args.only:
+ print(', removing.')
+ doc.remove(g)
+ else:
+ print()
+
+args.outfile.write(xe.tostring(doc))