progress.vim

" fix problems with nested comments
try | %s/\*\/\*\//\*\/ \*\//g | catch /^Vim\%((\a\+)\)\=:E/ | endtry

syn clear
syn case ignore

syn keyword keyword not run find format where like put control index field initial no-lock exclusive-lock no-error no-wait by yes no leave view assign create release available delete first return delimiter begins display down with page width no-box no-labels output quit to as view-as alert-box error message import export unformatted from
" this section causes problems with procedure folding and folding of the
" related items
    "syn keyword conditional if then else case when next and or
    "syn keyword repeat do for each while
syn keyword function locked avail substring trim
" this section causes a problem with the temp-table folding
    "syn keyword define contained define def as var variable parameter
    "syn match define /^\s*\(def\|define\).*\(temp-table\)\@!/ contains=ALL
syn keyword type int integer char character date logical temp-table shared stream input frame buffer init
syn keyword boolean true false

" we say 'extend' below to make sure that these items don't end the parent
" block; for instance, we don't want a double quoted string containing the
" letters END and a period to actually end a real region
syn region doublestring start=/"/ end=/"/ extend
syn region singlestring start=/'/ end=/'/ extend
syn region form start=/\(\s\|^\)form.*/ end=/\.$\|\.\s/ contains=comment fold
syn region frame start=/\(\s\|^\)\(def\|define\) frame.*/ end=/\.$\|\.\s/ contains=comment fold
syn region temptable start=/\(\s\|^\)\(def\|define\) \(shared \)\=temp-table.*/ end=/\.$\|\.\s/ contains=comment fold
syn region caseregion start=/\(\s\|^\)case[^:.]*:/ end=/\(\s\|^\)end[^.]*\./ contains=ALLBUT,procedure fold keepend extend
syn region doregion start=/\(\s\|^\)do\s*:\|do\s\+\(while\|until\)[^:.]*[:.]/ end=/\(\s\|^\)end[^.]*\./ contains=ALLBUT,procedure fold keepend extend
syn region repeatregion start=/\(\s\|^\)repeat\s*:/ end=/\(\s\|^\)end[^.]*\./ contains=ALLBUT,procedure fold keepend extend
syn region foreachregion start=/\(\s\|^\)for each/ end=/\(\s\|^\)end[^.]*\./ contains=ALLBUT,procedure fold keepend extend
syn region procedure start=/\(\s\|^\)procedure / end=/\(\s\|^\)end[^.]*\./ contains=ALLBUT,procedure fold keepend

" comments work unless a nested comment ends without a space before ending the
" outer comment: example /* test /* nest */*/
syn region comment start=/\/\*/ end=/\*\// contains=comment extend

" use these to help identify syntax bugs...rename the above regions with or
" without a T on the end; then set foldnestmax=20 below
hi caseregionT guifg=black guibg=yellow
hi doregionT guifg=white guibg=blue
hi foreachregionT guifg=white guibg=green
hi procedureT guifg=white guibg=brown

hi link doublestring String
hi link singlestring String

setl fen
setl foldnestmax=1
"setl foldnestmax=20
setl foldlevel=0
setl foldmethod=syntax
syn sync fromstart

" the default progress syntax file is using set expandtab which screws up
" other new buffers
set noexpandtab
setl expandtab