aboutsummaryrefslogtreecommitdiff
path: root/lexers/taskpaper.lua
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-10-05 10:25:33 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-10-05 10:48:29 +0200
commit6cf931355b264618879b5bb3ada36067bf246882 (patch)
treed9de896398a6948d6deb3422f6925c5e2d4ee787 /lexers/taskpaper.lua
parentf44d8a006edb84e55108df472d532922db95e614 (diff)
downloadvis-6cf931355b264618879b5bb3ada36067bf246882.tar.gz
vis-6cf931355b264618879b5bb3ada36067bf246882.tar.xz
lexers: sync language lexers with scintillua rev 568 id 55b15760cd31
Adds a taskpaper lexer.
Diffstat (limited to 'lexers/taskpaper.lua')
-rw-r--r--lexers/taskpaper.lua59
1 files changed, 59 insertions, 0 deletions
diff --git a/lexers/taskpaper.lua b/lexers/taskpaper.lua
new file mode 100644
index 0000000..5652f3a
--- /dev/null
+++ b/lexers/taskpaper.lua
@@ -0,0 +1,59 @@
+-- Copyright (c) 2016 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 M = {_NAME = 'taskpaper'}
+
+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