from xml.sax import handler, make_parser

class MyHandler(handler.ContentHandler):

    def __init__(self):
    	self.rl_value = {}
	self.tmp_value = {}
	self.region_value = {}
	self.par_value = {}
	self.img_value = {}
	self.aui_value = {}
	self.txt_value = {}
	self.vdo_value = {}
	self.ref_value = {}
	self.ptime = {}
	self.pvalue = []
	self.rg_value = []
	self.np_value = []
	self.bpar = False

    def startDocument(self):
    	pass

    def endDocument(self):
    	pass

    def startElement(self, name, attrs):

	if name=="root-layout":
		for name in attrs.getNames():
			self.rl_value[name] = attrs.getValue(name)

	elif name=="region":
		for name in attrs.getNames():
			self.region_value[name] = attrs.getValue(name)

	elif name=="par":
		self.bpar = True
		for name in attrs.getNames():
			self.ptime[name] = attrs.getValue(name)

	elif name=="img":
		for name in attrs.getNames():
			self.img_value[name] = attrs.getValue(name)
		if self.bpar == False:
			self.parSave()

	elif name=="audio":
		for name in attrs.getNames():
			self.aui_value[name] = attrs.getValue(name)
		if self.bpar == False:
			self.parSave()

	elif name=="text":
		for name in attrs.getNames():
			self.txt_value[name] = attrs.getValue(name)
		if self.bpar == False:
			self.parSave()

	elif name=='video':
		for name in attrs.getNames():
			self.vdo_value[name] = attrs.getValue(name)
		if self.bpar == False:
			self.parSave()

	elif name=='ref':
		for name in attrs.getNames():
			self.ref_value[name] = attrs.getValue(name)
		if self.bpar == False:
			self.parSave()

    def parSave(self):
	pvalue = [self.ptime, self.img_value, self.aui_value, self.txt_value, self.vdo_value, self.ref_value]
	self.np_value.append(pvalue)
	self.img_value = {}
	self.aui_value = {}
	self.txt_value = {}
	self.vdo_value = {}
	self.ref_value = {}
	self.ptime = {}

    def endElement(self, name):

        if name == "region":
        	self.rg_value.append(self.region_value)
        	self.region_value = {}

	if name=="par":
		self.bpar = False
		self.parSave()

    def setDocumentLocator(self, locator):
        self.locator = locator

class ErrHandler(handler.ErrorHandler):
	def error(self, exception):
		pass
		
	def fatalError(self, exception):
		pass

	def warning(self, exception):
		pass

def setsmil(filename):
    h = MyHandler()
    parser = make_parser()
    parser.setContentHandler(h)
    parser.setErrorHandler(ErrHandler())
    parser.parse(filename)
    return h.rl_value, h.rg_value, h.np_value

