meblog
Version:
A simple blog engine for personal blogging
40 lines (39 loc) • 1.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const Renderer_1 = tslib_1.__importDefault(require("./Renderer"));
const markdown_it_1 = tslib_1.__importDefault(require("markdown-it"));
const markdown_it_emoji_1 = tslib_1.__importDefault(require("markdown-it-emoji"));
const markdown_it_sub_1 = tslib_1.__importDefault(require("markdown-it-sub"));
const markdown_it_sup_1 = tslib_1.__importDefault(require("markdown-it-sup"));
const markdown_it_footnote_1 = tslib_1.__importDefault(require("markdown-it-footnote"));
const markdown_it_abbr_1 = tslib_1.__importDefault(require("markdown-it-abbr"));
const twemoji_1 = tslib_1.__importDefault(require("twemoji"));
const highlight_js_1 = tslib_1.__importDefault(require("highlight.js"));
class MarkdownItRenderer extends Renderer_1.default {
md;
highlight(code, lang) {
const language = highlight_js_1.default.getLanguage(lang) ? lang : 'plaintext';
return highlight_js_1.default.highlight(code, { language }).value;
}
twemoji(token, idx) {
return twemoji_1.default.parse(token[idx].content);
}
initRenderer() {
if (this.md) {
return;
}
this.md = new markdown_it_1.default('default', {
html: true,
typographer: true,
highlight: this.highlight.bind(this),
});
this.md.use(markdown_it_emoji_1.default).use(markdown_it_footnote_1.default).use(markdown_it_abbr_1.default).use(markdown_it_sup_1.default).use(markdown_it_sub_1.default);
this.md.renderer.rules.emoji = this.twemoji.bind(this);
}
render(markdown) {
this.initRenderer();
return this.md.render(markdown);
}
}
exports.default = MarkdownItRenderer;