1" Quit when a syntax file was already loaded.
2if exists("b:current_syntax")
3 finish
4endif
5
6" everywhere
7syntax match klogTag "#\S\+" contained
8
9" Record Header
10syntax region klogHeader start="^\d\{4}-\d\{2}-\d\{2}" end="$" contains=klogRecord,klogShould nextgroup=klogRecordSummary,klogEntry skipnl
11syntax region klogHeader start="^\d\{4}\/\d\{2}\/\d\{2}" end="$" contains=klogRecord,klogShould nextgroup=klogRecordSummary,klogEntry skipnl
12syntax match klogRecord "^\d\{4}-\d\{2}-\d\{2}\ze" contained nextgroup=klogShould skipwhite
13syntax match klogRecord "^\d\{4}\/\d\{2}\/\d\{2}\ze" contained nextgroup=klogShould skipwhite
14syntax match klogShould " (-*\(\d\+h\d\+m\|\d\+h\|\d\+m\)!)" contained
15syntax region klogRecordSummary start="^\S" end="$" contained contains=klogTag nextgroup=klogEntry,klogRecordSummary skipnl
16
17" Entries
18syntax match klogEntrySummary "^\t\{2}\|\ \{4,8}.*" contained keepend contains=klogTag nextgroup=klogEntrySummary,klogEntry skipnl
19syntax region klogEntry start="^\t\|\ \{2,4}-\(\d\+h\d\+m\|\d\+h\|\d\+m\)" end="$" contained keepend contains=klogTag,klogNegDuration nextgroup=klogEntrySummary,klogEntry skipnl
20syntax match klogNegDuration "\(^\t\|\ \{2,4}\)\@<=-\(\d\+h\d\+m\|\d\+h\|\d\+m\)" contained
21syntax region klogEntry start="^\t\|\ \{2,4}\(\d\+h\d\+m\|\d\+h\|\d\+m\)" end="$" contained keepend contains=klogTag,klogPosDuration nextgroup=klogEntrySummary,klogEntry skipnl
22syntax match klogPosDuration "\(^\t\|\ \{2,4}\)\@<=\(\d\+h\d\+m\|\d\+h\|\d\+m\)" contained
23syntax region klogEntry start="^\t\|\ \{2,4}<\=\d\{1,2}:\d\{2}\(\(am\)\|\(pm\)\)\=>\= - \(?\+\|\(\d\{1,2}:\d\{2}\(\(am\)\|\(pm\)\)\=>\=\)\)" end="$" contained keepend contains=klogTag,klogTimespan nextgroup=klogEntrySummary,klogEntry skipnl
24syntax match klogTimespan "\(^\t\|\ \{2,4}\)\@<=<\=\d\{1,2}:\d\{2}\(\(am\)\|\(pm\)\)\=>\= - \(?\+\|\(\d\{1,2}:\d\{2}\(\(am\)\|\(pm\)\)\=>\=\)\)" contained
25
26" Highlight
27highlight default link klogTag Identifier
28highlight default link klogRecord Underlined
29highlight default link klogShould Statement
30highlight default link klogRecordSummary Comment
31highlight default link klogEntrySummary Comment
32highlight default link klogEntry Comment
33highlight default link klogPosDuration Type
34highlight default link klogNegDuration String
35highlight default link klogTimespan Keyword
36" String
37
38let b:current_syntax = 'klog'
39syntax sync minlines=50