From 8346294bf30b438379bea17f5e626fb546f55d62 Mon Sep 17 00:00:00 2001 From: Erik Demaine Date: Wed, 26 Dec 2018 18:17:30 -0500 Subject: [PATCH] Fix \\ and \newline after operator (#1796) * Fix \\ and \newline after operator Fix #1790. `\\` and `\newline` render as a span with classes `mspace` and `newline`. We need to check for `newline` when bringing spaces into the same `base` group. * Add tests and comment --- src/buildHTML.js | 5 +- test/__snapshots__/katex-spec.js.snap | 112 ++++++++++++++++++++++++++ test/katex-spec.js | 9 +++ 3 files changed, 124 insertions(+), 2 deletions(-) diff --git a/src/buildHTML.js b/src/buildHTML.js index 88466de3..2822eec8 100644 --- a/src/buildHTML.js +++ b/src/buildHTML.js @@ -334,10 +334,11 @@ export default function buildHTML(tree: AnyParseNode[], options: Options): DomSp expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { // Put any post-operator glue on same line as operator. - // Watch for \nobreak along the way. + // Watch for \nobreak along the way, and stop at \newline. let nobreak = false; while (i < expression.length - 1 && - expression[i + 1].hasClass("mspace")) { + expression[i + 1].hasClass("mspace") && + !expression[i + 1].hasClass("newline")) { i++; parts.push(expression[i]); if (expression[i].hasClass("nobreak")) { diff --git a/test/__snapshots__/katex-spec.js.snap b/test/__snapshots__/katex-spec.js.snap index dd7c81f5..7c224f25 100755 --- a/test/__snapshots__/katex-spec.js.snap +++ b/test/__snapshots__/katex-spec.js.snap @@ -858,6 +858,118 @@ exports[`Extending katex by new fonts and symbols Add new font class to new exte `; +exports[`Newlines via \\\\ and \\newline \\\\ causes newline, even after mrel and mop 1`] = ` + + + + + + + + M + + + = + + + + + a + + + + + + + + + b + + + + + c + + + + M = \\\\ a + \\\\ b \\\\ c + + + + + + + +`; + exports[`href and url commands should not affect spacing around 1`] = ` [ { diff --git a/test/katex-spec.js b/test/katex-spec.js index 4718e657..fee9de9a 100644 --- a/test/katex-spec.js +++ b/test/katex-spec.js @@ -3405,6 +3405,15 @@ describe("Newlines via \\\\ and \\newline", function() { expect`a\\b\begin{matrix}x&y\\z&w\end{matrix}\\c` .toParseLike`a\newline b\begin{matrix}x&y\cr z&w\end{matrix}\newline c`; }); + + it("\\\\ causes newline, even after mrel and mop", () => { + const markup = katex.renderToString(r`M = \\ a + \\ b \\ c`); + // Ensure newlines appear outside base spans (because, in this regexp, + // base span occurs immediately after each newline span). + expect(markup).toMatch( + /(.*?<\/span><\/span>){3}/); + expect(markup).toMatchSnapshot(); + }); }); describe("Symbols", function() {