diff --git a/src/functions/accent.js b/src/functions/accent.js index 98dface2..b8b9438a 100644 --- a/src/functions/accent.js +++ b/src/functions/accent.js @@ -249,15 +249,22 @@ defineFunction({ props: { numArgs: 1, allowedInText: true, - allowedInMath: false, + allowedInMath: true, // unless in strict mode argTypes: ["primitive"], }, handler: (context, args) => { const base = args[0]; + let mode = context.parser.mode; + + if (mode === "math") { + context.parser.settings.reportNonstrict("mathVsTextAccents", + `LaTeX's accent ${context.funcName} works only in text mode`); + mode = "text"; + } return { type: "accent", - mode: context.parser.mode, + mode: mode, label: context.funcName, isStretchy: false, isShifty: true, diff --git a/test/errors-spec.js b/test/errors-spec.js index f7857a12..4adb1cb9 100644 --- a/test/errors-spec.js +++ b/test/errors-spec.js @@ -1,3 +1,5 @@ +import {strictSettings} from "./helpers"; + describe("Parser:", function() { describe("#handleInfixNodes", function() { @@ -84,10 +86,14 @@ describe("Parser:", function() { "Can't use function '\\sqrt' in text mode" + " at position 7: \\text{\\̲s̲q̲r̲t̲2 is irrational…"); }); - it("rejects text-mode-only functions in math mode", function() { - expect`\'echec`.toFailWithParseError( - "Can't use function '\\'' in math mode" + - " at position 1: \\̲'̲echec"); + it("rejects text-mode-only functions in math mode", () => { + expect`$`.toFailWithParseError( + "Can't use function '$' in math mode at position 1: $̲"); + }); + it("rejects strict-mode text-mode-only functions in math mode", () => { + expect`\'echec`.toFailWithParseError("LaTeX-incompatible input " + + "and strict mode is set to 'error': LaTeX's accent \\' works " + + "only in text mode [mathVsTextAccents]", strictSettings); }); }); diff --git a/test/setup.js b/test/setup.js index d6ab40f3..e0f10c49 100644 --- a/test/setup.js +++ b/test/setup.js @@ -56,8 +56,8 @@ expect.extend({ return expectKaTeX(expr, settings, Mode.PARSE, this.isNot); }, - toFailWithParseError: function(expr, expected = ParseError) { - return expectKaTeX(expr, undefined, Mode.PARSE, this.isNot, expected); + toFailWithParseError: function(expr, expected = ParseError, settings) { + return expectKaTeX(expr, settings, Mode.PARSE, this.isNot, expected); }, toBuild(expr, settings) {