site/node_modules/mathjax-full/js/input/tex/mathtools/MathtoolsMethods.js

488 lines
22 KiB
JavaScript
Raw Permalink Normal View History

2024-10-14 06:09:33 +00:00
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MathtoolsMethods = void 0;
var ParseUtil_js_1 = __importDefault(require("../ParseUtil.js"));
var AmsMethods_js_1 = require("../ams/AmsMethods.js");
var BaseMethods_js_1 = __importDefault(require("../base/BaseMethods.js"));
var TexParser_js_1 = __importDefault(require("../TexParser.js"));
var TexError_js_1 = __importDefault(require("../TexError.js"));
var NodeUtil_js_1 = __importDefault(require("../NodeUtil.js"));
var MmlNode_js_1 = require("../../../core/MmlTree/MmlNode.js");
var lengths_js_1 = require("../../../util/lengths.js");
var Options_js_1 = require("../../../util/Options.js");
var NewcommandUtil_js_1 = __importDefault(require("../newcommand/NewcommandUtil.js"));
var NewcommandMethods_js_1 = __importDefault(require("../newcommand/NewcommandMethods.js"));
var MathtoolsUtil_js_1 = require("./MathtoolsUtil.js");
exports.MathtoolsMethods = {
MtMatrix: function (parser, begin, open, close) {
var align = parser.GetBrackets("\\begin{".concat(begin.getName(), "}"), 'c');
return exports.MathtoolsMethods.Array(parser, begin, open, close, align);
},
MtSmallMatrix: function (parser, begin, open, close, align) {
if (!align) {
align = parser.GetBrackets("\\begin{".concat(begin.getName(), "}"), parser.options.mathtools['smallmatrix-align']);
}
return exports.MathtoolsMethods.Array(parser, begin, open, close, align, ParseUtil_js_1.default.Em(1 / 3), '.2em', 'S', 1);
},
MtMultlined: function (parser, begin) {
var _a;
var name = "\\begin{".concat(begin.getName(), "}");
var pos = parser.GetBrackets(name, parser.options.mathtools['multlined-pos'] || 'c');
var width = pos ? parser.GetBrackets(name, '') : '';
if (pos && !pos.match(/^[cbt]$/)) {
_a = __read([pos, width], 2), width = _a[0], pos = _a[1];
}
parser.Push(begin);
var item = parser.itemFactory.create('multlined', parser, begin);
item.arraydef = {
displaystyle: true,
rowspacing: '.5em',
width: width || 'auto',
columnwidth: '100%',
};
return ParseUtil_js_1.default.setArrayAlign(item, pos || 'c');
},
HandleShove: function (parser, name, shove) {
var top = parser.stack.Top();
if (top.kind !== 'multline' && top.kind !== 'multlined') {
throw new TexError_js_1.default('CommandInMultlined', '%1 can only appear within the multline or multlined environments', name);
}
if (top.Size()) {
throw new TexError_js_1.default('CommandAtTheBeginingOfLine', '%1 must come at the beginning of the line', name);
}
top.setProperty('shove', shove);
var shift = parser.GetBrackets(name);
var mml = parser.ParseArg(name);
if (shift) {
var mrow = parser.create('node', 'mrow', []);
var mspace = parser.create('node', 'mspace', [], { width: shift });
if (shove === 'left') {
mrow.appendChild(mspace);
mrow.appendChild(mml);
}
else {
mrow.appendChild(mml);
mrow.appendChild(mspace);
}
mml = mrow;
}
parser.Push(mml);
},
SpreadLines: function (parser, begin) {
var e_1, _a;
if (parser.stack.env.closing === begin.getName()) {
delete parser.stack.env.closing;
var top_1 = parser.stack.Pop();
var mml = top_1.toMml();
var spread = top_1.getProperty('spread');
if (mml.isInferred) {
try {
for (var _b = __values(NodeUtil_js_1.default.getChildren(mml)), _c = _b.next(); !_c.done; _c = _b.next()) {
var child = _c.value;
MathtoolsUtil_js_1.MathtoolsUtil.spreadLines(child, spread);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
}
else {
MathtoolsUtil_js_1.MathtoolsUtil.spreadLines(mml, spread);
}
parser.Push(mml);
}
else {
var spread = parser.GetDimen("\\begin{".concat(begin.getName(), "}"));
begin.setProperty('spread', spread);
parser.Push(begin);
}
},
Cases: function (parser, begin, open, close, style) {
var array = parser.itemFactory.create('array').setProperty('casesEnv', begin.getName());
array.arraydef = {
rowspacing: '.2em',
columnspacing: '1em',
columnalign: 'left'
};
if (style === 'D') {
array.arraydef.displaystyle = true;
}
array.setProperties({ open: open, close: close });
parser.Push(begin);
return array;
},
MathLap: function (parser, name, pos, cramped) {
var style = parser.GetBrackets(name, '').trim();
var mml = parser.create('node', 'mstyle', [
parser.create('node', 'mpadded', [parser.ParseArg(name)], __assign({ width: 0 }, (pos === 'r' ? {} : { lspace: (pos === 'l' ? '-1width' : '-.5width') })))
], { 'data-cramped': cramped });
MathtoolsUtil_js_1.MathtoolsUtil.setDisplayLevel(mml, style);
parser.Push(parser.create('node', 'TeXAtom', [mml]));
},
Cramped: function (parser, name) {
var style = parser.GetBrackets(name, '').trim();
var arg = parser.ParseArg(name);
var mml = parser.create('node', 'mstyle', [arg], { 'data-cramped': true });
MathtoolsUtil_js_1.MathtoolsUtil.setDisplayLevel(mml, style);
parser.Push(mml);
},
MtLap: function (parser, name, pos) {
var content = ParseUtil_js_1.default.internalMath(parser, parser.GetArgument(name), 0);
var mml = parser.create('node', 'mpadded', content, { width: 0 });
if (pos !== 'r') {
NodeUtil_js_1.default.setAttribute(mml, 'lspace', pos === 'l' ? '-1width' : '-.5width');
}
parser.Push(mml);
},
MathMakeBox: function (parser, name) {
var width = parser.GetBrackets(name);
var pos = parser.GetBrackets(name, 'c');
var mml = parser.create('node', 'mpadded', [parser.ParseArg(name)]);
if (width) {
NodeUtil_js_1.default.setAttribute(mml, 'width', width);
}
var align = (0, Options_js_1.lookup)(pos, { c: 'center', r: 'right' }, '');
if (align) {
NodeUtil_js_1.default.setAttribute(mml, 'data-align', align);
}
parser.Push(mml);
},
MathMBox: function (parser, name) {
parser.Push(parser.create('node', 'mrow', [parser.ParseArg(name)]));
},
UnderOverBracket: function (parser, name) {
var thickness = (0, lengths_js_1.length2em)(parser.GetBrackets(name, '.1em'), .1);
var height = parser.GetBrackets(name, '.2em');
var arg = parser.GetArgument(name);
var _a = __read((name.charAt(1) === 'o' ?
['over', 'accent', 'bottom'] :
['under', 'accentunder', 'top']), 3), pos = _a[0], accent = _a[1], border = _a[2];
var t = (0, lengths_js_1.em)(thickness);
var base = new TexParser_js_1.default(arg, parser.stack.env, parser.configuration).mml();
var copy = new TexParser_js_1.default(arg, parser.stack.env, parser.configuration).mml();
var script = parser.create('node', 'mpadded', [
parser.create('node', 'mphantom', [copy])
], {
style: "border: ".concat(t, " solid; border-").concat(border, ": none"),
height: height,
depth: 0
});
var node = ParseUtil_js_1.default.underOver(parser, base, script, pos, true);
var munderover = NodeUtil_js_1.default.getChildAt(NodeUtil_js_1.default.getChildAt(node, 0), 0);
NodeUtil_js_1.default.setAttribute(munderover, accent, true);
parser.Push(node);
},
Aboxed: function (parser, name) {
var top = MathtoolsUtil_js_1.MathtoolsUtil.checkAlignment(parser, name);
if (top.row.length % 2 === 1) {
top.row.push(parser.create('node', 'mtd', []));
}
var arg = parser.GetArgument(name);
var rest = parser.string.substr(parser.i);
parser.string = arg + '&&\\endAboxed';
parser.i = 0;
var left = parser.GetUpTo(name, '&');
var right = parser.GetUpTo(name, '&');
parser.GetUpTo(name, '\\endAboxed');
var tex = ParseUtil_js_1.default.substituteArgs(parser, [left, right], '\\rlap{\\boxed{#1{}#2}}\\kern.267em\\phantom{#1}&\\phantom{{}#2}\\kern.267em');
parser.string = tex + rest;
parser.i = 0;
},
ArrowBetweenLines: function (parser, name) {
var top = MathtoolsUtil_js_1.MathtoolsUtil.checkAlignment(parser, name);
if (top.Size() || top.row.length) {
throw new TexError_js_1.default('BetweenLines', '%1 must be on a row by itself', name);
}
var star = parser.GetStar();
var symbol = parser.GetBrackets(name, '\\Updownarrow');
if (star) {
top.EndEntry();
top.EndEntry();
}
var tex = (star ? '\\quad' + symbol : symbol + '\\quad');
var mml = new TexParser_js_1.default(tex, parser.stack.env, parser.configuration).mml();
parser.Push(mml);
top.EndEntry();
top.EndRow();
},
VDotsWithin: function (parser, name) {
var top = parser.stack.Top();
var isFlush = (top.getProperty('flushspaceabove') === top.table.length);
var arg = '\\mmlToken{mi}{}' + parser.GetArgument(name) + '\\mmlToken{mi}{}';
var base = new TexParser_js_1.default(arg, parser.stack.env, parser.configuration).mml();
var mml = parser.create('node', 'mpadded', [
parser.create('node', 'mpadded', [
parser.create('node', 'mo', [
parser.create('text', '\u22EE')
])
], __assign({ width: 0, lspace: '-.5width' }, (isFlush ? { height: '-.6em', voffset: '-.18em' } : {}))),
parser.create('node', 'mphantom', [base])
], {
lspace: '.5width'
});
parser.Push(mml);
},
ShortVDotsWithin: function (parser, _name) {
var top = parser.stack.Top();
var star = parser.GetStar();
exports.MathtoolsMethods.FlushSpaceAbove(parser, '\\MTFlushSpaceAbove');
!star && top.EndEntry();
exports.MathtoolsMethods.VDotsWithin(parser, '\\vdotswithin');
star && top.EndEntry();
exports.MathtoolsMethods.FlushSpaceBelow(parser, '\\MTFlushSpaceBelow');
},
FlushSpaceAbove: function (parser, name) {
var top = MathtoolsUtil_js_1.MathtoolsUtil.checkAlignment(parser, name);
top.setProperty('flushspaceabove', top.table.length);
top.addRowSpacing('-' + parser.options.mathtools['shortvdotsadjustabove']);
},
FlushSpaceBelow: function (parser, name) {
var top = MathtoolsUtil_js_1.MathtoolsUtil.checkAlignment(parser, name);
top.Size() && top.EndEntry();
top.EndRow();
top.addRowSpacing('-' + parser.options.mathtools['shortvdotsadjustbelow']);
},
PairedDelimiters: function (parser, name, open, close, body, n, pre, post) {
if (body === void 0) { body = '#1'; }
if (n === void 0) { n = 1; }
if (pre === void 0) { pre = ''; }
if (post === void 0) { post = ''; }
var star = parser.GetStar();
var size = (star ? '' : parser.GetBrackets(name));
var _a = __read((star ? ['\\left', '\\right'] : size ? [size + 'l', size + 'r'] : ['', '']), 2), left = _a[0], right = _a[1];
var delim = (star ? '\\middle' : size || '');
if (n) {
var args = [];
for (var i = args.length; i < n; i++) {
args.push(parser.GetArgument(name));
}
pre = ParseUtil_js_1.default.substituteArgs(parser, args, pre);
body = ParseUtil_js_1.default.substituteArgs(parser, args, body);
post = ParseUtil_js_1.default.substituteArgs(parser, args, post);
}
body = body.replace(/\\delimsize/g, delim);
parser.string = [pre, left, open, body, right, close, post, parser.string.substr(parser.i)]
.reduce(function (s, part) { return ParseUtil_js_1.default.addArgs(parser, s, part); }, '');
parser.i = 0;
ParseUtil_js_1.default.checkMaxMacros(parser);
},
DeclarePairedDelimiter: function (parser, name) {
var cs = NewcommandUtil_js_1.default.GetCsNameArgument(parser, name);
var open = parser.GetArgument(name);
var close = parser.GetArgument(name);
MathtoolsUtil_js_1.MathtoolsUtil.addPairedDelims(parser.configuration, cs, [open, close]);
},
DeclarePairedDelimiterX: function (parser, name) {
var cs = NewcommandUtil_js_1.default.GetCsNameArgument(parser, name);
var n = NewcommandUtil_js_1.default.GetArgCount(parser, name);
var open = parser.GetArgument(name);
var close = parser.GetArgument(name);
var body = parser.GetArgument(name);
MathtoolsUtil_js_1.MathtoolsUtil.addPairedDelims(parser.configuration, cs, [open, close, body, n]);
},
DeclarePairedDelimiterXPP: function (parser, name) {
var cs = NewcommandUtil_js_1.default.GetCsNameArgument(parser, name);
var n = NewcommandUtil_js_1.default.GetArgCount(parser, name);
var pre = parser.GetArgument(name);
var open = parser.GetArgument(name);
var close = parser.GetArgument(name);
var post = parser.GetArgument(name);
var body = parser.GetArgument(name);
MathtoolsUtil_js_1.MathtoolsUtil.addPairedDelims(parser.configuration, cs, [open, close, body, n, pre, post]);
},
CenterColon: function (parser, _name, center, force, thin) {
if (force === void 0) { force = false; }
if (thin === void 0) { thin = false; }
var options = parser.options.mathtools;
var mml = parser.create('token', 'mo', {}, ':');
if (center && (options['centercolon'] || force)) {
var dy = options['centercolon-offset'];
mml = parser.create('node', 'mpadded', [mml], __assign({ voffset: dy, height: "+".concat(dy), depth: "-".concat(dy) }, (thin ? { width: options['thincolon-dw'], lspace: options['thincolon-dx'] } : {})));
}
parser.Push(mml);
},
Relation: function (parser, _name, tex, unicode) {
var options = parser.options.mathtools;
if (options['use-unicode'] && unicode) {
parser.Push(parser.create('token', 'mo', { texClass: MmlNode_js_1.TEXCLASS.REL }, unicode));
}
else {
tex = '\\mathrel{' + tex.replace(/:/g, '\\MTThinColon').replace(/-/g, '\\mathrel{-}') + '}';
parser.string = ParseUtil_js_1.default.addArgs(parser, tex, parser.string.substr(parser.i));
parser.i = 0;
}
},
NArrow: function (parser, _name, c, dy) {
parser.Push(parser.create('node', 'TeXAtom', [
parser.create('token', 'mtext', {}, c),
parser.create('node', 'mpadded', [
parser.create('node', 'mpadded', [
parser.create('node', 'menclose', [
parser.create('node', 'mspace', [], { height: '.2em', depth: 0, width: '.4em' })
], { notation: 'updiagonalstrike', 'data-thickness': '.05em', 'data-padding': 0 })
], { width: 0, lspace: '-.5width', voffset: dy }),
parser.create('node', 'mphantom', [
parser.create('token', 'mtext', {}, c)
])
], { width: 0, lspace: '-.5width' })
], { texClass: MmlNode_js_1.TEXCLASS.REL }));
},
SplitFrac: function (parser, name, display) {
var num = parser.ParseArg(name);
var den = parser.ParseArg(name);
parser.Push(parser.create('node', 'mstyle', [
parser.create('node', 'mfrac', [
parser.create('node', 'mstyle', [
num,
parser.create('token', 'mi'),
parser.create('token', 'mspace', { width: '1em' })
], { scriptlevel: 0 }),
parser.create('node', 'mstyle', [
parser.create('token', 'mspace', { width: '1em' }),
parser.create('token', 'mi'),
den
], { scriptlevel: 0 })
], { linethickness: 0, numalign: 'left', denomalign: 'right' })
], { displaystyle: display, scriptlevel: 0 }));
},
XMathStrut: function (parser, name) {
var dd = parser.GetBrackets(name);
var dh = parser.GetArgument(name);
dh = MathtoolsUtil_js_1.MathtoolsUtil.plusOrMinus(name, dh);
dd = MathtoolsUtil_js_1.MathtoolsUtil.plusOrMinus(name, dd || dh);
parser.Push(parser.create('node', 'TeXAtom', [
parser.create('node', 'mpadded', [
parser.create('node', 'mphantom', [
parser.create('token', 'mo', { stretchy: false }, '(')
])
], { width: 0, height: dh + 'height', depth: dd + 'depth' })
], { texClass: MmlNode_js_1.TEXCLASS.ORD }));
},
Prescript: function (parser, name) {
var sup = MathtoolsUtil_js_1.MathtoolsUtil.getScript(parser, name, 'sup');
var sub = MathtoolsUtil_js_1.MathtoolsUtil.getScript(parser, name, 'sub');
var base = MathtoolsUtil_js_1.MathtoolsUtil.getScript(parser, name, 'arg');
if (NodeUtil_js_1.default.isType(sup, 'none') && NodeUtil_js_1.default.isType(sub, 'none')) {
parser.Push(base);
return;
}
var mml = parser.create('node', 'mmultiscripts', [base]);
NodeUtil_js_1.default.getChildren(mml).push(null, null);
NodeUtil_js_1.default.appendChildren(mml, [parser.create('node', 'mprescripts'), sub, sup]);
mml.setProperty('fixPrescript', true);
parser.Push(mml);
},
NewTagForm: function (parser, name, renew) {
if (renew === void 0) { renew = false; }
var tags = parser.tags;
if (!('mtFormats' in tags)) {
throw new TexError_js_1.default('TagsNotMT', '%1 can only be used with ams or mathtools tags', name);
}
var id = parser.GetArgument(name).trim();
if (!id) {
throw new TexError_js_1.default('InvalidTagFormID', 'Tag form name can\'t be empty');
}
var format = parser.GetBrackets(name, '');
var left = parser.GetArgument(name);
var right = parser.GetArgument(name);
if (!renew && tags.mtFormats.has(id)) {
throw new TexError_js_1.default('DuplicateTagForm', 'Duplicate tag form: %1', id);
}
tags.mtFormats.set(id, [left, right, format]);
},
UseTagForm: function (parser, name) {
var tags = parser.tags;
if (!('mtFormats' in tags)) {
throw new TexError_js_1.default('TagsNotMT', '%1 can only be used with ams or mathtools tags', name);
}
var id = parser.GetArgument(name).trim();
if (!id) {
tags.mtCurrent = null;
return;
}
if (!tags.mtFormats.has(id)) {
throw new TexError_js_1.default('UndefinedTagForm', 'Undefined tag form: %1', id);
}
tags.mtCurrent = tags.mtFormats.get(id);
},
SetOptions: function (parser, name) {
var e_2, _a;
var options = parser.options.mathtools;
if (!options['allow-mathtoolsset']) {
throw new TexError_js_1.default('ForbiddenMathtoolsSet', '%1 is disabled', name);
}
var allowed = {};
Object.keys(options).forEach(function (id) {
if (id !== 'pariedDelimiters' && id !== 'tagforms' && id !== 'allow-mathtoolsset') {
allowed[id] = 1;
}
});
var args = parser.GetArgument(name);
var keys = ParseUtil_js_1.default.keyvalOptions(args, allowed, true);
try {
for (var _b = __values(Object.keys(keys)), _c = _b.next(); !_c.done; _c = _b.next()) {
var id = _c.value;
options[id] = keys[id];
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
},
Array: BaseMethods_js_1.default.Array,
Macro: BaseMethods_js_1.default.Macro,
xArrow: AmsMethods_js_1.AmsMethods.xArrow,
HandleRef: AmsMethods_js_1.AmsMethods.HandleRef,
AmsEqnArray: AmsMethods_js_1.AmsMethods.AmsEqnArray,
MacroWithTemplate: NewcommandMethods_js_1.default.MacroWithTemplate,
};
//# sourceMappingURL=MathtoolsMethods.js.map