vim. change syntax file to allow comments at eol

This commit is contained in:
Johann Klähn 2010-09-13 12:55:36 +02:00
parent 86153f670d
commit 0f81c67c29

View file

@ -28,43 +28,36 @@ syntax clear
" DATE[=EDATE] [*|!] [(CODE)] DESC <-- first line of transaction " DATE[=EDATE] [*|!] [(CODE)] DESC <-- first line of transaction
" ACCOUNT AMOUNT [; NOTE] <-- posting " ACCOUNT AMOUNT [; NOTE] <-- posting
" region: a transaction containing postings syn region ledgerTransaction start=/^[[:digit:]~]/ skip=/^\s/ end=/^/
syn region transNorm start=/^[[:digit:]~]/ skip=/^\s/ end=/^/ \ fold keepend transparent contains=ledgerTransactionDate,ledgerMetadata,ledgerPosting
\ fold keepend transparent contains=transDate,Metadata,Posting syn match ledgerTransactionDate /^\d\S\+/ contained
syn match transDate /^\d\S\+/ contained syn match ledgerPosting /^\s\+[^[:blank:];][^;]*\ze\%($\|;\)/
syn match Metadata /^\s\+;.*/ contained contains=MetadataTag \ contained transparent contains=ledgerAccount
syn match Comment /^;.*$/
" every space in an account name shall be surrounded by two non-spaces " 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 " 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 ledgerAccount /^\s\+\zs\%(\S \S\|\S\)\+\ze\%( \|\t\|\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 syn match ledgerComment /^;.*$/
\ matchgroup=TagPush start=/^tag\>/ syn region ledgerMetadata start=/;/ skip=/^\s\+;/ end=/^/
\ matchgroup=TagPop end=/^pop\>/ \ keepend contained contains=ledgerTag
\ contains=TagHead,TagStack,transNorm syn match ledgerTag /:[^:]\+:/hs=s+1,he=e-1 contained
syn match TagHead /\%(^tag\s\+\)\@<=\S.*$/ contained contains=tagKey transparent syn match ledgerTag /\%(\%(;\|^tag\)[^:]\+\)\@<=[^:]\+\ze:[^:]\+$/ contained
syn match TagKey /:[^:]\+:/hs=s+1,he=e-1 contained
syn match TagKey /\%(^tag\s\+\)\@<=[^:]\+\ze:[^:]\+$/ contained
highlight default link transDate Constant syn region ledgerTagStack
highlight default link Metadata Tag \ matchgroup=ledgerTagPush start=/^tag\>/
highlight default link MetadataTag Type \ matchgroup=ledgerTagPop end=/^pop\>/
highlight default link TagPop Tag \ contains=ledgerTagHead,ledgerTagStack,ledgerTransaction,ledgerComment
highlight default link TagPush Tag syn match ledgerTagHead /\%(^tag\s\+\)\@<=\S.*$/ contained contains=ledgerTag transparent
highlight default link TagKey Type
highlight default link Amount Number highlight default link ledgerTransactionDate Constant
highlight default link Account Identifier highlight default link ledgerMetadata Tag
highlight default link ledgerTag Type
highlight default link ledgerTagPop Tag
highlight default link ledgerTagPush Tag
highlight default link ledgerAccount Identifier
" syncinc is easy: search for the first transaction. " syncinc is easy: search for the first transaction.
syn sync clear syn sync clear
syn sync match ledgerSync grouphere transNorm "^[[:digit:]~]" syn sync match ledgerSync grouphere ledgerTransaction "^[[:digit:]~]"
let b:current_syntax = "ledger" let b:current_syntax = "ledger"