forked from Rowland/EG
43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
// @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}`);
|
|
},
|
|
});
|