// @flow import defineFunction from "../defineFunction"; import ParseError from "../ParseError"; // Switching from text mode back to math mode defineFunction({ type: "styling", names: ["\\(", "$"], props: { numArgs: 0, allowedInText: true, allowedInMath: false, }, handler({funcName, parser}, args) { const outerMode = parser.mode; parser.switchMode("math"); const close = (funcName === "\\(" ? "\\)" : "$"); const body = parser.parseExpression(false, close); parser.expect(close); parser.switchMode(outerMode); return { type: "styling", mode: parser.mode, style: "text", body, }; }, }); // Check for extra closing math delimiters defineFunction({ type: "text", // Doesn't matter what this is. names: ["\\)", "\\]"], props: { numArgs: 0, allowedInText: true, allowedInMath: false, }, handler(context, args) { throw new ParseError(`Mismatched ${context.funcName}`); }, });