1" Vim syntax file
2" Language:	4Dos batch file
3" Maintainer:	John Leo Spetz <jls11@po.cwru.edu>
4" Last Change:	2001 May 09
5
6"//Issues to resolve:
7"//- Boolean operators surrounded by period are recognized but the
8"//  periods are not highlighted.  The only way to do that would
9"//  be separate synmatches for each possibility otherwise a more
10"//  general \.\i\+\. will highlight anything delimited by dots.
11"//- After unary operators like "defined" can assume token type.
12"//  Should there be more of these?
13
14" For version 5.x: Clear all syntax items
15" For version 6.x: Quit when a syntax file was already loaded
16if version < 600
17  syntax clear
18elseif exists("b:current_syntax")
19  finish
20endif
21
22syn case ignore
23
24syn keyword btmStatement	call off
25syn keyword btmConditional	if iff endiff then else elseiff not errorlevel
26syn keyword btmConditional	gt lt eq ne ge le
27syn match btmConditional transparent    "\.\i\+\." contains=btmDotBoolOp
28syn keyword btmDotBoolOp contained      and or xor
29syn match btmConditional	"=="
30syn match btmConditional	"!="
31syn keyword btmConditional	defined errorlevel exist isalias
32syn keyword btmConditional	isdir direxist isinternal islabel
33syn keyword btmRepeat		for in do enddo
34
35syn keyword btmTodo contained	TODO
36
37" String
38syn cluster btmVars contains=btmVariable,btmArgument,btmBIFMatch
39syn region  btmString	start=+"+  end=+"+ contains=@btmVars
40syn match btmNumber     "\<\d\+\>"
41
42"syn match  btmIdentifier	"\<\h\w*\>"
43
44" If you don't like tabs
45"syn match btmShowTab "\t"
46"syn match btmShowTabc "\t"
47"syn match  btmComment		"^\ *rem.*$" contains=btmTodo,btmShowTabc
48
49" Some people use this as a comment line
50" In fact this is a Label
51"syn match btmComment		"^\ *:\ \+.*$" contains=btmTodo
52
53syn match btmComment		"^\ *rem.*$" contains=btmTodo
54syn match btmComment		"^\ *::.*$" contains=btmTodo
55
56syn match btmLabelMark		"^\ *:[0-9a-zA-Z_\-]\+\>"
57syn match btmLabelMark		"goto [0-9a-zA-Z_\-]\+\>"lc=5
58syn match btmLabelMark		"gosub [0-9a-zA-Z_\-]\+\>"lc=6
59
60" syn match btmCmdDivider ">[>&][>&]\="
61syn match btmCmdDivider ">[>&]*"
62syn match btmCmdDivider ">>&>"
63syn match btmCmdDivider "|&\="
64syn match btmCmdDivider "%+"
65syn match btmCmdDivider "\^"
66
67syn region btmEcho start="echo" skip="echo" matchgroup=btmCmdDivider end="%+" end="$" end="|&\=" end="\^" end=">[>&]*" contains=@btmEchos oneline
68syn cluster btmEchos contains=@btmVars,btmEchoCommand,btmEchoParam
69syn keyword btmEchoCommand contained	echo echoerr echos echoserr
70syn keyword btmEchoParam contained	on off
71
72" this is also a valid Label. I don't use it.
73"syn match btmLabelMark		"^\ *:\ \+[0-9a-zA-Z_\-]\+\>"
74
75" //Environment variable can be expanded using notation %var in 4DOS
76syn match btmVariable		"%[0-9a-z_\-]\+" contains=@btmSpecialVars
77" //Environment variable can be expanded using notation %var%
78syn match btmVariable		"%[0-9a-z_\-]*%" contains=@btmSpecialVars
79" //The following are special variable in 4DOS
80syn match btmVariable		"%[=#]" contains=@btmSpecialVars
81syn match btmVariable		"%??\=" contains=@btmSpecialVars
82" //Environment variable can be expanded using notation %[var] in 4DOS
83syn match btmVariable		"%\[[0-9a-z_\-]*\]"
84" //After some keywords next word should be an environment variable
85syn match btmVariable		"defined\s\i\+"lc=8
86syn match btmVariable		"set\s\i\+"lc=4
87" //Parameters to batchfiles take the format %<digit>
88syn match btmArgument		"%\d\>"
89" //4DOS allows format %<digit>& meaning batchfile parameters digit and up
90syn match btmArgument		"%\d\>&"
91" //Variable used by FOR loops sometimes use %%<letter> in batchfiles
92syn match btmArgument		"%%\a\>"
93
94" //Show 4DOS built-in functions specially
95syn match btmBIFMatch "%@\w\+\["he=e-1 contains=btmBuiltInFunc
96syn keyword btmBuiltInFunc contained	alias ascii attrib cdrom
97syn keyword btmBuiltInFunc contained	char clip comma convert
98syn keyword btmBuiltInFunc contained	date day dec descript
99syn keyword btmBuiltInFunc contained	device diskfree disktotal
100syn keyword btmBuiltInFunc contained	diskused dosmem dow dowi
101syn keyword btmBuiltInFunc contained	doy ems eval exec execstr
102syn keyword btmBuiltInFunc contained	expand ext extended
103syn keyword btmBuiltInFunc contained	fileage fileclose filedate
104syn keyword btmBuiltInFunc contained	filename fileopen fileread
105syn keyword btmBuiltInFunc contained	files fileseek fileseekl
106syn keyword btmBuiltInFunc contained	filesize filetime filewrite
107syn keyword btmBuiltInFunc contained	filewriteb findclose
108syn keyword btmBuiltInFunc contained	findfirst findnext format
109syn keyword btmBuiltInFunc contained	full if inc index insert
110syn keyword btmBuiltInFunc contained	instr int label left len
111syn keyword btmBuiltInFunc contained	lfn line lines lower lpt
112syn keyword btmBuiltInFunc contained	makeage makedate maketime
113syn keyword btmBuiltInFunc contained	master month name numeric
114syn keyword btmBuiltInFunc contained	path random readscr ready
115syn keyword btmBuiltInFunc contained	remote removable repeat
116syn keyword btmBuiltInFunc contained	replace right search
117syn keyword btmBuiltInFunc contained	select sfn strip substr
118syn keyword btmBuiltInFunc contained	time timer trim truename
119syn keyword btmBuiltInFunc contained	unique upper wild word
120syn keyword btmBuiltInFunc contained	words xms year
121
122syn cluster btmSpecialVars contains=btmBuiltInVar,btmSpecialVar
123
124" //Show specialized variables specially
125" syn match btmSpecialVar contained	"+"
126syn match btmSpecialVar contained	"="
127syn match btmSpecialVar contained	"#"
128syn match btmSpecialVar contained	"??\="
129syn keyword btmSpecialVar contained	cmdline colordir comspec
130syn keyword btmSpecialVar contained	copycmd dircmd temp temp4dos
131syn keyword btmSpecialVar contained	filecompletion path prompt
132
133" //Show 4DOS built-in variables specially specially
134syn keyword btmBuiltInVar contained	_4ver _alias _ansi
135syn keyword btmBuiltInVar contained	_apbatt _aplife _apmac _batch
136syn keyword btmBuiltInVar contained	_batchline _batchname _bg
137syn keyword btmBuiltInVar contained	_boot _ci _cmdproc _co
138syn keyword btmBuiltInVar contained	_codepage _column _columns
139syn keyword btmBuiltInVar contained	_country _cpu _cwd _cwds _cwp
140syn keyword btmBuiltInVar contained	_cwps _date _day _disk _dname
141syn keyword btmBuiltInVar contained	_dos _dosver _dow _dowi _doy
142syn keyword btmBuiltInVar contained	_dpmi _dv _env _fg _hlogfile
143syn keyword btmBuiltInVar contained	_hour _kbhit _kstack _lastdisk
144syn keyword btmBuiltInVar contained	_logfile _minute _monitor
145syn keyword btmBuiltInVar contained	_month _mouse _ndp _row _rows
146syn keyword btmBuiltInVar contained	_second _shell _swapping
147syn keyword btmBuiltInVar contained	_syserr _time _transient
148syn keyword btmBuiltInVar contained	_video _win _wintitle _year
149
150" //Commands in 4DOS and/or DOS
151syn match btmCommand	"\s?"
152syn match btmCommand	"^?"
153syn keyword btmCommand	alias append assign attrib
154syn keyword btmCommand	backup beep break cancel case
155syn keyword btmCommand	cd cdd cdpath chcp chdir
156syn keyword btmCommand	chkdsk cls color comp copy
157syn keyword btmCommand	ctty date debug default defrag
158syn keyword btmCommand	del delay describe dir
159syn keyword btmCommand	dirhistory dirs diskcomp
160syn keyword btmCommand	diskcopy doskey dosshell
161syn keyword btmCommand	drawbox drawhline drawvline
162"syn keyword btmCommand	echo echoerr echos echoserr
163syn keyword btmCommand	edit edlin emm386 endlocal
164syn keyword btmCommand	endswitch erase eset except
165syn keyword btmCommand	exe2bin exit expand fastopen
166syn keyword btmCommand	fc fdisk ffind find format
167syn keyword btmCommand	free global gosub goto
168syn keyword btmCommand	graftabl graphics help history
169syn keyword btmCommand	inkey input join keyb keybd
170syn keyword btmCommand	keystack label lh list loadbtm
171syn keyword btmCommand	loadhigh lock log md mem
172syn keyword btmCommand	memory mirror mkdir mode more
173syn keyword btmCommand	move nlsfunc on option path
174syn keyword btmCommand	pause popd print prompt pushd
175syn keyword btmCommand	quit rd reboot recover ren
176syn keyword btmCommand	rename replace restore return
177syn keyword btmCommand	rmdir scandisk screen scrput
178syn keyword btmCommand	select set setdos setlocal
179syn keyword btmCommand	setver share shift sort subst
180syn keyword btmCommand	swapping switch sys tee text
181syn keyword btmCommand	time timer touch tree truename
182syn keyword btmCommand	type unalias undelete unformat
183syn keyword btmCommand	unlock unset ver verify vol
184syn keyword btmCommand	vscrput y
185
186" Define the default highlighting.
187" For version 5.7 and earlier: only when not done already
188" For version 5.8 and later: only when an item doesn't have highlighting yet
189if version >= 508 || !exists("did_btm_syntax_inits")
190  if version < 508
191    let did_btm_syntax_inits = 1
192    command -nargs=+ HiLink hi link <args>
193  else
194    command -nargs=+ HiLink hi def link <args>
195  endif
196
197  HiLink btmLabel		Special
198  HiLink btmLabelMark		Special
199  HiLink btmCmdDivider		Special
200  HiLink btmConditional		btmStatement
201  HiLink btmDotBoolOp		btmStatement
202  HiLink btmRepeat		btmStatement
203  HiLink btmEchoCommand	btmStatement
204  HiLink btmEchoParam		btmStatement
205  HiLink btmStatement		Statement
206  HiLink btmTodo		Todo
207  HiLink btmString		String
208  HiLink btmNumber		Number
209  HiLink btmComment		Comment
210  HiLink btmArgument		Identifier
211  HiLink btmVariable		Identifier
212  HiLink btmEcho		String
213  HiLink btmBIFMatch		btmStatement
214  HiLink btmBuiltInFunc		btmStatement
215  HiLink btmBuiltInVar		btmStatement
216  HiLink btmSpecialVar		btmStatement
217  HiLink btmCommand		btmStatement
218
219  "optional highlighting
220  "HiLink btmShowTab		Error
221  "HiLink btmShowTabc		Error
222  "hiLink btmIdentifier		Identifier
223
224  delcommand HiLink
225endif
226
227let b:current_syntax = "btm"
228
229" vim: ts=8
230