from xml.sax import handler, make_parser
class MyHandler(handler.ContentHandler):
def __init__(self):
self.bstyle = False
self.bbody = False
self.tmp_tag = []
self.xhtml_style = []
self.xhtml_body = []
def startDocument(self):
#print 'Start of Document'
pass
def endDocument(self):
#print 'End of Document'
#print self.xhtml_style
#print self.xhtml_body
pass
def startElement(self, name, attrs):
#print 'Start Tag:', name
if self.bbody == True:
self.tmp_tag.append(name)
if name == "style":
self.bstyle = True
elif name == "body":
self.bbody = True
#print 'tag1', self.tmp_tag
def endElement(self, name):
#print 'End Tag:', name
if name == "style":
self.bstyle = False
elif name == "body":
self.bbody = False
if self.bbody == True:
self.tmp_tag.remove(name)
#print 'tag2', self.tmp_tag
def characters(self, content):
#print 'Location : (%s, %s)' % (self.locator.getLineNumber(), self.locator.getColumnNumber())
#print '\tText :', content.replace('\n', '\\n')
#print 'tag3',self.tmp_tag
if self.bstyle == True:
if content != '\n':
#print 'bstyle'
k = content.find(' ')
attri = content[:k].strip()
value = content[k:].strip()
#print content[:k], "==", content[k:].strip()
tv = value[1:-1]
endv = tv.split(':')
tmp_style = [ attri, endv[0].strip(), endv[1].strip() ]
self.xhtml_style.append(tmp_style)
elif self.bbody == True:
if content != '\n':
#print 'bbody'
self.xhtml_body.append([tuple(self.tmp_tag), content])
#print self.xhtml_body
def setDocumentLocator(self, locator):
self.locator = locator
class ErrHandler(handler.ErrorHandler):
def error(self, exception):
print 'Error occured:::'
#print exception
def fatalError(self, exception):
print 'fatalError occured:::'
def warning(self, exception):
print 'warning:::'
def setsmil(filename):
h = MyHandler()
parser = make_parser()
parser.setContentHandler(h)
parser.setErrorHandler(ErrHandler())
parser.parse(filename)
return h.xhtml_style, h.xhtml_body