|
|
|
import {defineFunctionBuilders} from "../defineFunction"; |
|
import buildCommon from "../buildCommon"; |
|
import mathMLTree from "../mathMLTree"; |
|
|
|
import * as mml from "../buildMathML"; |
|
|
|
import type {ParseNode} from "../parseNode"; |
|
|
|
|
|
|
|
|
|
const defaultVariant: {[string]: string} = { |
|
"mi": "italic", |
|
"mn": "normal", |
|
"mtext": "normal", |
|
}; |
|
|
|
defineFunctionBuilders({ |
|
type: "mathord", |
|
htmlBuilder(group, options) { |
|
return buildCommon.makeOrd(group, options, "mathord"); |
|
}, |
|
mathmlBuilder(group: ParseNode<"mathord">, options) { |
|
const node = new mathMLTree.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 buildCommon.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 mathMLTree.MathNode("mtext", [text]); |
|
} else if (/[0-9]/.test(group.text)) { |
|
node = new mathMLTree.MathNode("mn", [text]); |
|
} else if (group.text === "\\prime") { |
|
node = new mathMLTree.MathNode("mo", [text]); |
|
} else { |
|
node = new mathMLTree.MathNode("mi", [text]); |
|
} |
|
if (variant !== defaultVariant[node.type]) { |
|
node.setAttribute("mathvariant", variant); |
|
} |
|
|
|
return node; |
|
}, |
|
}); |
|
|