vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

taskpaper.lua

(898B)


      1 -- Copyright (c) 2016-2025 Larry Hynes. See LICENSE.
      2 -- Taskpaper 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 -- Notes.
     10 local delimiter = lpeg.B('    ') + lpeg.B('\t')
     11 lex:add_rule('note', delimiter * lex:tag('note', lexer.to_eol(lexer.alnum)))
     12 
     13 -- Tasks.
     14 lex:add_rule('task', delimiter * lex:tag(lexer.LIST, '-'))
     15 
     16 -- Projects.
     17 lex:add_rule('project', lex:tag(lexer.HEADING,
     18 	lexer.range(lexer.starts_line(lexer.alnum), ':') * lexer.newline))
     19 
     20 -- Tags.
     21 lex:add_rule('extended_tag', lex:tag(lexer.TAG .. '.extended', '@' * lexer.word * '(' *
     22 	(lexer.word + lexer.digit + '-')^1 * ')'))
     23 lex:add_rule('day_tag', lex:tag(lexer.TAG .. '.day', (P('@today') + '@tomorrow')))
     24 lex:add_rule('overdue_tag', lex:tag(lexer.TAG .. '.overdue', '@overdue'))
     25 lex:add_rule('plain_tag', lex:tag(lexer.TAG .. '.plain', '@' * lexer.word))
     26 
     27 return lex