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)
148 lines • 6.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.renderOutText = exports.renderOutOpen = exports.renderUnderlineClose = exports.renderUnderlineOpen = exports.renderUnderlineText = void 0;
var render_tabular_1 = require("./render-tabular");
var mdPluginText_1 = require("../mdPluginText");
var utils_1 = require("../utils");
var htmlUnderlineOpen = function (underlineLevel, underlineType, underlinePadding) {
if (underlineType === void 0) { underlineType = 'underline'; }
if (underlinePadding === void 0) { underlinePadding = 0; }
if (underlineType === 'uwave') {
var html_1 = "<span data-underline-level=\"".concat(underlineLevel, "\" ");
html_1 += "data-underline-type=\"".concat(underlineType, "\" ");
html_1 += 'style="';
html_1 += 'text-decoration: underline; text-decoration-style: wavy;';
html_1 += '">';
return html_1;
}
var cssBackground = "border-bottom: 1px solid;";
switch (underlineType) {
case 'dashuline':
cssBackground = "background-position: bottom; " +
"background-size: 12px 1px; " +
"background-repeat: repeat-x; " +
"background-image: radial-gradient(circle, currentcolor 3px, transparent 1px);";
break;
case 'dotuline':
cssBackground = "background-position: bottom; " +
"background-size: 10px 2px; " +
"background-repeat: repeat-x; " +
"background-image: radial-gradient(circle, currentcolor 1px, transparent 1px);";
break;
}
var cssLineHeight = "";
var cssBackgroundPosition = '';
var cssPaddingBottom = '';
if (underlineLevel >= 1) {
switch (underlineLevel) {
case 1:
cssBackgroundPosition = underlineType !== 'dotuline' && underlineType !== 'dashuline'
? "background-position: 0 -1px;" : '';
break;
case 2:
cssPaddingBottom = "padding-bottom: ".concat(underlinePadding, "px;");
break;
default:
var lineHeight = underlineLevel >= 3 ? (underlineLevel - 2) * 4 + 1 : 5;
cssPaddingBottom = "padding-bottom: ".concat(underlinePadding, "px;");
cssLineHeight = "line-height: ".concat(28 + lineHeight, "px;");
break;
}
}
else {
cssBackgroundPosition = "background-position: 0 -1px;";
}
var html = '<span ';
html += "data-underline-level=\"".concat(underlineLevel, "\" ");
html += "data-underline-type=\"".concat(underlineType, "\" ");
html += "style=\"";
html += cssBackground ? cssBackground : '';
html += cssBackgroundPosition ? cssBackgroundPosition : '';
html += cssPaddingBottom ? cssPaddingBottom : '';
html += cssLineHeight ? cssLineHeight : '';
html += '">';
return html;
};
var renderUnderlineText = function (tokens, idx, options, env, slf) {
var token = tokens[idx];
var sContent = '';
var content = '';
token.underlineParentLevel = token.underlineParentLevel
? token.underlineParentLevel + 1 : 1;
if (token.children && token.children.length) {
for (var i = 0; i < token.children.length; i++) {
var tok = token.children[i];
if (tok.type === 'underline') {
tok.underlineParentLevel = token.underlineParentLevel;
if ((0, utils_1.isMathInText)(token.children, i, options)) {
tok.attrSet('data-math-in-text', "true");
}
content = slf.renderInline([tok], options, env);
}
else {
if (tok.children && tok.children.length > 1) {
if (tok.type === "tabular_inline") {
content = (0, render_tabular_1.renderTabularInline)(token.children, tok, options, env, slf);
}
else {
content = slf.renderInline(tok.children, options, env);
}
}
else {
if ((0, utils_1.isMathInText)(token.children, i, options)) {
tok.attrSet('data-math-in-text', "true");
}
content = slf.renderInline([tok], options, env);
}
}
sContent += content;
}
}
else {
sContent = token.content;
}
;
return sContent;
};
exports.renderUnderlineText = renderUnderlineText;
var renderUnderlineOpen = function (tokens, idx, options, env, slf) {
var token = tokens[idx];
if (token.underlineType === 'uuline') {
return htmlUnderlineOpen(token.underlineLevel + 1, token.underlineType, token.underlinePadding)
+ htmlUnderlineOpen(token.underlineLevel, token.underlineType, token.underlinePadding > 3 ? token.underlinePadding - 3 : token.underlinePadding);
}
return htmlUnderlineOpen(token.underlineLevel, token.underlineType, token.underlinePadding);
};
exports.renderUnderlineOpen = renderUnderlineOpen;
var renderUnderlineClose = function (tokens, idx, options, env, slf) {
var token = tokens[idx];
var html = '</span>';
if (token.underlineType === 'uuline') {
html += '</span>';
}
if (!token.isSubUnderline && token.underlineLevel >= 3) {
var lineHeight = token.underlineLevel >= 3 ? (token.underlineLevel - 2) * 4 + 1 : 5;
/** zero-width space */
return html + "<span style=\"height: ".concat(28 + lineHeight, "px; display: inline-block;\">​</span>");
}
return html;
};
exports.renderUnderlineClose = renderUnderlineClose;
var renderOutOpen = function (tokens, idx, options, env, slf) {
var token = tokens[idx];
var html = "<span ";
html += "data-out-type=\"".concat(token.underlineType, "\" ");
html += 'style="';
html += token.underlineType === 'xout'
? 'background: repeating-linear-gradient(-60deg, currentcolor, currentcolor, transparent 1px, transparent 6px);'
: 'text-decoration: line-through; text-decoration-thickness: from-font;';
html += '">';
return html;
};
exports.renderOutOpen = renderOutOpen;
var renderOutText = function (tokens, idx, options, env, slf) {
var token = tokens[idx];
return (0, mdPluginText_1.renderInlineContent)(token, options, env, slf);
};
exports.renderOutText = renderOutText;
//# sourceMappingURL=underline.js.map