<?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;
}
?>