import xml.etree.ElementTree as ET
import sys,re
from CompactTokenizer import CompactTokenizer
def expand(elem):
global ct
ct.skip("[")
while ct.getToken()=='@':
attName = ct.nextToken()
ct.nextToken()
elem.attrib[attName]=ct.skip("[")
ct.nextToken()
ct.skip("]")
lastNodeWasText=True
while ct.getToken()!=']':
s=ct.getToken().strip()
ct.nextToken()
if ct.getToken()=="[":
child=ET.Element(s)
elem.append(child)
expand(child)
lastNodeWasText=False
else:
if lastNodeWasText:
if not elem.text:
elem.text=""
elem.text+=s
else:
if not child.tail:
child.tail=""
child.tail+=s
ct.skip("]")
ct = CompactTokenizer(sys.stdin)
while ct.nextToken()!='[':
rootName=ct.getToken()
doc=ET.Element(rootName.strip())
expand(doc)
# ElementTree does not provide a pretty-print method so we define one
def pprint(elem,indent):
sys.stdout.write(indent+'<'+elem.tag)
for a in elem.attrib:
sys.stdout.write(' %s="%s"'%(a,elem.attrib[a]))
newindent = indent+" "
sys.stdout.write('>')
if elem.text:
sys.stdout.write(elem.text)
for child in elem:
pprint(child,newindent)
if child.tail:
sys.stdout.write(newindent+child.tail)
if elem:
sys.stdout.write(indent)
sys.stdout.write('</'+elem.tag+'>')
pprint(doc,"\n")
sys.stdout.write("\n")