function isWS(c) {
	return (c == ' ' || c == '\n');
}
function isNonword(c) {
	return (c == ' ' || c == '\n' || c == ')');
}

function assert(p) {
	if (!p)
		throw "assert failed";
}

window.onload = function () {
	var p = document.getElementsByTagName('plaintext')[0];
	var s = p.innerHTML;
	var c = 0;

	function consumeWS() {
		while (c < s.length && isWS(s[c])) { c++ }
	}
	function consumeWord() {
		var c0 = c;
		while (c < s.length && !isNonword(s[c])) { c++ }
		return s.substring(c0, c);
	}
	function consumeString() {
		var c0 = ++c;
		while (c < s.length && s[c++] != '"') { }
		return s.substring(c0, c-1);
	}
	function consumeGroup() {
		consumeWS();
		assert(s[c++] == '(');
		var name = consumeWord();
		var el = document.createElement(name);
		consumeWS();
		while (c < s.length)
		{
			switch (s[c]) {
			case '(':
				el.appendChild(consumeGroup());
				break;
			case '"':
				el.appendChild(document.createTextNode(consumeString()));
				break;
			case ')':
				c++;
				return el;
			default:
				var at = consumeWord();
				consumeWS();
				var val = consumeString();
				consumeWS();
				el.setAttribute(at, val);
				break;
			}
			consumeWS();
		}
	}
	
	for (var i = document.documentElement.childNodes.length-1; i >= 0; --i)
		document.documentElement.removeChild(document.documentElement.childNodes[i]);
	document.documentElement.appendChild(consumeGroup());
}

document.write('<plaintext style="display:none">')
