Skip to content

Commit 86cf234

Browse files
committed
edit systemd format to match INI/TOML
1 parent cbed039 commit 86cf234

File tree

1 file changed

+51
-20
lines changed

1 file changed

+51
-20
lines changed

src/languages/systemd.js

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,71 @@ Category: common, config
66
Website: https://www.freedesktop.org/
77
*/
88
export default function(hljs) {
9+
const regex = hljs.regex;
10+
911
const FIELD_CODES = {
1012
className: 'variable',
1113
match: /%[fFuUcCiIkKvV]/,
1214
relevance: 0
1315
};
1416

15-
const QUOTED_STRING = {
17+
const STRINGS = {
1618
className: 'string',
17-
begin: /"/,
18-
end: /"/,
1919
contains: [ hljs.BACKSLASH_ESCAPE ],
20+
variants: [
21+
{ begin: '"', end: '"' }
22+
],
2023
relevance: 0
2124
};
2225

23-
const COMMENT_MODE = {
26+
const COMMENT = {
2427
className: 'comment',
25-
begin: /#/,
28+
begin: /[#;]/,
2629
end: /$/,
2730
relevance: 0
2831
};
2932

30-
const SECTION_HEADER = {
33+
const BOOL_LITERAL = {
34+
className: 'literal',
35+
begin: /\b(true|false|True|False)\b/,
36+
relevance: 10
37+
};
38+
39+
const TYPE_LITERAL = {
40+
className: 'literal',
41+
begin: /\b(Application|Link|Directory|forking|oneshot|OneShot)\b/,
42+
relevance: 10
43+
};
44+
45+
const NUMBER = {
46+
className: 'number',
47+
relevance: 0,
48+
variants: [
49+
{ begin: /([+-])?[\d]+(_[\d]+)*/ },
50+
{ begin: hljs.NUMBER_RE }
51+
]
52+
};
53+
54+
const SECTION = {
3155
className: 'section',
3256
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_-]+)\]/,
57+
end: /\]/,
3358
relevance: 10
3459
};
3560

36-
const KEY_VALUE_PAIR = {
37-
begin: /^([A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?)\s*(=)/,
38-
end: /$/,
61+
const BARE_KEY = /[A-Za-z0-9_-]+/;
62+
const KEY_WITH_INDEX = regex.concat(
63+
BARE_KEY,
64+
'(\\[[A-Za-z0-9_@.]+\\])?'
65+
);
66+
67+
const KEY_VALUE = {
68+
begin: regex.concat('^', KEY_WITH_INDEX, '\\s*='),
3969
returnBegin: true,
4070
contains: [
4171
{
42-
className: 'attribute',
43-
begin: /^[A-Za-z0-9_-]+(\[[A-Za-z0-9_@.]+\])?/,
72+
className: 'attr',
73+
begin: KEY_WITH_INDEX,
4474
end: /\s*=/,
4575
excludeEnd: true,
4676
relevance: 10
@@ -52,28 +82,29 @@ export default function(hljs) {
5282
},
5383
{
5484
className: 'literal',
55-
begin: /(?<=^Type\s*=)\s*\b(Application|Link|Directory|forking|oneshot|OneShot)\b/,
85+
begin: /\b(Application|Link|Directory|forking|oneshot|OneShot)\b/,
5686
relevance: 10
5787
},
5888
{
5989
className: 'literal',
60-
begin: /(?<=^(Terminal|StartupNotify)\s*=)\s*\b(true|false|True|False)\b/,
90+
begin: /\b(true|false|True|False)\b/,
6191
relevance: 10
6292
},
63-
QUOTED_STRING,
93+
STRINGS,
6494
FIELD_CODES,
65-
COMMENT_MODE
95+
COMMENT
6696
]
6797
};
6898

6999
return {
70-
name: 'Systemd',
71-
aliases: ['desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection','systemd'],
100+
name: 'Systemd/XDG',
101+
aliases: [ 'desktop', 'service', 'mount', 'socket', 'timer', 'nmconnection', 'systemd' ],
72102
case_insensitive: false,
73103
contains: [
74-
COMMENT_MODE,
75-
SECTION_HEADER,
76-
KEY_VALUE_PAIR
104+
COMMENT,
105+
SECTION,
106+
KEY_VALUE
77107
]
78108
};
79109
}
110+

0 commit comments

Comments
 (0)