from xml.dom.minidom import parse

class SVGLoader:
	"""
	Load an SVG and parse it. Override layer types for specific behaviours.
	"""
	colors = {"white": [255, 255, 255], "black": [0, 0, 0], "red": [255, 0, 0], "green": [0, 128, 0]}
	
	def GetLayerRectangles(self):
		return [{"id": r.getAttribute("id"), "details": r.getAttribute("inkscape:label").split(","), "rectangle": (float(r.getAttribute("x")), float(r.getAttribute("y")), float(r.getAttribute("width")), float(r.getAttribute("height")))} for r in self.svgLayer.getElementsByTagName("rect")]
	
	def GetLayerPaths(self):
		return [{"id": r.getAttribute("id"), "details": dict([tuple(s.split(":")) for s in r.getAttribute("style").split(";")]), "path": r.getAttribute("d").split(" ")} for r in self.svgLayer.getElementsByTagName("path")]
	
	def LoadSVG(self, filename):
		dom = parse(filename)
		width = dom.getElementsByTagName("svg")[0].getAttribute("width")
		height = dom.getElementsByTagName("svg")[0].getAttribute("height")
		self.SVGSize = size = [float(width), float(height)]
		self.SVGFilename = filename
		
		# for every layer in our document
		for l in dom.getElementsByTagName("g"):
			self.svgLayer = l
			# inkscape may automatically add a "#", which we don't care about
			parts = l.getAttribute("inkscape:label").split("#")
			info = parts[0].split(",")
			
			# try and call the method specified by this layer name
			# if it's in the list of allowed calls
			if info[0] in ["background", "sprite", "backgroundboxes", "spriteboxes"] and hasattr(self, "Layer_" + info[0]):
				getattr(self, "Layer_" + info[0])(l, size, info, dom)


