// Inject line numbers for sync scroll. import markdownitContainer from 'markdown-it-container'; import { md } from './extra'; function addPart(tokens, idx) { if (tokens[idx].map && tokens[idx].level === 0) { const startline = tokens[idx].map[0] + 1; const endline = tokens[idx].map[1]; tokens[idx].attrJoin('class', 'part'); tokens[idx].attrJoin('data-startline', startline); tokens[idx].attrJoin('data-endline', endline); } } md.renderer.rules.blockquote_open = function (tokens, idx, options, env, self) { tokens[idx].attrJoin('class', 'raw'); addPart(tokens, idx); return self.renderToken(...arguments); }; md.renderer.rules.table_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken(...arguments); }; md.renderer.rules.bullet_list_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken(...arguments); }; md.renderer.rules.list_item_open = function (tokens, idx, options, env, self) { tokens[idx].attrJoin('class', 'raw'); if (tokens[idx].map) { const startline = tokens[idx].map[0] + 1; const endline = tokens[idx].map[1]; tokens[idx].attrJoin('data-startline', startline); tokens[idx].attrJoin('data-endline', endline); } return self.renderToken(...arguments); }; md.renderer.rules.ordered_list_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken(...arguments); }; md.renderer.rules.link_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken(...arguments); }; md.renderer.rules.paragraph_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken(...arguments); }; md.renderer.rules.heading_open = function (tokens, idx, options, env, self) { tokens[idx].attrJoin('class', 'raw'); addPart(tokens, idx); return self.renderToken(...arguments); }; md.renderer.rules.fence = (tokens, idx, options, env, self) => { const token = tokens[idx]; const info = token.info ? md.utils.unescapeAll(token.info).trim() : ''; let langName = ''; let highlighted; if (info) { langName = info.split(/\s+/g)[0]; if (/\!$/.test(info)) token.attrJoin('class', 'wrap'); token.attrJoin('class', options.langPrefix + langName.replace(/\=$|\=\d+$|\=\+$|\!$|\=\!/, '')); token.attrJoin('class', 'hljs'); token.attrJoin('class', 'raw'); } if (options.highlight) { highlighted = options.highlight(token.content, langName) || md.utils.escapeHtml(token.content); } else { highlighted = md.utils.escapeHtml(token.content); } if (highlighted.indexOf('
${highlighted}${highlighted}${md.utils.escapeHtml(tokens[idx].content)}${md.utils.escapeHtml(tokens[idx].content)}