diff options
Diffstat (limited to 'lua/lexers/taskpaper.lua')
| -rw-r--r-- | lua/lexers/taskpaper.lua | 86 |
1 files changed, 33 insertions, 53 deletions
diff --git a/lua/lexers/taskpaper.lua b/lua/lexers/taskpaper.lua index 3fb2632..4d77285 100644 --- a/lua/lexers/taskpaper.lua +++ b/lua/lexers/taskpaper.lua @@ -1,59 +1,39 @@ --- Copyright (c) 2016-2017 Larry Hynes. See LICENSE. +-- Copyright (c) 2016-2022 Larry Hynes. See LICENSE. -- Taskpaper LPeg lexer -local l = require('lexer') -local token = l.token -local P, R, S = lpeg.P, lpeg.R, lpeg.S +local lexer = require('lexer') +local token = lexer.token +local P, S = lpeg.P, lpeg.S -local M = {_NAME = 'taskpaper'} +local lex = lexer.new('taskpaper', {lex_by_line = true}) local delimiter = P(' ') + P('\t') --- Whitespace -local ws = token(l.WHITESPACE, l.space^1) - --- Tags -local day_tag = token('day_tag', (P('@today') + P('@tomorrow'))) - -local overdue_tag = token('overdue_tag', P('@overdue')) - -local plain_tag = token('plain_tag', P('@') * l.word) - -local extended_tag = token('extended_tag', - P('@') * l.word * P('(') * - (l.word + R('09') + P('-'))^1 * P(')')) - --- Projects -local project = token('project', - l.nested_pair(l.starts_line(l.alnum), ':') * l.newline) - --- Notes -local note = token('note', delimiter^1 * l.alnum * l.nonnewline^0) - --- Tasks -local task = token('task', delimiter^1 * P('-') + l.newline) - -M._rules = { - {'note', note}, - {'task', task}, - {'project', project}, - {'extended_tag', extended_tag}, - {'day_tag', day_tag}, - {'overdue_tag', overdue_tag}, - {'plain_tag', plain_tag}, - {'whitespace', ws}, -} - -M._tokenstyles = { - note = l.STYLE_CONSTANT, - task = l.STYLE_FUNCTION, - project = l.STYLE_TAG, - extended_tag = l.STYLE_COMMENT, - day_tag = l.STYLE_CLASS, - overdue_tag = l.STYLE_PREPROCESSOR, - plain_tag = l.STYLE_COMMENT, -} - -M._LEXBYLINE = true - -return M +-- Notes. +lex:add_rule('note', token('note', delimiter^1 * lexer.to_eol(lexer.alnum))) +lex:add_style('note', lexer.styles.constant) + +-- Tasks. +lex:add_rule('task', token('task', delimiter^1 * '-' + lexer.newline)) +lex:add_style('task', lexer.styles['function']) + +-- Whitespace. +lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1)) + +-- Projects. +lex:add_rule('project', + token('project', lexer.range(lexer.starts_line(lexer.alnum), ':') * lexer.newline)) +lex:add_style('project', lexer.styles.label) + +-- Tags. +lex:add_rule('extended_tag', token('extended_tag', '@' * lexer.word * '(' * + (lexer.word + lexer.digit + '-')^1 * ')')) +lex:add_style('extended_tag', lexer.styles.comment) +lex:add_rule('day_tag', token('day_tag', (P('@today') + '@tomorrow'))) +lex:add_style('day_tag', lexer.styles.class) +lex:add_rule('overdue_tag', token('overdue_tag', '@overdue')) +lex:add_style('overdue_tag', lexer.styles.preprocessor) +lex:add_rule('plain_tag', token('plain_tag', '@' * lexer.word)) +lex:add_style('plain_tag', lexer.styles.comment) + +return lex |
