blob: 45897fda4d85dd004a6e22a9254a936610a0e3a1 [file] [log] [blame]
String.prototype.toAsciiLowerCase = function () {
var output = "";
for (var i = 0, len = this.length; i < len; ++i) {
if (this.charCodeAt(i) >= 0x41 && this.charCodeAt(i) <= 0x5A) {
output += String.fromCharCode(this.charCodeAt(i) + 0x20)
} else {
output += this.charAt(i);
}
}
return output;
}
function indent(ancestors) {
var str = "";
if (ancestors > 0) {
while (ancestors--)
str += " ";
}
return str;
}
function dom2string(node, ancestors) {
var str = "";
if (typeof ancestors == "undefined")
var ancestors = 0;
if (!node.firstChild)
return "| ";
var parent = node;
var current = node.firstChild;
var next = null;
var misnested = null;
for (;;) {
str += "\n| " + indent(ancestors);
switch (current.nodeType) {
case 10:
str += '<!DOCTYPE ' + current.nodeName + '>';
break;
case 8:
try {
str += '<!-- ' + current.nodeValue + ' -->';
} catch (e) {
str += '<!-- -->';
}
if (parent != current.parentNode) {
return str += ' (misnested... aborting)';
}
break;
case 7:
str += '<?' + current.nodeName + current.nodeValue + '>';
break;
case 4:
str += '<![CDATA[ ' + current.nodeValue + ' ]]>';
break;
case 3:
str += '"' + current.nodeValue + '"';
if (parent != current.parentNode) {
return str += ' (misnested... aborting)';
}
break;
case 1:
str += "<";
switch (current.namespaceURI) {
case "http://www.w3.org/2000/svg":
str += "svg ";
break;
case "http://www.w3.org/1998/Math/MathML":
str += "math ";
break;
}
if (current.localName && current.namespaceURI && current.namespaceURI != null) {
str += current.localName;
} else {
str += current.nodeName.toAsciiLowerCase();
}
str += '>';
if (parent != current.parentNode) {
return str += ' (misnested... aborting)';
} else {
if (current.attributes) {
var attrNames = [];
var attrPos = {};
for (var j = 0; j < current.attributes.length; j += 1) {
if (current.attributes[j].specified) {
var name = "";
switch (current.attributes[j].namespaceURI) {
case "http://www.w3.org/XML/1998/namespace":
name += "xml ";
break;
case "http://www.w3.org/2000/xmlns/":
name += "xmlns ";
break;
case "http://www.w3.org/1999/xlink":
name += "xlink ";
break;
}
if (current.attributes[j].localName) {
name += current.attributes[j].localName;
} else {
name += current.attributes[j].nodeName;
}
attrNames.push(name);
attrPos[name] = j;
}
}
if (attrNames.length > 0) {
attrNames.sort();
for (var j = 0; j < attrNames.length; j += 1) {
str += "\n| " + indent(1 + ancestors) + attrNames[j];
str += '="' + current.attributes[attrPos[attrNames[j]]].nodeValue + '"';
}
}
}
if (next = current.firstChild) {
parent = current;
current = next;
ancestors++;
continue;
}
}
break;
}
for (;;) {
if (next = current.nextSibling) {
current = next;
break;
}
current = current.parentNode;
parent = parent.parentNode;
ancestors--;
if (current == node) {
return str.substring(1);
}
}
}
}