You can define custom formatting logic by adding functions to the formatters object in your options. A custom formatter is a function with four arguments:
elem: The HTML element being processed.walk: A recursive function to process children: walk(elem.children, builder).builder: A BlockTextBuilder object used to manipulate the output state.formatOptions: Options specified for that specific tag.
To use a custom formatter, assign it to a selector in the selectors array.
const { convert } = require('html-to-text');
const html = '<foo>Hello World</foo>';
const text = convert(html, {
formatters: {
'fooBlockFormatter': function (elem, walk, builder, formatOptions) {
builder.openBlock({ leadingLineBreaks: formatOptions.leadingLineBreaks || 1 });
walk(elem.children, builder);
builder.addInline('!');
builder.closeBlock({ trailingLineBreaks: formatOptions.trailingLineBreaks || 1 });
}
},
selectors: [
{
selector: 'foo',
format: 'fooBlockFormatter',
options: { leadingLineBreaks: 1, trailingLineBreaks: 1 }
}
]
});
console.log(text); // Hello World!