<?php 
require 'CompactTokenizer.php';

function expand($elem){
    global $st;
    $st->skip('[');
    while($st->getToken()=='@'){   // process attributes
        $attName=$st->skip("@");
        $st->nextToken();
        $elem->addAttribute("$attName",$st->skip("["));
        $st->nextToken();
        $st->skip("]");
    }
    while ($st->getToken()!=false && $st->getToken()!="]") { 
        $s = trim($st->getToken()); // process children
        $st->nextToken();
        if($st->getToken()=="[") {
            expand($elem->addChild($s));
         } else 
            $elem[0]=$s; // add a text node
    }
    $st->skip("]");
}

$st = new CompactTokenizer('php://stdin');
$rootname = $st->getToken();
while($st->nextToken()!='['){
    $rootname=$st->getToken();
}

$sxelem = new SimpleXMLElement("<$rootname/>");
expand($sxelem);

print ppXML($sxelem,"");

function ppXML($sxelem,$indent){
    $res="";
    $name = $sxelem->getName();
    $res.="$indent<$name";
    if(count($sxelem->attributes()>0))
        foreach ($sxelem->attributes() as $attname => $attvalue)
            $res.=" ".$attname.'="'.$attvalue.'"';
    $text = trim((string) $sxelem);
    if($sxelem->count()==0 && strlen($text) == 0)
        $res.="/>\n";
    else if($sxelem->count()==0) 
        $res.=">$text</$name>\n";
    else {
        $res.=">$text\n";
        foreach ($sxelem->children() as $child)
            $res.=ppXML($child,$indent."   ");
        $res.="$indent</$name>\n";
    }
    return $res;    
}

?>