summaryrefslogtreecommitdiff
path: root/contrib/ledger.vim
diff options
context:
space:
mode:
authorJohann Klähn <kljohann@gmail.com>2009-06-15 23:37:57 +0200
committerJohann Klähn <kljohann@gmail.com>2009-06-15 23:37:57 +0200
commitb96df34d75e9c0afde5b1706c00a6c8a58b2fff4 (patch)
tree1e21cb15e0ccd3ace0961d748d192d1ffc096b60 /contrib/ledger.vim
parent7c67866b220514cf4771509521c297266bc7aa2c (diff)
downloadfork-ledger-b96df34d75e9c0afde5b1706c00a6c8a58b2fff4.tar.gz
fork-ledger-b96df34d75e9c0afde5b1706c00a6c8a58b2fff4.tar.bz2
fork-ledger-b96df34d75e9c0afde5b1706c00a6c8a58b2fff4.zip
ledger.vim: split into multiple files
for better extendability
Diffstat (limited to 'contrib/ledger.vim')
-rw-r--r--contrib/ledger.vim124
1 files changed, 0 insertions, 124 deletions
diff --git a/contrib/ledger.vim b/contrib/ledger.vim
deleted file mode 100644
index 7ac1581c..00000000
--- a/contrib/ledger.vim
+++ /dev/null
@@ -1,124 +0,0 @@
-" 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
-
-" 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
-" of the screen.
-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]\+\)'.
- \ '\%([,.][0-9]\+\)*'.
- \ '\|'.
- \ '[,.][0-9]\+'.
- \ '\)'.
- \ '\s*\%([[:alpha:]¢$€£]\+\s*\)\?'.
- \ '\%(\s*;.*\)\?$'
-
-" folding: how to represent a transaction in one line.
-function! LedgerFoldText()
- " find amount
- let amount = ""
- let lnum = v:foldstart
- while lnum <= v:foldend
- let line = getline(lnum)
-
- " Skip metadata/leading comment
- if line !~ '^\s\+;'
- " No comment, look for amount...
- let groups = matchlist(line, s:rx_amount)
- echomsg string(groups)
- if ! empty(groups)
- echomsg amount
- let amount = groups[1]
- break
- endif
- endif
- let lnum += 1
- endwhile
-
- let fmt = '%s %s '
- " strip whitespace at beginning and end of line
- let foldtext = substitute(getline(v:foldstart),
- \ '\(^\s\+\|\s\+$\)', '', 'g')
-
- " number of columns foldtext can use
- let columns = s:get_columns(0)
- if g:ledger_maxwidth
- let columns = min([columns, g:ledger_maxwidth])
- endif
- let columns -= s:multibyte_strlen(printf(fmt, '', amount))
-
- " add spaces so the text is always long enough when we strip it
- " to a certain width (fake table)
- let foldtext .= repeat(' ', s:get_columns(0))
- " we don't use slices[:5], because that messes up multibyte characters
- let foldtext = substitute(foldtext, '.\{'.columns.'}\zs.*$', '', '')
-
- return printf(fmt, foldtext, amount)
-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"