|
|
|
|
|
|
|
import defineFunction from "../defineFunction"; |
|
import buildCommon from "../buildCommon"; |
|
import mathMLTree from "../mathMLTree"; |
|
import {calculateSize} from "../units"; |
|
import {assertNodeType} from "../parseNode"; |
|
|
|
|
|
|
|
defineFunction({ |
|
type: "kern", |
|
names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], |
|
props: { |
|
numArgs: 1, |
|
argTypes: ["size"], |
|
primitive: true, |
|
allowedInText: true, |
|
}, |
|
handler({parser, funcName}, args) { |
|
const size = assertNodeType(args[0], "size"); |
|
if (parser.settings.strict) { |
|
const mathFunction = (funcName[1] === 'm'); |
|
const muUnit = (size.value.unit === 'mu'); |
|
if (mathFunction) { |
|
if (!muUnit) { |
|
parser.settings.reportNonstrict("mathVsTextUnits", |
|
`LaTeX's ${funcName} supports only mu units, ` + |
|
`not ${size.value.unit} units`); |
|
} |
|
if (parser.mode !== "math") { |
|
parser.settings.reportNonstrict("mathVsTextUnits", |
|
`LaTeX's ${funcName} works only in math mode`); |
|
} |
|
} else { |
|
if (muUnit) { |
|
parser.settings.reportNonstrict("mathVsTextUnits", |
|
`LaTeX's ${funcName} doesn't support mu units`); |
|
} |
|
} |
|
} |
|
return { |
|
type: "kern", |
|
mode: parser.mode, |
|
dimension: size.value, |
|
}; |
|
}, |
|
htmlBuilder(group, options) { |
|
return buildCommon.makeGlue(group.dimension, options); |
|
}, |
|
mathmlBuilder(group, options) { |
|
const dimension = calculateSize(group.dimension, options); |
|
return new mathMLTree.SpaceNode(dimension); |
|
}, |
|
}); |
|
|