Skip to content

Commit

Permalink
fix(auto-render): strict dollar delimiter
Browse files Browse the repository at this point in the history
The dollar delimiter, especially the non-display version, is disabled by default
because it often causes errors in determining the boundary when there are at
least two numbers followed by the `$` symbol present in one paragraph.

This change makes it possible to make the delimiter stricter in determining
the math boundary, by checking what characters come before the opening delimiter
and what characters come after the closing delimiter.

Tests are available as follows:

~~~ html
<ul>
  <li>$E=mc^2$</li>
  <li>$E=mc^2$asdf</li>
  <li>asdf$E=mc^2$</li>
  <li>asdf$E=mc^2$asdf</li>
  <li>$E=mc^2$ asdf</li>
  <li>asdf $E=mc^2$</li>
  <li>asdf $E=mc^2$ asdf</li>
  <li>($E=mc^2$)asdf</li>
  <li>asdf($E=mc^2$)</li>
  <li>asdf($E=mc^2$)asdf</li>
  <li>asdf asdf 20$ asdf 30$ asdf asdf asdf</li>
  <li>asdf asdf $20 asdf $30 asdf asdf asdf</li>
  <li>asdf asdf $20 asdf 30$ asdf asdf asdf</li>
  <li>asdf asdf 20 $ asdf 30 $ asdf asdf asdf</li>
  <li>asdf asdf $ 20 asdf $ 30 asdf asdf asdf</li>
  <li>asdf asdf $ 20 asdf 30 $ asdf asdf asdf</li>
</ul>

<ul>
  <li>$$E=mc^2$$</li>
  <li>$$E=mc^2$$asdf</li>
  <li>asdf$$E=mc^2$$</li>
  <li>asdf$$E=mc^2$$asdf</li>
  <li>$$E=mc^2$$ asdf</li>
  <li>asdf $$E=mc^2$$</li>
  <li>asdf $$E=mc^2$$ asdf</li>
  <li>($$E=mc^2$$)asdf</li>
  <li>asdf($$E=mc^2$$)</li>
  <li>asdf($$E=mc^2$$)asdf</li>
  <li>asdf asdf 20$$ asdf 30$$ asdf asdf asdf</li>
  <li>asdf asdf $$20 asdf $$30 asdf asdf asdf</li>
  <li>asdf asdf $$20 asdf 30$$ asdf asdf asdf</li>
  <li>asdf asdf 20 $$ asdf 30 $$ asdf asdf asdf</li>
  <li>asdf asdf $$ 20 asdf $$ 30 asdf asdf asdf</li>
  <li>asdf asdf $$ 20 asdf 30 $$ asdf asdf asdf</li>
</ul>

<ul>
  <li>asdf +10$ asdf -10$ asdf</li>
  <li>asdf +10 $ asdf -10 $ asdf</li>
  <li>asdf $+10 asdf $-10 asdf</li>
  <li>asdf $ +10 asdf $ -10 asdf</li>
</ul>

<ul>
  <li>asdf +10.5$ asdf -10.5$ asdf</li>
  <li>asdf +10.5 $ asdf -10.5 $ asdf</li>
  <li>asdf $+10.5 asdf $-10.5 asdf</li>
  <li>asdf $ +10.5 asdf $ -10.5 asdf</li>
</ul>

<ul>
  <li>asdf +10,5$ asdf -10,5$ asdf</li>
  <li>asdf +10,5 $ asdf -10,5 $ asdf</li>
  <li>asdf $+10,5 asdf $-10,5 asdf</li>
  <li>asdf $ +10,5 asdf $ -10,5 asdf</li>
</ul>

<ul>
  <li>asdf +10,000,000.5$ asdf -10,000,000.5$ asdf</li>
  <li>asdf +10,000,000.5 $ asdf -10,000,000.5 $ asdf</li>
  <li>asdf $+10,000,000.5 asdf $-10,000,000.5 asdf</li>
  <li>asdf $ +10,000,000.5 asdf $ -10,000,000.5 asdf</li>
</ul>

<ul>
  <li>asdf +10.000.000,5$ asdf -10.000.000,5$ asdf</li>
  <li>asdf +10.000.000,5 $ asdf -10.000.000,5 $ asdf</li>
  <li>asdf $+10.000.000,5 asdf $-10.000.000,5 asdf</li>
  <li>asdf $ +10.000.000,5 asdf $ -10.000.000,5 asdf</li>
</ul>

<ul>
  <li>asdf1234$E=mc^2$</li>
  <li>asdf1234$E=mc^2$1234asdf</li>
  <li>$E=mc^2$1234asdf</li>
  <li>asdf1234 $E=mc^2$</li>
  <li>asdf1234 $E=mc^2$ 1234asdf</li>
  <li>$E=mc^2$ 1234asdf</li>
</ul>
~~~
  • Loading branch information
taufik-nurrohman committed Feb 12, 2024
1 parent 3d5de92 commit 6bb2646
Showing 1 changed file with 20 additions and 7 deletions.
27 changes: 20 additions & 7 deletions contrib/auto-render/splitAtDelimiters.js
Expand Up @@ -63,13 +63,26 @@ const splitAtDelimiters = function(text, delimiters) {
const math = amsRegex.test(rawData)
? rawData
: text.slice(delimiters[i].left.length, index);
data.push({
type: "math",
data: math,
rawData,
display: delimiters[i].display,
});
let previousData = data.slice(-1).pop(),
// Treat current data as plain text if previous data ends with any words or any numbers with optional space after them
currentData = previousData && /(\w|\b[+-]?\d+([,.]\d+)*\s*)$/.test(previousData.data) && rawData[0] === '$' ? {
type: "text",
data: rawData,
} : {
type: "math",
data: math,
rawData,
display: delimiters[i].display,
};
text = text.slice(index + delimiters[i].right.length);
// Treat current data as plain text if next data starts with any words or any numbers with optional space after them
if (currentData.type === "math" && /^(\w|\s*[+-]?\d+([,.]\d+)*\b)/.test(text) && currentData.rawData[0] === '$') {
currentData.type = "text";
currentData.data = currentData.rawData;
delete currentData.display;
delete currentData.rawData;
}
data.push(currentData);
}

if (text !== "") {
Expand All @@ -82,4 +95,4 @@ const splitAtDelimiters = function(text, delimiters) {
return data;
};

export default splitAtDelimiters;
export default splitAtDelimiters;

0 comments on commit 6bb2646

Please sign in to comment.