123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960 |
- "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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
- }) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
- }));
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- }) : function(o, v) {
- o["default"] = v;
- });
- var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
- };
- 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 __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- var sitem = __importStar(require("./BaseItems.js"));
- var NodeUtil_js_1 = __importDefault(require("../NodeUtil.js"));
- var TexError_js_1 = __importDefault(require("../TexError.js"));
- var TexParser_js_1 = __importDefault(require("../TexParser.js"));
- var TexConstants_js_1 = require("../TexConstants.js");
- var ParseUtil_js_1 = __importDefault(require("../ParseUtil.js"));
- var MmlNode_js_1 = require("../../../core/MmlTree/MmlNode.js");
- var Tags_js_1 = require("../Tags.js");
- var lengths_js_1 = require("../../../util/lengths.js");
- var Entities_js_1 = require("../../../util/Entities.js");
- var Options_js_1 = require("../../../util/Options.js");
- var BaseMethods = {};
- var P_HEIGHT = 1.2 / .85;
- var MmlTokenAllow = {
- fontfamily: 1, fontsize: 1, fontweight: 1, fontstyle: 1,
- color: 1, background: 1,
- id: 1, 'class': 1, href: 1, style: 1
- };
- BaseMethods.Open = function (parser, _c) {
- parser.Push(parser.itemFactory.create('open'));
- };
- BaseMethods.Close = function (parser, _c) {
- parser.Push(parser.itemFactory.create('close'));
- };
- BaseMethods.Tilde = function (parser, _c) {
- parser.Push(parser.create('token', 'mtext', {}, Entities_js_1.entities.nbsp));
- };
- BaseMethods.Space = function (_parser, _c) { };
- BaseMethods.Superscript = function (parser, _c) {
- var _a;
- if (parser.GetNext().match(/\d/)) {
- parser.string = parser.string.substr(0, parser.i + 1) +
- ' ' + parser.string.substr(parser.i + 1);
- }
- var primes;
- var base;
- var top = parser.stack.Top();
- if (top.isKind('prime')) {
- _a = __read(top.Peek(2), 2), base = _a[0], primes = _a[1];
- parser.stack.Pop();
- }
- else {
- base = parser.stack.Prev();
- if (!base) {
- base = parser.create('token', 'mi', {}, '');
- }
- }
- var movesupsub = NodeUtil_js_1.default.getProperty(base, 'movesupsub');
- var position = NodeUtil_js_1.default.isType(base, 'msubsup') ? base.sup :
- base.over;
- if ((NodeUtil_js_1.default.isType(base, 'msubsup') && !NodeUtil_js_1.default.isType(base, 'msup') &&
- NodeUtil_js_1.default.getChildAt(base, base.sup)) ||
- (NodeUtil_js_1.default.isType(base, 'munderover') && !NodeUtil_js_1.default.isType(base, 'mover') &&
- NodeUtil_js_1.default.getChildAt(base, base.over) &&
- !NodeUtil_js_1.default.getProperty(base, 'subsupOK'))) {
- throw new TexError_js_1.default('DoubleExponent', 'Double exponent: use braces to clarify');
- }
- if (!NodeUtil_js_1.default.isType(base, 'msubsup') || NodeUtil_js_1.default.isType(base, 'msup')) {
- if (movesupsub) {
- if (!NodeUtil_js_1.default.isType(base, 'munderover') || NodeUtil_js_1.default.isType(base, 'mover') ||
- NodeUtil_js_1.default.getChildAt(base, base.over)) {
- base = parser.create('node', 'munderover', [base], { movesupsub: true });
- }
- position = base.over;
- }
- else {
- base = parser.create('node', 'msubsup', [base]);
- position = base.sup;
- }
- }
- parser.Push(parser.itemFactory.create('subsup', base).setProperties({
- position: position, primes: primes, movesupsub: movesupsub
- }));
- };
- BaseMethods.Subscript = function (parser, _c) {
- var _a;
- if (parser.GetNext().match(/\d/)) {
- parser.string =
- parser.string.substr(0, parser.i + 1) + ' ' +
- parser.string.substr(parser.i + 1);
- }
- var primes, base;
- var top = parser.stack.Top();
- if (top.isKind('prime')) {
- _a = __read(top.Peek(2), 2), base = _a[0], primes = _a[1];
- parser.stack.Pop();
- }
- else {
- base = parser.stack.Prev();
- if (!base) {
- base = parser.create('token', 'mi', {}, '');
- }
- }
- var movesupsub = NodeUtil_js_1.default.getProperty(base, 'movesupsub');
- var position = NodeUtil_js_1.default.isType(base, 'msubsup') ?
- base.sub : base.under;
- if ((NodeUtil_js_1.default.isType(base, 'msubsup') && !NodeUtil_js_1.default.isType(base, 'msup') &&
- NodeUtil_js_1.default.getChildAt(base, base.sub)) ||
- (NodeUtil_js_1.default.isType(base, 'munderover') && !NodeUtil_js_1.default.isType(base, 'mover') &&
- NodeUtil_js_1.default.getChildAt(base, base.under) &&
- !NodeUtil_js_1.default.getProperty(base, 'subsupOK'))) {
- throw new TexError_js_1.default('DoubleSubscripts', 'Double subscripts: use braces to clarify');
- }
- if (!NodeUtil_js_1.default.isType(base, 'msubsup') || NodeUtil_js_1.default.isType(base, 'msup')) {
- if (movesupsub) {
- if (!NodeUtil_js_1.default.isType(base, 'munderover') || NodeUtil_js_1.default.isType(base, 'mover') ||
- NodeUtil_js_1.default.getChildAt(base, base.under)) {
- base = parser.create('node', 'munderover', [base], { movesupsub: true });
- }
- position = base.under;
- }
- else {
- base = parser.create('node', 'msubsup', [base]);
- position = base.sub;
- }
- }
- parser.Push(parser.itemFactory.create('subsup', base).setProperties({
- position: position, primes: primes, movesupsub: movesupsub
- }));
- };
- BaseMethods.Prime = function (parser, c) {
- var base = parser.stack.Prev();
- if (!base) {
- base = parser.create('node', 'mi');
- }
- if (NodeUtil_js_1.default.isType(base, 'msubsup') && !NodeUtil_js_1.default.isType(base, 'msup') &&
- NodeUtil_js_1.default.getChildAt(base, base.sup)) {
- throw new TexError_js_1.default('DoubleExponentPrime', 'Prime causes double exponent: use braces to clarify');
- }
- var sup = '';
- parser.i--;
- do {
- sup += Entities_js_1.entities.prime;
- parser.i++, c = parser.GetNext();
- } while (c === '\'' || c === Entities_js_1.entities.rsquo);
- sup = ['', '\u2032', '\u2033', '\u2034', '\u2057'][sup.length] || sup;
- var node = parser.create('token', 'mo', { variantForm: true }, sup);
- parser.Push(parser.itemFactory.create('prime', base, node));
- };
- BaseMethods.Comment = function (parser, _c) {
- while (parser.i < parser.string.length && parser.string.charAt(parser.i) !== '\n') {
- parser.i++;
- }
- };
- BaseMethods.Hash = function (_parser, _c) {
- throw new TexError_js_1.default('CantUseHash1', 'You can\'t use \'macro parameter character #\' in math mode');
- };
- BaseMethods.MathFont = function (parser, name, variant) {
- var text = parser.GetArgument(name);
- var mml = new TexParser_js_1.default(text, __assign(__assign({}, parser.stack.env), { font: variant, multiLetterIdentifiers: /^[a-zA-Z]+/, noAutoOP: true }), parser.configuration).mml();
- parser.Push(parser.create('node', 'TeXAtom', [mml]));
- };
- BaseMethods.SetFont = function (parser, _name, font) {
- parser.stack.env['font'] = font;
- };
- BaseMethods.SetStyle = function (parser, _name, texStyle, style, level) {
- parser.stack.env['style'] = texStyle;
- parser.stack.env['level'] = level;
- parser.Push(parser.itemFactory.create('style').setProperty('styles', { displaystyle: style, scriptlevel: level }));
- };
- BaseMethods.SetSize = function (parser, _name, size) {
- parser.stack.env['size'] = size;
- parser.Push(parser.itemFactory.create('style').setProperty('styles', { mathsize: (0, lengths_js_1.em)(size) }));
- };
- BaseMethods.Spacer = function (parser, _name, space) {
- var node = parser.create('node', 'mspace', [], { width: (0, lengths_js_1.em)(space) });
- var style = parser.create('node', 'mstyle', [node], { scriptlevel: 0 });
- parser.Push(style);
- };
- BaseMethods.LeftRight = function (parser, name) {
- var first = name.substr(1);
- parser.Push(parser.itemFactory.create(first, parser.GetDelimiter(name), parser.stack.env.color));
- };
- BaseMethods.NamedFn = function (parser, name, id) {
- if (!id) {
- id = name.substr(1);
- }
- var mml = parser.create('token', 'mi', { texClass: MmlNode_js_1.TEXCLASS.OP }, id);
- parser.Push(parser.itemFactory.create('fn', mml));
- };
- BaseMethods.NamedOp = function (parser, name, id) {
- if (!id) {
- id = name.substr(1);
- }
- id = id.replace(/ /, '\u2006');
- var mml = parser.create('token', 'mo', {
- movablelimits: true,
- movesupsub: true,
- form: TexConstants_js_1.TexConstant.Form.PREFIX,
- texClass: MmlNode_js_1.TEXCLASS.OP
- }, id);
- parser.Push(mml);
- };
- BaseMethods.Limits = function (parser, _name, limits) {
- var op = parser.stack.Prev(true);
- if (!op || (NodeUtil_js_1.default.getTexClass(NodeUtil_js_1.default.getCoreMO(op)) !== MmlNode_js_1.TEXCLASS.OP &&
- NodeUtil_js_1.default.getProperty(op, 'movesupsub') == null)) {
- throw new TexError_js_1.default('MisplacedLimits', '%1 is allowed only on operators', parser.currentCS);
- }
- var top = parser.stack.Top();
- var node;
- if (NodeUtil_js_1.default.isType(op, 'munderover') && !limits) {
- node = parser.create('node', 'msubsup');
- NodeUtil_js_1.default.copyChildren(op, node);
- op = top.Last = node;
- }
- else if (NodeUtil_js_1.default.isType(op, 'msubsup') && limits) {
- node = parser.create('node', 'munderover');
- NodeUtil_js_1.default.copyChildren(op, node);
- op = top.Last = node;
- }
- NodeUtil_js_1.default.setProperty(op, 'movesupsub', limits ? true : false);
- NodeUtil_js_1.default.setProperties(NodeUtil_js_1.default.getCoreMO(op), { 'movablelimits': false });
- if (NodeUtil_js_1.default.getAttribute(op, 'movablelimits') ||
- NodeUtil_js_1.default.getProperty(op, 'movablelimits')) {
- NodeUtil_js_1.default.setProperties(op, { 'movablelimits': false });
- }
- };
- BaseMethods.Over = function (parser, name, open, close) {
- var mml = parser.itemFactory.create('over').setProperty('name', parser.currentCS);
- if (open || close) {
- mml.setProperty('open', open);
- mml.setProperty('close', close);
- }
- else if (name.match(/withdelims$/)) {
- mml.setProperty('open', parser.GetDelimiter(name));
- mml.setProperty('close', parser.GetDelimiter(name));
- }
- if (name.match(/^\\above/)) {
- mml.setProperty('thickness', parser.GetDimen(name));
- }
- else if (name.match(/^\\atop/) || open || close) {
- mml.setProperty('thickness', 0);
- }
- parser.Push(mml);
- };
- BaseMethods.Frac = function (parser, name) {
- var num = parser.ParseArg(name);
- var den = parser.ParseArg(name);
- var node = parser.create('node', 'mfrac', [num, den]);
- parser.Push(node);
- };
- BaseMethods.Sqrt = function (parser, name) {
- var n = parser.GetBrackets(name);
- var arg = parser.GetArgument(name);
- if (arg === '\\frac') {
- arg += '{' + parser.GetArgument(arg) + '}{' + parser.GetArgument(arg) + '}';
- }
- var mml = new TexParser_js_1.default(arg, parser.stack.env, parser.configuration).mml();
- if (!n) {
- mml = parser.create('node', 'msqrt', [mml]);
- }
- else {
- mml = parser.create('node', 'mroot', [mml, parseRoot(parser, n)]);
- }
- parser.Push(mml);
- };
- function parseRoot(parser, n) {
- var env = parser.stack.env;
- var inRoot = env['inRoot'];
- env['inRoot'] = true;
- var newParser = new TexParser_js_1.default(n, env, parser.configuration);
- var node = newParser.mml();
- var global = newParser.stack.global;
- if (global['leftRoot'] || global['upRoot']) {
- var def = {};
- if (global['leftRoot']) {
- def['width'] = global['leftRoot'];
- }
- if (global['upRoot']) {
- def['voffset'] = global['upRoot'];
- def['height'] = global['upRoot'];
- }
- node = parser.create('node', 'mpadded', [node], def);
- }
- env['inRoot'] = inRoot;
- return node;
- }
- BaseMethods.Root = function (parser, name) {
- var n = parser.GetUpTo(name, '\\of');
- var arg = parser.ParseArg(name);
- var node = parser.create('node', 'mroot', [arg, parseRoot(parser, n)]);
- parser.Push(node);
- };
- BaseMethods.MoveRoot = function (parser, name, id) {
- if (!parser.stack.env['inRoot']) {
- throw new TexError_js_1.default('MisplacedMoveRoot', '%1 can appear only within a root', parser.currentCS);
- }
- if (parser.stack.global[id]) {
- throw new TexError_js_1.default('MultipleMoveRoot', 'Multiple use of %1', parser.currentCS);
- }
- var n = parser.GetArgument(name);
- if (!n.match(/-?[0-9]+/)) {
- throw new TexError_js_1.default('IntegerArg', 'The argument to %1 must be an integer', parser.currentCS);
- }
- n = (parseInt(n, 10) / 15) + 'em';
- if (n.substr(0, 1) !== '-') {
- n = '+' + n;
- }
- parser.stack.global[id] = n;
- };
- BaseMethods.Accent = function (parser, name, accent, stretchy) {
- var c = parser.ParseArg(name);
- var def = __assign(__assign({}, ParseUtil_js_1.default.getFontDef(parser)), { accent: true, mathaccent: true });
- var entity = NodeUtil_js_1.default.createEntity(accent);
- var moNode = parser.create('token', 'mo', def, entity);
- var mml = moNode;
- NodeUtil_js_1.default.setAttribute(mml, 'stretchy', stretchy ? true : false);
- var mo = (NodeUtil_js_1.default.isEmbellished(c) ? NodeUtil_js_1.default.getCoreMO(c) : c);
- if (NodeUtil_js_1.default.isType(mo, 'mo') || NodeUtil_js_1.default.getProperty(mo, 'movablelimits')) {
- NodeUtil_js_1.default.setProperties(mo, { 'movablelimits': false });
- }
- var muoNode = parser.create('node', 'munderover');
- NodeUtil_js_1.default.setChild(muoNode, 0, c);
- NodeUtil_js_1.default.setChild(muoNode, 1, null);
- NodeUtil_js_1.default.setChild(muoNode, 2, mml);
- var texAtom = parser.create('node', 'TeXAtom', [muoNode]);
- parser.Push(texAtom);
- };
- BaseMethods.UnderOver = function (parser, name, c, stack) {
- var entity = NodeUtil_js_1.default.createEntity(c);
- var mo = parser.create('token', 'mo', { stretchy: true, accent: true }, entity);
- var pos = (name.charAt(1) === 'o' ? 'over' : 'under');
- var base = parser.ParseArg(name);
- parser.Push(ParseUtil_js_1.default.underOver(parser, base, mo, pos, stack));
- };
- BaseMethods.Overset = function (parser, name) {
- var top = parser.ParseArg(name);
- var base = parser.ParseArg(name);
- ParseUtil_js_1.default.checkMovableLimits(base);
- if (top.isKind('mo')) {
- NodeUtil_js_1.default.setAttribute(top, 'accent', false);
- }
- var node = parser.create('node', 'mover', [base, top]);
- parser.Push(node);
- };
- BaseMethods.Underset = function (parser, name) {
- var bot = parser.ParseArg(name);
- var base = parser.ParseArg(name);
- ParseUtil_js_1.default.checkMovableLimits(base);
- if (bot.isKind('mo')) {
- NodeUtil_js_1.default.setAttribute(bot, 'accent', false);
- }
- var node = parser.create('node', 'munder', [base, bot], { accentunder: false });
- parser.Push(node);
- };
- BaseMethods.Overunderset = function (parser, name) {
- var top = parser.ParseArg(name);
- var bot = parser.ParseArg(name);
- var base = parser.ParseArg(name);
- ParseUtil_js_1.default.checkMovableLimits(base);
- if (top.isKind('mo')) {
- NodeUtil_js_1.default.setAttribute(top, 'accent', false);
- }
- if (bot.isKind('mo')) {
- NodeUtil_js_1.default.setAttribute(bot, 'accent', false);
- }
- var node = parser.create('node', 'munderover', [base, bot, top], { accent: false, accentunder: false });
- parser.Push(node);
- };
- BaseMethods.TeXAtom = function (parser, name, mclass) {
- var def = { texClass: mclass };
- var mml;
- var node;
- var parsed;
- if (mclass === MmlNode_js_1.TEXCLASS.OP) {
- def['movesupsub'] = def['movablelimits'] = true;
- var arg = parser.GetArgument(name);
- var match = arg.match(/^\s*\\rm\s+([a-zA-Z0-9 ]+)$/);
- if (match) {
- def['mathvariant'] = TexConstants_js_1.TexConstant.Variant.NORMAL;
- node = parser.create('token', 'mi', def, match[1]);
- }
- else {
- parsed = new TexParser_js_1.default(arg, parser.stack.env, parser.configuration).mml();
- node = parser.create('node', 'TeXAtom', [parsed], def);
- }
- mml = parser.itemFactory.create('fn', node);
- }
- else {
- parsed = parser.ParseArg(name);
- mml = parser.create('node', 'TeXAtom', [parsed], def);
- }
- parser.Push(mml);
- };
- BaseMethods.MmlToken = function (parser, name) {
- var kind = parser.GetArgument(name);
- var attr = parser.GetBrackets(name, '').replace(/^\s+/, '');
- var text = parser.GetArgument(name);
- var def = {};
- var keep = [];
- var node;
- try {
- node = parser.create('node', kind);
- }
- catch (e) {
- node = null;
- }
- if (!node || !node.isToken) {
- throw new TexError_js_1.default('NotMathMLToken', '%1 is not a token element', kind);
- }
- while (attr !== '') {
- var match = attr.match(/^([a-z]+)\s*=\s*('[^']*'|"[^"]*"|[^ ,]*)\s*,?\s*/i);
- if (!match) {
- throw new TexError_js_1.default('InvalidMathMLAttr', 'Invalid MathML attribute: %1', attr);
- }
- if (!node.attributes.hasDefault(match[1]) && !MmlTokenAllow[match[1]]) {
- throw new TexError_js_1.default('UnknownAttrForElement', '%1 is not a recognized attribute for %2', match[1], kind);
- }
- var value = ParseUtil_js_1.default.MmlFilterAttribute(parser, match[1], match[2].replace(/^(['"])(.*)\1$/, '$2'));
- if (value) {
- if (value.toLowerCase() === 'true') {
- value = true;
- }
- else if (value.toLowerCase() === 'false') {
- value = false;
- }
- def[match[1]] = value;
- keep.push(match[1]);
- }
- attr = attr.substr(match[0].length);
- }
- if (keep.length) {
- def['mjx-keep-attrs'] = keep.join(' ');
- }
- var textNode = parser.create('text', text);
- node.appendChild(textNode);
- NodeUtil_js_1.default.setProperties(node, def);
- parser.Push(node);
- };
- BaseMethods.Strut = function (parser, _name) {
- var row = parser.create('node', 'mrow');
- var padded = parser.create('node', 'mpadded', [row], { height: '8.6pt', depth: '3pt', width: 0 });
- parser.Push(padded);
- };
- BaseMethods.Phantom = function (parser, name, v, h) {
- var box = parser.create('node', 'mphantom', [parser.ParseArg(name)]);
- if (v || h) {
- box = parser.create('node', 'mpadded', [box]);
- if (h) {
- NodeUtil_js_1.default.setAttribute(box, 'height', 0);
- NodeUtil_js_1.default.setAttribute(box, 'depth', 0);
- }
- if (v) {
- NodeUtil_js_1.default.setAttribute(box, 'width', 0);
- }
- }
- var atom = parser.create('node', 'TeXAtom', [box]);
- parser.Push(atom);
- };
- BaseMethods.Smash = function (parser, name) {
- var bt = ParseUtil_js_1.default.trimSpaces(parser.GetBrackets(name, ''));
- var smash = parser.create('node', 'mpadded', [parser.ParseArg(name)]);
- switch (bt) {
- case 'b':
- NodeUtil_js_1.default.setAttribute(smash, 'depth', 0);
- break;
- case 't':
- NodeUtil_js_1.default.setAttribute(smash, 'height', 0);
- break;
- default:
- NodeUtil_js_1.default.setAttribute(smash, 'height', 0);
- NodeUtil_js_1.default.setAttribute(smash, 'depth', 0);
- }
- var atom = parser.create('node', 'TeXAtom', [smash]);
- parser.Push(atom);
- };
- BaseMethods.Lap = function (parser, name) {
- var mml = parser.create('node', 'mpadded', [parser.ParseArg(name)], { width: 0 });
- if (name === '\\llap') {
- NodeUtil_js_1.default.setAttribute(mml, 'lspace', '-1width');
- }
- var atom = parser.create('node', 'TeXAtom', [mml]);
- parser.Push(atom);
- };
- BaseMethods.RaiseLower = function (parser, name) {
- var h = parser.GetDimen(name);
- var item = parser.itemFactory.create('position').setProperties({ name: parser.currentCS, move: 'vertical' });
- if (h.charAt(0) === '-') {
- h = h.slice(1);
- name = name.substr(1) === 'raise' ? '\\lower' : '\\raise';
- }
- if (name === '\\lower') {
- item.setProperty('dh', '-' + h);
- item.setProperty('dd', '+' + h);
- }
- else {
- item.setProperty('dh', '+' + h);
- item.setProperty('dd', '-' + h);
- }
- parser.Push(item);
- };
- BaseMethods.MoveLeftRight = function (parser, name) {
- var h = parser.GetDimen(name);
- var nh = (h.charAt(0) === '-' ? h.slice(1) : '-' + h);
- if (name === '\\moveleft') {
- var tmp = h;
- h = nh;
- nh = tmp;
- }
- parser.Push(parser.itemFactory.create('position').setProperties({
- name: parser.currentCS, move: 'horizontal',
- left: parser.create('node', 'mspace', [], { width: h }),
- right: parser.create('node', 'mspace', [], { width: nh })
- }));
- };
- BaseMethods.Hskip = function (parser, name) {
- var node = parser.create('node', 'mspace', [], { width: parser.GetDimen(name) });
- parser.Push(node);
- };
- BaseMethods.Nonscript = function (parser, _name) {
- parser.Push(parser.itemFactory.create('nonscript'));
- };
- BaseMethods.Rule = function (parser, name, style) {
- var w = parser.GetDimen(name), h = parser.GetDimen(name), d = parser.GetDimen(name);
- var def = { width: w, height: h, depth: d };
- if (style !== 'blank') {
- def['mathbackground'] = (parser.stack.env['color'] || 'black');
- }
- var node = parser.create('node', 'mspace', [], def);
- parser.Push(node);
- };
- BaseMethods.rule = function (parser, name) {
- var v = parser.GetBrackets(name), w = parser.GetDimen(name), h = parser.GetDimen(name);
- var mml = parser.create('node', 'mspace', [], {
- width: w, height: h,
- mathbackground: (parser.stack.env['color'] || 'black')
- });
- if (v) {
- mml = parser.create('node', 'mpadded', [mml], { voffset: v });
- if (v.match(/^\-/)) {
- NodeUtil_js_1.default.setAttribute(mml, 'height', v);
- NodeUtil_js_1.default.setAttribute(mml, 'depth', '+' + v.substr(1));
- }
- else {
- NodeUtil_js_1.default.setAttribute(mml, 'height', '+' + v);
- }
- }
- parser.Push(mml);
- };
- BaseMethods.MakeBig = function (parser, name, mclass, size) {
- size *= P_HEIGHT;
- var sizeStr = String(size).replace(/(\.\d\d\d).+/, '$1') + 'em';
- var delim = parser.GetDelimiter(name, true);
- var mo = parser.create('token', 'mo', {
- minsize: sizeStr, maxsize: sizeStr,
- fence: true, stretchy: true, symmetric: true
- }, delim);
- var node = parser.create('node', 'TeXAtom', [mo], { texClass: mclass });
- parser.Push(node);
- };
- BaseMethods.BuildRel = function (parser, name) {
- var top = parser.ParseUpTo(name, '\\over');
- var bot = parser.ParseArg(name);
- var node = parser.create('node', 'munderover');
- NodeUtil_js_1.default.setChild(node, 0, bot);
- NodeUtil_js_1.default.setChild(node, 1, null);
- NodeUtil_js_1.default.setChild(node, 2, top);
- var atom = parser.create('node', 'TeXAtom', [node], { texClass: MmlNode_js_1.TEXCLASS.REL });
- parser.Push(atom);
- };
- BaseMethods.HBox = function (parser, name, style, font) {
- parser.PushAll(ParseUtil_js_1.default.internalMath(parser, parser.GetArgument(name), style, font));
- };
- BaseMethods.FBox = function (parser, name) {
- var internal = ParseUtil_js_1.default.internalMath(parser, parser.GetArgument(name));
- var node = parser.create('node', 'menclose', internal, { notation: 'box' });
- parser.Push(node);
- };
- BaseMethods.FrameBox = function (parser, name) {
- var width = parser.GetBrackets(name);
- var pos = parser.GetBrackets(name) || 'c';
- var mml = ParseUtil_js_1.default.internalMath(parser, parser.GetArgument(name));
- if (width) {
- mml = [parser.create('node', 'mpadded', mml, {
- width: width,
- 'data-align': (0, Options_js_1.lookup)(pos, { l: 'left', r: 'right' }, 'center')
- })];
- }
- var node = parser.create('node', 'TeXAtom', [parser.create('node', 'menclose', mml, { notation: 'box' })], { texClass: MmlNode_js_1.TEXCLASS.ORD });
- parser.Push(node);
- };
- BaseMethods.Not = function (parser, _name) {
- parser.Push(parser.itemFactory.create('not'));
- };
- BaseMethods.Dots = function (parser, _name) {
- var ldotsEntity = NodeUtil_js_1.default.createEntity('2026');
- var cdotsEntity = NodeUtil_js_1.default.createEntity('22EF');
- var ldots = parser.create('token', 'mo', { stretchy: false }, ldotsEntity);
- var cdots = parser.create('token', 'mo', { stretchy: false }, cdotsEntity);
- parser.Push(parser.itemFactory.create('dots').setProperties({
- ldots: ldots,
- cdots: cdots
- }));
- };
- BaseMethods.Matrix = function (parser, _name, open, close, align, spacing, vspacing, style, cases, numbered) {
- var c = parser.GetNext();
- if (c === '') {
- throw new TexError_js_1.default('MissingArgFor', 'Missing argument for %1', parser.currentCS);
- }
- if (c === '{') {
- parser.i++;
- }
- else {
- parser.string = c + '}' + parser.string.slice(parser.i + 1);
- parser.i = 0;
- }
- var array = parser.itemFactory.create('array').setProperty('requireClose', true);
- array.arraydef = {
- rowspacing: (vspacing || '4pt'),
- columnspacing: (spacing || '1em')
- };
- if (cases) {
- array.setProperty('isCases', true);
- }
- if (numbered) {
- array.setProperty('isNumbered', true);
- array.arraydef.side = numbered;
- }
- if (open || close) {
- array.setProperty('open', open);
- array.setProperty('close', close);
- }
- if (style === 'D') {
- array.arraydef.displaystyle = true;
- }
- if (align != null) {
- array.arraydef.columnalign = align;
- }
- parser.Push(array);
- };
- BaseMethods.Entry = function (parser, name) {
- parser.Push(parser.itemFactory.create('cell').setProperties({ isEntry: true, name: name }));
- var top = parser.stack.Top();
- var env = top.getProperty('casesEnv');
- var cases = top.getProperty('isCases');
- if (!cases && !env)
- return;
- var str = parser.string;
- var braces = 0, close = -1, i = parser.i, m = str.length;
- var end = (env ? new RegExp("^\\\\end\\s*\\{".concat(env.replace(/\*/, '\\*'), "\\}")) : null);
- while (i < m) {
- var c = str.charAt(i);
- if (c === '{') {
- braces++;
- i++;
- }
- else if (c === '}') {
- if (braces === 0) {
- m = 0;
- }
- else {
- braces--;
- if (braces === 0 && close < 0) {
- close = i - parser.i;
- }
- i++;
- }
- }
- else if (c === '&' && braces === 0) {
- throw new TexError_js_1.default('ExtraAlignTab', 'Extra alignment tab in \\cases text');
- }
- else if (c === '\\') {
- var rest = str.substr(i);
- if (rest.match(/^((\\cr)[^a-zA-Z]|\\\\)/) || (end && rest.match(end))) {
- m = 0;
- }
- else {
- i += 2;
- }
- }
- else {
- i++;
- }
- }
- var text = str.substr(parser.i, i - parser.i);
- if (!text.match(/^\s*\\text[^a-zA-Z]/) || close !== text.replace(/\s+$/, '').length - 1) {
- var internal = ParseUtil_js_1.default.internalMath(parser, ParseUtil_js_1.default.trimSpaces(text), 0);
- parser.PushAll(internal);
- parser.i = i;
- }
- };
- BaseMethods.Cr = function (parser, name) {
- parser.Push(parser.itemFactory.create('cell').setProperties({ isCR: true, name: name }));
- };
- BaseMethods.CrLaTeX = function (parser, name, nobrackets) {
- if (nobrackets === void 0) { nobrackets = false; }
- var n;
- if (!nobrackets) {
- if (parser.string.charAt(parser.i) === '*') {
- parser.i++;
- }
- if (parser.string.charAt(parser.i) === '[') {
- var dim = parser.GetBrackets(name, '');
- var _a = __read(ParseUtil_js_1.default.matchDimen(dim), 2), value = _a[0], unit = _a[1];
- if (dim && !value) {
- throw new TexError_js_1.default('BracketMustBeDimension', 'Bracket argument to %1 must be a dimension', parser.currentCS);
- }
- n = value + unit;
- }
- }
- parser.Push(parser.itemFactory.create('cell').setProperties({ isCR: true, name: name, linebreak: true }));
- var top = parser.stack.Top();
- var node;
- if (top instanceof sitem.ArrayItem) {
- if (n) {
- top.addRowSpacing(n);
- }
- }
- else {
- if (n) {
- node = parser.create('node', 'mspace', [], { depth: n });
- parser.Push(node);
- }
- node = parser.create('node', 'mspace', [], { linebreak: TexConstants_js_1.TexConstant.LineBreak.NEWLINE });
- parser.Push(node);
- }
- };
- BaseMethods.HLine = function (parser, _name, style) {
- if (style == null) {
- style = 'solid';
- }
- var top = parser.stack.Top();
- if (!(top instanceof sitem.ArrayItem) || top.Size()) {
- throw new TexError_js_1.default('Misplaced', 'Misplaced %1', parser.currentCS);
- }
- if (!top.table.length) {
- top.frame.push('top');
- }
- else {
- var lines = (top.arraydef['rowlines'] ? top.arraydef['rowlines'].split(/ /) : []);
- while (lines.length < top.table.length) {
- lines.push('none');
- }
- lines[top.table.length - 1] = style;
- top.arraydef['rowlines'] = lines.join(' ');
- }
- };
- BaseMethods.HFill = function (parser, _name) {
- var top = parser.stack.Top();
- if (top instanceof sitem.ArrayItem) {
- top.hfill.push(top.Size());
- }
- else {
- throw new TexError_js_1.default('UnsupportedHFill', 'Unsupported use of %1', parser.currentCS);
- }
- };
- BaseMethods.BeginEnd = function (parser, name) {
- var env = parser.GetArgument(name);
- if (env.match(/\\/i)) {
- throw new TexError_js_1.default('InvalidEnv', 'Invalid environment name \'%1\'', env);
- }
- var macro = parser.configuration.handlers.get('environment').lookup(env);
- if (macro && name === '\\end') {
- if (!macro.args[0]) {
- var mml = parser.itemFactory.create('end').setProperty('name', env);
- parser.Push(mml);
- return;
- }
- parser.stack.env['closing'] = env;
- }
- ParseUtil_js_1.default.checkMaxMacros(parser, false);
- parser.parse('environment', [parser, env]);
- };
- BaseMethods.Array = function (parser, begin, open, close, align, spacing, vspacing, style, raggedHeight) {
- if (!align) {
- align = parser.GetArgument('\\begin{' + begin.getName() + '}');
- }
- var lines = ('c' + align).replace(/[^clr|:]/g, '').replace(/[^|:]([|:])+/g, '$1');
- align = align.replace(/[^clr]/g, '').split('').join(' ');
- align = align.replace(/l/g, 'left').replace(/r/g, 'right').replace(/c/g, 'center');
- var array = parser.itemFactory.create('array');
- array.arraydef = {
- columnalign: align,
- columnspacing: (spacing || '1em'),
- rowspacing: (vspacing || '4pt')
- };
- if (lines.match(/[|:]/)) {
- if (lines.charAt(0).match(/[|:]/)) {
- array.frame.push('left');
- array.dashed = lines.charAt(0) === ':';
- }
- if (lines.charAt(lines.length - 1).match(/[|:]/)) {
- array.frame.push('right');
- }
- lines = lines.substr(1, lines.length - 2);
- array.arraydef.columnlines =
- lines.split('').join(' ').replace(/[^|: ]/g, 'none').replace(/\|/g, 'solid').replace(/:/g, 'dashed');
- }
- if (open) {
- array.setProperty('open', parser.convertDelimiter(open));
- }
- if (close) {
- array.setProperty('close', parser.convertDelimiter(close));
- }
- if ((style || '').charAt(1) === '\'') {
- array.arraydef['data-cramped'] = true;
- style = style.charAt(0);
- }
- if (style === 'D') {
- array.arraydef['displaystyle'] = true;
- }
- else if (style) {
- array.arraydef['displaystyle'] = false;
- }
- if (style === 'S') {
- array.arraydef['scriptlevel'] = 1;
- }
- if (raggedHeight) {
- array.arraydef['useHeight'] = false;
- }
- parser.Push(begin);
- return array;
- };
- BaseMethods.AlignedArray = function (parser, begin) {
- var align = parser.GetBrackets('\\begin{' + begin.getName() + '}');
- var item = BaseMethods.Array(parser, begin);
- return ParseUtil_js_1.default.setArrayAlign(item, align);
- };
- BaseMethods.Equation = function (parser, begin, numbered) {
- parser.Push(begin);
- ParseUtil_js_1.default.checkEqnEnv(parser);
- return parser.itemFactory.create('equation', numbered).
- setProperty('name', begin.getName());
- };
- BaseMethods.EqnArray = function (parser, begin, numbered, taggable, align, spacing) {
- parser.Push(begin);
- if (taggable) {
- ParseUtil_js_1.default.checkEqnEnv(parser);
- }
- align = align.replace(/[^clr]/g, '').split('').join(' ');
- align = align.replace(/l/g, 'left').replace(/r/g, 'right').replace(/c/g, 'center');
- var newItem = parser.itemFactory.create('eqnarray', begin.getName(), numbered, taggable, parser.stack.global);
- newItem.arraydef = {
- displaystyle: true,
- columnalign: align,
- columnspacing: (spacing || '1em'),
- rowspacing: '3pt',
- side: parser.options['tagSide'],
- minlabelspacing: parser.options['tagIndent']
- };
- return newItem;
- };
- BaseMethods.HandleNoTag = function (parser, _name) {
- parser.tags.notag();
- };
- BaseMethods.HandleLabel = function (parser, name) {
- var label = parser.GetArgument(name);
- if (label === '') {
- return;
- }
- if (!parser.tags.refUpdate) {
- if (parser.tags.label) {
- throw new TexError_js_1.default('MultipleCommand', 'Multiple %1', parser.currentCS);
- }
- parser.tags.label = label;
- if ((parser.tags.allLabels[label] || parser.tags.labels[label]) && !parser.options['ignoreDuplicateLabels']) {
- throw new TexError_js_1.default('MultipleLabel', 'Label \'%1\' multiply defined', label);
- }
- parser.tags.labels[label] = new Tags_js_1.Label();
- }
- };
- BaseMethods.HandleRef = function (parser, name, eqref) {
- var label = parser.GetArgument(name);
- var ref = parser.tags.allLabels[label] || parser.tags.labels[label];
- if (!ref) {
- if (!parser.tags.refUpdate) {
- parser.tags.redo = true;
- }
- ref = new Tags_js_1.Label();
- }
- var tag = ref.tag;
- if (eqref) {
- tag = parser.tags.formatTag(tag);
- }
- var node = parser.create('node', 'mrow', ParseUtil_js_1.default.internalMath(parser, tag), {
- href: parser.tags.formatUrl(ref.id, parser.options.baseURL), 'class': 'MathJax_ref'
- });
- parser.Push(node);
- };
- BaseMethods.Macro = function (parser, name, macro, argcount, def) {
- if (argcount) {
- var args = [];
- if (def != null) {
- var optional = parser.GetBrackets(name);
- args.push(optional == null ? def : optional);
- }
- for (var i = args.length; i < argcount; i++) {
- args.push(parser.GetArgument(name));
- }
- macro = ParseUtil_js_1.default.substituteArgs(parser, args, macro);
- }
- parser.string = ParseUtil_js_1.default.addArgs(parser, macro, parser.string.slice(parser.i));
- parser.i = 0;
- ParseUtil_js_1.default.checkMaxMacros(parser);
- };
- BaseMethods.MathChoice = function (parser, name) {
- var D = parser.ParseArg(name);
- var T = parser.ParseArg(name);
- var S = parser.ParseArg(name);
- var SS = parser.ParseArg(name);
- parser.Push(parser.create('node', 'MathChoice', [D, T, S, SS]));
- };
- exports.default = BaseMethods;
- //# sourceMappingURL=BaseMethods.js.map
|