Spaces:
Sleeping
Sleeping
File size: 1,824 Bytes
9d1374f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | import {defineFunctionBuilders} from "../defineFunction";
import {makeOrd} from "../buildCommon";
import {MathNode} from "../mathMLTree";
import * as mml from "../buildMathML";
import type {ParseNode} from "../parseNode";
// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in
// src/symbols.js.
const defaultVariant: Record<string, string> = {
"mi": "italic",
"mn": "normal",
"mtext": "normal",
};
defineFunctionBuilders({
type: "mathord",
htmlBuilder(group, options) {
return makeOrd(group, options, "mathord");
},
mathmlBuilder(group: ParseNode<"mathord">, options) {
const node = new MathNode(
"mi",
[mml.makeText(group.text, group.mode, options)]);
const variant = mml.getVariant(group, options) || "italic";
if (variant !== defaultVariant[node.type]) {
node.setAttribute("mathvariant", variant);
}
return node;
},
});
defineFunctionBuilders({
type: "textord",
htmlBuilder(group, options) {
return makeOrd(group, options, "textord");
},
mathmlBuilder(group: ParseNode<"textord">, options) {
const text = mml.makeText(group.text, group.mode, options);
const variant = mml.getVariant(group, options) || "normal";
let node;
if (group.mode === 'text') {
node = new MathNode("mtext", [text]);
} else if (/[0-9]/.test(group.text)) {
node = new MathNode("mn", [text]);
} else if (group.text === "\\prime") {
node = new MathNode("mo", [text]);
} else {
node = new MathNode("mi", [text]);
}
if (variant !== defaultVariant[node.type]) {
node.setAttribute("mathvariant", variant);
}
return node;
},
});
|