123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 |
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- 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 __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 __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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
- if (ar || !(i in from)) {
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
- ar[i] = from[i];
- }
- }
- return to.concat(ar || Array.prototype.slice.call(from));
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.CommonWrapper = void 0;
- var Wrapper_js_1 = require("../../core/Tree/Wrapper.js");
- var MmlNode_js_1 = require("../../core/MmlTree/MmlNode.js");
- var string_js_1 = require("../../util/string.js");
- var LENGTHS = __importStar(require("../../util/lengths.js"));
- var Styles_js_1 = require("../../util/Styles.js");
- var BBox_js_1 = require("../../util/BBox.js");
- var FontData_js_1 = require("./FontData.js");
- var SMALLSIZE = 2 / 18;
- function MathMLSpace(script, size) {
- return (script ? size < SMALLSIZE ? 0 : SMALLSIZE : size);
- }
- var CommonWrapper = (function (_super) {
- __extends(CommonWrapper, _super);
- function CommonWrapper(factory, node, parent) {
- if (parent === void 0) { parent = null; }
- var _this = _super.call(this, factory, node) || this;
- _this.parent = null;
- _this.removedStyles = null;
- _this.styles = null;
- _this.variant = '';
- _this.bboxComputed = false;
- _this.stretch = FontData_js_1.NOSTRETCH;
- _this.font = null;
- _this.parent = parent;
- _this.font = factory.jax.font;
- _this.bbox = BBox_js_1.BBox.zero();
- _this.getStyles();
- _this.getVariant();
- _this.getScale();
- _this.getSpace();
- _this.childNodes = node.childNodes.map(function (child) {
- var wrapped = _this.wrap(child);
- if (wrapped.bbox.pwidth && (node.notParent || node.isKind('math'))) {
- _this.bbox.pwidth = BBox_js_1.BBox.fullWidth;
- }
- return wrapped;
- });
- return _this;
- }
- Object.defineProperty(CommonWrapper.prototype, "jax", {
- get: function () {
- return this.factory.jax;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(CommonWrapper.prototype, "adaptor", {
- get: function () {
- return this.factory.jax.adaptor;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(CommonWrapper.prototype, "metrics", {
- get: function () {
- return this.factory.jax.math.metrics;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(CommonWrapper.prototype, "fixesPWidth", {
- get: function () {
- return !this.node.notParent && !this.node.isToken;
- },
- enumerable: false,
- configurable: true
- });
- CommonWrapper.prototype.wrap = function (node, parent) {
- if (parent === void 0) { parent = null; }
- var wrapped = this.factory.wrap(node, parent || this);
- if (parent) {
- parent.childNodes.push(wrapped);
- }
- this.jax.nodeMap.set(node, wrapped);
- return wrapped;
- };
- CommonWrapper.prototype.getBBox = function (save) {
- if (save === void 0) { save = true; }
- if (this.bboxComputed) {
- return this.bbox;
- }
- var bbox = (save ? this.bbox : BBox_js_1.BBox.zero());
- this.computeBBox(bbox);
- this.bboxComputed = save;
- return bbox;
- };
- CommonWrapper.prototype.getOuterBBox = function (save) {
- var e_1, _a;
- if (save === void 0) { save = true; }
- var bbox = this.getBBox(save);
- if (!this.styles)
- return bbox;
- var obox = new BBox_js_1.BBox();
- Object.assign(obox, bbox);
- try {
- for (var _b = __values(BBox_js_1.BBox.StyleAdjust), _c = _b.next(); !_c.done; _c = _b.next()) {
- var _d = __read(_c.value, 2), name_1 = _d[0], side = _d[1];
- var x = this.styles.get(name_1);
- if (x) {
- obox[side] += this.length2em(x, 1, obox.rscale);
- }
- }
- }
- 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; }
- }
- return obox;
- };
- CommonWrapper.prototype.computeBBox = function (bbox, recompute) {
- var e_2, _a;
- if (recompute === void 0) { recompute = false; }
- bbox.empty();
- try {
- for (var _b = __values(this.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) {
- var child = _c.value;
- bbox.append(child.getOuterBBox());
- }
- }
- 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; }
- }
- bbox.clean();
- if (this.fixesPWidth && this.setChildPWidths(recompute)) {
- this.computeBBox(bbox, true);
- }
- };
- CommonWrapper.prototype.setChildPWidths = function (recompute, w, clear) {
- var e_3, _a;
- if (w === void 0) { w = null; }
- if (clear === void 0) { clear = true; }
- if (recompute) {
- return false;
- }
- if (clear) {
- this.bbox.pwidth = '';
- }
- var changed = false;
- try {
- for (var _b = __values(this.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) {
- var child = _c.value;
- var cbox = child.getOuterBBox();
- if (cbox.pwidth && child.setChildPWidths(recompute, w === null ? cbox.w : w, clear)) {
- changed = true;
- }
- }
- }
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_3) throw e_3.error; }
- }
- return changed;
- };
- CommonWrapper.prototype.invalidateBBox = function () {
- if (this.bboxComputed) {
- this.bboxComputed = false;
- if (this.parent) {
- this.parent.invalidateBBox();
- }
- }
- };
- CommonWrapper.prototype.copySkewIC = function (bbox) {
- var first = this.childNodes[0];
- if (first === null || first === void 0 ? void 0 : first.bbox.sk) {
- bbox.sk = first.bbox.sk;
- }
- if (first === null || first === void 0 ? void 0 : first.bbox.dx) {
- bbox.dx = first.bbox.dx;
- }
- var last = this.childNodes[this.childNodes.length - 1];
- if (last === null || last === void 0 ? void 0 : last.bbox.ic) {
- bbox.ic = last.bbox.ic;
- bbox.w += bbox.ic;
- }
- };
- CommonWrapper.prototype.getStyles = function () {
- var styleString = this.node.attributes.getExplicit('style');
- if (!styleString)
- return;
- var style = this.styles = new Styles_js_1.Styles(styleString);
- for (var i = 0, m = CommonWrapper.removeStyles.length; i < m; i++) {
- var id = CommonWrapper.removeStyles[i];
- if (style.get(id)) {
- if (!this.removedStyles)
- this.removedStyles = {};
- this.removedStyles[id] = style.get(id);
- style.set(id, '');
- }
- }
- };
- CommonWrapper.prototype.getVariant = function () {
- if (!this.node.isToken)
- return;
- var attributes = this.node.attributes;
- var variant = attributes.get('mathvariant');
- if (!attributes.getExplicit('mathvariant')) {
- var values = attributes.getList('fontfamily', 'fontweight', 'fontstyle');
- if (this.removedStyles) {
- var style = this.removedStyles;
- if (style.fontFamily)
- values.family = style.fontFamily;
- if (style.fontWeight)
- values.weight = style.fontWeight;
- if (style.fontStyle)
- values.style = style.fontStyle;
- }
- if (values.fontfamily)
- values.family = values.fontfamily;
- if (values.fontweight)
- values.weight = values.fontweight;
- if (values.fontstyle)
- values.style = values.fontstyle;
- if (values.weight && values.weight.match(/^\d+$/)) {
- values.weight = (parseInt(values.weight) > 600 ? 'bold' : 'normal');
- }
- if (values.family) {
- variant = this.explicitVariant(values.family, values.weight, values.style);
- }
- else {
- if (this.node.getProperty('variantForm'))
- variant = '-tex-variant';
- variant = (CommonWrapper.BOLDVARIANTS[values.weight] || {})[variant] || variant;
- variant = (CommonWrapper.ITALICVARIANTS[values.style] || {})[variant] || variant;
- }
- }
- this.variant = variant;
- };
- CommonWrapper.prototype.explicitVariant = function (fontFamily, fontWeight, fontStyle) {
- var style = this.styles;
- if (!style)
- style = this.styles = new Styles_js_1.Styles();
- style.set('fontFamily', fontFamily);
- if (fontWeight)
- style.set('fontWeight', fontWeight);
- if (fontStyle)
- style.set('fontStyle', fontStyle);
- return '-explicitFont';
- };
- CommonWrapper.prototype.getScale = function () {
- var scale = 1, parent = this.parent;
- var pscale = (parent ? parent.bbox.scale : 1);
- var attributes = this.node.attributes;
- var scriptlevel = Math.min(attributes.get('scriptlevel'), 2);
- var fontsize = attributes.get('fontsize');
- var mathsize = (this.node.isToken || this.node.isKind('mstyle') ?
- attributes.get('mathsize') : attributes.getInherited('mathsize'));
- if (scriptlevel !== 0) {
- scale = Math.pow(attributes.get('scriptsizemultiplier'), scriptlevel);
- var scriptminsize = this.length2em(attributes.get('scriptminsize'), .8, 1);
- if (scale < scriptminsize)
- scale = scriptminsize;
- }
- if (this.removedStyles && this.removedStyles.fontSize && !fontsize) {
- fontsize = this.removedStyles.fontSize;
- }
- if (fontsize && !attributes.getExplicit('mathsize')) {
- mathsize = fontsize;
- }
- if (mathsize !== '1') {
- scale *= this.length2em(mathsize, 1, 1);
- }
- this.bbox.scale = scale;
- this.bbox.rscale = scale / pscale;
- };
- CommonWrapper.prototype.getSpace = function () {
- var isTop = this.isTopEmbellished();
- var hasSpacing = this.node.hasSpacingAttributes();
- if (this.jax.options.mathmlSpacing || hasSpacing) {
- isTop && this.getMathMLSpacing();
- }
- else {
- this.getTeXSpacing(isTop, hasSpacing);
- }
- };
- CommonWrapper.prototype.getMathMLSpacing = function () {
- var node = this.node.coreMO();
- var child = node.coreParent();
- var parent = child.parent;
- if (!parent || !parent.isKind('mrow') || parent.childNodes.length === 1)
- return;
- var attributes = node.attributes;
- var isScript = (attributes.get('scriptlevel') > 0);
- this.bbox.L = (attributes.isSet('lspace') ?
- Math.max(0, this.length2em(attributes.get('lspace'))) :
- MathMLSpace(isScript, node.lspace));
- this.bbox.R = (attributes.isSet('rspace') ?
- Math.max(0, this.length2em(attributes.get('rspace'))) :
- MathMLSpace(isScript, node.rspace));
- var n = parent.childIndex(child);
- if (n === 0)
- return;
- var prev = parent.childNodes[n - 1];
- if (!prev.isEmbellished)
- return;
- var bbox = this.jax.nodeMap.get(prev).getBBox();
- if (bbox.R) {
- this.bbox.L = Math.max(0, this.bbox.L - bbox.R);
- }
- };
- CommonWrapper.prototype.getTeXSpacing = function (isTop, hasSpacing) {
- if (!hasSpacing) {
- var space = this.node.texSpacing();
- if (space) {
- this.bbox.L = this.length2em(space);
- }
- }
- if (isTop || hasSpacing) {
- var attributes = this.node.coreMO().attributes;
- if (attributes.isSet('lspace')) {
- this.bbox.L = Math.max(0, this.length2em(attributes.get('lspace')));
- }
- if (attributes.isSet('rspace')) {
- this.bbox.R = Math.max(0, this.length2em(attributes.get('rspace')));
- }
- }
- };
- CommonWrapper.prototype.isTopEmbellished = function () {
- return (this.node.isEmbellished &&
- !(this.node.parent && this.node.parent.isEmbellished));
- };
- CommonWrapper.prototype.core = function () {
- return this.jax.nodeMap.get(this.node.core());
- };
- CommonWrapper.prototype.coreMO = function () {
- return this.jax.nodeMap.get(this.node.coreMO());
- };
- CommonWrapper.prototype.getText = function () {
- var e_4, _a;
- var text = '';
- if (this.node.isToken) {
- try {
- for (var _b = __values(this.node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) {
- var child = _c.value;
- if (child instanceof MmlNode_js_1.TextNode) {
- text += child.getText();
- }
- }
- }
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
- finally {
- try {
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
- }
- finally { if (e_4) throw e_4.error; }
- }
- }
- return text;
- };
- CommonWrapper.prototype.canStretch = function (direction) {
- this.stretch = FontData_js_1.NOSTRETCH;
- if (this.node.isEmbellished) {
- var core = this.core();
- if (core && core.node !== this.node) {
- if (core.canStretch(direction)) {
- this.stretch = core.stretch;
- }
- }
- }
- return this.stretch.dir !== 0;
- };
- CommonWrapper.prototype.getAlignShift = function () {
- var _a;
- var _b = (_a = this.node.attributes).getList.apply(_a, __spreadArray([], __read(MmlNode_js_1.indentAttributes), false)), indentalign = _b.indentalign, indentshift = _b.indentshift, indentalignfirst = _b.indentalignfirst, indentshiftfirst = _b.indentshiftfirst;
- if (indentalignfirst !== 'indentalign') {
- indentalign = indentalignfirst;
- }
- if (indentalign === 'auto') {
- indentalign = this.jax.options.displayAlign;
- }
- if (indentshiftfirst !== 'indentshift') {
- indentshift = indentshiftfirst;
- }
- if (indentshift === 'auto') {
- indentshift = this.jax.options.displayIndent;
- if (indentalign === 'right' && !indentshift.match(/^\s*0[a-z]*\s*$/)) {
- indentshift = ('-' + indentshift.trim()).replace(/^--/, '');
- }
- }
- var shift = this.length2em(indentshift, this.metrics.containerWidth);
- return [indentalign, shift];
- };
- CommonWrapper.prototype.getAlignX = function (W, bbox, align) {
- return (align === 'right' ? W - (bbox.w + bbox.R) * bbox.rscale :
- align === 'left' ? bbox.L * bbox.rscale :
- (W - bbox.w * bbox.rscale) / 2);
- };
- CommonWrapper.prototype.getAlignY = function (H, D, h, d, align) {
- return (align === 'top' ? H - h :
- align === 'bottom' ? d - D :
- align === 'center' ? ((H - h) - (D - d)) / 2 :
- 0);
- };
- CommonWrapper.prototype.getWrapWidth = function (i) {
- return this.childNodes[i].getBBox().w;
- };
- CommonWrapper.prototype.getChildAlign = function (_i) {
- return 'left';
- };
- CommonWrapper.prototype.percent = function (m) {
- return LENGTHS.percent(m);
- };
- CommonWrapper.prototype.em = function (m) {
- return LENGTHS.em(m);
- };
- CommonWrapper.prototype.px = function (m, M) {
- if (M === void 0) { M = -LENGTHS.BIGDIMEN; }
- return LENGTHS.px(m, M, this.metrics.em);
- };
- CommonWrapper.prototype.length2em = function (length, size, scale) {
- if (size === void 0) { size = 1; }
- if (scale === void 0) { scale = null; }
- if (scale === null) {
- scale = this.bbox.scale;
- }
- return LENGTHS.length2em(length, size, scale, this.jax.pxPerEm);
- };
- CommonWrapper.prototype.unicodeChars = function (text, name) {
- if (name === void 0) { name = this.variant; }
- var chars = (0, string_js_1.unicodeChars)(text);
- var variant = this.font.getVariant(name);
- if (variant && variant.chars) {
- var map_1 = variant.chars;
- chars = chars.map(function (n) { return ((map_1[n] || [])[3] || {}).smp || n; });
- }
- return chars;
- };
- CommonWrapper.prototype.remapChars = function (chars) {
- return chars;
- };
- CommonWrapper.prototype.mmlText = function (text) {
- return this.node.factory.create('text').setText(text);
- };
- CommonWrapper.prototype.mmlNode = function (kind, properties, children) {
- if (properties === void 0) { properties = {}; }
- if (children === void 0) { children = []; }
- return this.node.factory.create(kind, properties, children);
- };
- CommonWrapper.prototype.createMo = function (text) {
- var mmlFactory = this.node.factory;
- var textNode = mmlFactory.create('text').setText(text);
- var mml = mmlFactory.create('mo', { stretchy: true }, [textNode]);
- mml.inheritAttributesFrom(this.node);
- var node = this.wrap(mml);
- node.parent = this;
- return node;
- };
- CommonWrapper.prototype.getVariantChar = function (variant, n) {
- var char = this.font.getChar(variant, n) || [0, 0, 0, { unknown: true }];
- if (char.length === 3) {
- char[3] = {};
- }
- return char;
- };
- CommonWrapper.kind = 'unknown';
- CommonWrapper.styles = {};
- CommonWrapper.removeStyles = [
- 'fontSize', 'fontFamily', 'fontWeight',
- 'fontStyle', 'fontVariant', 'font'
- ];
- CommonWrapper.skipAttributes = {
- fontfamily: true, fontsize: true, fontweight: true, fontstyle: true,
- color: true, background: true,
- 'class': true, href: true, style: true,
- xmlns: true
- };
- CommonWrapper.BOLDVARIANTS = {
- bold: {
- normal: 'bold',
- italic: 'bold-italic',
- fraktur: 'bold-fraktur',
- script: 'bold-script',
- 'sans-serif': 'bold-sans-serif',
- 'sans-serif-italic': 'sans-serif-bold-italic'
- },
- normal: {
- bold: 'normal',
- 'bold-italic': 'italic',
- 'bold-fraktur': 'fraktur',
- 'bold-script': 'script',
- 'bold-sans-serif': 'sans-serif',
- 'sans-serif-bold-italic': 'sans-serif-italic'
- }
- };
- CommonWrapper.ITALICVARIANTS = {
- italic: {
- normal: 'italic',
- bold: 'bold-italic',
- 'sans-serif': 'sans-serif-italic',
- 'bold-sans-serif': 'sans-serif-bold-italic'
- },
- normal: {
- italic: 'normal',
- 'bold-italic': 'bold',
- 'sans-serif-italic': 'sans-serif',
- 'sans-serif-bold-italic': 'bold-sans-serif'
- }
- };
- return CommonWrapper;
- }(Wrapper_js_1.AbstractWrapper));
- exports.CommonWrapper = CommonWrapper;
- //# sourceMappingURL=Wrapper.js.map
|