vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

gtkrc.lua

(1724B)


      1 -- Copyright 2006-2025 Mitchell. See LICENSE.
      2 -- Gtkrc LPeg lexer.
      3 
      4 local lexer = lexer
      5 local word_match = lexer.word_match
      6 local P, S = lpeg.P, lpeg.S
      7 
      8 local lex = lexer.new(...)
      9 
     10 -- Keywords.
     11 lex:add_rule('keyword', lex:tag(lexer.KEYWORD, word_match(
     12 	'binding class include module_path pixmap_path im_module_file style widget widget_class')))
     13 
     14 -- Variables.
     15 lex:add_rule('variable', lex:tag(lexer.VARIABLE_BUILTIN, lex:word_match(lexer.VARIABLE_BUILTIN)))
     16 
     17 -- States.
     18 lex:add_rule('state', lex:tag(lexer.CONSTANT_BUILTIN, lex:word_match(lexer.CONSTANT_BUILTIN)))
     19 
     20 -- Functions.
     21 lex:add_rule('function', lex:tag(lexer.FUNCTION_BUILTIN, lex:word_match(lexer.FUNCTION_BUILTIN)))
     22 
     23 -- Identifiers.
     24 lex:add_rule('identifier', lex:tag(lexer.IDENTIFIER, lexer.alpha * (lexer.alnum + S('_-'))^0))
     25 
     26 -- Strings.
     27 local sq_str = lexer.range("'", true)
     28 local dq_str = lexer.range('"', true)
     29 lex:add_rule('string', lex:tag(lexer.STRING, sq_str + dq_str))
     30 
     31 -- Comments.
     32 lex:add_rule('comment', lex:tag(lexer.COMMENT, lexer.to_eol('#')))
     33 
     34 -- Numbers.
     35 lex:add_rule('number', lex:tag(lexer.NUMBER, lexer.digit^1 * ('.' * lexer.digit^1)^-1))
     36 
     37 -- Operators.
     38 lex:add_rule('operator', lex:tag(lexer.OPERATOR, S(':=,*()[]{}')))
     39 
     40 -- Fold points.
     41 lex:add_fold_point(lexer.OPERATOR, '{', '}')
     42 
     43 -- Word lists.
     44 lex:set_word_list(lexer.VARIABLE_BUILTIN, {
     45 	'bg', 'fg', 'base', 'text', 'xthickness', 'ythickness', 'bg_pixmap', 'font', 'fontset',
     46 	'font_name', 'stock', 'color', 'engine'
     47 })
     48 
     49 lex:set_word_list(lexer.CONSTANT_BUILTIN, {
     50 	'ACTIVE', 'SELECTED', 'NORMAL', 'PRELIGHT', 'INSENSITIVE', 'TRUE', 'FALSE'
     51 })
     52 
     53 lex:set_word_list(lexer.FUNCTION_BUILTIN, {'mix', 'shade', 'lighter', 'darker'})
     54 
     55 lexer.property['scintillua.comment'] = '#'
     56 
     57 return lex