// Inject line numbers for sync scroll. var extra = require('./extra'); var md = extra.md; function addPart(tokens, idx) { if (tokens[idx].map && tokens[idx].level === 0) { var startline = tokens[idx].map[0] + 1; var 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.apply(self, arguments); }; md.renderer.rules.table_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken.apply(self, arguments); }; md.renderer.rules.bullet_list_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken.apply(self, arguments); }; md.renderer.rules.list_item_open = function (tokens, idx, options, env, self) { tokens[idx].attrJoin('class', 'raw'); if (tokens[idx].map) { var startline = tokens[idx].map[0] + 1; var endline = tokens[idx].map[1]; tokens[idx].attrJoin('data-startline', startline); tokens[idx].attrJoin('data-endline', endline); } return self.renderToken.apply(self, arguments); }; md.renderer.rules.ordered_list_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken.apply(self, arguments); }; md.renderer.rules.link_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken.apply(self, arguments); }; md.renderer.rules.paragraph_open = function (tokens, idx, options, env, self) { addPart(tokens, idx); return self.renderToken.apply(self, arguments); }; md.renderer.rules.heading_open = function (tokens, idx, options, env, self) { tokens[idx].attrJoin('class', 'raw'); addPart(tokens, idx); return self.renderToken.apply(self, arguments); }; md.renderer.rules.fence = function (tokens, idx, options, env, self) { var token = tokens[idx], info = token.info ? md.utils.unescapeAll(token.info).trim() : '', langName = '', 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) + '