1" Vim syntax file
2" Language:		Progress 4GL
3" Filename extensions:	*.p (collides with Pascal),
4"			*.i (collides with assembler)
5"			*.w (collides with cweb)
6" Maintainer:		Philip Uren		<philuSPAX@ieee.org> Remove "SPAX" spam block
7" Contributors:         Chris Ruprecht		<chrup@mac.com> (Chris, where are you now?)
8"			Mikhail Kuperblum	<mikhail@whasup.com>
9"			John Florian		<jflorian@voyager.net>
10" Last Change:		Wed Apr 12 08:55:35 EST 2006
11" $Id: progress.vim,v 1.3 2006/04/12 21:48:47 vimboss Exp $
12
13" For version 5.x: Clear all syntax items
14" For version 6.x: Quit when a syntax file was already loaded
15if version < 600
16	syntax clear
17elseif exists("b:current_syntax")
18	finish
19endif
20
21if version >= 600
22  setlocal iskeyword=@,48-57,_,-,!,#,$,%
23else
24  set iskeyword=@,48-57,_,-,!,#,$,%
25endif
26
27" The Progress editor doesn't cope with tabs very well.
28set expandtab
29
30syn case ignore
31
32" Progress Blocks of code and mismatched "end." errors.
33syn match	ProgressEndError	"\<end\>"
34syn region	ProgressDoBlock		transparent matchgroup=ProgressDo start="\<do\>" matchgroup=ProgressDo end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
35syn region	ProgressForBlock	transparent matchgroup=ProgressFor start="\<for\>" matchgroup=ProgressFor end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
36syn region	ProgressRepeatBlock	transparent matchgroup=ProgressRepeat start="\<repeat\>" matchgroup=ProgressRepeat end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
37syn region	ProgressCaseBlock	transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>\|\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
38
39" These are Progress reserved words,
40" and they could go in ProgressReserved,
41" but I found it more helpful to highlight them in a different color.
42syn keyword	ProgressConditional	if else then when otherwise
43syn keyword	ProgressFor		each where
44
45" Make those TODO and debugging notes stand out!
46syn keyword	ProgressTodo		contained	TODO BUG FIX
47syn keyword	ProgressDebug		contained	DEBUG
48syn keyword	ProgressDebug		debugger
49syn match  	ProgressTodo            contained	"NEED[S]*\s\s*WORK"
50
51" If you like to highlight the whole line of
52" the start and end of procedures
53" to make the whole block of code stand out:
54syn match	ProgressProcedure	"^\s*procedure.*"
55syn match	ProgressProcedure	"^\s*end\s\s*procedure.*"
56syn match	ProgressFunction	"^\s*function.*"
57syn match	ProgressFunction	"^\s*end\s\s*function.*"
58" ... otherwise use this:
59" syn keyword ProgressFunction	procedure function
60
61syn keyword	ProgressReserved	accum[ulate] active-window add alias all alter ambig[uous] analyz[e] and any apply as asc[ending] assign at attr[-space]
62syn keyword	ProgressReserved	authorization auto-ret[urn] avail[able] back[ground] before-h[ide] begins bell between blank break btos by call can-do can-find
63syn keyword	ProgressReserved	center[ed] character check chr clear clipboard col colon color col[umn] column-lab[el] col[umns] compiler connected control count-of
64syn keyword	ProgressReserved	cpstream create ctos current current-changed current-lang[uage] current-window current_date curs[or] database dataservers
65syn keyword	ProgressReserved	dbcodepage dbcollation dbname dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimal decimals declare
66syn keyword	ProgressReserved	def default default-noxl[ate] default-window def[ine] delete delimiter desc[ending] dict[ionary] disable discon[nect] disp
67syn keyword	ProgressReserved	disp[lay] distinct dos down drop editing enable encode entry error-stat[us] escape etime except exclusive
68syn keyword	ProgressReserved	exclusive[-lock] exclusive-web-us[er] exists export false fetch field field[s] file-info[rmation] fill find find-case-sensitive
69syn keyword	ProgressReserved	find-global find-next-occurrence find-prev-occurrence find-select find-wrap-around first first-of focus font form form[at]
70syn keyword	ProgressReserved	fram[e] frame-col frame-db frame-down frame-field frame-file frame-inde[x] frame-line frame-name frame-row frame-val[ue]
71syn keyword	ProgressReserved	from from-c[hars] from-p[ixels] gateway[s] get-byte get-codepage[s] get-coll[ations] get-key-val[ue] getbyte global go-on
72syn keyword	ProgressReserved	go-pend[ing] grant graphic-e[dge] group having header help hide import in index indicator input input-o[utput] insert
73syn keyword	ProgressReserved	integer into is is-attr[-space] join kblabel key-code key-func[tion] key-label keycode keyfunc[tion] keylabel keys keyword label
74syn keyword	ProgressReserved	last last-even[t] last-key last-of lastkey ldbname leave library like line-count[er] listi[ng] locked lookup machine-class
75syn keyword	ProgressReserved	map member message message-lines mouse mpe new next next-prompt no no-attr[-space] no-error no-f[ill] no-help no-hide no-label[s]
76syn keyword	ProgressReserved	no-lock no-map no-mes[sage] no-pause no-prefe[tch] no-undo no-val[idate] no-wait not null num-ali[ases] num-dbs num-entries
77syn keyword	ProgressReserved	of off old on open opsys option or os-append os-command os-copy os-create-dir os-delete os-dir os-drive[s] os-error os-rename
78syn keyword	ProgressReserved	os2 os400 output overlay page page-bot[tom] page-num[ber] page-top param[eter] pause pdbname persist[ent] pixels
79syn keyword	ProgressReserved	preproc[ess] privileges proc-ha[ndle] proc-st[atus] process program-name Progress prompt prompt[-for] promsgs propath provers[ion]
80syn keyword	ProgressReserved	put put-byte put-key-val[ue] putbyte query query-tuning quit r-index rcode-informatio[n] readkey recid record-len[gth] rect[angle]
81syn keyword	ProgressReserved	release reposition retain retry return return-val[ue] revert revoke run save schema screen screen-io screen-lines
82syn keyword	ProgressReserved	scroll sdbname search seek select self session set setuser[id] share[-lock] shared show-stat[s] skip some space status stream
83syn keyword	ProgressReserved	stream-io string-xref system-dialog table term term[inal] text text-cursor text-seg[-growth] this-procedure time title
84syn keyword	ProgressReserved	to today top-only trans trans[action] trigger triggers trim true underl[ine] undo unform[atted] union unique unix up update
85syn keyword	ProgressReserved	use-index use-revvideo use-underline user user[id] using v6frame value values variable view view-as vms wait-for web-con[text]
86syn keyword	ProgressReserved	window window-maxim[ized] window-minim[ized] window-normal with work-tab[le] workfile write xcode xref yes _cbit
87syn keyword	ProgressReserved	_control _list _memory _msg _pcontrol _serial[-num] _trace 
88
89" Strings. Handles embedded quotes.
90" Note that, for some reason, Progress doesn't use the backslash, "\"
91" as the escape character; it uses tilde, "~".
92syn region	ProgressString		matchgroup=ProgressQuote	start=+"+ end=+"+	skip=+\~'\|\~\~+
93syn region	ProgressString		matchgroup=ProgressQuote	start=+'+ end=+'+	skip=+\~'\|\~\~+
94
95syn match	ProgressIdentifier	"\<[a-zA-Z_%#]+\>()"
96
97" syn match	ProgressDelimiter	"()"
98
99syn match	ProgressMatrixDelimiter	"[][]"
100" If you prefer you can highlight the range
101"syn match	ProgressMatrixDelimiter	"[\d\+\.\.\d\+]"
102
103syn match	ProgressNumber		"\<\-\=\d\+\(u\=l\=\|lu\|f\)\>"
104syn match	ProgressByte		"\$[0-9a-fA-F]\+"
105
106" More values: Logicals, and Progress's unknown value, ?.
107syn match	ProgressNumber		"?"
108syn keyword	ProgressNumber		true false yes no
109
110" If you don't like tabs:
111syn match	ProgressShowTab		"\t"
112
113" If you don't like white space on the end of lines:
114" syn match	ProgressSpaceError	"\s\+$"
115
116syn region	ProgressComment		start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug
117syn region	ProgressInclude		start="^[ 	]*[{][^&]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
118syn region	ProgressPreProc		start="&" end="\>" contained
119
120" This next line works reasonably well.
121" syn match	ProgressOperator        "[!;|)(:.><+*=-]"
122"
123" Progress allows a '-' to be part of an identifier.  To be considered
124" the subtraction/negation operation operator it needs a non-word
125" character on either side.  Also valid are cases where the minus
126" operation appears at the beginning or end of a line.
127" This next line trips up on "no-undo" etc.
128" syn match	ProgressOperator	"[!;|)(:.><+*=]\|\W-\W\|^-\W\|\W-$"
129syn match	ProgressOperator	"[!;|)(:.><+*=]\|\s-\s\|^-\s\|\s-$"
130
131syn keyword	ProgressOperator	<= <> >= abs[olute] accelerator across add-first add-last advise alert-box allow-replication ansi-only anywhere append appl-alert[-boxes] application as-cursor ask-overwrite
132syn keyword	ProgressOperator	attach[ment] auto-end-key auto-endkey auto-go auto-ind[ent] auto-resize auto-z[ap] available-formats ave[rage] avg backward[s] base-key batch[-mode] bgc[olor] binary
133syn keyword	ProgressOperator	bind-where block-iteration-display border-bottom border-bottom-ch[ars] border-bottom-pi[xels] border-left border-left-char[s] border-left-pixe[ls] border-right border-right-cha[rs]
134syn keyword	ProgressOperator	border-right-pix[els] border-t[op] border-t[op-chars] border-top-pixel[s] both bottom box box-select[able] browse browse-header buffer buffer-chars buffer-lines
135syn keyword	ProgressOperator	button button[s] byte cache cache-size can-query can-set cancel-break cancel-button caps careful-paint case-sensitive cdecl char[acter] character_length charset
136syn keyword	ProgressOperator	checked choose clear-select[ion] close code codepage codepage-convert col-of colon-align[ed] color-table column-bgc[olor] column-dcolor column-fgc[olor] column-font
137syn keyword	ProgressOperator	column-label-bgc[olor] column-label-dcolor column-label-fgc[olor] column-label-font column-of column-pfc[olor] column-sc[rolling] combo-box command compile complete
138syn keyword	ProgressOperator	connect constrained contents context context-pop[up] control-containe[r] c[ontrol-form] convert-to-offse[t] convert count cpcase cpcoll cpint[ernal] cplog
139syn keyword	ProgressOperator	cpprint cprcodein cprcodeout cpterm crc-val[ue] c[reate-control] create-result-list-entry create-test-file current-column current-environm[ent] current-iteration
140syn keyword	ProgressOperator	current-result-row current-row-modified current-value cursor-char cursor-line cursor-offset data-entry-retur[n] data-t[ype] date date-f[ormat] day db-references
141syn keyword	ProgressOperator	dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] dec[imal] default-b[utton] default-extensio[n] defer-lob-fetch define defined delete-char delete-current-row
142syn keyword	ProgressOperator	delete-line delete-selected-row delete-selected-rows deselect-focused-row deselect-rows deselect-selected-row d[esign-mode] dialog-box dialog-help dir disabled display-message
143syn keyword	ProgressOperator	display-t[ype] double drag-enabled drop-down drop-down-list dump dynamic echo edge edge[-chars] edge-p[ixels] editor empty end-key endkey entered eq error error-col[umn]
144syn keyword	ProgressOperator	error-row event-t[ype] event[s] exclusive-id execute exp expand extended extent external extract fetch-selected-row fgc[olor] file file-name file-off[set] file-type
145syn keyword	ProgressOperator	filename fill-in filled filters first-child first-column first-proc[edure] first-tab-i[tem] fixed-only float focused-row font-based-layout font-table force-file
146syn keyword	ProgressOperator	fore[ground] form-input forward[s] frame-spa[cing] frame-x frame-y frequency from-cur[rent] full-height full-height-char[s] full-height-pixe[ls] full-pathn[ame]
147syn keyword	ProgressOperator	full-width full-width[-chars] full-width-pixel[s] ge get get-blue[-value] g[et-char-property] get-double get-dynamic get-file get-float get-green[-value]
148syn keyword	ProgressOperator	get-iteration get-license get-long get-message get-number get-pointer-value get-red[-value] get-repositioned-row get-selected-wid[get] get-short get-signature get-size
149syn keyword	ProgressOperator	get-string get-tab-item get-text-height get-text-height-char[s] get-text-height-pixe[ls] get-text-width get-text-width-c[hars] get-text-width-pixel[s] get-unsigned-short
150syn keyword	ProgressOperator	grayed grid-factor-horizont[al] grid-factor-vert[ical] grid-set grid-snap grid-unit-height grid-unit-height-cha[rs] grid-unit-height-pix[els] grid-unit-width grid-unit-width-char[s]
151syn keyword	ProgressOperator	grid-unit-width-pixe[ls] grid-visible gt handle height height[-chars] height-p[ixels] help-con[text] helpfile-n[ame] hidden hint hori[zontal] hwnd image image-down
152syn keyword	ProgressOperator	image-insensitive image-size image-size-c[hars] image-size-pixel[s] image-up immediate-display index-hint indexed-reposition info[rmation] init init[ial] initial-dir
153syn keyword	ProgressOperator	initial-filter initiate inner inner-chars inner-lines insert-b[acktab] insert-file insert-row insert-string insert-t[ab] int[eger] internal-entries is-lead-byte
154syn keyword	ProgressOperator	is-row-selected is-selected item items-per-row join-by-sqldb keep-frame-z-ord[er] keep-messages keep-tab-order key keyword-all label-bgc[olor] label-dc[olor] label-fgc[olor]
155syn keyword	ProgressOperator	label-font label-pfc[olor] labels language[s] large large-to-small last-child last-tab-i[tem] last-proce[dure] lc le leading left left-align[ed] left-trim length
156syn keyword	ProgressOperator	line list-events list-items list-query-attrs list-set-attrs list-widgets load l[oad-control] load-icon load-image load-image-down load-image-insensitive load-image-up
157syn keyword	ProgressOperator	load-mouse-point[er] load-small-icon log logical lookahead lower lt manual-highlight margin-extra margin-height margin-height-ch[ars] margin-height-pi[xels] margin-width
158syn keyword	ProgressOperator	margin-width-cha[rs] margin-width-pix[els] matches max max-chars max-data-guess max-height max-height[-chars] max-height-pixel[s] max-rows max-size max-val[ue] max-width
159syn keyword	ProgressOperator	max-width[-chars] max-width-p[ixels] maximize max[imum] memory menu menu-bar menu-item menu-k[ey] menu-m[ouse] menubar message-area message-area-font message-line
160syn keyword	ProgressOperator	min min-height min-height[-chars] min-height-pixel[s] min-size min-val[ue] min-width min-width[-chars] min-width-p[ixels] min[imum] mod modified mod[ulo] month mouse-p[ointer]
161syn keyword	ProgressOperator	movable move-after-tab-i[tem] move-before-tab-[item] move-col[umn] move-to-b[ottom] move-to-eof move-to-t[op] multiple multiple-key multitasking-interval must-exist
162syn keyword	ProgressOperator	name native ne new-row next-col[umn] next-sibling next-tab-ite[m] next-value no-apply no-assign no-bind-where no-box no-column-scroll[ing] no-convert no-current-value
163syn keyword	ProgressOperator	no-debug no-drag no-echo no-index-hint no-join-by-sqldb no-lookahead no-row-markers no-scrolling no-separate-connection no-separators no-und[erline] no-word-wrap
164syn keyword	ProgressOperator	none num-but[tons] num-col[umns] num-copies num-formats num-items num-iterations num-lines num-locked-colum[ns] num-messages num-results num-selected num-selected-rows
165syn keyword	ProgressOperator	num-selected-widgets num-tabs num-to-retain numeric numeric-f[ormat] octet_length ok ok-cancel on-frame[-border] ordered-join ordinal orientation os-getenv outer
166syn keyword	ProgressOperator	outer-join override owner page-size page-wid[th] paged parent partial-key pascal pathname pfc[olor] pinnable pixels-per-colum[n] pixels-per-row popup-m[enu] popup-o[nly]
167syn keyword	ProgressOperator	position precision presel[ect] prev prev-col[umn] prev-sibling prev-tab-i[tem] primary printer-control-handle printer-setup private-d[ata] profiler Progress-s[ource]
168syn keyword	ProgressOperator	publish put-double put-float put-long put-short put-string put-unsigned-short query-off-end question radio-buttons radio-set random raw raw-transfer read-file read-only
169syn keyword	ProgressOperator	real recursive refresh refreshable replace replace-selection-text replication-create replication-delete replication-write request resiza[ble] resize retry-cancel
170syn keyword	ProgressOperator	return-ins[erted] return-to-start-di[r] reverse-from right right-align[ed] right-trim round row row-ma[rkers] row-of rowid rule rule-row rule-y save-as save-file
171syn keyword	ProgressOperator	screen-val[ue] scroll-bars scroll-delta scroll-horiz-value scroll-offset scroll-to-current-row scroll-to-i[tem] scroll-to-selected-row scroll-vert-value scrollable
172syn keyword	ProgressOperator	scrollbar-horizo[ntal] scrollbar-vertic[al] scrolled-row-positio[n] scrolling se-check-pools se-enable-of[f] se-enable-on se-num-pools se-use-messa[ge] section select-focused-row
173syn keyword	ProgressOperator	select-next-row select-prev-row select-repositioned-row select-row selectable selected selected-items selection-end selection-list selection-start selection-text
174syn keyword	ProgressOperator	send sensitive separate-connection separators set-blue[-value] set-break set-cell-focus set-contents set-dynamic set-green[-value] set-leakpoint set-pointer-valu[e]
175syn keyword	ProgressOperator	s[et-property] set-red[-value] set-repositioned-row set-selection set-size set-wait[-state] side-lab side-lab[e] side-lab[el] side-label-handl[e] side-lab[els] silent
176syn keyword	ProgressOperator	simple single size size-c[hars] size-p[ixels] slider smallint sort source source-procedure sql sqrt start status-area status-area-font status-bar stdcall stenciled stop stoppe[d]
177syn keyword	ProgressOperator	stored-proc[edure] string sub-ave[rage] sub-count sub-max[imum] sub-me[nu] sub-menu-help sub-min[imum] sub-total subscribe subst[itute] substr[ing] subtype sum super suppress-warning[s]
178syn keyword	ProgressOperator	system-alert-box[es] system-help tab-position tabbable target target-procedure temp-dir[ectory] temp-table terminate text-selected three-d through thru tic-marks time-source title-bgc[olor]
179syn keyword	ProgressOperator	title-dc[olor] title-fgc[olor] title-fo[nt] to-rowid toggle-box tool-bar top topic total trailing trunc[ate] type unbuff[ered] unique-id unload unsubscribe upper use use-dic[t-exps]
180syn keyword	ProgressOperator	use-filename use-text v6display valid-event valid-handle validate validate-condition validate-message var[iable] vert[ical] virtual-height virtual-height-c[hars]
181syn keyword	ProgressOperator	virtual-height-pixel[s] virtual-width virtual-width-ch[ars] virtual-width-pi[xels] visible wait warning weekday widget widget-e[nter] widget-h[andle] widget-l[eave]
182syn keyword	ProgressOperator	widget-pool width width[-chars] width-p[ixels] window-name window-sta[te] window-sys[tem] word-wrap x-of y-of year yes-no yes-no-cancel _dcm
183
184syn keyword	ProgressType		char[acter] int[eger] format
185syn keyword	ProgressType		var[iable] log[ical] da[te]
186
187syn sync lines=800
188
189" Define the default highlighting.
190" For version 5.7 and earlier: only when not done already
191" For version 5.8 and later: only when an item doesn't have highlighting yet
192if version >= 508 || !exists("did_progress_syntax_inits")
193  if version < 508
194	let did_progress_syntax_inits = 1
195	command -nargs=+ HiLink hi link <args>
196  else
197	command -nargs=+ HiLink hi def link <args>
198  endif
199
200  " The default methods for highlighting. Can be overridden later.
201  HiLink ProgressByte			Number
202  HiLink ProgressCase			Repeat
203  HiLink ProgressComment		Comment
204  HiLink ProgressConditional		Conditional
205  HiLink ProgressDebug			Debug
206  HiLink ProgressDo			Repeat
207  HiLink ProgressEndError		Error
208  HiLink ProgressFor			Repeat
209  HiLink ProgressFunction		Procedure
210  HiLink ProgressIdentifier		Identifier
211  HiLink ProgressInclude		Include
212  HiLink ProgressMatrixDelimiter	Identifier
213  HiLink ProgressNumber			Number
214  HiLink ProgressOperator		Operator
215  HiLink ProgressPreProc		PreProc
216  HiLink ProgressProcedure		Procedure
217  HiLink ProgressQuote			Delimiter
218  HiLink ProgressRepeat			Repeat
219  HiLink ProgressReserved		Statement
220  HiLink ProgressSpaceError		Error
221  HiLink ProgressString			String
222  HiLink ProgressTodo			Todo
223  HiLink ProgressType			Statement
224  HiLink ProgressShowTab		Error
225
226  delcommand HiLink
227endif
228
229let b:current_syntax = "progress"
230
231" vim: ts=8 sw=8
232