From 3c87a29c600c0b1e6231281f51a550e016ac5348 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Mon, 28 Jul 2025 18:45:42 +0900 Subject: [PATCH 01/37] add XDG Desktop shortcut file highlighter --- src/languages/desktop.js | 87 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/languages/desktop.js diff --git a/src/languages/desktop.js b/src/languages/desktop.js new file mode 100644 index 0000000000..e64b85cbf2 --- /dev/null +++ b/src/languages/desktop.js @@ -0,0 +1,87 @@ +/* +Language: XDGDesktop +Description: XDG Desktop Entry Specification file format. +Contributors: Lee Yunjin +Category: common, config +Website: https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/ +*/ + +export default function(hljs) { + const LITERALS = { + className: 'literal', + begin: /\b(true|false|Application|Link|Directory)\b/, + relevance: 0 + }; + + const FIELD_CODES = { + className: 'variable', + match: /%[fFuUcCiIkKvV]/ + }; + + const QUOTED_STRING = { + className: 'string', + begin: /"/, + end: /"/, + contains: [ hljs.BACKSLASH_ESCAPE ], + relevance: 0 + }; + + const COMMENT_MODE = { + className: 'comment', + begin: /#/, + end: /$/, + relevance: 0 + }; + + const SECTION_HEADER = { + className: 'section', + begin: /^\[(Desktop Entry|Desktop Action\s+[A-Za-z0-9_-]+)\]/, + relevance: 10 + }; + + const MIMETYPE_FORMAT = { + className: 'type', + match: /\b[a-zA-Z0-9_.+-]+\/[a-zA-Z0-9_.+-]+/, + relevance: 0 + }; + + const KEY_VALUE_PAIR = { + begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?\s*=/, + end: /$/, + returnBegin: true, + contains: [ + { + className: 'attribute', + begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?/, + relevance: 10 + }, + { + className: 'operator', + match: /=/, + relevance: 0 + }, + COMMENT_MODE, + LITERALS, + QUOTED_STRING, + FIELD_CODES, + MIMETYPE_FORMAT, + { + className: 'punctuation', + match: /;/, + relevance: 0 + } + ] + }; + + return { + name: 'Desktop', + aliases: ['desktop'], + case_insensitive: false, + contains: [ + COMMENT_MODE, + SECTION_HEADER, + KEY_VALUE_PAIR + ] + }; +} + From 4a9fba3ca1886969ec89ec305ab9f875a54d07a9 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Tue, 29 Jul 2025 23:44:55 +0900 Subject: [PATCH 02/37] delete mimetype highlighter; it can't be distinguished from path easily --- src/languages/desktop.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/languages/desktop.js b/src/languages/desktop.js index e64b85cbf2..bf9f22d246 100644 --- a/src/languages/desktop.js +++ b/src/languages/desktop.js @@ -39,12 +39,6 @@ export default function(hljs) { relevance: 10 }; - const MIMETYPE_FORMAT = { - className: 'type', - match: /\b[a-zA-Z0-9_.+-]+\/[a-zA-Z0-9_.+-]+/, - relevance: 0 - }; - const KEY_VALUE_PAIR = { begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?\s*=/, end: /$/, @@ -64,7 +58,6 @@ export default function(hljs) { LITERALS, QUOTED_STRING, FIELD_CODES, - MIMETYPE_FORMAT, { className: 'punctuation', match: /;/, From c9217bca6ebf9a903b7364c0d35395cde357ce5e Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Tue, 29 Jul 2025 23:49:45 +0900 Subject: [PATCH 03/37] add wider highlighting for *.service --- src/languages/desktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/desktop.js b/src/languages/desktop.js index bf9f22d246..9eaf8b1262 100644 --- a/src/languages/desktop.js +++ b/src/languages/desktop.js @@ -9,7 +9,7 @@ Website: https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/ export default function(hljs) { const LITERALS = { className: 'literal', - begin: /\b(true|false|Application|Link|Directory)\b/, + begin: /\b(true|false|Application|Link|Directory|forking|oneshot|simple)\b/, relevance: 0 }; From 5829270427d7e9288701f2094917b17116df04a0 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Tue, 29 Jul 2025 23:51:42 +0900 Subject: [PATCH 04/37] oneshot is sometimes OneShot --- src/languages/desktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/desktop.js b/src/languages/desktop.js index 9eaf8b1262..ab284976e8 100644 --- a/src/languages/desktop.js +++ b/src/languages/desktop.js @@ -9,7 +9,7 @@ Website: https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/ export default function(hljs) { const LITERALS = { className: 'literal', - begin: /\b(true|false|Application|Link|Directory|forking|oneshot|simple)\b/, + begin: /\b(true|false|Application|Link|Directory|forking|oneshot|simple|OneShot)\b/, relevance: 0 }; From 5ea1300b48c322b08bf5bfd9d3a218a609e6851c Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Tue, 29 Jul 2025 23:52:51 +0900 Subject: [PATCH 05/37] simple is too general keyword. --- src/languages/desktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/desktop.js b/src/languages/desktop.js index ab284976e8..7fa766ee32 100644 --- a/src/languages/desktop.js +++ b/src/languages/desktop.js @@ -9,7 +9,7 @@ Website: https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/ export default function(hljs) { const LITERALS = { className: 'literal', - begin: /\b(true|false|Application|Link|Directory|forking|oneshot|simple|OneShot)\b/, + begin: /\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, relevance: 0 }; From 871b819f7849ef6e26a4fe46576d29008fc1c447 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Wed, 30 Jul 2025 01:01:04 +0900 Subject: [PATCH 06/37] expand *.service support to desktop.js --- src/languages/desktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/desktop.js b/src/languages/desktop.js index 7fa766ee32..91b505e6c4 100644 --- a/src/languages/desktop.js +++ b/src/languages/desktop.js @@ -35,7 +35,7 @@ export default function(hljs) { const SECTION_HEADER = { className: 'section', - begin: /^\[(Desktop Entry|Desktop Action\s+[A-Za-z0-9_-]+)\]/, + begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|Journak|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]/, relevance: 10 }; From 70d7db86e62b26cbe128d0f1662976c042af2d34 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 00:24:01 +0900 Subject: [PATCH 07/37] it is a better idea to name it as a systemd format --- src/languages/{desktop.js => systemd.js} | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) rename src/languages/{desktop.js => systemd.js} (77%) diff --git a/src/languages/desktop.js b/src/languages/systemd.js similarity index 77% rename from src/languages/desktop.js rename to src/languages/systemd.js index 91b505e6c4..c983886c14 100644 --- a/src/languages/desktop.js +++ b/src/languages/systemd.js @@ -1,9 +1,9 @@ /* -Language: XDGDesktop -Description: XDG Desktop Entry Specification file format. +Language: Systemd +Description: Systemd/XDG Entry Specification file format. Contributors: Lee Yunjin Category: common, config -Website: https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/ +Website: https://www.freedesktop.org/ */ export default function(hljs) { @@ -35,7 +35,7 @@ export default function(hljs) { const SECTION_HEADER = { className: 'section', - begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|Journak|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]/, + begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|connection|ipv4|ipv6|802-3-ethernet|802-11-wireless|802-11-wireless-security|vpn|Journal|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]/, relevance: 10 }; @@ -67,8 +67,8 @@ export default function(hljs) { }; return { - name: 'Desktop', - aliases: ['desktop'], + name: 'Systemd', + aliases: ['desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection','systemd'], case_insensitive: false, contains: [ COMMENT_MODE, From 03d19f53311098176cb456b37232ce56bd8ff12d Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 00:57:42 +0900 Subject: [PATCH 08/37] Add = in front of a keyword highlighter --- src/languages/systemd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index c983886c14..ca16f42797 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -9,7 +9,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const LITERALS = { className: 'literal', - begin: /\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, + begin: /=\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, relevance: 0 }; From e218709bcbcd828df069d21d39b116d2c4af7081 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:00:07 +0900 Subject: [PATCH 09/37] = is not interpreted by itself --- src/languages/systemd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index ca16f42797..f6a4996046 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -9,7 +9,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const LITERALS = { className: 'literal', - begin: /=\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, + begin: /\/=\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, relevance: 0 }; From 09fcb9993d9a20a9d60164a309a532bf8f8adb83 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:00:54 +0900 Subject: [PATCH 10/37] = is not interpreted by itself --- src/languages/systemd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index f6a4996046..6145cb03f2 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -9,7 +9,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const LITERALS = { className: 'literal', - begin: /\/=\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, + begin: /\=\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, relevance: 0 }; From 7395f5d869d7a09842a991697f98f890aa5141c4 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:02:23 +0900 Subject: [PATCH 11/37] just move = outside of a group --- src/languages/systemd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index 6145cb03f2..d8983f0320 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -9,7 +9,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const LITERALS = { className: 'literal', - begin: /\=\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, + begin: /=(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, relevance: 0 }; From d79bbf994983bb74d7287b8d3836d87888737ab9 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:04:44 +0900 Subject: [PATCH 12/37] add contains attribute --- src/languages/systemd.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index d8983f0320..9c346c4162 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -5,11 +5,17 @@ Contributors: Lee Yunjin Category: common, config Website: https://www.freedesktop.org/ */ - export default function(hljs) { const LITERALS = { - className: 'literal', - begin: /=(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, + begin: /=/, + end: /$/, + contains: [ + { + className: 'literal', + begin: /\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, + relevance: 0 + } + ], relevance: 0 }; @@ -77,4 +83,3 @@ export default function(hljs) { ] }; } - From 7b0e71abd1eb3e39dd3532874b401e4b0d453847 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:06:38 +0900 Subject: [PATCH 13/37] distinguishing normal text is puzzling --- src/languages/systemd.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index 9c346c4162..7a547d7ad7 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -7,15 +7,8 @@ Website: https://www.freedesktop.org/ */ export default function(hljs) { const LITERALS = { - begin: /=/, - end: /$/, - contains: [ - { - className: 'literal', - begin: /\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, - relevance: 0 - } - ], + className: 'literal', + begin: /\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, relevance: 0 }; @@ -61,9 +54,16 @@ export default function(hljs) { relevance: 0 }, COMMENT_MODE, - LITERALS, - QUOTED_STRING, - FIELD_CODES, + { + begin: /(?<==\s*)/, + end: /$/, + contains: [ + LITERALS, + QUOTED_STRING, + FIELD_CODES + ], + relevance: 0 + }, { className: 'punctuation', match: /;/, From cdef708743c68b7c1147bcf2c8e3674361e1345e Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:08:25 +0900 Subject: [PATCH 14/37] removed \s. whitespace should be banned --- src/languages/systemd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index 7a547d7ad7..33f245100f 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -55,7 +55,7 @@ export default function(hljs) { }, COMMENT_MODE, { - begin: /(?<==\s*)/, + begin: /(?==)/, end: /$/, contains: [ LITERALS, From 064b2e597d530f1bd0edc6b8b8ec995dd31e9b35 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:10:08 +0900 Subject: [PATCH 15/37] trying value mode --- src/languages/systemd.js | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index 33f245100f..adb632921c 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -38,6 +38,18 @@ export default function(hljs) { relevance: 10 }; + const VALUE_MODE = { + begin: /(?==)/, + end: /$/, + contains: [ + LITERALS, + QUOTED_STRING, + FIELD_CODES, + COMMENT_MODE + ], + relevance: 0 + }; + const KEY_VALUE_PAIR = { begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?\s*=/, end: /$/, @@ -53,22 +65,7 @@ export default function(hljs) { match: /=/, relevance: 0 }, - COMMENT_MODE, - { - begin: /(?==)/, - end: /$/, - contains: [ - LITERALS, - QUOTED_STRING, - FIELD_CODES - ], - relevance: 0 - }, - { - className: 'punctuation', - match: /;/, - relevance: 0 - } + VALUE_MODE ] }; From 91412425dc9f7c015f0242c1159e293e4cc30c54 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:12:38 +0900 Subject: [PATCH 16/37] priority problem is too difficult. I need to get some helps from a copilot. :( --- src/languages/systemd.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index adb632921c..c78455fcc5 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -38,8 +38,8 @@ export default function(hljs) { relevance: 10 }; - const VALUE_MODE = { - begin: /(?==)/, + const VALUE_CONTENT_MODE = { + begin: /(?<==)/, end: /$/, contains: [ LITERALS, @@ -51,13 +51,14 @@ export default function(hljs) { }; const KEY_VALUE_PAIR = { - begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?\s*=/, + begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*(=)/, end: /$/, - returnBegin: true, contains: [ { className: 'attribute', begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?/, + end: /\s*=/, + excludeEnd: true, relevance: 10 }, { @@ -65,7 +66,7 @@ export default function(hljs) { match: /=/, relevance: 0 }, - VALUE_MODE + VALUE_CONTENT_MODE ] }; From 61097c98c4ca83c6843dfab05ac54db2609b816d Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:14:55 +0900 Subject: [PATCH 17/37] distinguish Type, Terminal, etc and match the right side --- src/languages/systemd.js | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index c78455fcc5..6ed762fa98 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -6,11 +6,7 @@ Category: common, config Website: https://www.freedesktop.org/ */ export default function(hljs) { - const LITERALS = { - className: 'literal', - begin: /\b(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/, - relevance: 0 - }; + const LITERAL_WORDS_PATTERN = /(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/; const FIELD_CODES = { className: 'variable', @@ -42,7 +38,6 @@ export default function(hljs) { begin: /(?<==)/, end: /$/, contains: [ - LITERALS, QUOTED_STRING, FIELD_CODES, COMMENT_MODE @@ -66,6 +61,32 @@ export default function(hljs) { match: /=/, relevance: 0 }, + { + begin: /(?<=^Type\s*=)/, + end: /$/, + contains: [ + { + className: 'literal', + begin: LITERAL_WORDS_PATTERN, + relevance: 10 + }, + COMMENT_MODE + ], + relevance: 0 + }, + { + begin: /(?<=^(Terminal|StartupNotify)\s*=)/, + end: /$/, + contains: [ + { + className: 'literal', + begin: /\b(true|false)\b/, + relevance: 10 + }, + COMMENT_MODE + ], + relevance: 0 + }, VALUE_CONTENT_MODE ] }; From 77c4b644c335e7cb151be05067371defeaa8fd42 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:16:51 +0900 Subject: [PATCH 18/37] recover left side syntax highlighting --- src/languages/systemd.js | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index 6ed762fa98..cda5acc7f1 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -34,20 +34,10 @@ export default function(hljs) { relevance: 10 }; - const VALUE_CONTENT_MODE = { - begin: /(?<==)/, - end: /$/, - contains: [ - QUOTED_STRING, - FIELD_CODES, - COMMENT_MODE - ], - relevance: 0 - }; - const KEY_VALUE_PAIR = { - begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*(=)/, + begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?\s*=/, end: /$/, + returnBegin: true, contains: [ { className: 'attribute', @@ -62,32 +52,25 @@ export default function(hljs) { relevance: 0 }, { - begin: /(?<=^Type\s*=)/, + begin: /(?<==\s*)/, end: /$/, contains: [ { className: 'literal', - begin: LITERAL_WORDS_PATTERN, + begin: /(^|;)\s*(Type\s*=)?\b(Application|Link|Directory)\b/, relevance: 10 }, - COMMENT_MODE - ], - relevance: 0 - }, - { - begin: /(?<=^(Terminal|StartupNotify)\s*=)/, - end: /$/, - contains: [ { className: 'literal', - begin: /\b(true|false)\b/, + begin: /(^|;)\s*(Terminal|StartupNotify)\s*=\s*\b(true|false)\b/, relevance: 10 }, + QUOTED_STRING, + FIELD_CODES, COMMENT_MODE ], relevance: 0 - }, - VALUE_CONTENT_MODE + } ] }; From 81178e9e4c94cd6e08e26410d11f5a859ee31bb8 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:19:28 +0900 Subject: [PATCH 19/37] this is really annoying. rules are conflicting --- src/languages/systemd.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index cda5acc7f1..ef7c1fb3d5 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -6,7 +6,7 @@ Category: common, config Website: https://www.freedesktop.org/ */ export default function(hljs) { - const LITERAL_WORDS_PATTERN = /(true|false|Application|Link|Directory|forking|oneshot|OneShot)\b/; + const LITERAL_WORDS_PATTERN = /(Application|Link|Directory|forking|oneshot|OneShot)\b/; const FIELD_CODES = { className: 'variable', @@ -57,12 +57,12 @@ export default function(hljs) { contains: [ { className: 'literal', - begin: /(^|;)\s*(Type\s*=)?\b(Application|Link|Directory)\b/, + begin: LITERAL_WORDS_PATTERN, relevance: 10 }, { className: 'literal', - begin: /(^|;)\s*(Terminal|StartupNotify)\s*=\s*\b(true|false)\b/, + begin: /\b(true|false)\b/, relevance: 10 }, QUOTED_STRING, From 2463865bea9c9e10c798c60553a8a8f1ddcc326b Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:21:59 +0900 Subject: [PATCH 20/37] no, I don't want to highlight every keywords that are not in a position --- src/languages/systemd.js | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index ef7c1fb3d5..e6586628d1 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -6,11 +6,10 @@ Category: common, config Website: https://www.freedesktop.org/ */ export default function(hljs) { - const LITERAL_WORDS_PATTERN = /(Application|Link|Directory|forking|oneshot|OneShot)\b/; - const FIELD_CODES = { className: 'variable', - match: /%[fFuUcCiIkKvV]/ + match: /%[fFuUcCiIkKvV]/, + relevance: 0 }; const QUOTED_STRING = { @@ -35,7 +34,7 @@ export default function(hljs) { }; const KEY_VALUE_PAIR = { - begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?\s*=/, + begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*(=)/, end: /$/, returnBegin: true, contains: [ @@ -52,25 +51,18 @@ export default function(hljs) { relevance: 0 }, { - begin: /(?<==\s*)/, - end: /$/, - contains: [ - { - className: 'literal', - begin: LITERAL_WORDS_PATTERN, - relevance: 10 - }, - { - className: 'literal', - begin: /\b(true|false)\b/, - relevance: 10 - }, - QUOTED_STRING, - FIELD_CODES, - COMMENT_MODE - ], - relevance: 0 - } + className: 'literal', + begin: /(?<=^Type\s*=)\s*\b(Application|Link|Directory|forking|oneshot|OneShot)\b/, + relevance: 10 + }, + { + className: 'literal', + begin: /(?<=^(Terminal|StartupNotify)\s*=)\s*\b(true|false)\b/, + relevance: 10 + }, + QUOTED_STRING, + FIELD_CODES, + COMMENT_MODE ] }; From cbed03906198cd3ea1943530d74f9cda9c115f6b Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Thu, 31 Jul 2025 01:27:36 +0900 Subject: [PATCH 21/37] support Upper Camel case for Terminal;StartupNotify --- src/languages/systemd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index e6586628d1..8e622c793b 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -57,7 +57,7 @@ export default function(hljs) { }, { className: 'literal', - begin: /(?<=^(Terminal|StartupNotify)\s*=)\s*\b(true|false)\b/, + begin: /(?<=^(Terminal|StartupNotify)\s*=)\s*\b(true|false|True|False)\b/, relevance: 10 }, QUOTED_STRING, From 86cf234cfde3d15d74b9ceff161eec82d5be07eb Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 12:42:42 +0900 Subject: [PATCH 22/37] edit systemd format to match INI/TOML --- src/languages/systemd.js | 71 +++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index 8e622c793b..aa8ced6673 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -6,41 +6,71 @@ Category: common, config Website: https://www.freedesktop.org/ */ export default function(hljs) { + const regex = hljs.regex; + const FIELD_CODES = { className: 'variable', match: /%[fFuUcCiIkKvV]/, relevance: 0 }; - const QUOTED_STRING = { + const STRINGS = { className: 'string', - begin: /"/, - end: /"/, contains: [ hljs.BACKSLASH_ESCAPE ], + variants: [ + { begin: '"', end: '"' } + ], relevance: 0 }; - const COMMENT_MODE = { + const COMMENT = { className: 'comment', - begin: /#/, + begin: /[#;]/, end: /$/, relevance: 0 }; - const SECTION_HEADER = { + const BOOL_LITERAL = { + className: 'literal', + begin: /\b(true|false|True|False)\b/, + relevance: 10 + }; + + const TYPE_LITERAL = { + className: 'literal', + begin: /\b(Application|Link|Directory|forking|oneshot|OneShot)\b/, + relevance: 10 + }; + + const NUMBER = { + className: 'number', + relevance: 0, + variants: [ + { begin: /([+-])?[\d]+(_[\d]+)*/ }, + { begin: hljs.NUMBER_RE } + ] + }; + + const SECTION = { className: 'section', begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|connection|ipv4|ipv6|802-3-ethernet|802-11-wireless|802-11-wireless-security|vpn|Journal|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]/, + end: /\]/, relevance: 10 }; - const KEY_VALUE_PAIR = { - begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*(=)/, - end: /$/, + const BARE_KEY = /[A-Za-z0-9_-]+/; + const KEY_WITH_INDEX = regex.concat( + BARE_KEY, + '(\\[[A-Za-z0-9_@.]+\\])?' + ); + + const KEY_VALUE = { + begin: regex.concat('^', KEY_WITH_INDEX, '\\s*='), returnBegin: true, contains: [ { - className: 'attribute', - begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?/, + className: 'attr', + begin: KEY_WITH_INDEX, end: /\s*=/, excludeEnd: true, relevance: 10 @@ -52,28 +82,29 @@ export default function(hljs) { }, { className: 'literal', - begin: /(?<=^Type\s*=)\s*\b(Application|Link|Directory|forking|oneshot|OneShot)\b/, + begin: /\b(Application|Link|Directory|forking|oneshot|OneShot)\b/, relevance: 10 }, { className: 'literal', - begin: /(?<=^(Terminal|StartupNotify)\s*=)\s*\b(true|false|True|False)\b/, + begin: /\b(true|false|True|False)\b/, relevance: 10 }, - QUOTED_STRING, + STRINGS, FIELD_CODES, - COMMENT_MODE + COMMENT ] }; return { - name: 'Systemd', - aliases: ['desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection','systemd'], + name: 'Systemd/XDG', + aliases: [ 'desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd' ], case_insensitive: false, contains: [ - COMMENT_MODE, - SECTION_HEADER, - KEY_VALUE_PAIR + COMMENT, + SECTION, + KEY_VALUE ] }; } + From e93595ebfee7c41caa55ad0bad6042acda039b48 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 12:46:07 +0900 Subject: [PATCH 23/37] current highlighter gets too many colors --- src/languages/systemd.js | 70 +++++++++++++--------------------------- 1 file changed, 23 insertions(+), 47 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index aa8ced6673..d6c399a40d 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -6,8 +6,6 @@ Category: common, config Website: https://www.freedesktop.org/ */ export default function(hljs) { - const regex = hljs.regex; - const FIELD_CODES = { className: 'variable', match: /%[fFuUcCiIkKvV]/, @@ -16,10 +14,9 @@ export default function(hljs) { const STRINGS = { className: 'string', + begin: /"/, + end: /"/, contains: [ hljs.BACKSLASH_ESCAPE ], - variants: [ - { begin: '"', end: '"' } - ], relevance: 0 }; @@ -30,27 +27,6 @@ export default function(hljs) { relevance: 0 }; - const BOOL_LITERAL = { - className: 'literal', - begin: /\b(true|false|True|False)\b/, - relevance: 10 - }; - - const TYPE_LITERAL = { - className: 'literal', - begin: /\b(Application|Link|Directory|forking|oneshot|OneShot)\b/, - relevance: 10 - }; - - const NUMBER = { - className: 'number', - relevance: 0, - variants: [ - { begin: /([+-])?[\d]+(_[\d]+)*/ }, - { begin: hljs.NUMBER_RE } - ] - }; - const SECTION = { className: 'section', begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|connection|ipv4|ipv6|802-3-ethernet|802-11-wireless|802-11-wireless-security|vpn|Journal|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]/, @@ -58,19 +34,13 @@ export default function(hljs) { relevance: 10 }; - const BARE_KEY = /[A-Za-z0-9_-]+/; - const KEY_WITH_INDEX = regex.concat( - BARE_KEY, - '(\\[[A-Za-z0-9_@.]+\\])?' - ); - const KEY_VALUE = { - begin: regex.concat('^', KEY_WITH_INDEX, '\\s*='), + begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*=/, returnBegin: true, contains: [ { className: 'attr', - begin: KEY_WITH_INDEX, + begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?/, end: /\s*=/, excludeEnd: true, relevance: 10 @@ -81,25 +51,31 @@ export default function(hljs) { relevance: 0 }, { - className: 'literal', - begin: /\b(Application|Link|Directory|forking|oneshot|OneShot)\b/, - relevance: 10 - }, - { - className: 'literal', - begin: /\b(true|false|True|False)\b/, - relevance: 10 - }, - STRINGS, - FIELD_CODES, - COMMENT + begin: /\S.*/, + end: /$/, + excludeBegin: false, + contains: [ + { + className: 'literal', + match: /\b(Application|Link|Directory|forking|oneshot|OneShot|true|false|True|False)\b/, + relevance: 10 + }, + STRINGS, + FIELD_CODES + // 일반 값은 하이라이팅 없음 + ], + relevance: 0 + } ] }; return { - name: 'Systemd/XDG', + name: 'Systemd (INI-like)', aliases: [ 'desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd' ], case_insensitive: false, + keywords: { + literal: 'Application Link Directory forking oneshot OneShot true false True False' + }, contains: [ COMMENT, SECTION, From b68efaf6d9a7bfdb1d44885c401bdadb601dfc50 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 12:47:52 +0900 Subject: [PATCH 24/37] solving whole block highlighting bug --- src/languages/systemd.js | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index d6c399a40d..4c3b304e7f 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -12,7 +12,7 @@ export default function(hljs) { relevance: 0 }; - const STRINGS = { + const STRING = { className: 'string', begin: /"/, end: /"/, @@ -29,8 +29,7 @@ export default function(hljs) { const SECTION = { className: 'section', - begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|connection|ipv4|ipv6|802-3-ethernet|802-11-wireless|802-11-wireless-security|vpn|Journal|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]/, - end: /\]/, + begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|connection|ipv4|ipv6|802-3-ethernet|802-11-wireless|802-11-wireless-security|vpn|Journal|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]$/, relevance: 10 }; @@ -51,31 +50,19 @@ export default function(hljs) { relevance: 0 }, { - begin: /\S.*/, - end: /$/, - excludeBegin: false, - contains: [ - { - className: 'literal', - match: /\b(Application|Link|Directory|forking|oneshot|OneShot|true|false|True|False)\b/, - relevance: 10 - }, - STRINGS, - FIELD_CODES - // 일반 값은 하이라이팅 없음 - ], - relevance: 0 - } + className: 'literal', + match: /\b(Application|Link|Directory|forking|oneshot|OneShot|true|false|True|False)\b/, + relevance: 10 + }, + STRING, + FIELD_CODES ] }; return { name: 'Systemd (INI-like)', - aliases: [ 'desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd' ], + aliases: ['desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd'], case_insensitive: false, - keywords: { - literal: 'Application Link Directory forking oneshot OneShot true false True False' - }, contains: [ COMMENT, SECTION, From 9bfef1c5669fa2f2cc0f9926ccfe4c67bc4dda75 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 12:51:10 +0900 Subject: [PATCH 25/37] FreeDesktop Configs don't use ; as a comment --- src/languages/systemd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/systemd.js b/src/languages/systemd.js index 4c3b304e7f..7db134c075 100644 --- a/src/languages/systemd.js +++ b/src/languages/systemd.js @@ -22,7 +22,7 @@ export default function(hljs) { const COMMENT = { className: 'comment', - begin: /[#;]/, + begin: /[#]/, end: /$/, relevance: 0 }; From 825ab9d8c957731e687d701e25a63b185e561a16 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 12:54:21 +0900 Subject: [PATCH 26/37] change systemd.js to freedesktop.js --- src/languages/{systemd.js => freedesktop.js} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/languages/{systemd.js => freedesktop.js} (94%) diff --git a/src/languages/systemd.js b/src/languages/freedesktop.js similarity index 94% rename from src/languages/systemd.js rename to src/languages/freedesktop.js index 7db134c075..772596266f 100644 --- a/src/languages/systemd.js +++ b/src/languages/freedesktop.js @@ -60,8 +60,8 @@ export default function(hljs) { }; return { - name: 'Systemd (INI-like)', - aliases: ['desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd'], + name: 'FreeDesktop configuration format', + aliases: ['desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd'. 'freedesktop'], case_insensitive: false, contains: [ COMMENT, From d51353666f8bdcb34f38ea49a665e042f72c47c2 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 12:55:27 +0900 Subject: [PATCH 27/37] add omitted keyword for nmconnection --- src/languages/freedesktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index 772596266f..ffca9bcd51 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -29,7 +29,7 @@ export default function(hljs) { const SECTION = { className: 'section', - begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|connection|ipv4|ipv6|802-3-ethernet|802-11-wireless|802-11-wireless-security|vpn|Journal|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]$/, + begin: /^\[(Desktop Entry|Unit|Service|Install|Socket|Mount|Automount|Swap|Path|Timer|Slice|Scope|Manager|connection|ipv4|wifi|wifi-security|ipv6|802-3-ethernet|802-11-wireless|802-11-wireless-security|vpn|Journal|Bridge|Desktop Action\s+[A-Za-z0-9_-]+)\]$/, relevance: 10 }; From 6a05f442e8ce202ab9c64c2af35f7042ddc84468 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 12:58:54 +0900 Subject: [PATCH 28/37] found typo that is marked as . instead of ',' --- src/languages/freedesktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index ffca9bcd51..207a7d2a9b 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -61,7 +61,7 @@ export default function(hljs) { return { name: 'FreeDesktop configuration format', - aliases: ['desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd'. 'freedesktop'], + aliases: ['desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd', 'freedesktop'], case_insensitive: false, contains: [ COMMENT, From 4dd771bb6d2f3c8233ba41fccba1bf9342e541c6 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 13:12:35 +0900 Subject: [PATCH 29/37] add wider field codes --- src/languages/freedesktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index 207a7d2a9b..29c10a0d78 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -8,7 +8,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const FIELD_CODES = { className: 'variable', - match: /%[fFuUcCiIkKvV]/, + match: /%[a-zA-Z]/, relevance: 0 }; From 0998dce97f68e90446abc1476d9c285633ce636c Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 13:17:33 +0900 Subject: [PATCH 30/37] trying to change appliance order to make %c work --- src/languages/freedesktop.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index 29c10a0d78..bfcb4611d0 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -38,6 +38,7 @@ export default function(hljs) { returnBegin: true, contains: [ { + FIELD_CODES, className: 'attr', begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?/, end: /\s*=/, @@ -54,8 +55,7 @@ export default function(hljs) { match: /\b(Application|Link|Directory|forking|oneshot|OneShot|true|false|True|False)\b/, relevance: 10 }, - STRING, - FIELD_CODES + STRING ] }; From 90feb00d58aca75fbd29aaac0d2b3330c0b56392 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 13:23:01 +0900 Subject: [PATCH 31/37] %c bugfix #1 --- src/languages/freedesktop.js | 49 +++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index bfcb4611d0..e135886182 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -33,29 +33,42 @@ export default function(hljs) { relevance: 10 }; - const KEY_VALUE = { - begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*=/, - returnBegin: true, + const KEY_NAME = { + className: 'attr', + begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?/, + end: /\s*=/, + excludeEnd: true, + relevance: 10 + }; + + const OPERATOR = { + className: 'operator', + match: /=/, + relevance: 0 + }; + + const VALUE = { + begin: /=\s*/, + end: /$/, + excludeBegin: true, contains: [ - { - FIELD_CODES, - className: 'attr', - begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?/, - end: /\s*=/, - excludeEnd: true, - relevance: 10 - }, - { - className: 'operator', - match: /=/, - relevance: 0 - }, + FIELD_CODES, + STRING, { className: 'literal', match: /\b(Application|Link|Directory|forking|oneshot|OneShot|true|false|True|False)\b/, relevance: 10 - }, - STRING + } + ] + }; + + const KEY_VALUE = { + begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*=/, + returnBegin: true, + contains: [ + KEY_NAME, + OPERATOR, + VALUE ] }; From 32dd096450e4a645ebef3ab2246ace4bc093d4e9 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 13:25:59 +0900 Subject: [PATCH 32/37] field code should be matched as 'begin' --- src/languages/freedesktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index e135886182..9f880ad904 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -8,7 +8,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const FIELD_CODES = { className: 'variable', - match: /%[a-zA-Z]/, + begin: /%[a-zA-Z]/, relevance: 0 }; From 9b7fde40b7d51f3da8c8c66a16227a9fdffd7375 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 13:32:13 +0900 Subject: [PATCH 33/37] make field code to case insensitive one --- src/languages/freedesktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index 9f880ad904..9ffd6c7f3d 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -8,7 +8,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const FIELD_CODES = { className: 'variable', - begin: /%[a-zA-Z]/, + begin: /%[a-z]/i, relevance: 0 }; From 01c0e5cc2513057fcef92aea41165091c36b277f Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 13:34:56 +0900 Subject: [PATCH 34/37] change field code's match group to key value --- src/languages/freedesktop.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index 9ffd6c7f3d..f5567362cb 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -1,6 +1,6 @@ /* -Language: Systemd -Description: Systemd/XDG Entry Specification file format. +Language: FreeDesktop Configs +Description: FreeDesktop Config Specification file format Contributors: Lee Yunjin Category: common, config Website: https://www.freedesktop.org/ @@ -52,7 +52,6 @@ export default function(hljs) { end: /$/, excludeBegin: true, contains: [ - FIELD_CODES, STRING, { className: 'literal', @@ -67,6 +66,7 @@ export default function(hljs) { returnBegin: true, contains: [ KEY_NAME, + FIELD_CODES, OPERATOR, VALUE ] From 4f38e3038c722027632e04c78bd735278ff3028b Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 13:37:55 +0900 Subject: [PATCH 35/37] make field group's relevance to 1 --- src/languages/freedesktop.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index f5567362cb..2aa88676fc 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -9,7 +9,7 @@ export default function(hljs) { const FIELD_CODES = { className: 'variable', begin: /%[a-z]/i, - relevance: 0 + relevance: 1 }; const STRING = { @@ -65,8 +65,8 @@ export default function(hljs) { begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*=/, returnBegin: true, contains: [ - KEY_NAME, FIELD_CODES, + KEY_NAME, OPERATOR, VALUE ] From 83dcba6c7ce71ff8760c14d9d420437474c91251 Mon Sep 17 00:00:00 2001 From: Lee Yunjin Date: Sat, 2 Aug 2025 13:40:20 +0900 Subject: [PATCH 36/37] match matches a group without considering location; so field codes should use match option --- src/languages/freedesktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index 2aa88676fc..ac583b23de 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -8,7 +8,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const FIELD_CODES = { className: 'variable', - begin: /%[a-z]/i, + match: /%[a-z]/i, relevance: 1 }; From dd46d3be6f665af02ae9dbb68ca8a1b9d15d619e Mon Sep 17 00:00:00 2001 From: Yunjin Lee <168180007+gg582@users.noreply.github.com> Date: Sat, 2 Aug 2025 22:30:46 +0900 Subject: [PATCH 37/37] freedesktop.js: correct Match Logic --- src/languages/freedesktop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/freedesktop.js b/src/languages/freedesktop.js index ac583b23de..e05d742e25 100644 --- a/src/languages/freedesktop.js +++ b/src/languages/freedesktop.js @@ -8,7 +8,7 @@ Website: https://www.freedesktop.org/ export default function(hljs) { const FIELD_CODES = { className: 'variable', - match: /%[a-z]/i, + match: /%[a-zA-Z]/, relevance: 1 };