rendered paste body function _refactor_struct($in) {
$out = array();
$lvl = 0;
$opencontent =& $out;
end($in);
$firstandlast = array(0, key($in));
foreach ($in as $i=>$element) {
$element['tag'] = strtolower($element['tag']);
if (in_array($i, $firstandlast)) {
if ($element['tag'] != '_top')
die('expected "_top" tag at index '.$i.': got '.$element['tag']);
if ($element['type'] != (($i == 0) ? 'open' : 'close'))
die('expected '.(($i == 0) ? 'open' : 'close').' type at index '.$i.': got '.$element['type']);
continue;
}
$newitem = array('tag'=>$element['tag']);
if ($element['attributes'])
$newitem['attributes'] = array_change_key_case($element['attributes']);
switch ($element['type']) {
case 'open':
++$lvl;
$newitem['content'] = array();
if ($element['value'])
$newitem['content'][] = $element['value'];
$opencontent[] = $newitem;
$lastopencontent = $opencontent;
unset($opencontent);
$opencontent =& $lastopencontent[count($lastopencontent) - 1]['content'];
echo 'open: level '.$lvl.'/'.$newitem['tag'].': '.$element['value']."\n";
var_dump($opencontent);
break;
case 'close':
--$lvl;
unset($opencontent);
$opencontent =& $out;
for ($j = 0; $j < $lvl; ++$j) {
$lastopencontent = $opencontent;
unset($opencontent);
$opencontent =& $lastopencontent[count($lastopencontent) - 1]->content;
}
echo 'close: level '.$lvl.'/'.$newitem['tag']."\n";
break;
case 'complete':
$newitem['content'] = $element['value'];
$opencontent[] = $newitem;
echo 'complete: level '.$lvl.'/'.$newitem['tag'].': '.$element['value']."\n";
break;
case 'cdata':
$opencontent[] = $element['value'];
echo 'cdata: level '.$lvl.'/'.$newitem['tag'].': '.$element['value']."\n";
break;
default:
var_dump($element);
die('wtf in _refactor_struct');
}
}
var_dump($out);
return $out;
}