" Vim syntax file " Language: Tuplr " Last Change: 2009 Apr 18 " Maintainer: David Robillard if version < 600 syntax clear elseif exists("b:current_syntax") finish endif " Fascist highlighting: everything that doesn't fit the rules is an error... "syn match tuplrError oneline ![^ \t()\[\]";]*! syn match tuplrError oneline ")" " Quoted and backquoted stuff syn region tuplrQuoted matchgroup=Delimiter start="['`]" end=![ \t()\[\]";]!me=e-1 contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc " Popular Scheme extension: " using [] as well as () syn region tuplrStrucRestricted matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrStrucRestricted matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrUnquote matchgroup=Delimiter start="," end=![ \t\[\]()";]!me=e-1 contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrUnquote matchgroup=Delimiter start=",@" end=![ \t\[\]()";]!me=e-1 contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrUnquote matchgroup=Delimiter start=",(" end=")" contains=ALL syn region tuplrUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALL syn region tuplrUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrUnquote matchgroup=Delimiter start=",\[" end="\]" contains=ALL syn region tuplrUnquote matchgroup=Delimiter start=",@\[" end="\]" contains=ALL syn region tuplrUnquote matchgroup=Delimiter start=",#\[" end="\]" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc syn region tuplrUnquote matchgroup=Delimiter start=",@#\[" end="\]" contains=ALLBUT,tuplrStruc,tuplrSyntax,tuplrFunc " R5RS Scheme Functions and Syntax: if version < 600 set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_ else setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_ endif syn keyword tuplrSyntax fn def if match ns type syn keyword tuplrFunc cons car cdr syn match tuplrTypeAnnotation ":[A-Z][a-zA-Z\.]*" syn match tuplrTypeAnnotationExp ":([A-Z][a-zA-Z ]*)" syn match tuplrType "[A-Z][a-zA-Z\.]*" syn match tuplrPrefix "[a-z][a-z]*\." " ... so that a single + or -, inside a quoted context, would not be " interpreted as a number (outside such contexts, it's a tuplrFunc) syn match tuplrDelimiter oneline !\.[ \t\[\]()";]!me=e-1 syn match tuplrDelimiter oneline !\.$! " ... and a single dot is not a number but a delimiter " This keeps all other stuff unhighlighted, except *stuff* and : syn match tuplrOther oneline ,[a-z!$%&*/<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*, "syn match tuplrError oneline ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, " "syn match tuplrOther oneline "\.\.\." "syn match tuplrError oneline !\.\.\.[^ \t\[\]()";]\+! "" ... a special identifier " "syn match tuplrConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t\[\]()";],me=e-1 "syn match tuplrConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$, "syn match tuplrError oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, " "syn match tuplrConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t\[\]()";],me=e-1 "syn match tuplrConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$, "syn match tuplrError oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*, " Non-quoted lists, and strings: syn region tuplrStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL syn region tuplrStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL syn region tuplrStruc matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=ALL syn region tuplrStruc matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALL " Simple literals: syn region tuplrString start=+\%(\\\)\@= 508 || !exists("did_tuplr_syntax_inits") if version < 508 let did_tuplr_syntax_inits = 1 command -nargs=+ HiLink hi link else command -nargs=+ HiLink hi def link endif "HiLink tuplrPrefix Identifier HiLink tuplrSyntax Statement HiLink tuplrFunc Function HiLink tuplrTypeAnnotation Type HiLink tuplrTypeAnnotationExp Type HiLink tuplrType Type HiLink tuplrString String HiLink tuplrChar Character HiLink tuplrNumber Number HiLink tuplrBoolean Boolean HiLink tuplrDelimiter Delimiter HiLink tuplrConstant Constant HiLink tuplrComment Comment HiLink tuplrMultilineComment Comment HiLink tuplrError Error HiLink tuplrExtSyntax Type HiLink tuplrExtFunc PreProc delcommand HiLink endif let b:current_syntax = "tuplr"