UNPKG

refractor

Version:

Lightweight, robust, elegant virtual syntax highlighting using Prism

132 lines (130 loc) 3.4 kB
'use strict'; module.exports = markdown; markdown.displayName = 'markdown'; markdown.aliases = []; function markdown(Prism) { Prism.languages.markdown = Prism.languages.extend('markup', {}); Prism.languages.insertBefore('markdown', 'prolog', { blockquote: { // > ... pattern: /^>(?:[\t ]*>)*/m, alias: 'punctuation' }, code: [ { // Prefixed by 4 spaces or 1 tab pattern: /^(?: {4}|\t).+/m, alias: 'keyword' }, { // `code` // ``code`` pattern: /``.+?``|`[^`\n]+`/, alias: 'keyword' } ], title: [ { // title 1 // ======= // title 2 // ------- pattern: /\w+.*(?:\r?\n|\r)(?:==+|--+)/, alias: 'important', inside: { punctuation: /==+$|--+$/ } }, { // # title 1 // ###### title 6 pattern: /(^\s*)#+.+/m, lookbehind: true, alias: 'important', inside: { punctuation: /^#+|#+$/ } } ], hr: { // *** // --- // * * * // ----------- pattern: /(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m, lookbehind: true, alias: 'punctuation' }, list: { // * item // + item // - item // 1. item pattern: /(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m, lookbehind: true, alias: 'punctuation' }, 'url-reference': { // [id]: http://example.com "Optional title" // [id]: http://example.com 'Optional title' // [id]: http://example.com (Optional title) // [id]: <http://example.com> "Optional title" pattern: /!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/, inside: { variable: { pattern: /^(!?\[)[^\]]+/, lookbehind: true }, string: /(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/, punctuation: /^[\[\]!:]|[<>]/ }, alias: 'url' }, bold: { // **strong** // __strong__ // Allow only one line break pattern: /(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/, lookbehind: true, inside: { punctuation: /^\*\*|^__|\*\*$|__$/ } }, italic: { // *em* // _em_ // Allow only one line break pattern: /(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/, lookbehind: true, inside: { punctuation: /^[*_]|[*_]$/ } }, url: { // [example](http://example.com "Optional title") // [example] [id] pattern: /!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/, inside: { variable: { pattern: /(!?\[)[^\]]+(?=\]$)/, lookbehind: true }, string: { pattern: /"(?:\\.|[^"\\])*"(?=\)$)/ } } } }); Prism.languages.markdown['bold'].inside['url'] = Prism.util.clone( Prism.languages.markdown['url'] ); Prism.languages.markdown['italic'].inside['url'] = Prism.util.clone( Prism.languages.markdown['url'] ); Prism.languages.markdown['bold'].inside['italic'] = Prism.util.clone( Prism.languages.markdown['italic'] ); Prism.languages.markdown['italic'].inside['bold'] = Prism.util.clone( Prism.languages.markdown['bold'] ); }