blob: 62dc3253e8be87202a8b450e5e16947ab7ff332d [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: KixTart 95, Kix2001 Windows script language http://kixtart.org/
3" Maintainer: Richard Howarth <rhowarth@sgb.co.uk>
4" Last Change: 2003 May 11
5" URL: http://www.howsoft.demon.co.uk/
6
7" KixTart files identified by *.kix extension.
8
9" Amendment History:
10" 26 April 2001: RMH
11" Removed development comments from distro version
12" Renamed "Kix*" to "kix*" for consistancy
13" Changes made in preperation for VIM version 5.8/6.00
14
15" TODO:
16" Handle arrays highlighting
17" Handle object highlighting
18" The next two may not be possible:
19" Work out how to error too many "(", i.e. (() should be an error.
20" Similarly, "if" without "endif" and similar constructs should error.
21
22" Clear legacy syntax rules for version 5.x, exit if already processed for version 6+
23if version < 600
24 syn clear
25elseif exists("b:current_syntax")
26 finish
27endif
28
29syn case match
30syn keyword kixTODO TODO FIX XXX contained
31
32" Case insensitive language.
33syn case ignore
34
35" Kix statements
36syn match kixStatement "?"
37syn keyword kixStatement beep big break
38syn keyword kixStatement call cd cls color cookie1 copy
39syn keyword kixStatement del dim display
40syn keyword kixStatement exit
41syn keyword kixStatement flushkb
42syn keyword kixStatement get gets global go gosub goto
43syn keyword kixStatement md
44syn keyword kixStatement password play
45syn keyword kixStatement quit
46syn keyword kixStatement rd return run
47syn keyword kixStatement set setl setm settime shell sleep small
48syn keyword kixStatement use
49
50" Kix2001
51syn keyword kixStatement debug function endfunction redim
52
53" Simple variables
54syn match kixNotVar "\$\$\|@@\|%%" transparent contains=NONE
55syn match kixLocalVar "\$\w\+"
56syn match kixMacro "@\w\+"
57syn match kixEnvVar "%\w\+"
58
59" Destination labels
60syn match kixLabel ":\w\+\>"
61
62" Identify strings, trap unterminated strings
63syn match kixStringError +".*\|'.*+
64syn region kixDoubleString oneline start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=kixLocalVar,kixMacro,kixEnvVar,kixNotVar
65syn region kixSingleString oneline start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=kixLocalVar,kixMacro,kixEnvVar,kixNotVar
66
67" Operators
68syn match kixOperator "+\|-\|\*\|/\|=\|&\||"
69syn keyword kixOperator and or
70" Kix2001
71syn match kixOperator "=="
72syn keyword kixOperator not
73
74" Numeric constants
75syn match kixInteger "-\=\<\d\+\>" contains=NONE
76syn match kixFloat "-\=\.\d\+\>\|-\=\<\d\+\.\d\+\>" contains=NONE
77
78" Hex numeric constants
79syn match kixHex "\&\x\+\>" contains=NONE
80
81" Other contants
82" Kix2001
83syn keyword kixConstant on off
84
85" Comments
86syn match kixComment ";.*$" contains=kixTODO
87
88" Trap unmatched parenthesis
89syn match kixParenCloseError ")"
90syn region kixParen oneline transparent start="(" end=")" contains=ALLBUT,kixParenCloseError
91
92" Functions (Builtin + UDF)
93syn match kixFunction "\w\+("he=e-1,me=e-1 contains=ALL
94
95" Trap unmatched brackets
96syn match kixBrackCloseError "\]"
97syn region kixBrack transparent start="\[" end="\]" contains=ALLBUT,kixBrackCloseError
98
99" Clusters for ALLBUT shorthand
100syn cluster kixIfBut contains=kixIfError,kixSelectOK,kixDoOK,kixWhileOK,kixForEachOK,kixForNextOK
101syn cluster kixSelectBut contains=kixSelectError,kixIfOK,kixDoOK,kixWhileOK,kixForEachOK,kixForNextOK
102syn cluster kixDoBut contains=kixDoError,kixSelectOK,kixIfOK,kixWhileOK,kixForEachOK,kixForNextOK
103syn cluster kixWhileBut contains=kixWhileError,kixSelectOK,kixIfOK,kixDoOK,kixForEachOK,kixForNextOK
104syn cluster kixForEachBut contains=kixForEachError,kixSelectOK,kixIfOK,kixDoOK,kixForNextOK,kixWhileOK
105syn cluster kixForNextBut contains=kixForNextError,kixSelectOK,kixIfOK,kixDoOK,kixForEachOK,kixWhileOK
106" Condtional construct errors.
107syn match kixIfError "\<if\>\|\<else\>\|\<endif\>"
108syn match kixIfOK contained "\<if\>\|\<else\>\|\<endif\>"
109syn region kixIf transparent matchgroup=kixIfOK start="\<if\>" end="\<endif\>" contains=ALLBUT,@kixIfBut
110syn match kixSelectError "\<select\>\|\<case\>\|\<endselect\>"
111syn match kixSelectOK contained "\<select\>\|\<case\>\|\<endselect\>"
112syn region kixSelect transparent matchgroup=kixSelectOK start="\<select\>" end="\<endselect\>" contains=ALLBUT,@kixSelectBut
113
114" Program control constructs.
115syn match kixDoError "\<do\>\|\<until\>"
116syn match kixDoOK contained "\<do\>\|\<until\>"
117syn region kixDo transparent matchgroup=kixDoOK start="\<do\>" end="\<until\>" contains=ALLBUT,@kixDoBut
118syn match kixWhileError "\<while\>\|\<loop\>"
119syn match kixWhileOK contained "\<while\>\|\<loop\>"
120syn region kixWhile transparent matchgroup=kixWhileOK start="\<while\>" end="\<loop\>" contains=ALLBUT,@kixWhileBut
121syn match kixForNextError "\<for\>\|\<to\>\|\<step\>\|\<next\>"
122syn match kixForNextOK contained "\<for\>\|\<to\>\|\<step\>\|\<next\>"
123syn region kixForNext transparent matchgroup=kixForNextOK start="\<for\>" end="\<next\>" contains=ALLBUT,@kixForBut
124syn match kixForEachError "\<for each\>\|\<in\>\|\<next\>"
125syn match kixForEachOK contained "\<for each\>\|\<in\>\|\<next\>"
126syn region kixForEach transparent matchgroup=kixForEachOK start="\<for each\>" end="\<next\>" contains=ALLBUT,@kixForEachBut
127
128" Expressions
129syn match kixExpression "<\|>\|<=\|>=\|<>"
130
131
132" Default highlighting.
133" Version < 5.8 set default highlight if file not already processed.
134" Version >= 5.8 set default highlight only if it doesn't already have a value.
135if version > 508 || !exists("did_kix_syn_inits")
136 if version < 508
137 let did_kix_syn_inits=1
138 command -nargs=+ HiLink hi link <args>
139 else
140 command -nargs=+ HiLink hi def link <args>
141 endif
142
143 HiLink kixDoubleString String
144 HiLink kixSingleString String
145 HiLink kixStatement Statement
146 HiLink kixRepeat Repeat
147 HiLink kixComment Comment
148 HiLink kixBuiltin Function
149 HiLink kixLocalVar Special
150 HiLink kixMacro Special
151 HiLink kixEnvVar Special
152 HiLink kixLabel Type
153 HiLink kixFunction Function
154 HiLink kixInteger Number
155 HiLink kixHex Number
156 HiLink kixFloat Number
157 HiLink kixOperator Operator
158 HiLink kixExpression Operator
159
160 HiLink kixParenCloseError Error
161 HiLink kixBrackCloseError Error
162 HiLink kixStringError Error
163
164 HiLink kixWhileError Error
165 HiLink kixWhileOK Conditional
166 HiLink kixDoError Error
167 HiLink kixDoOK Conditional
168 HiLink kixIfError Error
169 HiLink kixIfOK Conditional
170 HiLink kixSelectError Error
171 HiLink kixSelectOK Conditional
172 HiLink kixForNextError Error
173 HiLink kixForNextOK Conditional
174 HiLink kixForEachError Error
175 HiLink kixForEachOK Conditional
176
177 delcommand HiLink
178endif
179
180let b:current_syntax = "kix"
181
182" vim: ts=8 sw=2