You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
// @flow
|
|
import buildHTML from "./buildHTML";
|
|
import buildMathML from "./buildMathML";
|
|
import buildCommon from "./buildCommon";
|
|
import Options from "./Options";
|
|
import Settings from "./Settings";
|
|
import Style from "./Style";
|
|
|
|
import type {AnyParseNode} from "./parseNode";
|
|
import type {DomSpan} from "./domTree";
|
|
|
|
const optionsFromSettings = function(settings: Settings) {
|
|
return new Options({
|
|
style: (settings.displayMode ? Style.DISPLAY : Style.TEXT),
|
|
maxSize: settings.maxSize,
|
|
minRuleThickness: settings.minRuleThickness,
|
|
});
|
|
};
|
|
|
|
const displayWrap = function(node: DomSpan, settings: Settings): DomSpan {
|
|
if (settings.displayMode) {
|
|
const classes = ["katex-display"];
|
|
if (settings.leqno) {
|
|
classes.push("leqno");
|
|
}
|
|
if (settings.fleqn) {
|
|
classes.push("fleqn");
|
|
}
|
|
node = buildCommon.makeSpan(classes, [node]);
|
|
}
|
|
return node;
|
|
};
|
|
|
|
export const buildTree = function(
|
|
tree: AnyParseNode[],
|
|
expression: string,
|
|
settings: Settings,
|
|
): DomSpan {
|
|
const options = optionsFromSettings(settings);
|
|
let katexNode;
|
|
if (settings.output === "mathml") {
|
|
return buildMathML(tree, expression, options, settings.displayMode, true);
|
|
} else if (settings.output === "html") {
|
|
const htmlNode = buildHTML(tree, options);
|
|
katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
|
|
} else {
|
|
const mathMLNode = buildMathML(tree, expression, options,
|
|
settings.displayMode, false);
|
|
const htmlNode = buildHTML(tree, options);
|
|
katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, htmlNode]);
|
|
}
|
|
|
|
return displayWrap(katexNode, settings);
|
|
};
|
|
|
|
export const buildHTMLTree = function(
|
|
tree: AnyParseNode[],
|
|
expression: string,
|
|
settings: Settings,
|
|
): DomSpan {
|
|
const options = optionsFromSettings(settings);
|
|
const htmlNode = buildHTML(tree, options);
|
|
const katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
|
|
return displayWrap(katexNode, settings);
|
|
};
|
|
|
|
export default buildTree;
|