45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
|
// @flow
|
||
|
import defineFunction from "../defineFunction";
|
||
|
import buildCommon from "../buildCommon";
|
||
|
import mathMLTree from "../mathMLTree";
|
||
|
|
||
|
import * as html from "../buildHTML";
|
||
|
import * as mml from "../buildMathML";
|
||
|
|
||
|
// \vcenter: Vertically center the argument group on the math axis.
|
||
|
|
||
|
defineFunction({
|
||
|
type: "vcenter",
|
||
|
names: ["\\vcenter"],
|
||
|
props: {
|
||
|
numArgs: 1,
|
||
|
argTypes: ["original"], // In LaTeX, \vcenter can act only on a box.
|
||
|
allowedInText: false,
|
||
|
},
|
||
|
handler({parser}, args) {
|
||
|
return {
|
||
|
type: "vcenter",
|
||
|
mode: parser.mode,
|
||
|
body: args[0],
|
||
|
};
|
||
|
},
|
||
|
htmlBuilder(group, options) {
|
||
|
const body = html.buildGroup(group.body, options);
|
||
|
const axisHeight = options.fontMetrics().axisHeight;
|
||
|
const dy = 0.5 * ((body.height - axisHeight) - (body.depth + axisHeight));
|
||
|
return buildCommon.makeVList({
|
||
|
positionType: "shift",
|
||
|
positionData: dy,
|
||
|
children: [{type: "elem", elem: body}],
|
||
|
}, options);
|
||
|
},
|
||
|
mathmlBuilder(group, options) {
|
||
|
// There is no way to do this in MathML.
|
||
|
// Write a class as a breadcrumb in case some post-processor wants
|
||
|
// to perform a vcenter adjustment.
|
||
|
return new mathMLTree.MathNode(
|
||
|
"mpadded", [mml.buildGroup(group.body, options)], ["vcenter"]);
|
||
|
},
|
||
|
});
|
||
|
|