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)
93 lines • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReNewCommand = exports.reNewCommand = exports.parseOneCommand = void 0;
var re_level_1 = require("../md-latex-lists-env/re-level");
var reTag = /\\renewcommand/;
var reTagG = /\\renewcommand/g;
var parseCommand = function (str) {
str = str.trim();
var command = '';
var params = '';
var s = '';
var isOpen = 0;
var endPos = str.length;
for (var i = 0; i < str.length; i++) {
if (!command && (str[i] === '{' || str.charCodeAt(i) === 0x5c /* \ */ || str[i] === '}')) {
if (s && s.trim().length > 0) {
command = s;
s = '';
}
continue;
}
if (command) {
if (str[i] === '{') {
isOpen++;
if (!s) {
continue;
}
}
if (str[i] === '}') {
isOpen--;
if (isOpen <= 0) {
params = s;
endPos = i;
break;
}
}
}
s += str[i];
}
if (!params) {
params = s;
}
return { command: command.trim(), params: params.trim(), endPos: endPos };
};
var parseOneCommand = function (state, str) {
var data = parseCommand(str);
(0, re_level_1.ChangeLevel)(state, data);
return data.endPos;
};
exports.parseOneCommand = parseOneCommand;
var reNewCommand = function (state, lineText) {
if (lineText.charCodeAt(0) !== 0x5c /* \ */) {
return;
}
var match = lineText.match(reTagG);
if (!match) {
return;
}
var arr = lineText.split(reTag);
for (var i = 0; i < arr.length; i++) {
if (arr[i].trim().length === 0) {
continue;
}
var str = arr[i];
(0, exports.parseOneCommand)(state, str);
}
};
exports.reNewCommand = reNewCommand;
var ReNewCommand = function (state, startLine) {
var pos = state.bMarks[startLine] + state.tShift[startLine];
var max = state.eMarks[startLine];
var nextLine = startLine + 1;
var lineText = state.src.slice(pos, max);
var match = lineText.match(reTag);
if (!match) {
return false;
}
if (match.index > 0) {
var strBefor = lineText.slice(0, match.index);
if (strBefor.trim().length > 0) {
return false;
}
}
(0, exports.reNewCommand)(state, lineText.slice(match.index).trim());
if (state.md.options && state.md.options.forLatex) {
var token = state.push("renewcommand", "", 0);
token.latex = lineText.slice(match.index).trim();
}
state.line = nextLine;
return true;
};
exports.ReNewCommand = ReNewCommand;
//# sourceMappingURL=renewcommand.js.map