tests + updates

This commit is contained in:
Henry Jameson 2019-11-14 22:40:20 +02:00
parent 51ea295704
commit bd2a682b83
2 changed files with 111 additions and 4 deletions

View file

@ -2,6 +2,8 @@
* This is a tiny purpose-built HTML parser/processor. This basically detects any type of visual newline and
* allows it to be processed, useful for greentexting, mostly
*
* known issue: doesn't handle CDATA so nested CDATA might not work well
*
* @param {Object} input - input data
* @param {(string) => string} processor - function that will be called on every line
* @return {string} processed html
@ -22,11 +24,15 @@ export const processHtml = (html, processor) => {
}
const flush = () => { // Processes current line buffer, adds it to output buffer and clears line buffer
buffer += processor(textBuffer)
if (textBuffer.trim().length > 0) {
buffer += processor(textBuffer)
} else {
buffer += textBuffer
}
textBuffer = ''
}
const handleBr = (tag) => { // handles single newlines/linebreaks
const handleBr = (tag) => { // handles single newlines/linebreaks/selfclosing
flush()
buffer += tag
}
@ -59,10 +65,12 @@ export const processHtml = (html, processor) => {
if (handledTags.has(tagName)) {
if (tagName === 'br') {
handleBr(tagFull)
}
if (openCloseTags.has(tagFull)) {
} else if (openCloseTags.has(tagName)) {
if (tagFull[1] === '/') {
handleClose(tagFull)
} else if (tagFull[tagFull.length - 2] === '/') {
// self-closing
handleBr(tagFull)
} else {
handleOpen(tagFull)
}
@ -76,6 +84,9 @@ export const processHtml = (html, processor) => {
textBuffer += char
}
}
if (tagBuffer) {
textBuffer += tagBuffer
}
flush()