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