Add template for making python scripts that edit SVGs
This commit is contained in:
		
							parent
							
								
									d3ec9c0b1a
								
							
						
					
					
						commit
						860440c97f
					
				
							
								
								
									
										46
									
								
								svg-xml-script-template.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								svg-xml-script-template.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,46 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
"""
 | 
			
		||||
SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL
 | 
			
		||||
SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com>
 | 
			
		||||
SPDX-FileCopyrightText: 2020 Niccolò Venerandi <niccolo@venerandi.com>
 | 
			
		||||
"""
 | 
			
		||||
import sys
 | 
			
		||||
from lxml import etree
 | 
			
		||||
"""
 | 
			
		||||
This is a template for making scripts that modify SVGs by parsing XML.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
# These are needed to prevent nonsense namespaces like ns0 from being
 | 
			
		||||
# added to otherwise perfectly fine svg elements and attributes
 | 
			
		||||
etree.register_namespace("w3c", "http://www.w3.org/2000/svg")
 | 
			
		||||
etree.register_namespace("xlink", "http://www.w3.org/1999/xlink")
 | 
			
		||||
etree.register_namespace("inkscape", "http://www.inkscape.org/namespaces/inkscape")
 | 
			
		||||
etree.register_namespace("dc", "http://purl.org/dc/elements/1.1/")
 | 
			
		||||
etree.register_namespace("cc", "http://creativecommons.org/ns#")
 | 
			
		||||
etree.register_namespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
 | 
			
		||||
etree.register_namespace("sodipodi", "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd")
 | 
			
		||||
 | 
			
		||||
# Get filenames as arguments. Combine with your favorite CLI tools.
 | 
			
		||||
# My favorites are rg (aka ripgrep) and fd (aka fd-find).
 | 
			
		||||
# Remember to filter out files that are not SVGs!
 | 
			
		||||
# Example: ./this-script.py $(rg -t svg -l 'height="0"')
 | 
			
		||||
for f in sys.argv[1:]:
 | 
			
		||||
    tree = etree.parse(f)
 | 
			
		||||
    root = tree.getroot()
 | 
			
		||||
    wasEdited = False
 | 
			
		||||
 | 
			
		||||
    # BEGIN section
 | 
			
		||||
    # Reimplement this section as needed
 | 
			
		||||
    # {http://www.w3.org/2000/svg} is needed to find SVG elements
 | 
			
		||||
    # Example: find all rect elements
 | 
			
		||||
    for elem in root.iterfind(".//{http://www.w3.org/2000/svg}rect"):
 | 
			
		||||
        # Example: find rect elements where height="0"
 | 
			
		||||
        if (elem.get("height") == "0"):
 | 
			
		||||
            # Example: remove rect elements that have height="0"
 | 
			
		||||
            elem.getparent().remove(elem)
 | 
			
		||||
            wasEdited = True  # Remember to keep this
 | 
			
		||||
    # END section
 | 
			
		||||
 | 
			
		||||
    print(f + ": " + ("edited" if wasEdited else "ignored"))
 | 
			
		||||
    if wasEdited:
 | 
			
		||||
        tree.write(f, encoding="utf-8", xml_declaration=False, method="xml")
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user