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