|
1 |
| -import marked from 'marked' |
2 |
| -import Prism from 'prismjs' |
3 |
| -import { helper as helperTpl, tree as treeTpl } from './tpl' |
| 1 | +import { tree as treeTpl } from './tpl' |
4 | 2 | import { genTree } from './gen-tree'
|
5 | 3 | import { slugify } from './slugify'
|
6 | 4 | import { emojify } from './emojify'
|
7 | 5 | import { isAbsolutePath, getPath, getParentPath } from '../router/util'
|
8 | 6 | import { isFn, merge, cached, isPrimitive } from '../util/core'
|
9 |
| - |
10 |
| -// See https://github.com/PrismJS/prism/pull/1367 |
11 |
| -import 'prismjs/components/prism-markup-templating' |
| 7 | +import { imageCompiler } from './compiler/image' |
| 8 | +import { highlightCodeCompiler } from './compiler/code' |
| 9 | +import { paragraphCompiler } from './compiler/paragraph' |
| 10 | +import { taskListCompiler } from './compiler/taskList' |
| 11 | +import { taskListItemCompiler } from './compiler/taskListItem' |
| 12 | +import { linkCompiler } from './compiler/link' |
| 13 | +import marked from 'marked' |
12 | 14 |
|
13 | 15 | const cachedLinks = {}
|
14 | 16 |
|
@@ -189,7 +191,7 @@ export class Compiler {
|
189 | 191 |
|
190 | 192 | _initRenderer() {
|
191 | 193 | const renderer = new marked.Renderer()
|
192 |
| - const { linkTarget, linkRel, router, contentBase } = this |
| 194 | + const { linkTarget, router, contentBase } = this |
193 | 195 | const _self = this
|
194 | 196 | const origin = {}
|
195 | 197 |
|
@@ -224,117 +226,12 @@ export class Compiler {
|
224 | 226 | return `<h${level} id="${slug}"><a href="${url}" data-id="${slug}" class="anchor"><span>${str}</span></a></h${level}>`
|
225 | 227 | }
|
226 | 228 |
|
227 |
| - // Highlight code |
228 |
| - origin.code = renderer.code = function (code, lang = '') { |
229 |
| - code = code.replace(/@DOCSIFY_QM@/g, '`') |
230 |
| - const hl = Prism.highlight( |
231 |
| - code, |
232 |
| - Prism.languages[lang] || Prism.languages.markup |
233 |
| - ) |
234 |
| - |
235 |
| - return `<pre v-pre data-lang="${lang}"><code class="lang-${lang}">${hl}</code></pre>` |
236 |
| - } |
237 |
| - |
238 |
| - origin.link = renderer.link = function (href, title = '', text) { |
239 |
| - let attrs = '' |
240 |
| - |
241 |
| - const { str, config } = getAndRemoveConfig(title) |
242 |
| - title = str |
243 |
| - |
244 |
| - if ( |
245 |
| - !isAbsolutePath(href) && |
246 |
| - !_self._matchNotCompileLink(href) && |
247 |
| - !config.ignore |
248 |
| - ) { |
249 |
| - if (href === _self.config.homepage) { |
250 |
| - href = 'README' |
251 |
| - } |
252 |
| - |
253 |
| - href = router.toURL(href, null, router.getCurrentPath()) |
254 |
| - } else { |
255 |
| - attrs += href.indexOf('mailto:') === 0 ? '' : ` target="${linkTarget}"` |
256 |
| - attrs += href.indexOf('mailto:') === 0 ? '' : (linkRel !== '' ? ` rel="${linkRel}"` : '') |
257 |
| - } |
258 |
| - |
259 |
| - if (config.target) { |
260 |
| - attrs += ' target=' + config.target |
261 |
| - } |
262 |
| - |
263 |
| - if (config.disabled) { |
264 |
| - attrs += ' disabled' |
265 |
| - href = 'javascript:void(0)' |
266 |
| - } |
267 |
| - |
268 |
| - if (title) { |
269 |
| - attrs += ` title="${title}"` |
270 |
| - } |
271 |
| - |
272 |
| - return `<a href="${href}"${attrs}>${text}</a>` |
273 |
| - } |
274 |
| - |
275 |
| - origin.paragraph = renderer.paragraph = function (text) { |
276 |
| - let result |
277 |
| - if (/^!>/.test(text)) { |
278 |
| - result = helperTpl('tip', text) |
279 |
| - } else if (/^\?>/.test(text)) { |
280 |
| - result = helperTpl('warn', text) |
281 |
| - } else { |
282 |
| - result = `<p>${text}</p>` |
283 |
| - } |
284 |
| - |
285 |
| - return result |
286 |
| - } |
287 |
| - |
288 |
| - origin.image = renderer.image = function (href, title, text) { |
289 |
| - let url = href |
290 |
| - let attrs = '' |
291 |
| - |
292 |
| - const { str, config } = getAndRemoveConfig(title) |
293 |
| - title = str |
294 |
| - |
295 |
| - if (config['no-zoom']) { |
296 |
| - attrs += ' data-no-zoom' |
297 |
| - } |
298 |
| - |
299 |
| - if (title) { |
300 |
| - attrs += ` title="${title}"` |
301 |
| - } |
302 |
| - |
303 |
| - const size = config.size |
304 |
| - if (size) { |
305 |
| - const sizes = size.split('x') |
306 |
| - if (sizes[1]) { |
307 |
| - attrs += 'width=' + sizes[0] + ' height=' + sizes[1] |
308 |
| - } else { |
309 |
| - attrs += 'width=' + sizes[0] |
310 |
| - } |
311 |
| - } |
312 |
| - |
313 |
| - if (!isAbsolutePath(href)) { |
314 |
| - url = getPath(contentBase, getParentPath(router.getCurrentPath()), href) |
315 |
| - } |
316 |
| - |
317 |
| - return `<img src="${url}"data-origin="${href}" alt="${text}"${attrs}>` |
318 |
| - } |
319 |
| - |
320 |
| - origin.list = renderer.list = function (body, ordered, start) { |
321 |
| - const isTaskList = /<li class="task-list-item">/.test(body.split('class="task-list"')[0]) |
322 |
| - const isStartReq = start && start > 1 |
323 |
| - const tag = ordered ? 'ol' : 'ul' |
324 |
| - const tagAttrs = [ |
325 |
| - (isTaskList ? 'class="task-list"' : ''), |
326 |
| - (isStartReq ? `start="${start}"` : '') |
327 |
| - ].join(' ').trim() |
328 |
| - |
329 |
| - return `<${tag} ${tagAttrs}>${body}</${tag}>` |
330 |
| - } |
331 |
| - |
332 |
| - origin.listitem = renderer.listitem = function (text) { |
333 |
| - const isTaskItem = /^(<input.*type="checkbox"[^>]*>)/.test(text) |
334 |
| - const html = isTaskItem ? `<li class="task-list-item"><label>${text}</label></li>` : `<li>${text}</li>` |
335 |
| - |
336 |
| - return html |
337 |
| - } |
| 229 | + origin.code = highlightCodeCompiler({ renderer }) |
| 230 | + origin.link = linkCompiler({ renderer, router, linkTarget, compilerClass: _self }) |
| 231 | + origin.paragraph = paragraphCompiler({ renderer }) |
| 232 | + origin.image = imageCompiler({ renderer, contentBase, router }) |
| 233 | + origin.list = taskListCompiler({ renderer }) |
| 234 | + origin.listitem = taskListItemCompiler({ renderer }) |
338 | 235 |
|
339 | 236 | renderer.origin = origin
|
340 | 237 |
|
|
0 commit comments