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)
132 lines • 5.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSubMath = exports.getMathTableContent = exports.mathTablePush = exports.ClearSubMathLists = void 0;
var common_1 = require("./common");
var mdPluginRaw_1 = require("../../mdPluginRaw");
var utils_1 = require("../../utils");
var consts_1 = require("../../common/consts");
var mathTable = [];
var ClearSubMathLists = function () {
mathTable = [];
};
exports.ClearSubMathLists = ClearSubMathLists;
var mathTablePush = function (item) {
mathTable.push(item);
};
exports.mathTablePush = mathTablePush;
var getMathTableContent = function (sub, i) {
var resContent = sub;
sub = sub.trim();
var cellM = sub.slice(i).match(consts_1.doubleCurlyBracketUuidPattern);
cellM = cellM ? cellM : sub.slice(i).match(consts_1.singleCurlyBracketPattern);
if (!cellM) {
return '';
}
var _loop_1 = function (j) {
var content = cellM[j].replace(/\{/g, '').replace(/\}/g, '');
var index = mathTable.findIndex(function (item) { return item.id === content; });
if (index >= 0) {
var iB = resContent.indexOf(cellM[j]);
resContent = resContent.slice(0, iB) + mathTable[index].content + resContent.slice(iB + cellM[j].length);
}
};
for (var j = 0; j < cellM.length; j++) {
_loop_1(j);
}
resContent = (0, common_1.getContent)(resContent);
return resContent;
};
exports.getMathTableContent = getMathTableContent;
var getSubMath = function (str, startPos) {
var _a, _b;
if (startPos === void 0) { startPos = 0; }
var match = str
.slice(startPos)
.match(/(?:\\\\\[|\\\[|\\\\\(|\\\(|\$\$|\$|\\begin\{([^}]*)\}|eqref\{([^}]*)\}|ref\{([^}]*)\})/);
var endMarkerPos = -1;
if (match) {
var beginMarkerPos = startPos + match.index;
var startMathPos = beginMarkerPos + match[0].length;
var endMarker = void 0;
if (match[0] === "\\\\[") {
endMarker = "\\\\]";
}
else if (match[0] === "\\[") {
endMarker = "\\]";
}
else if (match[0] === "\\\\(") {
endMarker = "\\\\)";
}
else if (match[0] === "\\(") {
endMarker = "\\)";
}
else if (match[0].includes("eqref")) {
endMarker = "";
}
else if (match[0].includes("ref")) {
endMarker = "";
}
else if (match[1] && match[1] !== 'abstract' && match[1] !== 'tabular') {
var environment = match[1].trim();
var openTag = (0, utils_1.beginTag)(environment, true);
var closeTag = (0, utils_1.endTag)(environment, true);
if (closeTag && openTag) {
var data = (0, utils_1.findOpenCloseTagsMathEnvironment)(str.slice(startPos), openTag, closeTag);
if ((_a = data === null || data === void 0 ? void 0 : data.arrClose) === null || _a === void 0 ? void 0 : _a.length) {
endMarkerPos = startPos + ((_b = data.arrClose[data.arrClose.length - 1]) === null || _b === void 0 ? void 0 : _b.posStart);
}
endMarker = "\\end{".concat(match[1], "}");
}
}
else if (match[0] === "$$") {
endMarker = match[0];
}
else if (match[0] === "$") {
endMarker = match[0];
}
endMarkerPos = endMarkerPos !== -1
? endMarkerPos
: (0, mdPluginRaw_1.findEndMarkerPos)(str, endMarker, startMathPos);
if (endMarkerPos === -1) {
/** If the end marker is not found, it is necessary to search further, excluding the current marker. */
str = (0, exports.getSubMath)(str, startMathPos);
return str;
}
if (match[0] === "$" || match[0] === "$$") {
var beforeEndMarker = str.charCodeAt(endMarkerPos - 1);
if (beforeEndMarker === 0x5c /* \ */ ||
(beginMarkerPos > 0 && str.charCodeAt(beginMarkerPos - 1) === 0x5c /* \ */)) {
/** If the marker is shielded, it is necessary to search further, excluding the current marker. */
str = (0, exports.getSubMath)(str, startMathPos);
return str;
}
if (match[0] === "$") {
var afterStartMarker = str.charCodeAt(beginMarkerPos + 1);
if (beforeEndMarker === 0x20 /* space */ ||
beforeEndMarker === 0x09 /* \t */ ||
beforeEndMarker === 0x0a /* \n */ ||
afterStartMarker === 0x20 /* space */ ||
afterStartMarker === 0x09 /* \t */ ||
afterStartMarker === 0x0a /* \n */) {
str = (0, exports.getSubMath)(str, startMathPos);
return str;
}
}
// Skip if closing $ is succeeded by a digit (eg $5 $10 ...)
var suffix = str.charCodeAt(endMarkerPos + 1);
if (suffix >= 0x30 && suffix < 0x3a) {
str = (0, exports.getSubMath)(str, startMathPos);
return str;
}
}
var nextPos = endMarkerPos + endMarker.length;
var content = str.slice(beginMarkerPos, nextPos);
var id = (0, common_1.generateUniqueId)();
mathTable.push({ id: id, content: content });
str = str.slice(0, startPos) + str.slice(startPos, beginMarkerPos) + "{".concat(id, "}") + str.slice(endMarkerPos + endMarker.length);
str = (0, exports.getSubMath)(str, startPos);
}
return str;
};
exports.getSubMath = getSubMath;
//# sourceMappingURL=sub-math.js.map