blob: a86d66c4b1e1361311a9f0939acf53ed2ca46ba4 [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.
132command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200134HiLink kixDoubleString String
135HiLink kixSingleString String
136HiLink kixStatement Statement
137HiLink kixRepeat Repeat
138HiLink kixComment Comment
139HiLink kixBuiltin Function
140HiLink kixLocalVar Special
141HiLink kixMacro Special
142HiLink kixEnvVar Special
143HiLink kixLabel Type
144HiLink kixFunction Function
145HiLink kixInteger Number
146HiLink kixHex Number
147HiLink kixFloat Number
148HiLink kixOperator Operator
149HiLink kixExpression Operator
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200151HiLink kixParenCloseError Error
152HiLink kixBrackCloseError Error
153HiLink kixStringError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200155HiLink kixWhileError Error
156HiLink kixWhileOK Conditional
157HiLink kixDoError Error
158HiLink kixDoOK Conditional
159HiLink kixIfError Error
160HiLink kixIfOK Conditional
161HiLink kixSelectError Error
162HiLink kixSelectOK Conditional
163HiLink kixForNextError Error
164HiLink kixForNextOK Conditional
165HiLink kixForEachError Error
166HiLink kixForEachOK Conditional
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200168delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169
170let b:current_syntax = "kix"
171
172" vim: ts=8 sw=2