1*00a927d6SBram Moolenaar" Vim syntax file 2*00a927d6SBram Moolenaar" Language: ChaiScript 3*00a927d6SBram Moolenaar" Maintainer: Jason Turner <lefticus 'at' gmail com> 4*00a927d6SBram Moolenaar 5*00a927d6SBram Moolenaar" Quit when a (custom) syntax file was already loaded 6*00a927d6SBram Moolenaarif exists("b:current_syntax") 7*00a927d6SBram Moolenaar finish 8*00a927d6SBram Moolenaarend 9*00a927d6SBram Moolenaar 10*00a927d6SBram Moolenaarsyn case match 11*00a927d6SBram Moolenaar 12*00a927d6SBram Moolenaar" syncing method 13*00a927d6SBram Moolenaarsyn sync fromstart 14*00a927d6SBram Moolenaar 15*00a927d6SBram Moolenaar" Strings 16*00a927d6SBram Moolenaarsyn region chaiscriptString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=chaiscriptSpecial,chaiscriptEval,@Spell 17*00a927d6SBram Moolenaar 18*00a927d6SBram Moolenaar" Escape characters 19*00a927d6SBram Moolenaarsyn match chaiscriptSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}" 20*00a927d6SBram Moolenaar 21*00a927d6SBram Moolenaar" String evals 22*00a927d6SBram Moolenaarsyn region chaiscriptEval contained start="${" end="}" 23*00a927d6SBram Moolenaar 24*00a927d6SBram Moolenaar" integer number 25*00a927d6SBram Moolenaarsyn match chaiscriptNumber "\<\d\+\>" 26*00a927d6SBram Moolenaar 27*00a927d6SBram Moolenaar" floating point number, with dot, optional exponent 28*00a927d6SBram Moolenaarsyn match chaiscriptFloat "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>" 29*00a927d6SBram Moolenaar 30*00a927d6SBram Moolenaar" floating point number, starting with a dot, optional exponent 31*00a927d6SBram Moolenaarsyn match chaiscriptFloat "\.\d\+\%(e[-+]\=\d\+\)\=\>" 32*00a927d6SBram Moolenaar 33*00a927d6SBram Moolenaar" floating point number, without dot, with exponent 34*00a927d6SBram Moolenaarsyn match chaiscriptFloat "\<\d\+e[-+]\=\d\+\>" 35*00a927d6SBram Moolenaar 36*00a927d6SBram Moolenaar" Hex strings 37*00a927d6SBram Moolenaarsyn match chaiscriptNumber "\<0x\x\+\>" 38*00a927d6SBram Moolenaar 39*00a927d6SBram Moolenaar" Binary strings 40*00a927d6SBram Moolenaarsyn match chaiscriptNumber "\<0b[01]\+\>" 41*00a927d6SBram Moolenaar 42*00a927d6SBram Moolenaar" Various language features 43*00a927d6SBram Moolenaarsyn keyword chaiscriptCond if else 44*00a927d6SBram Moolenaarsyn keyword chaiscriptRepeat while for do 45*00a927d6SBram Moolenaarsyn keyword chaiscriptStatement break continue return 46*00a927d6SBram Moolenaarsyn keyword chaiscriptExceptions try catch throw 47*00a927d6SBram Moolenaar 48*00a927d6SBram Moolenaar"Keyword 49*00a927d6SBram Moolenaarsyn keyword chaiscriptKeyword def true false attr 50*00a927d6SBram Moolenaar 51*00a927d6SBram Moolenaar"Built in types 52*00a927d6SBram Moolenaarsyn keyword chaiscriptType fun var 53*00a927d6SBram Moolenaar 54*00a927d6SBram Moolenaar"Built in funcs, keep it simple 55*00a927d6SBram Moolenaarsyn keyword chaiscriptFunc eval throw 56*00a927d6SBram Moolenaar 57*00a927d6SBram Moolenaar"Let's treat all backtick operator function lookups as built in too 58*00a927d6SBram Moolenaarsyn region chaiscriptFunc matchgroup=chaiscriptFunc start="`" end="`" 59*00a927d6SBram Moolenaar 60*00a927d6SBram Moolenaar" Account for the "[1..10]" syntax, treating it as an operator 61*00a927d6SBram Moolenaar" Intentionally leaving out all of the normal, well known operators 62*00a927d6SBram Moolenaarsyn match chaiscriptOperator "\.\." 63*00a927d6SBram Moolenaar 64*00a927d6SBram Moolenaar" Guard seperator as an operator 65*00a927d6SBram Moolenaarsyn match chaiscriptOperator ":" 66*00a927d6SBram Moolenaar 67*00a927d6SBram Moolenaar" Comments 68*00a927d6SBram Moolenaarsyn match chaiscriptComment "//.*$" contains=@Spell 69*00a927d6SBram Moolenaarsyn region chaiscriptComment matchgroup=chaiscriptComment start="/\*" end="\*/" contains=@Spell 70*00a927d6SBram Moolenaar 71*00a927d6SBram Moolenaar 72*00a927d6SBram Moolenaar 73*00a927d6SBram Moolenaarhi def link chaiscriptExceptions Exception 74*00a927d6SBram Moolenaarhi def link chaiscriptKeyword Keyword 75*00a927d6SBram Moolenaarhi def link chaiscriptStatement Statement 76*00a927d6SBram Moolenaarhi def link chaiscriptRepeat Repeat 77*00a927d6SBram Moolenaarhi def link chaiscriptString String 78*00a927d6SBram Moolenaarhi def link chaiscriptNumber Number 79*00a927d6SBram Moolenaarhi def link chaiscriptFloat Float 80*00a927d6SBram Moolenaarhi def link chaiscriptOperator Operator 81*00a927d6SBram Moolenaarhi def link chaiscriptConstant Constant 82*00a927d6SBram Moolenaarhi def link chaiscriptCond Conditional 83*00a927d6SBram Moolenaarhi def link chaiscriptFunction Function 84*00a927d6SBram Moolenaarhi def link chaiscriptComment Comment 85*00a927d6SBram Moolenaarhi def link chaiscriptTodo Todo 86*00a927d6SBram Moolenaarhi def link chaiscriptError Error 87*00a927d6SBram Moolenaarhi def link chaiscriptSpecial SpecialChar 88*00a927d6SBram Moolenaarhi def link chaiscriptFunc Identifier 89*00a927d6SBram Moolenaarhi def link chaiscriptType Type 90*00a927d6SBram Moolenaarhi def link chaiscriptEval Special 91*00a927d6SBram Moolenaar 92*00a927d6SBram Moolenaarlet b:current_syntax = "chaiscript" 93*00a927d6SBram Moolenaar 94*00a927d6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet 95