map-machine/engine/extract_icon.py
2015-08-07 01:32:29 +03:00

46 lines
1.4 KiB
Python

"""
Extract icons from SVG file.
Author: Sergey Vartanov (me@enzet.ru).
"""
import re
import xml.dom.minidom
class IconExtractor:
def __init__(self, svg_file_name):
self.icons = {}
input_file = open(svg_file_name)
content = xml.dom.minidom.parse(input_file)
for element in content.childNodes:
if element.nodeName == 'svg':
for node in element.childNodes:
if node.nodeName in ['g', 'path']:
self.parse(node)
def parse(self, node):
if node.nodeName == 'path':
if 'id' in node.attributes.keys() and \
'd' in node.attributes.keys() and \
node.attributes['id'].value != '':
path = node.attributes['d'].value
m = re.match('[Mm] ([0-9.e-]*)[, ]([0-9.e-]*)', path)
if not m:
print 'Error path: ' + path
else:
x = float(m.group(1))
y = float(m.group(2))
x = int(x / 16)
y = int(y / 16)
self.icons[node.attributes['id'].value] = \
(node.attributes['d'].value, x, y)
else:
for subnode in node.childNodes:
self.parse(subnode)
def get_path(self, id):
if id in self.icons:
return self.icons[id]
else:
return None, 0, 0