1" Vim syntax file
2" Language:	DCL (Digital Command Language - vms)
3" Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
4" Last Change:	Sep 11, 2006
5" Version:	6
6" URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
7
8" For version 5.x: Clear all syntax items
9" For version 6.x: Quit when a syntax file was already loaded
10if version < 600
11  syntax clear
12elseif exists("b:current_syntax")
13  finish
14endif
15
16if version < 600
17  set iskeyword=$,@,48-57,_
18else
19  setlocal iskeyword=$,@,48-57,_
20endif
21
22syn case ignore
23syn keyword dclInstr	accounting	del[ete]	gen[cat]	mou[nt]	run
24syn keyword dclInstr	all[ocate]	dep[osit]	gen[eral]	ncp	run[off]
25syn keyword dclInstr	ana[lyze]	dia[gnose]	gos[ub]	ncs	sca
26syn keyword dclInstr	app[end]	dif[ferences]	got[o]	on	sea[rch]
27syn keyword dclInstr	ass[ign]	dir[ectory]	hel[p]	ope[n]	set
28syn keyword dclInstr	att[ach]	dis[able]	ico[nv]	pas[cal]	sho[w]
29syn keyword dclInstr	aut[horize]	dis[connect]	if	pas[sword]	sor[t]
30syn keyword dclInstr	aut[ogen]	dis[mount]	ini[tialize]	pat[ch]	spa[wn]
31syn keyword dclInstr	bac[kup]	dpm[l]	inq[uire]	pca	sta[rt]
32syn keyword dclInstr	cal[l]	dqs	ins[tall]	pho[ne]	sto[p]
33syn keyword dclInstr	can[cel]	dsr	job	pri[nt]	sub[mit]
34syn keyword dclInstr	cc	dst[graph]	lat[cp]	pro[duct]	sub[routine]
35syn keyword dclInstr	clo[se]	dtm	lib[rary]	psw[rap]	swx[cr]
36syn keyword dclInstr	cms	dum[p]	lic[ense]	pur[ge]	syn[chronize]
37syn keyword dclInstr	con[nect]	edi[t]	lin[k]	qde[lete]	sys[gen]
38syn keyword dclInstr	con[tinue]	ena[ble]	lmc[p]	qse[t]	sys[man]
39syn keyword dclInstr	con[vert]	end[subroutine]	loc[ale]	qsh[ow]	tff
40syn keyword dclInstr	cop[y]	eod	log[in]	rea[d]	then
41syn keyword dclInstr	cre[ate]	eoj	log[out]	rec[all]	typ[e]
42syn keyword dclInstr	cxx	exa[mine]	lse[dit]	rec[over]	uil
43syn keyword dclInstr	cxx[l_help]	exc[hange]	mac[ro]	ren[ame]	unl[ock]
44syn keyword dclInstr	dea[llocate]	exi[t]	mai[l]	rep[ly]	ves[t]
45syn keyword dclInstr	dea[ssign]	fdl	mer[ge]	req[uest]	vie[w]
46syn keyword dclInstr	deb[ug]	flo[wgraph]	mes[sage]	ret[urn]	wai[t]
47syn keyword dclInstr	dec[k]	fon[t]	mms	rms	wri[te]
48syn keyword dclInstr	def[ine]	for[tran]
49
50syn keyword dclLexical	f$context	f$edit	  f$getjpi	f$message	f$setprv
51syn keyword dclLexical	f$csid	f$element	  f$getqui	f$mode	f$string
52syn keyword dclLexical	f$cvsi	f$environment	  f$getsyi	f$parse	f$time
53syn keyword dclLexical	f$cvtime	f$extract	  f$identifier	f$pid	f$trnlnm
54syn keyword dclLexical	f$cvui	f$fao	  f$integer	f$privilege	f$type
55syn keyword dclLexical	f$device	f$file_attributes f$length	f$process	f$user
56syn keyword dclLexical	f$directory	f$getdvi	  f$locate	f$search	f$verify
57
58syn match   dclMdfy	"/\I\i*"	nextgroup=dclMdfySet,dclMdfySetString
59syn match   dclMdfySet	"=[^ \t"]*"	contained
60syn region  dclMdfySet	matchgroup=dclMdfyBrkt start="=\[" matchgroup=dclMdfyBrkt end="]"	contains=dclMdfySep
61syn region  dclMdfySetString	start='="'	skip='""'	end='"'	contained
62syn match   dclMdfySep	"[:,]"	contained
63
64" Numbers
65syn match   dclNumber	"\d\+"
66
67" Varname (mainly to prevent dclNumbers from being recognized when part of a dclVarname)
68syn match   dclVarname	"\I\i*"
69
70" Filenames (devices, paths)
71syn match   dclDevice	"\I\i*\(\$\I\i*\)\=:[^=]"me=e-1		nextgroup=dclDirPath,dclFilename
72syn match   dclDirPath	"\[\(\I\i*\.\)*\I\i*\]"		contains=dclDirSep	nextgroup=dclFilename
73syn match   dclFilename	"\I\i*\$\(\I\i*\)\=\.\(\I\i*\)*\(;\d\+\)\="	contains=dclDirSep
74syn match   dclFilename	"\I\i*\.\(\I\i*\)\=\(;\d\+\)\="	contains=dclDirSep	contained
75syn match   dclDirSep	"[[\].;]"
76
77" Strings
78syn region  dclString	start='"'	skip='""'	end='"'	contains=@Spell
79
80" $ stuff and comments
81syn cluster dclCommentGroup	contains=dclStart,dclTodo,@Spell
82syn match   dclStart	"^\$"	skipwhite nextgroup=dclExe
83syn match   dclContinue	"-$"
84syn match   dclComment	"^\$!.*$"	contains=@dclCommentGroup
85syn match   dclExe	"\I\i*"	contained
86syn keyword dclTodo contained	COMBAK	DEBUG	FIXME	TODO	XXX
87
88" Assignments and Operators
89syn match   dclAssign	":==\="
90syn match   dclAssign	"="
91syn match   dclOper	"--\|+\|\*\|/"
92syn match   dclLogOper	"\.[a-zA-Z][a-zA-Z][a-zA-Z]\=\." contains=dclLogical,dclLogSep
93syn keyword dclLogical contained	and	ge	gts	lt	nes
94syn keyword dclLogical contained	eq	ges	le	lts	not
95syn keyword dclLogical contained	eqs	gt	les	ne	or
96syn match   dclLogSep	"\."		contained
97
98" @command procedures
99syn match   dclCmdProcStart	"@"			nextgroup=dclCmdProc
100syn match   dclCmdProc	"\I\i*\(\.\I\i*\)\="	contained
101syn match   dclCmdProc	"\I\i*:"		contained	nextgroup=dclCmdDirPath,dclCmdProc
102syn match   dclCmdDirPath	"\[\(\I\i*\.\)*\I\i*\]"	contained	nextgroup=delCmdProc
103
104" labels
105syn match   dclGotoLabel	"^\$\s*\I\i*:\s*$"	contains=dclStart
106
107" parameters
108syn match   dclParam	"'\I[a-zA-Z0-9_$]*'\="
109
110" () matching (the clusters are commented out until a vim/vms comes out for v5.2+)
111"syn cluster dclNextGroups	contains=dclCmdDirPath,dclCmdProc,dclCmdProc,dclDirPath,dclFilename,dclFilename,dclMdfySet,dclMdfySetString,delCmdProc,dclExe,dclTodo
112"syn region  dclFuncList	matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,@dclNextGroups
113syn region  dclFuncList	matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,dclCmdDirPath,dclCmdProc,dclCmdProc,dclDirPath,dclFilename,dclFilename,dclMdfySet,dclMdfySetString,delCmdProc,dclExe,dclTodo
114syn match   dclError	")"
115
116" Define the default highlighting.
117" For version 5.7 and earlier: only when not done already
118" For version 5.8 and later: only when an item doesn't have highlighting yet
119if version >= 508 || !exists("did_dcl_syntax_inits")
120  if version < 508
121    let did_dcl_syntax_inits = 1
122    command -nargs=+ HiLink hi link <args>
123  else
124    command -nargs=+ HiLink hi def link <args>
125  endif
126
127 HiLink dclLogOper	dclError
128 HiLink dclLogical	dclOper
129 HiLink dclLogSep	dclSep
130
131 HiLink dclAssign	Operator
132 HiLink dclCmdProc	Special
133 HiLink dclCmdProcStart	Operator
134 HiLink dclComment	Comment
135 HiLink dclContinue	Statement
136 HiLink dclDevice	Identifier
137 HiLink dclDirPath	Identifier
138 HiLink dclDirPath	Identifier
139 HiLink dclDirSep	Delimiter
140 HiLink dclError	Error
141 HiLink dclExe		Statement
142 HiLink dclFilename	NONE
143 HiLink dclGotoLabel	Label
144 HiLink dclInstr	Statement
145 HiLink dclLexical	Function
146 HiLink dclMdfy	Type
147 HiLink dclMdfyBrkt	Delimiter
148 HiLink dclMdfySep	Delimiter
149 HiLink dclMdfySet	Type
150 HiLink dclMdfySetString	String
151 HiLink dclNumber	Number
152 HiLink dclOper	Operator
153 HiLink dclParam	Special
154 HiLink dclSep		Delimiter
155 HiLink dclStart	Delimiter
156 HiLink dclString	String
157 HiLink dclTodo	Todo
158
159 delcommand HiLink
160endif
161
162let b:current_syntax = "dcl"
163
164" vim: ts=16
165