e58e7cc20c3f398b65530e37fd76f17c12e781fa
[tool/hledger.git] / vim / syntax / hledger.vim
1 " Language: hledger
2 " Maintainer: Julien Moutinho <julm+vim@autogeree.net>
3 " URL: http://autogeree.net/~julm/src/vim/syntax/hledger.vim
4 " Last Change: Mon, 21 Jul 2014 00:00:00 +0200 - initial version
5 " Usage: autocmd BufNewFile,BufRead *.hledger,*.journal,*.ledger setfiletype hledger
6
7 if exists("b:current_syntax")
8 finish
9 endif
10
11
12 syn clear
13 syn sync fromstart
14 syn sync linebreaks=1
15
16 syn match hledgerComment ";.*"
17 syn match hledgerNumberOdd /[0-9][0-9]*/ contained
18 syn match hledgerNumber /[0-9][0-9]*/ contained
19 syn match hledgerAccountSeparatorOdd ":" contained
20 syn match hledgerAccountSeparator ":" contained
21
22 syn region hledgerInclude start=/^!include/ end=/^/
23 syn region hledgerDirective start=/^[A-Z]/ end=/^/ contains=hledgerComment
24
25 syn region hledgerTransaction start=/^\d[^ ]\+ / end=/^\s*$/
26 syn match hledgerTransactionHead "^[0-9/]\+\(=[0-9/]\+\)\?\(\s\+[!*]\)\?" contained containedin=hledgerTransaction
27 syn match hledgerTransactionDate "[0-9/]\+" contained containedin=hledgerTransactionHead
28 syn match hledgerTransactionComment ";.*" contained containedin=hledgerTransaction,hledgerPosting,hledgerPostingOdd
29
30 syn region hledgerPostingOdd start=/^\s\+[^; ]/ end=/^/ contained containedin=hledgerTransaction nextgroup=hledgerPosting
31 syn region hledgerPosting start=/^\s\+[^; ]/ end=/^/ contained containedin=hledgerTransaction nextgroup=hledgerPostingOdd
32 syn match hledgerPostingAccountOdd "^\s\+[^; ][^; ]*" contained containedin=hledgerPostingOdd nextgroup=hledgerPostingAmountOdd contains=hledgerNumberOdd,hledgerAccountSeparatorOdd
33 syn match hledgerPostingAccount "^\s\+[^; ][^; ]*" contained containedin=hledgerPosting nextgroup=hledgerPostingAmount contains=hledgerNumber,hledgerAccountSeparator
34 syn match hledgerPostingAmountOdd " *\([^;]*\|$\)" contained containedin=hledgerPostingOdd contains=hledgerNumberOdd
35 syn match hledgerPostingAmount " *\([^;]*\|$\)" contained containedin=hledgerPosting contains=hledgerNumber
36
37 syn match hledgerTag /[^:, ]\+:[^,]*/ contained containedin=hledgerTransactionComment nextgroup=hledgerTagValue
38 syn match hledgerTagValue /:[^,]*/ms=s+1 contained containedin=hledgerTag
39
40 if version >= 508 || !exists("did_hledger_syntax_inits")
41 hi hledgerComment term=bold cterm=bold ctermfg=6 ctermbg=0 gui=bold guifg=#4169E1
42 hi hledgerInclude term=bold cterm=bold gui=bold
43 hi hledgerDirective term=bold cterm=bold gui=bold
44 hi hledgerAccountSeparatorOdd term=bold cterm=bold ctermfg=3 ctermbg=0 gui=bold guifg=black guibg=gray90
45 hi hledgerAccountSeparator term=bold cterm=bold ctermfg=3 ctermbg=0 gui=bold guifg=black guibg=lightgreen
46 hi hledgerNumberOdd term=bold cterm=bold ctermfg=4 ctermbg=0 gui=bold guifg=blue guibg=gray90
47 hi hledgerNumber term=bold cterm=bold ctermfg=4 ctermbg=0 gui=bold guifg=blue guibg=lightgreen
48 hi hledgerPostingOdd cterm=bold ctermbg=0 guibg=gray90
49 hi hledgerPosting cterm=bold ctermbg=0 guibg=lightgreen
50 hi hledgerPostingAccountOdd term=underline cterm=bold ctermfg=0 ctermbg=0 guifg=gray30 guibg=gray90
51 hi hledgerPostingAccount term=underline cterm=bold ctermfg=0 ctermbg=0 guifg=gray30 guibg=lightgreen
52 hi hledgerPostingAmountOdd cterm=bold ctermfg=3 ctermbg=0 gui=bold guibg=gray90
53 hi hledgerPostingAmount cterm=bold ctermfg=3 ctermbg=0 gui=bold guibg=lightgreen
54 hi hledgerTag term=bold cterm=bold ctermfg=3 ctermbg=none gui=bold guifg=orange
55 hi hledgerTagValue term=bold cterm=bold ctermfg=1 ctermbg=none gui=NONE guifg=red
56 hi hledgerTransaction cterm=bold ctermbg=0 gui=bold
57 hi hledgerTransactionComment term=bold cterm=bold ctermfg=6 ctermbg=0 gui=bold guifg=#4169E1
58 hi hledgerTransactionDate cterm=bold ctermfg=5 ctermbg=none gui=bold guibg=lightgoldenrod
59 hi hledgerTransactionHead term=bold cterm=bold ctermfg=3 ctermbg=0 gui=bold guifg=black guibg=lightgreen
60 endif
61
62 let b:current_syntax = "hledger"