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