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-systemd.js | |
| parent | ab355897a12b7bda1089a44de326d41455a0f7a3 (diff) | |
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-systemd.js')
| -rw-r--r-- | public/prism/prism-systemd.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/public/prism/prism-systemd.js b/public/prism/prism-systemd.js new file mode 100644 index 0000000..c22232f --- /dev/null +++ b/public/prism/prism-systemd.js @@ -0,0 +1,77 @@ +// https://www.freedesktop.org/software/systemd/man/systemd.syntax.html + +(function (Prism) { + var comment = { + pattern: /^[;#].*/m, + greedy: true, + }; + + var quotesSource = /"(?:[^\r\n"\\]|\\(?:[^\r]|\r\n?))*"(?!\S)/.source; + + Prism.languages.systemd = { + comment: comment, + + section: { + pattern: /^\[[^\n\r\[\]]*\](?=[ \t]*$)/m, + greedy: true, + inside: { + punctuation: /^\[|\]$/, + 'section-name': { + pattern: /[\s\S]+/, + alias: 'selector', + }, + }, + }, + + key: { + pattern: /^[^\s=]+(?=[ \t]*=)/m, + greedy: true, + alias: 'attr-name', + }, + value: { + // This pattern is quite complex because of two properties: + // 1) Quotes (strings) must be preceded by a space. Since we can't use lookbehinds, we have to "resolve" + // the lookbehind. You will see this in the main loop where spaces are handled separately. + // 2) Line continuations. + // After line continuations, empty lines and comments are ignored so we have to consume them. + pattern: RegExp( + /(=[ \t]*(?!\s))/.source + + // the value either starts with quotes or not + '(?:' + + quotesSource + + '|(?=[^"\r\n]))' + + // main loop + '(?:' + + (/[^\s\\]/.source + + // handle spaces separately because of quotes + '|' + + '[ \t]+(?:(?![ \t"])|' + + quotesSource + + ')' + + // line continuation + '|' + + /\\[\r\n]+(?:[#;].*[\r\n]+)*(?![#;])/.source) + + ')*' + ), + lookbehind: true, + greedy: true, + alias: 'attr-value', + inside: { + comment: comment, + quoted: { + pattern: RegExp(/(^|\s)/.source + quotesSource), + lookbehind: true, + greedy: true, + }, + punctuation: /\\$/m, + + boolean: { + pattern: /^(?:false|no|off|on|true|yes)$/, + greedy: true, + }, + }, + }, + + operator: /=/, + }; +})(Prism); |
