diff --git a/lib/jsdom/browser/domtohtml.js b/lib/jsdom/browser/domtohtml.js
index 8fd77f64bb..b3467b54a6 100644
--- a/lib/jsdom/browser/domtohtml.js
+++ b/lib/jsdom/browser/domtohtml.js
@@ -23,9 +23,6 @@ var singleTags = {
var expr = {
upperCaseChars: /([A-Z])/g,
breakBetweenTags: /(<(\/?\w+).*?>)(?=<(?!\/\2))/gi,
- endsWithEndTag: /.+<\/\w[^>]*>$/,
- startsWithEndTag: /^<\/\w/,
- startsWithStartTag: /^<\w[^>]*[^\/]>.*$/,
singleTag: (function() {
var tags = [];
for (var i in singleTags) {
@@ -104,39 +101,6 @@ exports.stringifyElement = function stringifyElement(element) {
return ret;
};
-exports.formatHTML = function formatHTML(html) {
- var formatted = '',
- pad = 0;
-
- html = html.replace(expr.breakBetweenTags, '$1\r\n');
- html.split('\r\n').forEach(function(node, index) {
- var indent = 0, padding = '', i;
-
- if (node.match(expr.endsWithEndTag)) {
- indent = 0;
- } else if (node.match(expr.startsWithEndTag)) {
- if (pad != 0) {
- pad -= 1;
- }
- } else if (node.match(expr.startsWithStartTag)) {
- if (!expr.singleTag.exec(node)) {
- indent = 1;
- }
- } else {
- indent = 0;
- }
-
- for (i = 0; i < pad; i++) {
- padding += ' ';
- }
-
- formatted += padding + node + '\r\n';
- pad += indent;
- });
-
- return formatted;
-};
-
var rawTextElements = /SCRIPT|STYLE/i;
function stringifyDoctype (doctype) {
@@ -164,72 +128,86 @@ function stringifyDoctype (doctype) {
return dt;
}
-exports.generateHtmlRecursive = function generateHtmlRecursive(node, rawText) {
- var ret = "", parent, current, i;
- if (node) {
- if (node.nodeType &&
- node.nodeType === node.ENTITY_REFERENCE_NODE)
- {
- node = node._entity;
- }
-
- if (!rawText && node._parentNode) {
- rawText = rawTextElements.test(node._parentNode.nodeName);
- }
+exports.makeHtmlGenerator = function makeHtmlGenerator(indentUnit, eol) {
+ indentUnit = indentUnit || "";
+ eol = eol || "";
+
+ return function generateHtmlRecursive(node, rawText, curIndent) {
+ var ret = "", parent, current, i;
+ curIndent = curIndent || "";
+ if (node) {
+ if (node.nodeType &&
+ node.nodeType === node.ENTITY_REFERENCE_NODE)
+ {
+ node = node._entity;
+ }
- switch (node.nodeType) {
- case node.ELEMENT_NODE:
- current = exports.stringifyElement(node);
- ret += current.start;
+ var childNodesRawText = rawText || rawTextElements.test(node.nodeName);
- if (node._childNodes.length > 0) {
- for (i=0; i 0) {
+ if (node._childNodes[0].nodeType !== node.TEXT_NODE) {
+ ret += eol;
+ }
+ for (i=0; i';
- break;
- case node.DOCUMENT_NODE:
- for (i=0; i' + eol;
+ break;
+ case node.DOCUMENT_NODE:
+ for (i=0; i