File size: 1,886 Bytes
bc20498 |
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 |
//@flow
// Row breaks within tabular environments, and line breaks at top level
import defineFunction from "../defineFunction";
import buildCommon from "../buildCommon";
import mathMLTree from "../mathMLTree";
import {calculateSize, makeEm} from "../units";
import {assertNodeType} from "../parseNode";
// \DeclareRobustCommand\\{...\@xnewline}
defineFunction({
type: "cr",
names: ["\\\\"],
props: {
numArgs: 0,
numOptionalArgs: 0,
allowedInText: true,
},
handler({parser}, args, optArgs) {
const size = parser.gullet.future().text === "[" ?
parser.parseSizeGroup(true) : null;
const newLine = !parser.settings.displayMode ||
!parser.settings.useStrictBehavior(
"newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " +
"does nothing in display mode");
return {
type: "cr",
mode: parser.mode,
newLine,
size: size && assertNodeType(size, "size").value,
};
},
// The following builders are called only at the top level,
// not within tabular/array environments.
htmlBuilder(group, options) {
const span = buildCommon.makeSpan(["mspace"], [], options);
if (group.newLine) {
span.classes.push("newline");
if (group.size) {
span.style.marginTop =
makeEm(calculateSize(group.size, options));
}
}
return span;
},
mathmlBuilder(group, options) {
const node = new mathMLTree.MathNode("mspace");
if (group.newLine) {
node.setAttribute("linebreak", "newline");
if (group.size) {
node.setAttribute("height",
makeEm(calculateSize(group.size, options)));
}
}
return node;
},
});
|