xref: /vim-8.2.3635/runtime/syntax/kix.vim (revision 89bcfda6)
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.
132command -nargs=+ HiLink hi def link <args>
133
134HiLink 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
150
151HiLink kixParenCloseError	Error
152HiLink kixBrackCloseError	Error
153HiLink kixStringError		Error
154
155HiLink 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
167
168delcommand HiLink
169
170let b:current_syntax = "kix"
171
172" vim: ts=8 sw=2
173