Skip to content

Commit

Permalink
fix xlsx test, we actually just need to escape ' delimiters not all…
Browse files Browse the repository at this point in the history
… problematic js characters
  • Loading branch information
bjrmatos committed Dec 21, 2023
1 parent 5b7c85e commit cf9fa3c
Showing 1 changed file with 4 additions and 15 deletions.
19 changes: 4 additions & 15 deletions packages/jsreport-xlsx/lib/generation/preprocess/loop.js
Original file line number Diff line number Diff line change
Expand Up @@ -677,10 +677,10 @@ module.exports = (files) => {
continue
}

formulaEl.textContent = `{{xlsxSData type='formula' originalCellRef='${cellRef}' originalFormula='${jsStringEscape(formula)}'`
formulaEl.textContent = `{{xlsxSData type='formula' originalCellRef='${cellRef}' originalFormula='${jsSingleQuoteEscape(formula)}'`

if (sharedFormula?.type === 'source') {
formulaEl.setAttribute('ref', `{{xlsxSData type='formulaSharedRefRange' originalSharedRefRange='${jsStringEscape(sharedFormula.sourceRef)}'}}`)
formulaEl.setAttribute('ref', `{{xlsxSData type='formulaSharedRefRange' originalSharedRefRange='${jsSingleQuoteEscape(sharedFormula.sourceRef)}'}}`)
}

formulaEl.textContent += '}}'
Expand Down Expand Up @@ -1290,25 +1290,14 @@ function processClosingTag (doc, refElement, closeCall) {
return fakeElement
}

function jsStringEscape (string) {
return ('' + string).replace(/["'\\\n\r\u2028\u2029]/g, function (character) {
function jsSingleQuoteEscape (string) {
return ('' + string).replace(/[']/g, function (character) {
// Escape all characters not included in SingleStringCharacters and
// DoubleStringCharacters on
// http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4
switch (character) {
case '"':
case "'":
case '\\':
return '\\' + character
// Four possible LineTerminator characters need to be escaped:
case '\n':
return '\\n'
case '\r':
return '\\r'
case '\u2028':
return '\\u2028'
case '\u2029':
return '\\u2029'
}
})
}

0 comments on commit cf9fa3c

Please sign in to comment.