| 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']); |