diff options
-rw-r--r-- | contrib/vim/ftplugin/ledger.vim (renamed from contrib/ledger.vim) | 95 | ||||
-rw-r--r-- | contrib/vim/syntax/ledger.vim | 49 | ||||
-rw-r--r-- | src/filters.cc | 9 | ||||
-rw-r--r-- | src/filters.h | 8 | ||||
-rw-r--r-- | test/regress/D943AE0F.test | 2 |
5 files changed, 96 insertions, 67 deletions
diff --git a/contrib/ledger.vim b/contrib/vim/ftplugin/ledger.vim index 7ac1581c..cef0d81e 100644 --- a/contrib/ledger.vim +++ b/contrib/vim/ftplugin/ledger.vim @@ -1,27 +1,26 @@ -" Vim syntax file +" Vimwiki filetype plugin 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") +if exists("b:did_ftplugin") finish endif +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setlocal ". + \ "foldmethod< foldtext< ". + \ "include< comments< " + +" don't fill fold lines --> cleaner look +setl fillchars="fold: " +setl foldtext=LedgerFoldText() +setl foldmethod=syntax +setl include=^!include +setl comments=b:; + " You can set a maximal number of columns the fold text (excluding amount) " will use by overriding g:ledger_maxwidth in your .vimrc. " When maxwidth is zero, the amount will be displayed at the far right side @@ -29,38 +28,6 @@ endif if !exists('g:ledger_maxwidth') let g:ledger_maxwidth = 0 endif - -" for debugging -syntax clear - -" region: a transaction containing postings -syn region transNorm start=/^\d/ skip=/^\s/ end=/^/ - \ fold keepend transparent contains=transDate, Metadata -syn match transDate /^\d\S\+/ contained -syn match Metadata /^\s\+;.*/ contained -syn match Comment /^;.*$/ - -highlight default link Comment SpecialKey -highlight default link Metadata SpecialKey -highlight default link transDate Question - -function! s:multibyte_strlen(text) "{{{ - return strlen(substitute(a:text, ".", "x", "g")) -endf "}}} - -function s:get_columns(win) "{{{ - " As long as vim doesn't provide a command natively, - " we have to compute the available columns. - " see :help todo.txt -> /Add argument to winwidth()/ - " FIXME: Although this will propably never be used with debug mode enabled - " this should take the signs column into account (:help sign.txt) - let columns = (winwidth(a:win) == 0 ? 80 : winwidth(a:win)) - &foldcolumn - if &number - " line('w$') is the line number of the last line - let columns -= max([len(line('w$'))+1, &numberwidth]) - endif - return columns -endf "}}} let s:rx_amount = '\('. \ '\%([0-9]\+\)'. @@ -71,8 +38,7 @@ let s:rx_amount = '\('. \ '\s*\%([[:alpha:]¢$€£]\+\s*\)\?'. \ '\%(\s*;.*\)\?$' -" folding: how to represent a transaction in one line. -function! LedgerFoldText() +function! LedgerFoldText() "{{{1 " find amount let amount = "" let lnum = v:foldstart @@ -112,13 +78,24 @@ function! LedgerFoldText() let foldtext = substitute(foldtext, '.\{'.columns.'}\zs.*$', '', '') return printf(fmt, foldtext, amount) -endfunction +endfunction "}}} + +" Helper functions {{{1 +function! s:multibyte_strlen(text) "{{{2 + return strlen(substitute(a:text, ".", "x", "g")) +endfunction "}}} + +function! s:get_columns(win) "{{{2 + " As long as vim doesn't provide a command natively, + " we have to compute the available columns. + " see :help todo.txt -> /Add argument to winwidth()/ + " FIXME: Although this will propably never be used with debug mode enabled + " this should take the signs column into account (:help sign.txt) + let columns = (winwidth(a:win) == 0 ? 80 : winwidth(a:win)) - &foldcolumn + if &number + " line('w$') is the line number of the last line + let columns -= max([len(line('w$'))+1, &numberwidth]) + endif + return columns +endfunction "}}} -set foldtext=LedgerFoldText() -set foldmethod=syntax - -" syncinc is easy: search for the first transaction. -syn sync clear -syn sync match ledgerSync grouphere transNorm "^\d" - -let b:current_syntax = "ledger" diff --git a/contrib/vim/syntax/ledger.vim b/contrib/vim/syntax/ledger.vim new file mode 100644 index 00000000..1c1968e4 --- /dev/null +++ b/contrib/vim/syntax/ledger.vim @@ -0,0 +1,49 @@ +" 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 + +" 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 +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 + + +highlight default link transDate Question +highlight default link Metadata PreProc +highlight default link Comment Comment +highlight default link Account Identifier + +" syncinc is easy: search for the first transaction. +syn sync clear +syn sync match ledgerSync grouphere transNorm "^\d" + +let b:current_syntax = "ledger" diff --git a/src/filters.cc b/src/filters.cc index bb2681c6..ab7d4b74 100644 --- a/src/filters.cc +++ b/src/filters.cc @@ -388,6 +388,15 @@ void related_posts::flush() item_handler<post_t>::flush(); } +void changed_value_posts::flush() +{ + if (last_post && last_post->date() <= report.terminus) { + output_revaluation(last_post, report.terminus); + last_post = NULL; + } + item_handler<post_t>::flush(); +} + void changed_value_posts::output_revaluation(post_t * post, const date_t& date) { if (is_valid(date)) diff --git a/src/filters.h b/src/filters.h index 14b97c23..050e3dcf 100644 --- a/src/filters.h +++ b/src/filters.h @@ -468,13 +468,7 @@ public: clear_xacts_posts(xact_temps); } - virtual void flush() { - if (last_post && last_post->date() <= CURRENT_DATE()) { - output_revaluation(last_post, CURRENT_DATE()); - last_post = NULL; - } - item_handler<post_t>::flush(); - } + virtual void flush(); void output_revaluation(post_t * post, const date_t& current); void output_rounding(post_t * post); diff --git a/test/regress/D943AE0F.test b/test/regress/D943AE0F.test index ccf53994..3e568db6 100644 --- a/test/regress/D943AE0F.test +++ b/test/regress/D943AE0F.test @@ -1,4 +1,4 @@ -reg -V +reg -V --end=2009/06/16 <<< 2008/04/15 * Paid expenses back from cie. Expenses:Cie-Reimbursements 2000 CAD @ 1.10 EUR |