-
Notifications
You must be signed in to change notification settings - Fork 296
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
232 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ledger') == -1 | ||
|
||
" Vim Compiler File | ||
" Compiler: ledger | ||
" by Johann Klähn; Use according to the terms of the GPL>=2. | ||
" vim:ts=2:sw=2:sts=2:foldmethod=marker | ||
|
||
scriptencoding utf-8 | ||
|
||
if exists('current_compiler') || !exists('g:ledger_bin') | ||
finish | ||
endif | ||
|
||
let current_compiler = g:ledger_bin | ||
|
||
if exists(':CompilerSet') != 2 | ||
command -nargs=* CompilerSet setlocal <args> | ||
endif | ||
|
||
if !g:ledger_is_hledger | ||
" Capture Ledger errors (%-C ignores all lines between "While parsing..." and "Error:..."): | ||
CompilerSet errorformat=%EWhile\ parsing\ file\ \"%f\"\\,\ line\ %l:,%ZError:\ %m,%-C%.%# | ||
" Capture Ledger warnings: | ||
CompilerSet errorformat+=%tarning:\ \"%f\"\\,\ line\ %l:\ %m | ||
" Skip all other lines: | ||
CompilerSet errorformat+=%-G%.%# | ||
exe 'CompilerSet makeprg='.substitute(g:ledger_bin, ' ', '\\ ', 'g').'\ -f\ %\ '.substitute(g:ledger_extra_options, ' ', '\\ ', 'g').'\ source\ %' | ||
else | ||
exe 'CompilerSet makeprg=('.substitute(g:ledger_bin, ' ', '\\ ', 'g').'\ -f\ %\ print\ '.substitute(g:ledger_extra_options, ' ', '\\ ', 'g').'\ >\ /dev/null)' | ||
endif | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ledger') == -1 | ||
|
||
" Vim filetype indent file | ||
" filetype: ledger | ||
" by Johann Klähn; Use according to the terms of the GPL>=2. | ||
" vim:ts=2:sw=2:sts=2:foldmethod=marker | ||
|
||
scriptencoding utf-8 | ||
|
||
if exists('b:did_indent') | ||
finish | ||
endif | ||
let b:did_indent = 1 | ||
|
||
setl autoindent | ||
setl indentexpr=GetLedgerIndent() | ||
|
||
if exists('*GetLedgerIndent') | ||
finish | ||
endif | ||
|
||
function GetLedgerIndent(...) | ||
" You can pass in a line number when calling this function manually. | ||
let lnum = a:0 > 0 ? a:1 : v:lnum | ||
" If this line is empty look at (the indentation of) the last line. | ||
" Note that inside of a transaction no blank lines are allowed. | ||
let line = getline(lnum) | ||
let prev = getline(lnum - 1) | ||
|
||
if line =~# '^\s\+\S' | ||
" Lines that already are indented (→postings, sub-directives) keep their indentation. | ||
return &shiftwidth | ||
elseif line =~# '^\s*$' | ||
" Current line is empty, try to guess its type based on the previous line. | ||
if prev =~# '^\([[:digit:]~=]\|\s\+\S\)' | ||
" This is very likely a posting or a sub-directive. | ||
" While lines following the start of a transaction are automatically | ||
" indented you will have to indent the first line following a | ||
" pre-declaration manually. This makes it easier to type long lists of | ||
" 'account' pre-declarations without sub-directives, for example. | ||
return &shiftwidth | ||
else | ||
return 0 | ||
endif | ||
else | ||
" Everything else is not indented: | ||
" start of transactions, pre-declarations, apply/end-lines | ||
return 0 | ||
endif | ||
endf | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'ledger') == -1 | ||
|
||
" Vim syntax file | ||
" filetype: ledger | ||
" 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. | ||
" vim:ts=2:sw=2:sts=2:foldmethod=marker | ||
|
||
scriptencoding utf-8 | ||
|
||
if exists('b:current_syntax') | ||
finish | ||
endif | ||
|
||
if !exists ('b:is_hledger') | ||
if exists('g:ledger_is_hledger') | ||
let b:is_hledger = 1 | ||
else | ||
let b:is_hledger = 0 | ||
endif | ||
endif | ||
|
||
" Force old regex engine (:help two-engines) | ||
let s:oe = '\%#=1' | ||
let s:lb1 = '\@1<=' | ||
|
||
let s:line_comment_chars = b:is_hledger ? ';*#' : ';|*#%' | ||
|
||
let s:fb = get(g:, 'ledger_fold_blanks', 0) | ||
let s:skip = s:fb > 0 ? '\|^\n' : '' | ||
if s:fb == 1 | ||
let s:skip .= '\n\@!' | ||
endif | ||
|
||
let s:ledgerAmount_contains = '' | ||
if get(g:, 'ledger_commodity_spell', 0) == 0 | ||
let s:ledgerAmount_contains .= '@NoSpell' | ||
endif | ||
|
||
" for debugging | ||
syntax clear | ||
|
||
" DATE[=EDATE] [*|!] [(CODE)] DESC <-- first line of transaction | ||
" ACCOUNT AMOUNT [; NOTE] <-- posting | ||
|
||
exe 'syn region ledgerTransaction start=/^[[:digit:]~=]/ '. | ||
\ 'skip=/^\s'. s:skip . '/ end=/^/ fold keepend transparent '. | ||
\ 'contains=ledgerTransactionDate,ledgerTransactionMetadata,ledgerPosting,ledgerTransactionExpression' | ||
syn match ledgerTransactionDate /^\d\S\+/ contained | ||
syn match ledgerTransactionExpression /^[=~]\s\+\zs.*/ contained | ||
syn match ledgerPosting /^\s\+[^[:blank:];].*/ | ||
\ contained transparent contains=ledgerAccount,ledgerAmount,ledgerValueExpression,ledgerPostingMetadata | ||
" 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 | ||
exe 'syn match ledgerAccount '. | ||
\ '/'.s:oe.'^\s\+\zs\%(\S'.s:lb1.' \S\|\S\)\+\ze\%( \|\t\|\s*$\)/ contained' | ||
exe 'syn match ledgerAmount '. | ||
\ '/'.s:oe.'\S'.s:lb1.'\%( \|\t\)\s*\zs\%([^();[:space:]]\|\s\+[^();[:space:]]\)\+/ contains='.s:ledgerAmount_contains.' contained' | ||
exe 'syn match ledgerValueExpression '. | ||
\ '/'.s:oe.'\S'.s:lb1.'\%( \|\t\)\s*\zs(\%([^;[:space:]]\|\s\+[^;[:space:]]\)\+)/ contains='.s:ledgerAmount_contains.' contained' | ||
|
||
syn region ledgerPreDeclaration start=/^\(account\|payee\|commodity\|tag\)/ skip=/^\s/ end=/^/ | ||
\ keepend transparent | ||
\ contains=ledgerPreDeclarationType,ledgerPreDeclarationName,ledgerPreDeclarationDirective | ||
syn match ledgerPreDeclarationType /^\(account\|payee\|commodity\|tag\)/ contained | ||
syn match ledgerPreDeclarationName /^\S\+\s\+\zs.*/ contained | ||
syn match ledgerPreDeclarationDirective /^\s\+\zs\S\+/ contained | ||
|
||
syn match ledgerDirective | ||
\ /^\%(alias\|assert\|bucket\|capture\|check\|define\|expr\|fixed\|include\|year\)\s/ | ||
syn match ledgerOneCharDirective /^\%(P\|A\|Y\|N\|D\|C\)\s/ | ||
|
||
syn region ledgerBlockComment start=/^comment/ end=/^end comment/ | ||
syn region ledgerBlockTest start=/^test/ end=/^end test/ | ||
exe 'syn match ledgerComment /^['.s:line_comment_chars.'].*$/' | ||
" comments at eol must be preceded by at least 2 spaces / 1 tab | ||
if b:is_hledger | ||
syn region ledgerTransactionMetadata start=/;/ end=/^/ | ||
\ keepend contained contains=ledgerTags,ledgerValueTag,ledgerTypedTag | ||
else | ||
syn region ledgerTransactionMetadata start=/\%(\s\s\|\t\|^\s\+\);/ end=/^/ | ||
\ keepend contained contains=ledgerTags,ledgerValueTag,ledgerTypedTag | ||
endif | ||
syn region ledgerPostingMetadata start=/;/ end=/^/ | ||
\ keepend contained contains=ledgerTags,ledgerValueTag,ledgerTypedTag | ||
exe 'syn match ledgerTags '. | ||
\ '/'.s:oe.'\%(\%(;\s*\|^tag\s\+\)\)\@<='. | ||
\ ':[^:[:space:]][^:]*\%(::\?[^:[:space:]][^:]*\)*:\s*$/ '. | ||
\ 'contained contains=ledgerTag' | ||
syn match ledgerTag /:\zs[^:]\+\ze:/ contained | ||
exe 'syn match ledgerValueTag '. | ||
\ '/'.s:oe.'\%(\%(;\|^tag\)[^:]\+\)\@<=[^:]\+:\ze.\+$/ contained' | ||
exe 'syn match ledgerTypedTag '. | ||
\ '/'.s:oe.'\%(\%(;\|^tag\)[^:]\+\)\@<=[^:]\+::\ze.\+$/ contained' | ||
|
||
syn region ledgerApply | ||
\ matchgroup=ledgerStartApply start=/^apply\>/ | ||
\ matchgroup=ledgerEndApply end=/^end\s\+apply\>/ | ||
\ contains=ledgerApplyHead,ledgerApply,ledgerTransaction,ledgerComment | ||
exe 'syn match ledgerApplyHead '. | ||
\ '/'.s:oe.'\%(^apply\s\+\)\@<=\S.*$/ contained' | ||
|
||
syntax keyword ledgerTodo FIXME TODO | ||
\ contained containedin=ledgerComment,ledgerTransaction,ledgerTransactionMetadata,ledgerPostingMetadata | ||
|
||
highlight default link ledgerComment Comment | ||
highlight default link ledgerBlockComment Comment | ||
highlight default link ledgerBlockTest Comment | ||
highlight default link ledgerTransactionDate Constant | ||
highlight default link ledgerTransactionExpression Statement | ||
highlight default link ledgerTransactionMetadata Tag | ||
highlight default link ledgerPostingMetadata Tag | ||
highlight default link ledgerTypedTag Keyword | ||
highlight default link ledgerValueTag Type | ||
highlight default link ledgerTag Type | ||
highlight default link ledgerStartApply Tag | ||
highlight default link ledgerEndApply Tag | ||
highlight default link ledgerApplyHead Type | ||
highlight default link ledgerAccount Identifier | ||
highlight default link ledgerAmount Number | ||
highlight default link ledgerValueExpression Function | ||
highlight default link ledgerPreDeclarationType Type | ||
highlight default link ledgerPreDeclarationName Identifier | ||
highlight default link ledgerPreDeclarationDirective Type | ||
highlight default link ledgerDirective Type | ||
highlight default link ledgerOneCharDirective Type | ||
highlight default link ledgerTodo Todo | ||
|
||
" syncinc is easy: search for the first transaction. | ||
syn sync clear | ||
syn sync match ledgerSync grouphere ledgerTransaction "^[[:digit:]~=]" | ||
|
||
let b:current_syntax = b:is_hledger ? 'hledger' : 'ledger' | ||
|
||
endif |