From a7381857048222b56a7cefd1421be3d6e2080381 Mon Sep 17 00:00:00 2001 From: Erik Demaine Date: Thu, 19 Jan 2017 13:50:16 -0500 Subject: [PATCH] Fix x'^2 (#636) * Fix x'^2 * Add screenshot for x'^2 * x^2' should fail. Add and fix multiple prime/superscript tests. --- src/Parser.js | 10 +++++++++- test/errors-spec.js | 10 ++++++++++ test/katex-spec.js | 1 - test/screenshotter/images/PrimeSuper-chrome.png | Bin 0 -> 9224 bytes test/screenshotter/images/PrimeSuper-firefox.png | Bin 0 -> 5731 bytes test/screenshotter/ss_data.yaml | 1 + 6 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 test/screenshotter/images/PrimeSuper-chrome.png create mode 100644 test/screenshotter/images/PrimeSuper-firefox.png diff --git a/src/Parser.js b/src/Parser.js index 31f51e55..82d07777 100644 --- a/src/Parser.js +++ b/src/Parser.js @@ -343,6 +343,9 @@ Parser.prototype.parseAtom = function() { subscript = this.handleSupSubscript("subscript"); } else if (lex.text === "'") { // We got a prime + if (superscript) { + throw new ParseError("Double superscript", lex); + } const prime = new ParseNode("textord", "\\prime", this.mode); // Many primes can be grouped together, so we handle this here @@ -354,7 +357,12 @@ Parser.prototype.parseAtom = function() { primes.push(prime); this.consume(); } - // Put them into an ordgroup as the superscript + // If there's a superscript following the primes, combine that + // superscript in with the primes. + if (this.nextToken.text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } + // Put everything into an ordgroup as the superscript superscript = new ParseNode("ordgroup", primes, this.mode); } else { // If it wasn't ^, _, or ', stop parsing super/subscripts diff --git a/test/errors-spec.js b/test/errors-spec.js index 641863cd..190e75c5 100644 --- a/test/errors-spec.js +++ b/test/errors-spec.js @@ -106,6 +106,16 @@ describe("Parser:", function() { expect("1^{2+3}_4^5").toFailWithParseError( "Double superscript at position 10: 1^{2+3}_4^̲5"); }); + it("rejects double superscripts involving primes", function() { + expect("1'_2^3").toFailWithParseError( + "Double superscript at position 5: 1'_2^̲3"); + expect("1^2'").toFailWithParseError( + "Double superscript at position 4: 1^2'̲"); + expect("1^2_3'").toFailWithParseError( + "Double superscript at position 6: 1^2_3'̲"); + expect("1'_2'").toFailWithParseError( + "Double superscript at position 5: 1'_2'̲"); + }); it("rejects double subscripts", function() { expect("1_2_3").toFailWithParseError( "Double subscript at position 4: 1_2_̲3"); diff --git a/test/katex-spec.js b/test/katex-spec.js index 15012f72..36dd5f5b 100644 --- a/test/katex-spec.js +++ b/test/katex-spec.js @@ -1260,7 +1260,6 @@ describe("A TeX-compliant parser", function() { expect("x''''").toParse(); expect("x_2''").toParse(); expect("x''_2").toParse(); - expect("x'_2'").toParse(); }); it("should fail when sup/subscripts are interspersed with arguments", function() { diff --git a/test/screenshotter/images/PrimeSuper-chrome.png b/test/screenshotter/images/PrimeSuper-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4c68942a44b3b16f5b4cd5e93a2e1c4e8de22b GIT binary patch literal 9224 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 GLK6TaSsy?E literal 0 HcmV?d00001 diff --git a/test/screenshotter/images/PrimeSuper-firefox.png b/test/screenshotter/images/PrimeSuper-firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..41352b34a977c3777aedc7b8c906354deca8d650 GIT binary patch literal 5731 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 OJ@$0m>I8 literal 0 HcmV?d00001 diff --git a/test/screenshotter/ss_data.yaml b/test/screenshotter/ss_data.yaml index bef0d7b3..8838e486 100644 --- a/test/screenshotter/ss_data.yaml +++ b/test/screenshotter/ss_data.yaml @@ -124,6 +124,7 @@ OpLimits: | OverUnderline: x\underline{x}\underline{\underline{x}}\underline{x_{x_{x_x}}}\underline{x^{x^{x^x}}}\overline{x}\overline{x}\overline{x^{x^{x^x}}} \blue{\overline{\underline{x}}\underline{\overline{x}}} Phantom: \dfrac{1+\phantom{x^{\blue{2}}} = x}{1+x^{\blue{2}} = x} PrimeSpacing: f'+f_2'+f^{f'} +PrimeSuper: x'^2+x'''^2+x'^2_3+x_3'^2 RlapBug: \frac{\rlap{x}}{2} Rule: \rule{1em}{0.5em}\rule{1ex}{2ex}\rule{1em}{1ex}\rule{1em}{0.431ex} SizingBaseline: