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)
59 lines • 3.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var latex_list_env_block_1 = require("./latex-list-env-block");
var re_level_1 = require("./re-level");
var renewcommand_1 = require("../md-block-rule/renewcommand");
var latex_list_env_inline_1 = require("./latex-list-env-inline");
var renewcommand_2 = require("../md-inline-rule/renewcommand");
var render_latex_list_env_1 = require("./render-latex-list-env");
var list_state_1 = require("./list-state");
var common_1 = require("../common");
/**
* Markdown-it plugin that adds full LaTeX-style list environment support:
* \begin{itemize} ... \end{itemize}
* \begin{enumerate} ... \end{enumerate}
* \item, \setcounter, nested lists, inline and block modes.
*
* The plugin:
* • registers custom block and inline rules for LaTeX list parsing,
* • manages internal list state (nesting, counters, markers),
* • injects dedicated renderers for itemize/enumerate tokens,
* • safely coexists with builtin markdown-it list rules.
*
* Should be loaded once per MarkdownIt instance.
*/
function pluginLatexListsEnv(md, options) {
Object.assign(md.options, options);
(0, list_state_1.resetListState)();
(0, re_level_1.SetDefaultItemizeLevel)();
(0, re_level_1.SetDefaultEnumerateLevel)();
(0, re_level_1.clearItemizeLevelTokens)();
var blockRuler = md.block.ruler;
var inlineRuler = md.inline.ruler;
blockRuler.after("list", "Lists", latex_list_env_block_1.Lists, { alt: (0, common_1.getTerminatedRules)("Lists") });
blockRuler.before("Lists", "ReNewCommand", renewcommand_1.ReNewCommand);
// 1) Aggregator: full list env (nested) — highest priority
inlineRuler.before('escape', 'latex_list_env_inline', latex_list_env_inline_1.latexListEnvInline);
// 2) Legacy rules (optional fallback for partial parsing)
inlineRuler.after('latex_list_env_inline', 'list_begin_inline', latex_list_env_inline_1.listBeginInline);
inlineRuler.before('latex_list_env_inline', 'renewcommand_inline', renewcommand_2.reNewCommandInLine);
inlineRuler.after('latex_list_env_inline', 'list_setcounter_inline', latex_list_env_inline_1.listSetCounterInline);
inlineRuler.after('list_begin_inline', 'list_item_inline', latex_list_env_inline_1.listItemInline);
inlineRuler.after('list_item_inline', 'list_close_inline', latex_list_env_inline_1.listCloseInline);
var listRenderers = {
itemize_list_open: render_latex_list_env_1.render_itemize_list_open,
enumerate_list_open: render_latex_list_env_1.render_enumerate_list_open,
item_inline: render_latex_list_env_1.render_item_inline,
itemize_list_close: render_latex_list_env_1.render_itemize_list_close,
enumerate_list_close: render_latex_list_env_1.render_enumerate_list_close,
latex_list_item_open: render_latex_list_env_1.render_latex_list_item_open,
latex_list_item_close: render_latex_list_env_1.render_latex_list_item_close,
};
Object.entries(listRenderers).forEach(function (_a) {
var _b = tslib_1.__read(_a, 2), type = _b[0], rule = _b[1];
md.renderer.rules[type] = rule;
});
}
exports.default = pluginLatexListsEnv;
//# sourceMappingURL=index.js.map