mathpix-markdown-it
Version:
Mathpix-markdown-it is an open source implementation of the mathpix-markdown spec written in Typescript. It relies on the following open source libraries: MathJax v3 (to render math with SVGs), markdown-it (for standard Markdown parsing)
294 lines • 10.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRowLines = exports.getCellsAll = exports.getDecimal = exports.getParams = exports.getVerticallyColumnAlign = exports.getColumnAlign = exports.getColumnLines = exports.generateUniqueId = exports.getContent = void 0;
var parse_tabular_1 = require("./parse-tabular");
var uuid_1 = require("uuid");
var consts_1 = require("../../common/consts");
var getContent = function (content, onlyOne, skipTrim) {
if (onlyOne === void 0) { onlyOne = false; }
if (skipTrim === void 0) { skipTrim = false; }
if (!content) {
return content;
}
if (!skipTrim) {
content = content.trim();
}
if (content[0] === '{' && content[content.length - 1] === '}') {
content = content.slice(1, content.length - 1);
if (!onlyOne) {
content = (0, exports.getContent)(content);
}
}
return content;
};
exports.getContent = getContent;
var generateUniqueId = function (onlyUuid) {
if (onlyUuid === void 0) { onlyUuid = false; }
if (onlyUuid) {
return (0, uuid_1.v4)();
}
else {
return "f".concat((0, uuid_1.v4)());
}
};
exports.generateUniqueId = generateUniqueId;
var getColumnLines = function (str, numCol) {
if (numCol === void 0) { numCol = 0; }
str = str
.replace(/\{(.*?)\}/g, '')
.replace(/[^clrSmpb|:]/g, '').split('').join('');
var res = [];
var cLines = str
.replace(/l/g, ';')
.replace(/r/g, ';')
.replace(/c/g, ';')
.replace(/S/g, ';')
.replace(/m/g, ';')
.replace(/p/g, ';')
.replace(/b/g, ';')
.split(';');
numCol = Math.max(numCol, cLines.length);
if (numCol > 0) {
res = new Array(numCol).fill('none');
for (var i = 0; i < cLines.length - 1; i++) {
if (cLines[i].length === 0) {
continue;
}
if (cLines[i].length > 1) {
res[i] = 'double';
continue;
}
res[i] = ((cLines[i].replace(/[^|: ]/g, 'none').replace(/:/g, 'dashed')
.replace(/\|/g, 'solid')).trim());
}
if (cLines[cLines.length - 1].length > 1) {
res[numCol - 1] = 'double';
}
else {
res[numCol - 1] = ((cLines[cLines.length - 1].replace(/[^|: ]/g, 'none').replace(/:/g, 'dashed')
.replace(/\|/g, 'solid')).trim());
}
return res;
}
for (var i = 0; i < cLines.length; i++) {
if (cLines[i].length === 0) {
res.push('none');
continue;
}
if (cLines[i].length > 1) {
res.push('double');
continue;
}
res.push((cLines[i].replace(/[^|: ]/g, 'none').replace(/:/g, 'dashed')
.replace(/\|/g, 'solid')).trim());
}
return res;
};
exports.getColumnLines = getColumnLines;
var getColumnAlign = function (align) {
align = align.replace(/[^clrS|:]/g, '').split('').join('');
align = align.replace(/[^clrS]/g, '').split('').join(' ');
align = align
.replace(/l/g, 'left')
.replace(/r/g, 'right')
.replace(/c/g, 'center')
.replace(/S/g, 'decimal');
return align ? align.split(' ') : [];
};
exports.getColumnAlign = getColumnAlign;
var arrayFillDef = function (arr, str, num) {
if (arr.length < num) {
return arr.concat(new Array(num - arr.length).fill(str));
}
else {
return arr;
}
};
var getVerticallyColumnAlign = function (align, numCol) {
var aH = ['c', 'S', 'r', 'l'];
var aV = ['m', 'p', 'b'];
var hAlign = [];
var vAlign = [];
var cWidth = [];
align = align.replace(/ /g, '').trim();
for (var j = 0; j < align.length; j++) {
if (aH.indexOf(align[j]) >= 0) {
switch (align[j]) {
case 'c':
hAlign.push('center');
vAlign.push('middle');
cWidth.push('auto');
break;
case 'S':
hAlign.push('decimal');
vAlign.push('middle');
cWidth.push('auto');
break;
case 'r':
hAlign.push('right');
vAlign.push('middle');
cWidth.push('auto');
break;
case 'l':
hAlign.push('left');
vAlign.push('middle');
cWidth.push('auto');
break;
}
}
if (aV.indexOf(align[j]) >= 0) {
switch (align[j]) {
case 'm':
hAlign.push('left');
vAlign.push('middle');
break;
case 'p':
hAlign.push('left');
vAlign.push('top');
break;
case 'b':
hAlign.push('left');
vAlign.push('bottom');
break;
}
if (align[j + 1] === '{') {
var end = align.indexOf('}', j + 1);
var w = align.slice(j + 2, end);
cWidth.push(w);
j += w.length + 2;
}
}
}
hAlign = arrayFillDef(hAlign, 'center', numCol);
vAlign = arrayFillDef(vAlign, 'middle', numCol);
cWidth = arrayFillDef(cWidth, 'auto', numCol);
return { cAlign: hAlign, vAlign: vAlign, cWidth: cWidth };
};
exports.getVerticallyColumnAlign = getVerticallyColumnAlign;
var getParams = function (str, i) {
var index = str.indexOf('{', i);
var res = '';
var ires = 0;
if (index < 0) {
return null;
}
var iOpen = 1;
for (var j = index + 1; j < str.length; j++) {
ires = j;
if (str[j] === '{') {
iOpen++;
res += str[j];
continue;
}
if (str[j] === '}') {
iOpen--;
if (iOpen === 0) {
ires += 1;
break;
}
}
res += str[j];
}
return { align: res, index: ires };
};
exports.getParams = getParams;
var getDecimal = function (cAlign, cellsAll) {
var decimal = [];
cAlign.map(function (item, index) {
if (item === 'decimal') {
decimal[index] = { l: 0, r: 0 };
}
});
cellsAll.map(function (item, i) {
var cells = (0, parse_tabular_1.separateByColumns)(cellsAll[i]);
cells.map(function (cell, j) {
if (decimal[j]) {
var content = (0, exports.getContent)(cell);
if (parseFloat(content)) {
var arr = content.split('.');
if (arr[0] && decimal[j].l < arr[0].length) {
decimal[j].l = arr[0].length;
}
if (arr[1] && decimal[j].r < arr[1].length) {
decimal[j].r = arr[1].length;
}
}
}
});
});
return decimal;
};
exports.getDecimal = getDecimal;
var getCellsAll = function (rows) {
var cellsAll = [];
for (var i = 0; i < rows.length; i++) {
cellsAll[i] = rows[i].trim().replace(consts_1.lineSpaceTag, '').trim();
}
return cellsAll;
};
exports.getCellsAll = getCellsAll;
var getRowLines = function (rows, numCol) {
var res = [];
var resSpace = [];
var sLines = [];
for (var i = 0; i < rows.length; i++) {
var matchR = rows[i].split('\n').join('').trim().match(consts_1.lineSpaceTag);
if (!matchR) {
res[i] = new Array(numCol).fill('none');
resSpace[i] = new Array(numCol).fill('none');
sLines.push('');
continue;
}
sLines.push(matchR.join(''));
var str = matchR.join(' ');
if (!consts_1.RE_CLINE.test(str)) {
var mS = str.match(/\[(.*?)\]/);
if (mS && mS[1]) {
resSpace[i] = new Array(numCol).fill(mS[1]);
str = str.replace(/\[(.*?)\]/g, '');
}
else {
resSpace[i] = new Array(numCol).fill('none');
}
str = str.replace('\\n', '').replace(/\\/g, '');
res[i] = new Array(numCol).fill(str);
continue;
}
res[i] = new Array(numCol).fill('none');
resSpace[i] = new Array(numCol).fill('none');
for (var j = 0; j < matchR.length; j++) {
var matchCS = matchR[j].match(consts_1.RE_TAG_WITH_CLINE);
if (matchCS) {
if (matchCS[2]) {
var ic = matchCS[2].trim().replace(/[^\d-]/g, '').split('-');
ic[0] = (Number(ic[0]) > 0 ? Number(ic[0]) - 1 : 0).toString();
var d = Number(ic[1]) - Number(ic[0]);
if (d > 0) {
res[i] = res[i].fill('hline', Number(ic[0]), Number(ic[1]));
if (matchCS[1]) {
resSpace[i] = resSpace[i].fill(matchCS[1], Number(ic[0]), Number(ic[1]));
}
}
}
}
else {
var matchC = matchR[j].match(consts_1.RE_CLINE);
if (matchC && matchC[1]) {
var ic = matchC[1].trim().replace(/[^\d-]/g, '').split('-');
ic[0] = (Number(ic[0]) > 0 ? Number(ic[0]) - 1 : 0).toString();
var d = Number(ic[1]) - Number(ic[0]);
if (d > 0) {
res[i] = res[i].fill('hline', Number(ic[0]), Number(ic[1]));
}
}
}
}
}
if (rows.length === res.length) {
res[res.length] = new Array(numCol).fill('none');
}
resSpace[resSpace.length] = new Array(numCol).fill('none');
return { cLines: res, cSpaces: resSpace, sLines: sLines };
};
exports.getRowLines = getRowLines;
//# sourceMappingURL=common.js.map