// @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, true);
} else if (settings.output === "html") {
const htmlNode = buildHTML(tree, options);
katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
} else {
const mathMLNode = buildMathML(tree, expression, options, 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;