xref: /vim-8.2.3635/runtime/syntax/kix.vim (revision f37506f6)
1" Vim syntax file
2" Language:	KixTart 95, Kix2001 Windows script language http://kixtart.org/
3" Maintainer:	Richard Howarth <[email protected]>
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" quit when a syntax file was already loaded
23if exists("b:current_syntax")
24	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.
131" Set default highlight only if it doesn't already have a value.
132
133hi 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
149
150hi def link kixParenCloseError	Error
151hi def link kixBrackCloseError	Error
152hi def link kixStringError		Error
153
154hi 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
166
167
168let b:current_syntax = "kix"
169
170" vim: ts=8 sw=2
171