blob: dd74378366d80c3fe19691d2e4135dab9d4ebd0a [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
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020022" quit when a syntax file was already loaded
23if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000024 finish
25endif
26
27syn case match
28syn keyword kixTODO TODO FIX XXX contained
29
30" Case insensitive language.
31syn case ignore
32
33" Kix statements
34syn match kixStatement "?"
35syn keyword kixStatement beep big break
36syn keyword kixStatement call cd cls color cookie1 copy
37syn keyword kixStatement del dim display
38syn keyword kixStatement exit
39syn keyword kixStatement flushkb
40syn keyword kixStatement get gets global go gosub goto
41syn keyword kixStatement md
42syn keyword kixStatement password play
43syn keyword kixStatement quit
44syn keyword kixStatement rd return run
45syn keyword kixStatement set setl setm settime shell sleep small
46syn keyword kixStatement use
47
48" Kix2001
49syn keyword kixStatement debug function endfunction redim
50
51" Simple variables
52syn match kixNotVar "\$\$\|@@\|%%" transparent contains=NONE
53syn match kixLocalVar "\$\w\+"
54syn match kixMacro "@\w\+"
55syn match kixEnvVar "%\w\+"
56
57" Destination labels
58syn match kixLabel ":\w\+\>"
59
60" Identify strings, trap unterminated strings
61syn match kixStringError +".*\|'.*+
62syn region kixDoubleString oneline start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=kixLocalVar,kixMacro,kixEnvVar,kixNotVar
63syn region kixSingleString oneline start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=kixLocalVar,kixMacro,kixEnvVar,kixNotVar
64
65" Operators
66syn match kixOperator "+\|-\|\*\|/\|=\|&\||"
67syn keyword kixOperator and or
68" Kix2001
69syn match kixOperator "=="
70syn keyword kixOperator not
71
72" Numeric constants
73syn match kixInteger "-\=\<\d\+\>" contains=NONE
74syn match kixFloat "-\=\.\d\+\>\|-\=\<\d\+\.\d\+\>" contains=NONE
75
76" Hex numeric constants
77syn match kixHex "\&\x\+\>" contains=NONE
78
79" Other contants
80" Kix2001
81syn keyword kixConstant on off
82
83" Comments
84syn match kixComment ";.*$" contains=kixTODO
85
86" Trap unmatched parenthesis
87syn match kixParenCloseError ")"
88syn region kixParen oneline transparent start="(" end=")" contains=ALLBUT,kixParenCloseError
89
90" Functions (Builtin + UDF)
91syn match kixFunction "\w\+("he=e-1,me=e-1 contains=ALL
92
93" Trap unmatched brackets
94syn match kixBrackCloseError "\]"
95syn region kixBrack transparent start="\[" end="\]" contains=ALLBUT,kixBrackCloseError
96
97" Clusters for ALLBUT shorthand
98syn cluster kixIfBut contains=kixIfError,kixSelectOK,kixDoOK,kixWhileOK,kixForEachOK,kixForNextOK
99syn cluster kixSelectBut contains=kixSelectError,kixIfOK,kixDoOK,kixWhileOK,kixForEachOK,kixForNextOK
100syn cluster kixDoBut contains=kixDoError,kixSelectOK,kixIfOK,kixWhileOK,kixForEachOK,kixForNextOK
101syn cluster kixWhileBut contains=kixWhileError,kixSelectOK,kixIfOK,kixDoOK,kixForEachOK,kixForNextOK
102syn cluster kixForEachBut contains=kixForEachError,kixSelectOK,kixIfOK,kixDoOK,kixForNextOK,kixWhileOK
103syn cluster kixForNextBut contains=kixForNextError,kixSelectOK,kixIfOK,kixDoOK,kixForEachOK,kixWhileOK
104" Condtional construct errors.
105syn match kixIfError "\<if\>\|\<else\>\|\<endif\>"
106syn match kixIfOK contained "\<if\>\|\<else\>\|\<endif\>"
107syn region kixIf transparent matchgroup=kixIfOK start="\<if\>" end="\<endif\>" contains=ALLBUT,@kixIfBut
108syn match kixSelectError "\<select\>\|\<case\>\|\<endselect\>"
109syn match kixSelectOK contained "\<select\>\|\<case\>\|\<endselect\>"
110syn region kixSelect transparent matchgroup=kixSelectOK start="\<select\>" end="\<endselect\>" contains=ALLBUT,@kixSelectBut
111
112" Program control constructs.
113syn match kixDoError "\<do\>\|\<until\>"
114syn match kixDoOK contained "\<do\>\|\<until\>"
115syn region kixDo transparent matchgroup=kixDoOK start="\<do\>" end="\<until\>" contains=ALLBUT,@kixDoBut
116syn match kixWhileError "\<while\>\|\<loop\>"
117syn match kixWhileOK contained "\<while\>\|\<loop\>"
118syn region kixWhile transparent matchgroup=kixWhileOK start="\<while\>" end="\<loop\>" contains=ALLBUT,@kixWhileBut
119syn match kixForNextError "\<for\>\|\<to\>\|\<step\>\|\<next\>"
120syn match kixForNextOK contained "\<for\>\|\<to\>\|\<step\>\|\<next\>"
121syn region kixForNext transparent matchgroup=kixForNextOK start="\<for\>" end="\<next\>" contains=ALLBUT,@kixForBut
122syn match kixForEachError "\<for each\>\|\<in\>\|\<next\>"
123syn match kixForEachOK contained "\<for each\>\|\<in\>\|\<next\>"
124syn region kixForEach transparent matchgroup=kixForEachOK start="\<for each\>" end="\<next\>" contains=ALLBUT,@kixForEachBut
125
126" Expressions
127syn match kixExpression "<\|>\|<=\|>=\|<>"
128
129
130" Default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200131" Set default highlight only if it doesn't already have a value.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200133hi def link kixDoubleString String
134hi def link kixSingleString String
135hi def link kixStatement Statement
136hi def link kixRepeat Repeat
137hi def link kixComment Comment
138hi def link kixBuiltin Function
139hi def link kixLocalVar Special
140hi def link kixMacro Special
141hi def link kixEnvVar Special
142hi def link kixLabel Type
143hi def link kixFunction Function
144hi def link kixInteger Number
145hi def link kixHex Number
146hi def link kixFloat Number
147hi def link kixOperator Operator
148hi def link kixExpression Operator
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200150hi def link kixParenCloseError Error
151hi def link kixBrackCloseError Error
152hi def link kixStringError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200154hi def link kixWhileError Error
155hi def link kixWhileOK Conditional
156hi def link kixDoError Error
157hi def link kixDoOK Conditional
158hi def link kixIfError Error
159hi def link kixIfOK Conditional
160hi def link kixSelectError Error
161hi def link kixSelectOK Conditional
162hi def link kixForNextError Error
163hi def link kixForNextOK Conditional
164hi def link kixForEachError Error
165hi def link kixForEachOK Conditional
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167
168let b:current_syntax = "kix"
169
170" vim: ts=8 sw=2