/* eslint-env browser, jquery */ /* global _ */ // Inject line numbers for sync scroll. import markdownitContainer from 'markdown-it-container' import { md } from '../extra' import modeType from './modeType' import appState from './appState' 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)}