1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
-- Copyright (c) 2016-2022 Larry Hynes. See LICENSE.
-- Taskpaper LPeg lexer
local lexer = require('lexer')
local token = lexer.token
local P, S = lpeg.P, lpeg.S
local lex = lexer.new('taskpaper', {lex_by_line = true})
local delimiter = P(' ') + P('\t')
-- 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
|