70 lines
2.7 KiB
VimL
70 lines
2.7 KiB
VimL
" Vim syntax file
|
|
" filetype: ledger
|
|
" Version: 0.1.0
|
|
" by Johann Klähn; Use according to the terms of the GPL>=2.
|
|
" by Stefan Karrmann; Use according to the terms of the GPL>=2.
|
|
" by Wolfgang Oertl; Use according to the terms of the GPL>=2.
|
|
" Revision history
|
|
" 2009-06-12 J. Klähn: Use all available columns for foldtext
|
|
" 2009-03-25 J. Klähn: Allow Metadata
|
|
" in transactions and postings (Ledger 3.0)
|
|
" Also fixed alignment for multi-byte-characters
|
|
" 2009-01-28 S.Karrmann: minor fixes
|
|
" 2009-01-27 third version by S.Karrmann.
|
|
" better extraction of the amount of the posting
|
|
" decimal separator can be one of '.' and ','.
|
|
" 2005-02-05 first version (partly copied from ledger.vim 0.0.1)
|
|
" vim:ts=2:sw=2:sts=2:foldmethod=marker
|
|
|
|
if version < 600
|
|
syntax clear
|
|
elseif exists("b:current_sytax")
|
|
finish
|
|
endif
|
|
|
|
" for debugging
|
|
syntax clear
|
|
|
|
" DATE[=EDATE] [*|!] [(CODE)] DESC <-- first line of transaction
|
|
" ACCOUNT AMOUNT [; NOTE] <-- posting
|
|
|
|
" region: a transaction containing postings
|
|
syn region transNorm start=/^[[:digit:]~]/ skip=/^\s/ end=/^/
|
|
\ fold keepend transparent contains=transDate,Metadata,Posting
|
|
syn match transDate /^\d\S\+/ contained
|
|
syn match Metadata /^\s\+;.*/ contained contains=MetadataTag
|
|
syn match Comment /^;.*$/
|
|
" every space in an account name shall be surrounded by two non-spaces
|
|
" every account name ends with a tab, two spaces or the end of the line
|
|
syn match Account /^\s\+\zs\%(\S \S\|\S\)\+\ze\%([ ]\{2,}\|\t\s*\|\s*$\)/ contained
|
|
syn match Posting /^\s\+[^[:blank:];].*$/ contained transparent contains=Account,Amount
|
|
" FIXME: add other symbols?
|
|
let s:currency = '\([$€£¢]\|\w\+\)'
|
|
let s:figures = '\d\+\([.,]\d\+\)*'
|
|
let s:amount = '-\?\('.s:figures.'\s*'.s:currency.'\|'.s:currency.'\s*'.s:figures.'\)'
|
|
exe 'syn match Amount /'.s:amount.'/ contained'
|
|
syn match MetadataTag /:[^:]\+:/hs=s+1,he=e-1 contained
|
|
syn match MetadataTag /;\s*\zs[^:]\+\ze:[^:]\+$/ contained
|
|
|
|
syn region TagStack
|
|
\ matchgroup=TagPush start=/^tag\>/
|
|
\ matchgroup=TagPop end=/^pop\>/
|
|
\ contains=TagHead,TagStack,transNorm
|
|
syn match TagHead /\%(^tag\s\+\)\@<=\S.*$/ contained contains=tagKey transparent
|
|
syn match TagKey /:[^:]\+:/hs=s+1,he=e-1 contained
|
|
syn match TagKey /\%(^tag\s\+\)\@<=[^:]\+\ze:[^:]\+$/ contained
|
|
|
|
highlight default link transDate Constant
|
|
highlight default link Metadata Tag
|
|
highlight default link MetadataTag Type
|
|
highlight default link TagPop Tag
|
|
highlight default link TagPush Tag
|
|
highlight default link TagKey Type
|
|
highlight default link Amount Number
|
|
highlight default link Account Identifier
|
|
|
|
" syncinc is easy: search for the first transaction.
|
|
syn sync clear
|
|
syn sync match ledgerSync grouphere transNorm "^[[:digit:]~]"
|
|
|
|
let b:current_syntax = "ledger"
|