icons/svg2sprite.py
2023-07-08 08:32:41 -04:00

56 lines
2.1 KiB
Python
Executable file

#! /bin/python
import os,re
# Delete the spritesheet.svg file if it exists
if os.path.exists("spritesheet.svg"):
os.remove("spritesheet.svg")
# Open the output file and write the opening <svg> tag
with open("spritesheet.svg", "w") as f:
f.write('<svg style="display:none;">\n')
# List all the SVG files in the current directory
for filename in os.listdir():
if filename.endswith(".svg") and filename != 'spritesheet.svg':
# Read the SVG file
with open(filename, "r") as f:
svg = f.read()
# Extract the viewbox attribute from the SVG file
viewbox = re.search(r'viewBox="(.*?)"', svg).group(1)
# Extract the content within the <svg> tag
start = svg.find('<svg')+4
end = svg.find('</svg>', start) + len('</svg>')
svg = svg[start:end]
# Remove stroke and fill attributes from the children
svg = re.sub(r'height="(.*?)"', '', svg,1)
svg = re.sub(r'width="(.*?)"', '', svg,1)
svg = svg.replace("fill:#000000;","")
svg = svg.replace("stroke:#000000;","")
svg = svg.replace("fill:none","fill:none !important;")
svg = re.sub(r'showgrid="(.*?)"','',svg)
svg = re.sub(r'id="(.*?)"','',svg)
svg = re.sub(r'inkscape:.*?=".*?"', '', svg)
svg = re.sub(r'<sodipodi:namedview.*?\/\>','',svg,flags=re.S)
svg = re.sub(r'<defs.*?\/\>','',svg,flags=re.S)
svg = re.sub(r'sodipodi:.*?=".*?"', '', svg)
svg = re.sub(r'xmlns.*?=".*?"', '', svg)
svg = re.sub(r'version="(.*?)"', '', svg)
# Replace the closing </svg> tag with the closing </symbol> tag
svg = svg.replace('</svg>', '</symbol>', 1)
# Insert the id and viewbox attributes in the opening <svg> tag
id = os.path.splitext(filename)[0]
svg = f'<symbol id="{id}" {svg}'
# Write the modified SVG to the output file
with open("spritesheet.svg", "a") as f:
f.write(svg.replace("\n\n",''))
# Write the closing </svg> tag to the output file
with open("spritesheet.svg", "a") as f:
f.write('</svg>\n')