@pie-lib/math-rendering-accessible 3.4.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +1 -0
- package/CHANGELOG.md +16 -0
- package/LICENSE.md +5 -0
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/__tests__/mml-to-latex.test.js +18 -0
- package/lib/__tests__/normalization.test.js +54 -0
- package/lib/__tests__/render-math.test.js +84 -0
- package/lib/index.js +38 -0
- package/lib/mathjax-script.js +2 -0
- package/lib/mml-to-latex.js +15 -0
- package/lib/mstack/__tests__/chtml.test.js +151 -0
- package/lib/mstack/chtml.js +296 -0
- package/lib/mstack/index.js +23 -0
- package/lib/mstack/mml.js +109 -0
- package/lib/normalization.js +95 -0
- package/lib/render-math.js +475 -0
- package/package.json +20 -0
- package/src/__tests__/mml-to-latex.test.js +13 -0
- package/src/__tests__/normalization.test.js +51 -0
- package/src/__tests__/render-math.test.js +76 -0
- package/src/index.js +5 -0
- package/src/mathjax-script.js +0 -0
- package/src/mml-to-latex.js +2 -0
- package/src/mstack/__tests__/__snapshots__/chtml.test.js.snap +9 -0
- package/src/mstack/__tests__/chtml.test.js +104 -0
- package/src/mstack/chtml.js +220 -0
- package/src/mstack/index.js +13 -0
- package/src/mstack/mml.js +24 -0
- package/src/normalization.js +69 -0
- package/src/render-math.js +450 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.getStackData = exports.Row = exports.Line = exports.CHTMLmstack = void 0;
|
|
9
|
+
|
|
10
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
11
|
+
|
|
12
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
|
+
|
|
14
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
15
|
+
|
|
16
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
17
|
+
|
|
18
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
19
|
+
|
|
20
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
21
|
+
|
|
22
|
+
var _Wrapper = require("mathjax-full/js/output/chtml/Wrapper");
|
|
23
|
+
|
|
24
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
25
|
+
|
|
26
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
27
|
+
|
|
28
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
29
|
+
|
|
30
|
+
var reduceText = function reduceText(acc, n) {
|
|
31
|
+
if (n.node && n.node.kind === 'text') {
|
|
32
|
+
acc += n.node.text;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return acc;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
var Line = /*#__PURE__*/function () {
|
|
39
|
+
function Line() {
|
|
40
|
+
(0, _classCallCheck2["default"])(this, Line);
|
|
41
|
+
this.kind = 'line';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
(0, _createClass2["default"])(Line, [{
|
|
45
|
+
key: "columns",
|
|
46
|
+
get: function get() {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
}]);
|
|
50
|
+
return Line;
|
|
51
|
+
}();
|
|
52
|
+
|
|
53
|
+
exports.Line = Line;
|
|
54
|
+
|
|
55
|
+
var Row = /*#__PURE__*/function () {
|
|
56
|
+
function Row(columns, operator) {
|
|
57
|
+
(0, _classCallCheck2["default"])(this, Row);
|
|
58
|
+
this.kind = 'row';
|
|
59
|
+
this.operator = operator;
|
|
60
|
+
this.columns = columns;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
(0, _createClass2["default"])(Row, [{
|
|
64
|
+
key: "pad",
|
|
65
|
+
value: function pad(count) {
|
|
66
|
+
var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'right';
|
|
67
|
+
|
|
68
|
+
if (count < this.columns.length) {
|
|
69
|
+
throw new Error('no');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
var diff = count - this.columns.length;
|
|
73
|
+
|
|
74
|
+
var padding = _lodash["default"].times(diff).map(function () {
|
|
75
|
+
return '__pad__';
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
return direction === 'right' ? [].concat((0, _toConsumableArray2["default"])(padding), (0, _toConsumableArray2["default"])(this.columns)) : [].concat((0, _toConsumableArray2["default"])(this.columns), (0, _toConsumableArray2["default"])(padding));
|
|
79
|
+
}
|
|
80
|
+
}]);
|
|
81
|
+
return Row;
|
|
82
|
+
}();
|
|
83
|
+
|
|
84
|
+
exports.Row = Row;
|
|
85
|
+
|
|
86
|
+
var mathNodeToCharArray = function mathNodeToCharArray(mn) {
|
|
87
|
+
var text = mn.childNodes.reduce(reduceText, '');
|
|
88
|
+
return text.split('');
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Convert child a column entry
|
|
92
|
+
* @param {*} child
|
|
93
|
+
* @return an array of column content
|
|
94
|
+
*/
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
var toColumnArray = function toColumnArray(child) {
|
|
98
|
+
if (!child || !child.kind) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (child.kind === 'msrow') {
|
|
103
|
+
throw new Error('msrow in msrow?');
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (child.kind === 'mo') {
|
|
107
|
+
// We are going to treat this operator as a text array.
|
|
108
|
+
// It's probably going to be a decimal point
|
|
109
|
+
// eslint-disable-next-line no-console
|
|
110
|
+
console.warn('mo that is not 1st node in msrow?');
|
|
111
|
+
return mathNodeToCharArray(child); // throw new Error('mo must be first child of msrow');
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (child.kind === 'mn') {
|
|
115
|
+
return mathNodeToCharArray(child);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (child.toCHTML) {
|
|
119
|
+
return child;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* convert mstack chtml childNodes into a Row
|
|
124
|
+
* @param child chtml child node of mstack
|
|
125
|
+
* @return Row | Line
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
var rowStack = function rowStack(child) {
|
|
130
|
+
if (!child || !child.kind) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (child.kind === 'msrow') {
|
|
135
|
+
if (!child.childNodes || child.childNodes.length === 0) {
|
|
136
|
+
return new Row([]);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
var f = _lodash["default"].first(child.childNodes);
|
|
140
|
+
|
|
141
|
+
var nodes = f && f.kind === 'mo' ? _lodash["default"].tail(child.childNodes) : child.childNodes;
|
|
142
|
+
|
|
143
|
+
var columns = _lodash["default"].flatten(nodes.map(toColumnArray));
|
|
144
|
+
|
|
145
|
+
return new Row(columns, f.kind === 'mo' ? f : undefined);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (child.kind === 'mn') {
|
|
149
|
+
var _columns = mathNodeToCharArray(child);
|
|
150
|
+
|
|
151
|
+
return new Row(_columns, undefined);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (child.kind === 'mo') {
|
|
155
|
+
// eslint-disable-next-line no-console
|
|
156
|
+
console.warn('mo on its own row?');
|
|
157
|
+
return new Row([], child);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (child.kind === 'msline') {
|
|
161
|
+
return new Line();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (child.toCHTML) {
|
|
165
|
+
return new Row([child]);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
/** convert MathJax chtml tree to Row[]
|
|
169
|
+
* @param mstack the root of the mathjax chtml tree
|
|
170
|
+
* @return Row[]
|
|
171
|
+
*/
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
var getStackData = function getStackData(mstack) {
|
|
175
|
+
if (!mstack || !mstack.childNodes) {
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return _lodash["default"].compact(mstack.childNodes.map(rowStack));
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
exports.getStackData = getStackData;
|
|
183
|
+
|
|
184
|
+
var CHTMLmstack = /*#__PURE__*/function (_CHTMLWrapper) {
|
|
185
|
+
(0, _inherits2["default"])(CHTMLmstack, _CHTMLWrapper);
|
|
186
|
+
|
|
187
|
+
var _super = _createSuper(CHTMLmstack);
|
|
188
|
+
|
|
189
|
+
function CHTMLmstack(factory, node) {
|
|
190
|
+
var _this;
|
|
191
|
+
|
|
192
|
+
var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
193
|
+
(0, _classCallCheck2["default"])(this, CHTMLmstack);
|
|
194
|
+
_this = _super.call(this, factory, node, parent);
|
|
195
|
+
_this.ce = _this.adaptor.document.createElement.bind(_this.adaptor.document);
|
|
196
|
+
return _this;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
(0, _createClass2["default"])(CHTMLmstack, [{
|
|
200
|
+
key: "toCHTML",
|
|
201
|
+
value: function toCHTML(parent) {
|
|
202
|
+
var _this2 = this;
|
|
203
|
+
|
|
204
|
+
var chtml = this.standardCHTMLnode(parent);
|
|
205
|
+
var stackData = getStackData(this); // console.log('stackData', stackData);
|
|
206
|
+
|
|
207
|
+
var maxCols = stackData.reduce(function (acc, r) {
|
|
208
|
+
if (r && r.columns.length > acc) {
|
|
209
|
+
acc = r.columns.length;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return acc;
|
|
213
|
+
}, 0);
|
|
214
|
+
var table = this.ce('table');
|
|
215
|
+
chtml.appendChild(table);
|
|
216
|
+
stackData.forEach(function (row) {
|
|
217
|
+
var tr = _this2.ce('tr');
|
|
218
|
+
|
|
219
|
+
table.appendChild(tr);
|
|
220
|
+
|
|
221
|
+
if (row.kind === 'row') {
|
|
222
|
+
var td = _this2.ce('td');
|
|
223
|
+
|
|
224
|
+
tr.appendChild(td);
|
|
225
|
+
|
|
226
|
+
if (row.operator && row.operator.toCHTML) {
|
|
227
|
+
td.setAttribute('class', 'inner');
|
|
228
|
+
row.operator.toCHTML(td);
|
|
229
|
+
} else {
|
|
230
|
+
td.textContent = '';
|
|
231
|
+
} // align right for now:
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
var cols = row.pad(maxCols, 'right');
|
|
235
|
+
cols.forEach(function (c) {
|
|
236
|
+
var t = _this2.ce('td');
|
|
237
|
+
|
|
238
|
+
tr.appendChild(t);
|
|
239
|
+
|
|
240
|
+
if (c === '__pad__') {
|
|
241
|
+
t.textContent = '';
|
|
242
|
+
} else if (typeof c === 'string') {
|
|
243
|
+
t.textContent = c;
|
|
244
|
+
} else if (c.kind === 'none') {
|
|
245
|
+
t.textContent = '';
|
|
246
|
+
} else if (c.toCHTML) {
|
|
247
|
+
t.setAttribute('class', 'inner');
|
|
248
|
+
c.toCHTML(t);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
} else if (row.kind === 'line') {
|
|
252
|
+
var _td = _this2.ce('td');
|
|
253
|
+
|
|
254
|
+
tr.appendChild(_td);
|
|
255
|
+
|
|
256
|
+
_td.setAttribute('colspan', maxCols + 1);
|
|
257
|
+
|
|
258
|
+
_td.setAttribute('class', 'mjx-line');
|
|
259
|
+
|
|
260
|
+
_td.textContent = '';
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}]);
|
|
265
|
+
return CHTMLmstack;
|
|
266
|
+
}(_Wrapper.CHTMLWrapper);
|
|
267
|
+
|
|
268
|
+
exports.CHTMLmstack = CHTMLmstack;
|
|
269
|
+
CHTMLmstack.styles = {
|
|
270
|
+
'mjx-mstack > table': {
|
|
271
|
+
'line-height': 'initial',
|
|
272
|
+
border: 'solid 0px red',
|
|
273
|
+
'border-spacing': '0em',
|
|
274
|
+
'border-collapse': 'separate'
|
|
275
|
+
},
|
|
276
|
+
'mjx-mstack > table > tr': {
|
|
277
|
+
'line-height': 'initial'
|
|
278
|
+
},
|
|
279
|
+
'mjx-mstack > table > tr > td': {
|
|
280
|
+
// padding: '1.2rem',
|
|
281
|
+
border: 'solid 0px blue',
|
|
282
|
+
'font-family': 'sans-serif',
|
|
283
|
+
'line-height': 'initial'
|
|
284
|
+
},
|
|
285
|
+
'mjx-mstack > table > tr > td.inner': {
|
|
286
|
+
'font-family': 'inherit'
|
|
287
|
+
},
|
|
288
|
+
'mjx-mstack > table > tr > .mjx-line': {
|
|
289
|
+
padding: 0,
|
|
290
|
+
'border-top': 'solid 1px black'
|
|
291
|
+
},
|
|
292
|
+
'.TEX-A': {
|
|
293
|
+
'font-family': 'MJXZERO, MJXTEX !important'
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc3RhY2svY2h0bWwuanMiXSwibmFtZXMiOlsicmVkdWNlVGV4dCIsImFjYyIsIm4iLCJub2RlIiwia2luZCIsInRleHQiLCJMaW5lIiwiUm93IiwiY29sdW1ucyIsIm9wZXJhdG9yIiwiY291bnQiLCJkaXJlY3Rpb24iLCJsZW5ndGgiLCJFcnJvciIsImRpZmYiLCJwYWRkaW5nIiwiXyIsInRpbWVzIiwibWFwIiwibWF0aE5vZGVUb0NoYXJBcnJheSIsIm1uIiwiY2hpbGROb2RlcyIsInJlZHVjZSIsInNwbGl0IiwidG9Db2x1bW5BcnJheSIsImNoaWxkIiwiY29uc29sZSIsIndhcm4iLCJ0b0NIVE1MIiwicm93U3RhY2siLCJmIiwiZmlyc3QiLCJub2RlcyIsInRhaWwiLCJmbGF0dGVuIiwidW5kZWZpbmVkIiwiZ2V0U3RhY2tEYXRhIiwibXN0YWNrIiwiY29tcGFjdCIsIkNIVE1MbXN0YWNrIiwiZmFjdG9yeSIsInBhcmVudCIsImNlIiwiYWRhcHRvciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImJpbmQiLCJjaHRtbCIsInN0YW5kYXJkQ0hUTUxub2RlIiwic3RhY2tEYXRhIiwibWF4Q29scyIsInIiLCJ0YWJsZSIsImFwcGVuZENoaWxkIiwiZm9yRWFjaCIsInJvdyIsInRyIiwidGQiLCJzZXRBdHRyaWJ1dGUiLCJ0ZXh0Q29udGVudCIsImNvbHMiLCJwYWQiLCJjIiwidCIsIkNIVE1MV3JhcHBlciIsInN0eWxlcyIsImJvcmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNDLEdBQUQsRUFBTUMsQ0FBTixFQUFZO0FBQzdCLE1BQUlBLENBQUMsQ0FBQ0MsSUFBRixJQUFVRCxDQUFDLENBQUNDLElBQUYsQ0FBT0MsSUFBUCxLQUFnQixNQUE5QixFQUFzQztBQUNwQ0gsSUFBQUEsR0FBRyxJQUFJQyxDQUFDLENB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QUFBQSxPQUFPLEVBQUUsQ0FENEI7QUFFckMsa0JBQWM7QUFGdUIsR0FuQnBCO0FBdUJuQixZQUFVO0FBQ1IsbUJBQWU7QUFEUDtBQXZCUyxDQUFyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENIVE1MV3JhcHBlciB9IGZyb20gJ21hdGhqYXgtZnVsbC9qcy9vdXRwdXQvY2h0bWwvV3JhcHBlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCByZWR1Y2VUZXh0ID0gKGFjYywgbikgPT4ge1xuICBpZiAobi5ub2RlICYmIG4ubm9kZS5raW5kID09PSAndGV4dCcpIHtcbiAgICBhY2MgKz0gbi5ub2RlLnRleHQ7XG4gIH1cbiAgcmV0dXJuIGFjYztcbn07XG5cbmV4cG9ydCBjbGFzcyBMaW5lIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5raW5kID0gJ2xpbmUnO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb3cge1xuICBjb25zdHJ1Y3Rvcihjb2x1bW5zLCBvcGVyYXRvcikge1xuICAgIHRoaXMua2luZCA9ICdyb3cnO1xuICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICB9XG5cbiAgcGFkKGNvdW50LCBkaXJlY3Rpb24gPSAncmlnaHQnKSB7XG4gICAgaWYgKGNvdW50IDwgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubycpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpZmYgPSBjb3VudCAtIHRoaXMuY29sdW1ucy5sZW5ndGg7XG5cbiAgICBjb25zdCBwYWRkaW5nID0gXy50aW1lcyhkaWZmKS5tYXAoKCkgPT4gJ19fcGFkX18nKTtcbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSAncmlnaHQnID8gWy4uLnBhZGRpbmcsIC4uLnRoaXMuY29sdW1uc10gOiBbLi4udGhpcy5jb2x1bW5zLCAuLi5wYWRkaW5nXTtcbiAgfVxufVxuXG5jb25zdCBtYXRoTm9kZVRvQ2hhckFycmF5ID0gKG1uKSA9PiB7XG4gIGNvbnN0IHRleHQgPSBtbi5jaGlsZE5vZGVzLnJlZHVjZShyZWR1Y2VUZXh0LCAnJyk7XG4gIHJldHVybiB0ZXh0LnNwbGl0KCcnKTtcbn07XG5cbi8qKlxuICogQ29udmVydCBjaGlsZCBhIGNvbHVtbiBlbnRyeVxuICogQHBhcmFtIHsqfSBjaGlsZFxuICogQHJldHVybiBhbiBhcnJheSBvZiBjb2x1bW4gY29udGVudFxuICovXG5jb25zdCB0b0NvbHVtbkFycmF5ID0gKGNoaWxkKSA9PiB7XG4gIGlmICghY2hpbGQgfHwgIWNoaWxkLmtpbmQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAoY2hpbGQua2luZCA9PT0gJ21zcm93Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignbXNyb3cgaW4gbXNyb3c/Jyk7XG4gIH1cblxuICBpZiAoY2hpbGQua2luZCA9PT0gJ21vJykge1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byB0cmVhdCB0aGlzIG9wZXJhdG9yIGFzIGEgdGV4dCBhcnJheS5cbiAgICAvLyBJdCdzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGEgZGVjaW1hbCBwb2ludFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKCdtbyB0aGF0IGlzIG5vdCAxc3Qgbm9kZSBpbiBtc3Jvdz8nKTtcbiAgICByZXR1cm4gbWF0aE5vZGVUb0NoYXJBcnJheShjaGlsZCk7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdtbyBtdXN0IGJlIGZpcnN0IGNoaWxkIG9mIG1zcm93Jyk7XG4gIH1cblxuICBpZiAoY2hpbGQua2luZCA9PT0gJ21uJykge1xuICAgIHJldHVybiBtYXRoTm9kZVRvQ2hhckFycmF5KGNoaWxkKTtcbiAgfVxuXG4gIGlmIChjaGlsZC50b0NIVE1MKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59O1xuXG4vKipcbiAqICBjb252ZXJ0IG1zdGFjayBjaHRtbCBjaGlsZE5vZGVzIGludG8gYSBSb3dcbiAqICBAcGFyYW0gY2hpbGQgY2h0bWwgY2hpbGQgbm9kZSBvZiBtc3RhY2tcbiAqICBAcmV0dXJuIFJvdyB8IExpbmVcbiAqL1xuY29uc3Qgcm93U3RhY2sgPSAoY2hpbGQpID0+IHtcbiAgaWYgKCFjaGlsZCB8fCAhY2hpbGQua2luZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGlsZC5raW5kID09PSAnbXNyb3cnKSB7XG4gICAgaWYgKCFjaGlsZC5jaGlsZE5vZGVzIHx8IGNoaWxkLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFJvdyhbXSk7XG4gICAgfVxuICAgIGNvbnN0IGYgPSBfLmZpcnN0KGNoaWxkLmNoaWxkTm9kZXMpO1xuICAgIGNvbnN0IG5vZGVzID0gZiAmJiBmLmtpbmQgPT09ICdtbycgPyBfLnRhaWwoY2hpbGQuY2hpbGROb2RlcykgOiBjaGlsZC5jaGlsZE5vZGVzO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IF8uZmxhdHRlbihub2Rlcy5tYXAodG9Db2x1bW5BcnJheSkpO1xuXG4gICAgcmV0dXJuIG5ldyBSb3coY29sdW1ucywgZi5raW5kID09PSAnbW8nID8gZiA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICBpZiAoY2hpbGQua2luZCA9PT0gJ21uJykge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBtYXRoTm9kZVRvQ2hhckFycmF5KGNoaWxkKTtcbiAgICByZXR1cm4gbmV3IFJvdyhjb2x1bW5zLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgaWYgKGNoaWxkLmtpbmQgPT09ICdtbycpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybignbW8gb24gaXRzIG93biByb3c/Jyk7XG4gICAgcmV0dXJuIG5ldyBSb3coW10sIGNoaWxkKTtcbiAgfVxuXG4gIGlmIChjaGlsZC5raW5kID09PSAnbXNsaW5lJykge1xuICAgIHJldHVybiBuZXcgTGluZSgpO1xuICB9XG5cbiAgaWYgKGNoaWxkLnRvQ0hUTUwpIHtcbiAgICByZXR1cm4gbmV3IFJvdyhbY2hpbGRdKTtcbiAgfVxufTtcblxuLyoqIGNvbnZlcnQgTWF0aEpheCBjaHRtbCB0cmVlIHRvIFJvd1tdXG4gKiBAcGFyYW0gbXN0YWNrIHRoZSByb290IG9mIHRoZSBtYXRoamF4IGNodG1sIHRyZWVcbiAqIEByZXR1cm4gUm93W11cbiAqL1xuXG5leHBvcnQgY29uc3QgZ2V0U3RhY2tEYXRhID0gKG1zdGFjaykgPT4ge1xuICBpZiAoIW1zdGFjayB8fCAhbXN0YWNrLmNoaWxkTm9kZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIF8uY29tcGFjdChtc3RhY2suY2hpbGROb2Rlcy5tYXAocm93U3RhY2spKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBDSFRNTG1zdGFjayBleHRlbmRzIENIVE1MV3JhcHBlciB7XG4gIGNvbnN0cnVjdG9yKGZhY3RvcnksIG5vZGUsIHBhcmVudCA9IG51bGwpIHtcbiAgICBzdXBlcihmYWN0b3J5LCBub2RlLCBwYXJlbnQpO1xuXG4gICAgdGhpcy5jZSA9IHRoaXMuYWRhcHRvci5kb2N1bWVudC5jcmVhdGVFbGVtZW50LmJpbmQodGhpcy5hZGFwdG9yLmRvY3VtZW50KTtcbiAgfVxuXG4gIHRvQ0hUTUwocGFyZW50KSB7XG4gICAgY29uc3QgY2h0bWwgPSB0aGlzLnN0YW5kYXJkQ0hUTUxub2RlKHBhcmVudCk7XG5cbiAgICBjb25zdCBzdGFja0RhdGEgPSBnZXRTdGFja0RhdGEodGhpcyk7XG5cbiAgICAvLyBjb25zb2xlLmxvZygnc3RhY2tEYXRhJywgc3RhY2tEYXRhKTtcbiAgICBjb25zdCBtYXhDb2xzID0gc3RhY2tEYXRhLnJlZHVjZSgoYWNjLCByKSA9PiB7XG4gICAgICBpZiAociAmJiByLmNvbHVtbnMubGVuZ3RoID4gYWNjKSB7XG4gICAgICAgIGFjYyA9IHIuY29sdW1ucy5sZW5ndGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIDApO1xuXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmNlKCd0YWJsZScpO1xuICAgIGNodG1sLmFwcGVuZENoaWxkKHRhYmxlKTtcblxuICAgIHN0YWNrRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHRyID0gdGhpcy5jZSgndHInKTtcbiAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTtcblxuICAgICAgaWYgKHJvdy5raW5kID09PSAncm93Jykge1xuICAgICAgICBjb25zdCB0ZCA9IHRoaXMuY2UoJ3RkJyk7XG4gICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTtcbiAgICAgICAgaWYgKHJvdy5vcGVyYXRvciAmJiByb3cub3BlcmF0b3IudG9DSFRNTCkge1xuICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnaW5uZXInKTtcbiAgICAgICAgICByb3cub3BlcmF0b3IudG9DSFRNTCh0ZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGQudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsaWduIHJpZ2h0IGZvciBub3c6XG4gICAgICAgIGNvbnN0IGNvbHMgPSByb3cucGFkKG1heENvbHMsICdyaWdodCcpO1xuICAgICAgICBjb2xzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5jZSgndGQnKTtcbiAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0KTtcbiAgICAgICAgICBpZiAoYyA9PT0gJ19fcGFkX18nKSB7XG4gICAgICAgICAgICB0LnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHQudGV4dENvbnRlbnQgPSBjO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYy5raW5kID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHQudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGMudG9DSFRNTCkge1xuICAgICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2lubmVyJyk7XG4gICAgICAgICAgICBjLnRvQ0hUTUwodCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocm93LmtpbmQgPT09ICdsaW5lJykge1xuICAgICAgICBjb25zdCB0ZCA9IHRoaXMuY2UoJ3RkJyk7XG4gICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTtcbiAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgbWF4Q29scyArIDEpO1xuICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ21qeC1saW5lJyk7XG4gICAgICAgIHRkLnRleHRDb250ZW50ID0gJyc7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbkNIVE1MbXN0YWNrLnN0eWxlcyA9IHtcbiAgJ21qeC1tc3RhY2sgPiB0YWJsZSc6IHtcbiAgICAnbGluZS1oZWlnaHQnOiAnaW5pdGlhbCcsXG4gICAgYm9yZGVyOiAnc29saWQgMHB4IHJlZCcsXG4gICAgJ2JvcmRlci1zcGFjaW5nJzogJzBlbScsXG4gICAgJ2JvcmRlci1jb2xsYXBzZSc6ICdzZXBhcmF0ZScsXG4gIH0sXG4gICdtangtbXN0YWNrID4gdGFibGUgPiB0cic6IHtcbiAgICAnbGluZS1oZWlnaHQnOiAnaW5pdGlhbCcsXG4gIH0sXG4gICdtangtbXN0YWNrID4gdGFibGUgPiB0ciA+IHRkJzoge1xuICAgIC8vIHBhZGRpbmc6ICcxLjJyZW0nLFxuICAgIGJvcmRlcjogJ3NvbGlkIDBweCBibHVlJyxcbiAgICAnZm9udC1mYW1pbHknOiAnc2Fucy1zZXJpZicsXG4gICAgJ2xpbmUtaGVpZ2h0JzogJ2luaXRpYWwnLFxuICB9LFxuICAnbWp4LW1zdGFjayA+IHRhYmxlID4gdHIgPiB0ZC5pbm5lcic6IHtcbiAgICAnZm9udC1mYW1pbHknOiAnaW5oZXJpdCcsXG4gIH0sXG4gICdtangtbXN0YWNrID4gdGFibGUgPiB0ciA+IC5tangtbGluZSc6IHtcbiAgICBwYWRkaW5nOiAwLFxuICAgICdib3JkZXItdG9wJzogJ3NvbGlkIDFweCBibGFjaycsXG4gIH0sXG4gICcuVEVYLUEnOiB7XG4gICAgJ2ZvbnQtZmFtaWx5JzogJ01KWFpFUk8sIE1KWFRFWCAhaW1wb3J0YW50JyxcbiAgfSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.mmlNodes = exports.chtmlNodes = void 0;
|
|
7
|
+
|
|
8
|
+
var _chtml = require("./chtml");
|
|
9
|
+
|
|
10
|
+
var _mml = require("./mml");
|
|
11
|
+
|
|
12
|
+
var chtmlNodes = {
|
|
13
|
+
mstack: _chtml.CHTMLmstack
|
|
14
|
+
};
|
|
15
|
+
exports.chtmlNodes = chtmlNodes;
|
|
16
|
+
var mmlNodes = {
|
|
17
|
+
mstack: _mml.MmlMstack,
|
|
18
|
+
msline: _mml.MmlMsline,
|
|
19
|
+
msrow: _mml.MmlMsrow,
|
|
20
|
+
none: _mml.MmlNone
|
|
21
|
+
};
|
|
22
|
+
exports.mmlNodes = mmlNodes;
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc3RhY2svaW5kZXguanMiXSwibmFtZXMiOlsiY2h0bWxOb2RlcyIsIm1zdGFjayIsIkNIVE1MbXN0YWNrIiwibW1sTm9kZXMiLCJNbWxNc3RhY2siLCJtc2xpbmUiLCJNbWxNc2xpbmUiLCJtc3JvdyIsIk1tbE1zcm93Iiwibm9uZSIsIk1tbE5vbmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFTyxJQUFNQSxVQUFVLEdBQUc7QUFDeEJDLEVBQUFBLE1BQU0sRUFBRUM7QUFEZ0IsQ0FBbkI7O0FBSUEsSUFBTUMsUUFBUSxHQUFHO0FBQ3RCRixFQUFBQSxNQUFNLEVBQUVHLGNBRGM7QUFFdEJDLEVBQUFBLE1BQU0sRUFBRUMsY0FGYztBQUd0QkMsRUFBQUEsS0FBSyxFQUFFQyxhQUhlO0FBSXRCQyxFQUFBQSxJQUFJLEVBQUVDO0FBSmdCLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0hUTUxtc3RhY2sgfSBmcm9tICcuL2NodG1sJztcbmltcG9ydCB7IE1tbE5vbmUsIE1tbE1zbGluZSwgTW1sTXN0YWNrLCBNbWxNc3JvdyB9IGZyb20gJy4vbW1sJztcblxuZXhwb3J0IGNvbnN0IGNodG1sTm9kZXMgPSB7XG4gIG1zdGFjazogQ0hUTUxtc3RhY2ssXG59O1xuXG5leHBvcnQgY29uc3QgbW1sTm9kZXMgPSB7XG4gIG1zdGFjazogTW1sTXN0YWNrLFxuICBtc2xpbmU6IE1tbE1zbGluZSxcbiAgbXNyb3c6IE1tbE1zcm93LFxuICBub25lOiBNbWxOb25lLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.MmlNone = exports.MmlMstack = exports.MmlMsrow = exports.MmlMsline = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
+
|
|
16
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
|
+
|
|
18
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
+
|
|
20
|
+
var _MmlNode = require("mathjax-full/js/core/MmlTree/MmlNode");
|
|
21
|
+
|
|
22
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
23
|
+
|
|
24
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
25
|
+
|
|
26
|
+
var MmlNone = /*#__PURE__*/function (_AbstractMmlNode) {
|
|
27
|
+
(0, _inherits2["default"])(MmlNone, _AbstractMmlNode);
|
|
28
|
+
|
|
29
|
+
var _super = _createSuper(MmlNone);
|
|
30
|
+
|
|
31
|
+
function MmlNone() {
|
|
32
|
+
(0, _classCallCheck2["default"])(this, MmlNone);
|
|
33
|
+
return _super.apply(this, arguments);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
(0, _createClass2["default"])(MmlNone, [{
|
|
37
|
+
key: "kind",
|
|
38
|
+
get: function get() {
|
|
39
|
+
return 'none';
|
|
40
|
+
}
|
|
41
|
+
}]);
|
|
42
|
+
return MmlNone;
|
|
43
|
+
}(_MmlNode.AbstractMmlNode);
|
|
44
|
+
|
|
45
|
+
exports.MmlNone = MmlNone;
|
|
46
|
+
|
|
47
|
+
var MmlMstack = /*#__PURE__*/function (_AbstractMmlNode2) {
|
|
48
|
+
(0, _inherits2["default"])(MmlMstack, _AbstractMmlNode2);
|
|
49
|
+
|
|
50
|
+
var _super2 = _createSuper(MmlMstack);
|
|
51
|
+
|
|
52
|
+
function MmlMstack() {
|
|
53
|
+
(0, _classCallCheck2["default"])(this, MmlMstack);
|
|
54
|
+
return _super2.apply(this, arguments);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
(0, _createClass2["default"])(MmlMstack, [{
|
|
58
|
+
key: "kind",
|
|
59
|
+
get: function get() {
|
|
60
|
+
return 'mstack';
|
|
61
|
+
}
|
|
62
|
+
}]);
|
|
63
|
+
return MmlMstack;
|
|
64
|
+
}(_MmlNode.AbstractMmlNode);
|
|
65
|
+
|
|
66
|
+
exports.MmlMstack = MmlMstack;
|
|
67
|
+
|
|
68
|
+
var MmlMsrow = /*#__PURE__*/function (_AbstractMmlNode3) {
|
|
69
|
+
(0, _inherits2["default"])(MmlMsrow, _AbstractMmlNode3);
|
|
70
|
+
|
|
71
|
+
var _super3 = _createSuper(MmlMsrow);
|
|
72
|
+
|
|
73
|
+
function MmlMsrow() {
|
|
74
|
+
(0, _classCallCheck2["default"])(this, MmlMsrow);
|
|
75
|
+
return _super3.apply(this, arguments);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
(0, _createClass2["default"])(MmlMsrow, [{
|
|
79
|
+
key: "kind",
|
|
80
|
+
get: function get() {
|
|
81
|
+
return 'msrow';
|
|
82
|
+
}
|
|
83
|
+
}]);
|
|
84
|
+
return MmlMsrow;
|
|
85
|
+
}(_MmlNode.AbstractMmlNode);
|
|
86
|
+
|
|
87
|
+
exports.MmlMsrow = MmlMsrow;
|
|
88
|
+
|
|
89
|
+
var MmlMsline = /*#__PURE__*/function (_AbstractMmlNode4) {
|
|
90
|
+
(0, _inherits2["default"])(MmlMsline, _AbstractMmlNode4);
|
|
91
|
+
|
|
92
|
+
var _super4 = _createSuper(MmlMsline);
|
|
93
|
+
|
|
94
|
+
function MmlMsline() {
|
|
95
|
+
(0, _classCallCheck2["default"])(this, MmlMsline);
|
|
96
|
+
return _super4.apply(this, arguments);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
(0, _createClass2["default"])(MmlMsline, [{
|
|
100
|
+
key: "kind",
|
|
101
|
+
get: function get() {
|
|
102
|
+
return 'msline';
|
|
103
|
+
}
|
|
104
|
+
}]);
|
|
105
|
+
return MmlMsline;
|
|
106
|
+
}(_MmlNode.AbstractMmlNode);
|
|
107
|
+
|
|
108
|
+
exports.MmlMsline = MmlMsline;
|
|
109
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc3RhY2svbW1sLmpzIl0sIm5hbWVzIjpbIk1tbE5vbmUiLCJBYnN0cmFjdE1tbE5vZGUiLCJNbWxNc3RhY2siLCJNbWxNc3JvdyIsIk1tbE1zbGluZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7SUFFYUEsTzs7Ozs7Ozs7Ozs7O1NBQ1gsZUFBVztBQUNULGFBQU8sTUFBUDtBQUNEOzs7RUFIMEJDLHdCOzs7O0lBTWhCQyxTOzs7Ozs7Ozs7Ozs7U0FDWCxlQUFXO0FBQ1QsYUFBTyxRQUFQO0FBQ0Q7OztFQUg0QkQsd0I7Ozs7SUFNbEJFLFE7Ozs7Ozs7Ozs7OztTQUNYLGVBQVc7QUFDVCxhQUFPLE9BQVA7QUFDRDs7O0VBSDJCRix3Qjs7OztJQUtqQkcsUzs7Ozs7Ozs7Ozs7O1NBQ1gsZUFBVztBQUNULGFBQU8sUUFBUDtBQUNEOzs7RUFINEJILHdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RNbWxOb2RlIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2NvcmUvTW1sVHJlZS9NbWxOb2RlJztcblxuZXhwb3J0IGNsYXNzIE1tbE5vbmUgZXh0ZW5kcyBBYnN0cmFjdE1tbE5vZGUge1xuICBnZXQga2luZCgpIHtcbiAgICByZXR1cm4gJ25vbmUnO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNbWxNc3RhY2sgZXh0ZW5kcyBBYnN0cmFjdE1tbE5vZGUge1xuICBnZXQga2luZCgpIHtcbiAgICByZXR1cm4gJ21zdGFjayc7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1tbE1zcm93IGV4dGVuZHMgQWJzdHJhY3RNbWxOb2RlIHtcbiAgZ2V0IGtpbmQoKSB7XG4gICAgcmV0dXJuICdtc3Jvdyc7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBNbWxNc2xpbmUgZXh0ZW5kcyBBYnN0cmFjdE1tbE5vZGUge1xuICBnZXQga2luZCgpIHtcbiAgICByZXR1cm4gJ21zbGluZSc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.wrapMath = exports.unWrapMath = exports.BracketTypes = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
14
|
+
var _PAIRS;
|
|
15
|
+
|
|
16
|
+
var BracketTypes = {};
|
|
17
|
+
exports.BracketTypes = BracketTypes;
|
|
18
|
+
BracketTypes.ROUND_BRACKETS = 'round_brackets';
|
|
19
|
+
BracketTypes.SQUARE_BRACKETS = 'square_brackets';
|
|
20
|
+
BracketTypes.DOLLAR = 'dollar';
|
|
21
|
+
BracketTypes.DOUBLE_DOLLAR = 'double_dollar';
|
|
22
|
+
var PAIRS = (_PAIRS = {}, (0, _defineProperty2["default"])(_PAIRS, BracketTypes.ROUND_BRACKETS, ['\\(', '\\)']), (0, _defineProperty2["default"])(_PAIRS, BracketTypes.SQUARE_BRACKETS, ['\\[', '\\]']), (0, _defineProperty2["default"])(_PAIRS, BracketTypes.DOLLAR, ['$', '$']), (0, _defineProperty2["default"])(_PAIRS, BracketTypes.DOUBLE_DOLLAR, ['$$', '$$']), _PAIRS);
|
|
23
|
+
|
|
24
|
+
var wrapMath = function wrapMath(content, wrapType) {
|
|
25
|
+
if (wrapType === BracketTypes.SQUARE_BRACKETS) {
|
|
26
|
+
console.warn('\\[...\\] is not supported yet'); // eslint-disable-line
|
|
27
|
+
|
|
28
|
+
wrapType = BracketTypes.ROUND_BRACKETS;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (wrapType === BracketTypes.DOUBLE_DOLLAR) {
|
|
32
|
+
console.warn('$$...$$ is not supported yet'); // eslint-disable-line
|
|
33
|
+
|
|
34
|
+
wrapType = BracketTypes.DOLLAR;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var _ref = PAIRS[wrapType] || PAIRS[BracketTypes.ROUND_BRACKETS],
|
|
38
|
+
_ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
39
|
+
start = _ref2[0],
|
|
40
|
+
end = _ref2[1];
|
|
41
|
+
|
|
42
|
+
return "".concat(start).concat(content).concat(end);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.wrapMath = wrapMath;
|
|
46
|
+
|
|
47
|
+
var unWrapMath = function unWrapMath(content) {
|
|
48
|
+
var displayStyleIndex = content.indexOf('\\displaystyle');
|
|
49
|
+
|
|
50
|
+
if (displayStyleIndex !== -1) {
|
|
51
|
+
console.warn('\\displaystyle is not supported - removing'); // eslint-disable-line
|
|
52
|
+
|
|
53
|
+
content = content.replace('\\displaystyle', '').trim();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (content.startsWith('$$') && content.endsWith('$$')) {
|
|
57
|
+
console.warn('$$ syntax is not yet supported'); // eslint-disable-line
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
unwrapped: content.substring(2, content.length - 2),
|
|
61
|
+
wrapType: BracketTypes.DOLLAR
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (content.startsWith('$') && content.endsWith('$')) {
|
|
66
|
+
return {
|
|
67
|
+
unwrapped: content.substring(1, content.length - 1),
|
|
68
|
+
wrapType: BracketTypes.DOLLAR
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (content.startsWith('\\[') && content.endsWith('\\]')) {
|
|
73
|
+
console.warn('\\[..\\] syntax is not yet supported'); // eslint-disable-line
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
unwrapped: content.substring(2, content.length - 2),
|
|
77
|
+
wrapType: BracketTypes.ROUND_BRACKETS
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (content.startsWith('\\(') && content.endsWith('\\)')) {
|
|
82
|
+
return {
|
|
83
|
+
unwrapped: content.substring(2, content.length - 2),
|
|
84
|
+
wrapType: BracketTypes.ROUND_BRACKETS
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
unwrapped: content,
|
|
90
|
+
wrapType: BracketTypes.ROUND_BRACKETS
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
exports.unWrapMath = unWrapMath;
|
|
95
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ub3JtYWxpemF0aW9uLmpzIl0sIm5hbWVzIjpbIkJyYWNrZXRUeXBlcyIsIlJPVU5EX0JSQUNLRVRTIiwiU1FVQVJFX0JSQUNLRVRTIiwiRE9MTEFSIiwiRE9VQkxFX0RPTExBUiIsIlBBSVJTIiwid3JhcE1hdGgiLCJjb250ZW50Iiwid3JhcFR5cGUiLCJjb25zb2xlIiwid2FybiIsInN0YXJ0IiwiZW5kIiwidW5XcmFwTWF0aCIsImRpc3BsYXlTdHlsZUluZGV4IiwiaW5kZXhPZiIsInJlcGxhY2UiLCJ0cmltIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwidW53cmFwcGVkIiwic3Vic3RyaW5nIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBTyxJQUFNQSxZQUFZLEdBQUcsRUFBckI7O0FBRVBBLFlBQVksQ0FBQ0MsY0FBYixHQUE4QixnQkFBOUI7QUFDQUQsWUFBWSxDQUFDRSxlQUFiLEdBQStCLGlCQUEvQjtBQUNBRixZQUFZLENBQUNHLE1BQWIsR0FBc0IsUUFBdEI7QUFDQUgsWUFBWSxDQUFDSSxhQUFiLEdBQTZCLGVBQTdCO0FBRUEsSUFBTUMsS0FBSywwREFDUkwsWUFBWSxDQUFDQyxjQURMLEVBQ3NCLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FEdEIsNENBRVJELFlBQVksQ0FBQ0UsZUFGTCxFQUV1QixDQUFDLEtBQUQsRUFBUSxLQUFSLENBRnZCLDRDQUdSRixZQUFZLENBQUNHLE1BSEwsRUFHYyxDQUFDLEdBQUQsRUFBTSxHQUFOLENBSGQsNENBSVJILFlBQVksQ0FBQ0ksYUFKTCxFQUlxQixDQUFDLElBQUQsRUFBTyxJQUFQLENBSnJCLFVBQVg7O0FBT08sSUFBTUUsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxRQUFWLEVBQXVCO0FBQzdDLE1BQUlBLFFBQVEsS0FBS1IsWUFBWSxDQUFDRSxlQUE5QixFQUErQztBQUM3Q08sSUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWEsZ0NB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bEIsR0FBUDtBQUlELENBeENNIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEJyYWNrZXRUeXBlcyA9IHt9O1xuXG5CcmFja2V0VHlwZXMuUk9VTkRfQlJBQ0tFVFMgPSAncm91bmRfYnJhY2tldHMnO1xuQnJhY2tldFR5cGVzLlNRVUFSRV9CUkFDS0VUUyA9ICdzcXVhcmVfYnJhY2tldHMnO1xuQnJhY2tldFR5cGVzLkRPTExBUiA9ICdkb2xsYXInO1xuQnJhY2tldFR5cGVzLkRPVUJMRV9ET0xMQVIgPSAnZG91YmxlX2RvbGxhcic7XG5cbmNvbnN0IFBBSVJTID0ge1xuICBbQnJhY2tldFR5cGVzLlJPVU5EX0JSQUNLRVRTXTogWydcXFxcKCcsICdcXFxcKSddLFxuICBbQnJhY2tldFR5cGVzLlNRVUFSRV9CUkFDS0VUU106IFsnXFxcXFsnLCAnXFxcXF0nXSxcbiAgW0JyYWNrZXRUeXBlcy5ET0xMQVJdOiBbJyQnLCAnJCddLFxuICBbQnJhY2tldFR5cGVzLkRPVUJMRV9ET0xMQVJdOiBbJyQkJywgJyQkJ10sXG59O1xuXG5leHBvcnQgY29uc3Qgd3JhcE1hdGggPSAoY29udGVudCwgd3JhcFR5cGUpID0+IHtcbiAgaWYgKHdyYXBUeXBlID09PSBCcmFja2V0VHlwZXMuU1FVQVJFX0JSQUNLRVRTKSB7XG4gICAgY29uc29sZS53YXJuKCdcXFxcWy4uLlxcXFxdIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB3cmFwVHlwZSA9IEJyYWNrZXRUeXBlcy5ST1VORF9CUkFDS0VUUztcbiAgfVxuICBpZiAod3JhcFR5cGUgPT09IEJyYWNrZXRUeXBlcy5ET1VCTEVfRE9MTEFSKSB7XG4gICAgY29uc29sZS53YXJuKCckJC4uLiQkIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB3cmFwVHlwZSA9IEJyYWNrZXRUeXBlcy5ET0xMQVI7XG4gIH1cblxuICBjb25zdCBbc3RhcnQsIGVuZF0gPSBQQUlSU1t3cmFwVHlwZV0gfHwgUEFJUlNbQnJhY2tldFR5cGVzLlJPVU5EX0JSQUNLRVRTXTtcbiAgcmV0dXJuIGAke3N0YXJ0fSR7Y29udGVudH0ke2VuZH1gO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuV3JhcE1hdGggPSAoY29udGVudCkgPT4ge1xuICBjb25zdCBkaXNwbGF5U3R5bGVJbmRleCA9IGNvbnRlbnQuaW5kZXhPZignXFxcXGRpc3BsYXlzdHlsZScpO1xuICBpZiAoZGlzcGxheVN0eWxlSW5kZXggIT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKCdcXFxcZGlzcGxheXN0eWxlIGlzIG5vdCBzdXBwb3J0ZWQgLSByZW1vdmluZycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgnXFxcXGRpc3BsYXlzdHlsZScsICcnKS50cmltKCk7XG4gIH1cblxuICBpZiAoY29udGVudC5zdGFydHNXaXRoKCckJCcpICYmIGNvbnRlbnQuZW5kc1dpdGgoJyQkJykpIHtcbiAgICBjb25zb2xlLndhcm4oJyQkIHN5bnRheCBpcyBub3QgeWV0IHN1cHBvcnRlZCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIHtcbiAgICAgIHVud3JhcHBlZDogY29udGVudC5zdWJzdHJpbmcoMiwgY29udGVudC5sZW5ndGggLSAyKSxcbiAgICAgIHdyYXBUeXBlOiBCcmFja2V0VHlwZXMuRE9MTEFSLFxuICAgIH07XG4gIH1cbiAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnJCcpICYmIGNvbnRlbnQuZW5kc1dpdGgoJyQnKSkge1xuICAgIHJldHVybiB7XG4gICAgICB1bndyYXBwZWQ6IGNvbnRlbnQuc3Vic3RyaW5nKDEsIGNvbnRlbnQubGVuZ3RoIC0gMSksXG4gICAgICB3cmFwVHlwZTogQnJhY2tldFR5cGVzLkRPTExBUixcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnXFxcXFsnKSAmJiBjb250ZW50LmVuZHNXaXRoKCdcXFxcXScpKSB7XG4gICAgY29uc29sZS53YXJuKCdcXFxcWy4uXFxcXF0gc3ludGF4IGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICByZXR1cm4ge1xuICAgICAgdW53cmFwcGVkOiBjb250ZW50LnN1YnN0cmluZygyLCBjb250ZW50Lmxlbmd0aCAtIDIpLFxuICAgICAgd3JhcFR5cGU6IEJyYWNrZXRUeXBlcy5ST1VORF9CUkFDS0VUUyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnXFxcXCgnKSAmJiBjb250ZW50LmVuZHNXaXRoKCdcXFxcKScpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVud3JhcHBlZDogY29udGVudC5zdWJzdHJpbmcoMiwgY29udGVudC5sZW5ndGggLSAyKSxcbiAgICAgIHdyYXBUeXBlOiBCcmFja2V0VHlwZXMuUk9VTkRfQlJBQ0tFVFMsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdW53cmFwcGVkOiBjb250ZW50LFxuICAgIHdyYXBUeXBlOiBCcmFja2V0VHlwZXMuUk9VTkRfQlJBQ0tFVFMsXG4gIH07XG59O1xuIl19
|