From 6ce1f4dbb7c0fba35cea75b2e40a78e36c695ee3 Mon Sep 17 00:00:00 2001 From: Nathan Grigg Date: Tue, 7 Oct 2014 17:03:01 -0700 Subject: First try for syntax file --- syntax/beancount.vim | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 syntax/beancount.vim (limited to 'syntax/beancount.vim') diff --git a/syntax/beancount.vim b/syntax/beancount.vim new file mode 100644 index 0000000..fd7d18a --- /dev/null +++ b/syntax/beancount.vim @@ -0,0 +1,62 @@ +" Vim syntax file +" Language: beancount +" Maintainer: Nathan Grigg +" Latest Revision: 2014-10-07 + +" if exists("b:current_syntax") +" finish +" endif + +syntax clear +" Basics. +syn region beanComment start="\s*;" end="$" keepend contains=beanMarker +syn match beanMarker "\v(\{\{\{|\}\}\})\d?" contained +syn region beanString start='"' skip='\\"' end='"' contained +syn match beanAmount "\v[-+]?[[:digit:].,]+" nextgroup=beanCurrency contained + \ skipwhite +syn match beanCurrency "\v\w+" contained +" Account name: alphanumeric with at least one colon. +syn match beanAccount "\v[[:alnum:]]+:[[:alnum:]:]+" contained + + +" Most directives start with a date. +syn match beanDate "^\v\d{4}-\d{2}-\d{2}" skipwhite + \ nextgroup=beanOpen,beanTxn,beanClose,beanNote,beanBalance,beanEvent,beanPad +" Options and events have two string arguments. The first, we are matching as +" beanOptionTitle and the second as a regular string. +syn region beanOption matchgroup=beanKeyword start="^option" end="$" + \ contains=beanOptionTitle,beanComment +syn region beanEvent matchgroup=beanKeyword start="event" end="$" contained + \ contains=beanOptionTitle,beanComment +syn region beanOptionTitle start='"' skip='\\"' end='"' contained + \ nextgroup=beanString skipwhite +syn region beanOpen matchgroup=beanKeyword start="open" end="$" + \ contains=beanAccount,beanCurrency,beanComment +syn region beanClose matchgroup=beanKeyword start="close" end="$" + \ contains=beanAccount,beanComment +syn region beanNote matchgroup=beanKeyword start="\vnote|document" end="$" + \ contains=beanAccount,beanString,beanComment +syn region beanBalance matchgroup=beanKeyword start="balance" end="$" + \ contains=beanAccount,beanAmount,beanComment +syn keyword beanKeyword pushtag poptag +syn region beanPad matchgroup=beanKeyword start="^pad" end="$" + \ contains=beanAccount,beanComment + +syn region beanTxn matchgroup=beanKeyword start="\v(txn)?\s+[*!]" skip="^\s" + \ end="^" contains=beanString,beanPost,beanComment contained +syn region beanPost start="^\v\s+" end="$" + \ contains=beanAccount,beanAmount,beanComment,beanCost,beanPrice +syn region beanCost start="{" end="}" contains=beanAmount contained +syn match beanPrice "\V@@\?" nextgroup=beanAmount contained +" TODO: tags and links + +highlight default link beanKeyword Keyword +highlight default link beanOptionTitle Keyword +highlight default link beanDate Keyword +highlight default link beanString String +highlight default link beanComment Comment +highlight default link beanAccount Identifier +highlight default link beanAmount Number +highlight default link beanCurrency Number +highlight default link beanCost Number +highlight default link beanPrice Number -- cgit v1.2.3-2-gb3c3