vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
desktop.lua
(1418B)
1 -- Copyright 2006-2025 Mitchell. See LICENSE.
2 -- Desktop Entry LPeg lexer.
3
4 local lexer = lexer
5 local P, S = lpeg.P, lpeg.S
6
7 local lex = lexer.new(...)
8
9 -- Keys.
10 lex:add_rule('key', lex:tag(lexer.VARIABLE_BUILTIN, lex:word_match(lexer.VARIABLE_BUILTIN)))
11
12 -- Values.
13 lex:add_rule('value', lex:tag(lexer.CONSTANT_BUILTIN, lexer.word_match('true false')))
14
15 -- Identifiers.
16 lex:add_rule('identifier', lex:tag(lexer.IDENTIFIER, lexer.alpha * (lexer.alnum + S('_-'))^0))
17
18 -- Group headers.
19 local bracketed = lexer.range('[', ']')
20 lex:add_rule('header', lexer.starts_line(lex:tag(lexer.HEADING, bracketed)))
21
22 -- Locales.
23 lex:add_rule('locale', lex:tag(lexer.TYPE, bracketed))
24
25 -- Strings.
26 lex:add_rule('string', lex:tag(lexer.STRING, lexer.range('"')))
27
28 -- Comments.
29 lex:add_rule('comment', lex:tag(lexer.COMMENT, lexer.to_eol('#')))
30
31 -- Numbers.
32 lex:add_rule('number', lex:tag(lexer.NUMBER, lexer.number))
33
34 -- Field codes.
35 lex:add_rule('code', lex:tag(lexer.CONSTANT_BUILTIN, '%' * S('fFuUdDnNickvm')))
36
37 -- Operators.
38 lex:add_rule('operator', lex:tag(lexer.OPERATOR, S('=')))
39
40 -- Word lists.
41 lex:set_word_list(lexer.VARIABLE_BUILTIN, {
42 'Type', 'Version', 'Name', 'GenericName', 'NoDisplay', 'Comment', 'Icon', 'Hidden', 'OnlyShowIn',
43 'NotShowIn', 'TryExec', 'Exec', 'Exec', 'Path', 'Terminal', 'MimeType', 'Categories',
44 'StartupNotify', 'StartupWMClass', 'URL'
45 })
46
47 lexer.property['scintillua.comment'] = '#'
48
49 return lex