diff --git a/lib/formatter.js b/lib/formatter.js index 634ea46..260afd6 100644 --- a/lib/formatter.js +++ b/lib/formatter.js @@ -98,7 +98,10 @@ function formatAnchor(elem, fn, options) { options.lineCharCount = storedCharCount; - return formatText({ data: result || href, trimLeadingSpace: elem.trimLeadingSpace }, options); + return Object.assign({}, exports, options.format).text({ + data: result || href, + trimLeadingSpace: elem.trimLeadingSpace + }, options); } function formatHorizontalLine(elem, fn, options) { @@ -128,7 +131,7 @@ function formatUnorderedList(elem, fn, options) { return child.type !== 'text' || !whiteSpaceRegex.test(child.data); }); nonWhiteSpaceChildren.forEach(function(elem) { - result += formatListItem(prefix, elem, fn, options); + result += Object.assign({}, exports, options.format).listItem(prefix, elem, fn, options); }); return result + '\n'; } @@ -163,7 +166,7 @@ function formatOrderedList(elem, fn, options) { // Calculate the needed spacing for nice indentation. var spacing = maxLength - index.toString().length; var prefix = ' ' + index + '. ' + ' '.repeat(spacing); - result += formatListItem(prefix, elem, fn, options); + result += Object.assign({}, exports, options.format).listItem(prefix, elem, fn, options); }); } return result + '\n'; @@ -220,9 +223,8 @@ function formatTable(elem, fn, options) { if (elem.type === 'tag') { switch (elem.name.toLowerCase()) { case 'th': - tokens = formatHeading(elem, fn, options).split('\n'); + tokens = Object.assign({}, exports, options.format).heading(elem, fn, options).split('\n'); break; - case 'td': tokens = fn(elem.children, options).split('\n'); break; diff --git a/test/html-to-text.js b/test/html-to-text.js index 9138959..d165920 100644 --- a/test/html-to-text.js +++ b/test/html-to-text.js @@ -402,6 +402,23 @@ column 1 column 2 column 3 column 4'; }); expect(result).to.equal('====\ntest\n===='); }); + + it('should use custom formatting functions when nested elements are being parsed', function () { + var result = htmlToText.fromString('