Skip to content

Commit

Permalink
fix: modernize ini lexer
Browse files Browse the repository at this point in the history
References: orbitalquark#76
  • Loading branch information
mcepl committed Jan 28, 2025
1 parent 70d6a09 commit 1a291e1
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions lexers/ini.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,33 @@
-- Ini LPeg lexer.

local lexer = lexer
local token, word_match = lexer.token, lexer.word_match
local P, S = lpeg.P, lpeg.S

local lex = lexer.new(...)

-- Keywords.
lex:add_rule('keyword', token(lexer.KEYWORD, word_match('true false on off yes no')))
lex:add_rule('keyword', lex:tag(lexer.KEYWORD, lex:word_match(lexer.KEYWORD)))
lex:set_word_list(lexer.KEYWORD, {'true', 'false', 'on', 'off', 'yes', 'no'})

-- Identifiers.
lex:add_rule('identifier', token(lexer.IDENTIFIER, (lexer.alpha + '_') * (lexer.alnum + S('_.'))^0))
lex:add_rule('identifier', lex:tag(lexer.IDENTIFIER, (lexer.alpha + '_') * (lexer.alnum + S('_.'))^0))

-- Strings.
local sq_str = lexer.range("'")
local dq_str = lexer.range('"')
lex:add_rule('string', token(lexer.STRING, sq_str + dq_str))
local sq_str = local sq_str = P('L')^-1 * lexer.range("'")
local dq_str = local sq_str = P('L')^-1 * lexer.range('"')
lex:add_rule('string', lex:tag(lexer.STRING, sq_str + dq_str))

-- Labels.
lex:add_rule('label', token(lexer.LABEL, lexer.range('[', ']', true)))
lex:add_rule('label', lex:tag(lexer.LABEL, lexer.range('[', ']', true)))

-- Comments.
lex:add_rule('comment', token(lexer.COMMENT, lexer.to_eol(lexer.starts_line(S(';#')))))
lex:add_rule('comment', lex:tag(lexer.COMMENT, lexer.to_eol(lexer.starts_line(S(';#')))))

-- Numbers.
local integer = S('+-')^-1 * (lexer.hex_num + lexer.oct_num_('_') + lexer.dec_num_('_'))
lex:add_rule('number', token(lexer.NUMBER, lexer.float + integer))
lex:add_rule('number', lex:tag(lexer.NUMBER, lexer.float + lexer.integer))

-- Operators.
lex:add_rule('operator', token(lexer.OPERATOR, '='))
lex:add_rule('operator', lex:tag(lexer.OPERATOR, S('=')))

lexer.property['scintillua.comment'] = '#'

Expand Down

0 comments on commit 1a291e1

Please sign in to comment.