All pastes #21587 Raw Edit

Anonymous

public text v1 · immutable
#21587 ·published 2005-08-30 05:25 UTC
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;
	}