aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-systemd.js
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2021-12-30 19:47:21 +0100
committerArmand Philippot <git@armandphilippot.com>2021-12-30 19:47:21 +0100
commita98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 (patch)
tree542810ab5aef99150db228bb54fd58303dcb31c7 /public/prism/prism-systemd.js
parentab355897a12b7bda1089a44de326d41455a0f7a3 (diff)
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-systemd.js')
-rw-r--r--public/prism/prism-systemd.js77
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);