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)
159 lines • 6.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.clearItemizeLevelTokens = exports.ChangeLevel = exports.GetItemizeLevelTokensByState = exports.GetItemizeLevelTokens = exports.SetItemizeLevelTokensByIndex = exports.SetItemizeLevelTokens = exports.GetEnumerateLevel = exports.GetItemizeLevel = exports.SetDefaultEnumerateLevel = exports.SetDefaultItemizeLevel = exports.itemizeLevelTokens = exports.enumerateLevel = exports.itemizeLevel = void 0;
var tslib_1 = require("tslib");
var list_markers_1 = require("../common/list-markers");
var consts_1 = require("../common/consts");
/** Active itemize levels (mutable state) */
exports.itemizeLevel = [];
/** Active enumerate levels (mutable state) */
exports.enumerateLevel = [];
/** Parsed tokens for itemize bullets */
exports.itemizeLevelTokens = [];
/**
* Reset and return default itemize bullet definitions.
*/
var SetDefaultItemizeLevel = function () {
exports.itemizeLevel = tslib_1.__spreadArray([], tslib_1.__read(list_markers_1.itemizeLevelDefaults), false);
return exports.itemizeLevel;
};
exports.SetDefaultItemizeLevel = SetDefaultItemizeLevel;
/**
* Reset and return default enumerate level definitions.
*/
var SetDefaultEnumerateLevel = function () {
exports.enumerateLevel = tslib_1.__spreadArray([], tslib_1.__read(list_markers_1.enumerateLevelDefaults), false);
return exports.enumerateLevel;
};
exports.SetDefaultEnumerateLevel = SetDefaultEnumerateLevel;
/**
* Return itemize level array (or fallback to defaults).
*/
var GetItemizeLevel = function (data) {
if (data === void 0) { data = null; }
if (!data || data.length === 0) {
return exports.itemizeLevel.length === 0
? (0, exports.SetDefaultItemizeLevel)()
: tslib_1.__spreadArray([], tslib_1.__read(exports.itemizeLevel), false);
}
return tslib_1.__spreadArray([], tslib_1.__read(data), false);
};
exports.GetItemizeLevel = GetItemizeLevel;
/**
* Return enumerate level array (or fallback to defaults).
*/
var GetEnumerateLevel = function (data) {
if (data === void 0) { data = null; }
if (!data || data.length === 0) {
return exports.enumerateLevel.length === 0
? (0, exports.SetDefaultEnumerateLevel)()
: tslib_1.__spreadArray([], tslib_1.__read(exports.enumerateLevel), false);
}
return tslib_1.__spreadArray([], tslib_1.__read(data), false);
};
exports.GetEnumerateLevel = GetEnumerateLevel;
/**
* Parse bullet tokens for all itemize levels.
*/
var SetItemizeLevelTokens = function (state) {
var originalOptions = tslib_1.__assign({}, state.md.options);
if (state.md.options.forDocx) {
state.md.options = tslib_1.__assign(tslib_1.__assign({}, state.md.options), { outMath: {
include_svg: true,
include_mathml_word: false,
} });
}
exports.itemizeLevelTokens = exports.itemizeLevel.map(function (level) {
var children = [];
state.md.inline.parse(level, state.md, state.env, children);
return children;
});
state.md.options = originalOptions;
return {
tokens: tslib_1.__spreadArray([], tslib_1.__read(exports.itemizeLevelTokens), false),
contents: tslib_1.__spreadArray([], tslib_1.__read(exports.itemizeLevel), false),
};
};
exports.SetItemizeLevelTokens = SetItemizeLevelTokens;
/**
* Parse bullet tokens for a specific itemize level index.
*/
var SetItemizeLevelTokensByIndex = function (state, index) {
var originalOptions = tslib_1.__assign({}, state.md.options);
if (state.md.options.forDocx) {
state.md.options = tslib_1.__assign(tslib_1.__assign({}, state.md.options), { outMath: {
include_svg: true,
include_mathml_word: false,
} });
}
var children = [];
state.md.inline.parse(exports.itemizeLevel[index], state.md, state.env, children);
exports.itemizeLevelTokens[index] = children;
state.md.options = originalOptions;
};
exports.SetItemizeLevelTokensByIndex = SetItemizeLevelTokensByIndex;
/**
* Returns cached itemize level tokens or provided subset.
*/
var GetItemizeLevelTokens = function (data) {
if (data === void 0) { data = null; }
if (!data || data.length === 0) {
return exports.itemizeLevelTokens.length > 0 ? tslib_1.__spreadArray([], tslib_1.__read(exports.itemizeLevelTokens), false) : [];
}
return tslib_1.__spreadArray([], tslib_1.__read(data), false);
};
exports.GetItemizeLevelTokens = GetItemizeLevelTokens;
/**
* Get both bullet content and parsed tokens from state.
*/
var GetItemizeLevelTokensByState = function (state) {
if (exports.itemizeLevelTokens.length > 0) {
return {
contents: tslib_1.__spreadArray([], tslib_1.__read(exports.itemizeLevel), false),
tokens: tslib_1.__spreadArray([], tslib_1.__read(exports.itemizeLevelTokens), false),
};
}
return (0, exports.SetItemizeLevelTokens)(state);
};
exports.GetItemizeLevelTokensByState = GetItemizeLevelTokensByState;
/**
* Change list style for \labelitemi, \labelenumi etc.
* Supports both itemize and enumerate levels.
*/
var ChangeLevel = function (state, data) {
if (!data)
return false;
var _a = data.command, command = _a === void 0 ? "" : _a, _b = data.params, params = _b === void 0 ? "" : _b;
if (!command || !params)
return false;
// ENUMERATE: labelenumi, labelenumii...
var index = consts_1.ENUM_LEVEL_COMMANDS.indexOf(command);
if (index >= 0) {
var match = params.match(consts_1.LATEX_ENUM_STYLE_RE);
if (match) {
var styleMatch = match[0].slice(1).match(consts_1.LATEX_ENUM_STYLE_KEY_RE);
if (styleMatch) {
exports.enumerateLevel[index] = consts_1.ENUM_STYLES[styleMatch[0]];
return true;
}
}
return false;
}
// ITEMIZE: labelitemi, labelitemii...
index = consts_1.ITEM_LEVEL_COMMANDS.indexOf(command);
if (index >= 0) {
exports.itemizeLevel[index] = params;
(0, exports.SetItemizeLevelTokensByIndex)(state, index);
return true;
}
return false;
};
exports.ChangeLevel = ChangeLevel;
/**
* Clears stored itemize level token cache.
*/
var clearItemizeLevelTokens = function () {
exports.itemizeLevelTokens = [];
};
exports.clearItemizeLevelTokens = clearItemizeLevelTokens;
//# sourceMappingURL=re-level.js.map