diff options
Diffstat (limited to 'runtime/syntax/scheme.vim')
-rw-r--r-- | runtime/syntax/scheme.vim | 87 |
1 files changed, 51 insertions, 36 deletions
diff --git a/runtime/syntax/scheme.vim b/runtime/syntax/scheme.vim index 6f6927f67..f98703446 100644 --- a/runtime/syntax/scheme.vim +++ b/runtime/syntax/scheme.vim @@ -1,6 +1,6 @@ " Vim syntax file -" Language: Scheme (R5RS) -" Last Change: 2007 Jun 16 +" Language: Scheme (R5RS + some R6RS extras) +" Last Change: 2009 Nov 27 " Maintainer: Sergey Khorev <sergey.khorev@gmail.com> " Original author: Dirk van Deun <dirk@igwe.vub.ac.be> @@ -26,8 +26,8 @@ syn case ignore " Fascist highlighting: everything that doesn't fit the rules is an error... -syn match schemeError oneline ![^ \t()\[\]";]*! -syn match schemeError oneline ")" +syn match schemeError ![^ \t()\[\]";]*! +syn match schemeError ")" " Quoted and backquoted stuff @@ -71,6 +71,8 @@ syn keyword schemeSyntax lambda and or if cond case define let let* letrec syn keyword schemeSyntax begin do delay set! else => syn keyword schemeSyntax quote quasiquote unquote unquote-splicing syn keyword schemeSyntax define-syntax let-syntax letrec-syntax syntax-rules +" R6RS +syn keyword schemeSyntax define-record-type fields protocol syn keyword schemeFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car! syn keyword schemeFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr @@ -109,30 +111,39 @@ syn keyword schemeFunc char-ready? load transcript-on transcript-off eval syn keyword schemeFunc dynamic-wind port? values call-with-values syn keyword schemeFunc scheme-report-environment null-environment syn keyword schemeFunc interaction-environment +" R6RS +syn keyword schemeFunc make-eq-hashtable make-eqv-hashtable make-hashtable +syn keyword schemeFunc hashtable? hashtable-size hashtable-ref hashtable-set! +syn keyword schemeFunc hashtable-delete! hashtable-contains? hashtable-update! +syn keyword schemeFunc hashtable-copy hashtable-clear! hashtable-keys +syn keyword schemeFunc hashtable-entries hashtable-equivalence-function hashtable-hash-function +syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash +syn keyword schemeFunc find for-all exists filter partition fold-left fold-right +syn keyword schemeFunc remp remove remv remq memp assp cons* " ... so that a single + or -, inside a quoted context, would not be " interpreted as a number (outside such contexts, it's a schemeFunc) -syn match schemeDelimiter oneline !\.[ \t\[\]()";]!me=e-1 -syn match schemeDelimiter oneline !\.$! +syn match schemeDelimiter !\.[ \t\[\]()";]!me=e-1 +syn match schemeDelimiter !\.$! " ... and a single dot is not a number but a delimiter " This keeps all other stuff unhighlighted, except *stuff* and <stuff>: -syn match schemeOther oneline ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*, -syn match schemeError oneline ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, +syn match schemeOther ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*, +syn match schemeError ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, -syn match schemeOther oneline "\.\.\." -syn match schemeError oneline !\.\.\.[^ \t\[\]()";]\+! +syn match schemeOther "\.\.\." +syn match schemeError !\.\.\.[^ \t\[\]()";]\+! " ... a special identifier -syn match schemeConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t\[\]()";],me=e-1 -syn match schemeConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$, -syn match schemeError oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, +syn match schemeConstant ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]\+\*[ \t\[\]()";],me=e-1 +syn match schemeConstant ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]\+\*$, +syn match schemeError ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, -syn match schemeConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t\[\]()";],me=e-1 -syn match schemeConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$, -syn match schemeError oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, +syn match schemeConstant ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t\[\]()";],me=e-1 +syn match schemeConstant ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$, +syn match schemeError ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, " Non-quoted lists, and strings: @@ -153,23 +164,27 @@ syn match schemeComment ";.*$" " Writing out the complete description of Scheme numerals without " using variables is a day's work for a trained secretary... -syn match schemeOther oneline ![+-][ \t\[\]()";]!me=e-1 -syn match schemeOther oneline ![+-]$! +syn match schemeOther ![+-][ \t\[\]()";]!me=e-1 +syn match schemeOther ![+-]$! " " This is a useful lax approximation: -syn match schemeNumber oneline "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*" -syn match schemeError oneline ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t\[\]()";][^ \t\[\]()";]*! +syn match schemeNumber "[-#+.]\=[0-9][-#+/0-9a-f@i.boxesfdl]*" +syn match schemeError ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t\[\]()";][^ \t\[\]()";]*! -syn match schemeBoolean oneline "#[tf]" -syn match schemeError oneline !#[tf][^ \t\[\]()";]\+! +syn match schemeBoolean "#[tf]" +syn match schemeError !#[tf][^ \t\[\]()";]\+! + +syn match schemeCharacter "#\\" +syn match schemeCharacter "#\\." +syn match schemeError !#\\.[^ \t\[\]()";]\+! +syn match schemeCharacter "#\\space" +syn match schemeError !#\\space[^ \t\[\]()";]\+! +syn match schemeCharacter "#\\newline" +syn match schemeError !#\\newline[^ \t\[\]()";]\+! + +" R6RS +syn match schemeCharacter "#\\x[0-9a-fA-F]\+" -syn match schemeChar oneline "#\\" -syn match schemeChar oneline "#\\." -syn match schemeError oneline !#\\.[^ \t\[\]()";]\+! -syn match schemeChar oneline "#\\space" -syn match schemeError oneline !#\\space[^ \t\[\]()";]\+! -syn match schemeChar oneline "#\\newline" -syn match schemeError oneline !#\\newline[^ \t\[\]()";]\+! if exists("b:is_mzscheme") || exists("is_mzscheme") " MzScheme extensions @@ -177,11 +192,11 @@ if exists("b:is_mzscheme") || exists("is_mzscheme") syn region schemeComment start="#|" end="|#" " #%xxx are the special MzScheme identifiers - syn match schemeOther oneline "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+" + syn match schemeOther "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+" " anything limited by |'s is identifier - syn match schemeOther oneline "|[^|]\+|" + syn match schemeOther "|[^|]\+|" - syn match schemeChar oneline "#\\\%(return\|tab\)" + syn match schemeCharacter "#\\\%(return\|tab\)" " Modules require stmt syn keyword schemeExtSyntax module require dynamic-require lib prefix all-except prefix-all-except rename @@ -234,8 +249,8 @@ if exists("b:is_chicken") || exists("is_chicken") " multiline comment syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment - syn match schemeOther oneline "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+" - syn match schemeExtSyntax oneline "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+" + syn match schemeOther "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+" + syn match schemeExtSyntax "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+" syn keyword schemeExtSyntax unit uses declare hide foreign-declare foreign-parse foreign-parse/spec syn keyword schemeExtSyntax foreign-lambda foreign-lambda* define-external define-macro load-library @@ -266,7 +281,7 @@ if exists("b:is_chicken") || exists("is_chicken") endif " suggested by Alex Queiroz - syn match schemeExtSyntax oneline "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+" + syn match schemeExtSyntax "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+" syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ endif @@ -290,7 +305,7 @@ if version >= 508 || !exists("did_scheme_syntax_inits") HiLink schemeFunc Function HiLink schemeString String - HiLink schemeChar Character + HiLink schemeCharacter Character HiLink schemeNumber Number HiLink schemeBoolean Boolean |