vis

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

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

props.lua

(953B)


      1 -- Copyright 2006-2025 Mitchell. See LICENSE.
      2 -- Props LPeg lexer.
      3 
      4 local lexer = lexer
      5 local P, S = lpeg.P, lpeg.S
      6 
      7 local lex = lexer.new(..., {lex_by_line = true})
      8 
      9 -- Identifiers.
     10 lex:add_rule('identifier',
     11 	lex:tag(lexer.IDENTIFIER, (lexer.alpha + S('.-_')) * (lexer.alnum + S('.-_')^0)))
     12 
     13 -- Colors.
     14 local xdigit = lexer.xdigit
     15 lex:add_rule('color',
     16 	lex:tag(lexer.NUMBER, '#' * xdigit * xdigit * xdigit * xdigit * xdigit * xdigit))
     17 
     18 -- Comments.
     19 lex:add_rule('comment', lex:tag(lexer.COMMENT, lexer.to_eol('#')))
     20 
     21 -- Equals.
     22 lex:add_rule('equals', lex:tag(lexer.OPERATOR, '='))
     23 
     24 -- Strings.
     25 local sq_str = lexer.range("'")
     26 local dq_str = lexer.range('"')
     27 lex:add_rule('string', lex:tag(lexer.STRING, sq_str + dq_str))
     28 
     29 -- Variables.
     30 lex:add_rule('variable',
     31 	lex:tag(lexer.OPERATOR, '$(') * lex:tag(lexer.VARIABLE, (lexer.nonnewline - lexer.space - ')')^0) *
     32 		lex:tag(lexer.OPERATOR, ')'))
     33 
     34 lexer.property['scintillua.comment'] = '#'
     35 
     36 return lex