diff options
| author | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
| commit | a98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 (patch) | |
| tree | 542810ab5aef99150db228bb54fd58303dcb31c7 /public/prism/prism-wiki.js | |
| parent | ab355897a12b7bda1089a44de326d41455a0f7a3 (diff) | |
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-wiki.js')
| -rw-r--r-- | public/prism/prism-wiki.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/public/prism/prism-wiki.js b/public/prism/prism-wiki.js new file mode 100644 index 0000000..13bb78a --- /dev/null +++ b/public/prism/prism-wiki.js @@ -0,0 +1,79 @@ +Prism.languages.wiki = Prism.languages.extend('markup', { + 'block-comment': { + pattern: /(^|[^\\])\/\*[\s\S]*?\*\//, + lookbehind: true, + alias: 'comment', + }, + heading: { + pattern: /^(=+)[^=\r\n].*?\1/m, + inside: { + punctuation: /^=+|=+$/, + important: /.+/, + }, + }, + emphasis: { + // TODO Multi-line + pattern: /('{2,5}).+?\1/, + inside: { + 'bold-italic': { + pattern: /(''''').+?(?=\1)/, + lookbehind: true, + alias: ['bold', 'italic'], + }, + bold: { + pattern: /(''')[^'](?:.*?[^'])?(?=\1)/, + lookbehind: true, + }, + italic: { + pattern: /('')[^'](?:.*?[^'])?(?=\1)/, + lookbehind: true, + }, + punctuation: /^''+|''+$/, + }, + }, + hr: { + pattern: /^-{4,}/m, + alias: 'punctuation', + }, + url: [ + /ISBN +(?:97[89][ -]?)?(?:\d[ -]?){9}[\dx]\b|(?:PMID|RFC) +\d+/i, + /\[\[.+?\]\]|\[.+?\]/, + ], + variable: [ + /__[A-Z]+__/, + // FIXME Nested structures should be handled + // {{formatnum:{{#expr:{{{3}}}}}}} + /\{{3}.+?\}{3}/, + /\{\{.+?\}\}/, + ], + symbol: [/^#redirect/im, /~{3,5}/], + // Handle table attrs: + // {| + // ! style="text-align:left;"| Item + // |} + 'table-tag': { + pattern: /((?:^|[|!])[|!])[^|\r\n]+\|(?!\|)/m, + lookbehind: true, + inside: { + 'table-bar': { + pattern: /\|$/, + alias: 'punctuation', + }, + rest: Prism.languages.markup['tag'].inside, + }, + }, + punctuation: /^(?:\{\||\|\}|\|-|[*#:;!|])|\|\||!!/m, +}); + +Prism.languages.insertBefore('wiki', 'tag', { + // Prevent highlighting inside <nowiki>, <source> and <pre> tags + nowiki: { + pattern: /<(nowiki|pre|source)\b[^>]*>[\s\S]*?<\/\1>/i, + inside: { + tag: { + pattern: /<(?:nowiki|pre|source)\b[^>]*>|<\/(?:nowiki|pre|source)>/i, + inside: Prism.languages.markup['tag'].inside, + }, + }, + }, +}); |
