diff options
Diffstat (limited to 'lua/lexers/diff.lua')
| -rw-r--r-- | lua/lexers/diff.lua | 51 |
1 files changed, 18 insertions, 33 deletions
diff --git a/lua/lexers/diff.lua b/lua/lexers/diff.lua index cc7ab78..4c87dc2 100644 --- a/lua/lexers/diff.lua +++ b/lua/lexers/diff.lua @@ -1,44 +1,29 @@ --- Copyright 2006-2017 Mitchell mitchell.att.foicica.com. See LICENSE. +-- Copyright 2006-2022 Mitchell. See LICENSE. -- Diff LPeg lexer. -local l = require('lexer') -local token, word_match = l.token, l.word_match -local P, R, S = lpeg.P, lpeg.R, lpeg.S +local lexer = require('lexer') +local token, word_match = lexer.token, lexer.word_match +local P, S = lpeg.P, lpeg.S -local M = {_NAME = 'diff'} +local lex = lexer.new('diff', {lex_by_line = true}) -- Text, separators, and file headers. -local index = token(l.COMMENT, 'Index: ' * l.any^0 * P(-1)) -local separator = token(l.COMMENT, ('---' + P('*')^4 + P('=')^1) * l.space^0 * - -1) -local header = token('header', (P('*** ') + '--- ' + '+++ ') * l.any^1) +lex:add_rule('index', token(lexer.COMMENT, 'Index: ' * lexer.any^0 * -1)) +lex:add_rule('separator', token(lexer.COMMENT, ('---' + P('*')^4 + P('=')^1) * lexer.space^0 * -1)) +lex:add_rule('header', token('header', (P('*** ') + '--- ' + '+++ ') * lexer.any^1)) +lex:add_style('header', lexer.styles.comment) -- Location. -local location = token(l.NUMBER, ('@@' + l.digit^1 + '****') * l.any^1) +lex:add_rule('location', token(lexer.NUMBER, ('@@' + lexer.dec_num + '****') * lexer.any^1)) -- Additions, deletions, and changes. -local addition = token('addition', S('>+') * l.any^0) -local deletion = token('deletion', S('<-') * l.any^0) -local change = token('change', '! ' * l.any^0) +lex:add_rule('addition', token('addition', S('>+') * lexer.any^0)) +lex:add_style('addition', {fore = lexer.colors.green}) +lex:add_rule('deletion', token('deletion', S('<-') * lexer.any^0)) +lex:add_style('deletion', {fore = lexer.colors.red}) +lex:add_rule('change', token('change', '!' * lexer.any^0)) +lex:add_style('change', {fore = lexer.colors.yellow}) -M._rules = { - {'index', index}, - {'separator', separator}, - {'header', header}, - {'location', location}, - {'addition', addition}, - {'deletion', deletion}, - {'change', change}, - {'any_line', token('default', l.any^1)}, -} +lex:add_rule('any_line', token(lexer.DEFAULT, lexer.any^1)) -M._tokenstyles = { - header = l.STYLE_COMMENT, - addition = 'fore:green', - deletion = 'fore:red', - change = 'fore:yellow', -} - -M._LEXBYLINE = true - -return M +return lex |
