" Vim syntax file
" Language:	cl ("Clever Language" by Multibase, http://www.mbase.com.au)
" Filename extensions: *.ent, *.eni
" Maintainer:	Philip Uren <philu@system77.com>
" Last update:	Wed May  2 10:30:30 EST 2001

" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
	syntax clear
elseif exists("b:current_syntax")
	finish
endif

if version >= 600
	setlocal iskeyword=@,48-57,_,-,
else
	set iskeyword=@,48-57,_,-,
endif

syn case ignore

syn sync lines=300

"If/else/elsif/endif and while/wend mismatch errors
syn match   clifError		"\<wend\>"
syn match   clifError		"\<elsif\>"
syn match   clifError		"\<else\>"
syn match   clifError		"\<endif\>"

" If and while regions
syn region clLoop	transparent matchgroup=clWhile start="\<while\>" matchgroup=clWhile end="\<wend\>" contains=ALLBUT,clBreak,clProcedure
syn region clIf		transparent matchgroup=clConditional start="\<if\>" matchgroup=clConditional end="\<endif\>"   contains=ALLBUT,clBreak,clProcedure

" Make those TODO notes and debugging stand out!
syn keyword	clTodo			contained	TODO BUG DEBUG FIX
syn keyword clDebug			contained	debug

syn match	clComment		"#.*$"		contains=clTodo,clNeedsWork
syn region	clProcedure		oneline		start="^\s*[{}]" end="$"
syn match	clInclude					"^\s*include\s.*"

" We don't put "debug" in the clSetOptions;
" we contain it in clSet so we can make it stand out.
syn keyword clSetOptions	transparent aauto abort align convert E fill fnum goback hangup justify null_exit output rauto rawprint rawdisplay repeat skip tab trim
syn match	clSet			"^\s*set\s.*" contains=clSetOptions,clDebug

syn match clPreProc			"^\s*#P.*"

syn keyword clConditional	else elsif
syn keyword clWhile			continue endloop
" 'break' needs to be a region so we can sync on it above.
syn region clBreak			oneline start="^\s*break" end="$"

syn match clOperator		"[!;|)(:.><+*=-]"

syn match clNumber			"\<\d\+\(u\=l\=\|lu\|f\)\>"

syn region clString	matchgroup=clQuote	start=+"+ end=+"+	skip=+\\"+
syn region clString matchgroup=clQuote	start=+'+ end=+'+	skip=+\\'+

syn keyword clReserved		ERROR EXIT INTERRUPT LOCKED LREPLY MODE MCOL MLINE MREPLY NULL REPLY V1 V2 V3 V4 V5 V6 V7 V8 V9 ZERO BYPASS GOING_BACK AAUTO ABORT ABORT ALIGN BIGE CONVERT FNUM GOBACK HANGUP JUSTIFY NEXIT OUTPUT RAUTO RAWDISPLAY RAWPRINT REPEAT SKIP TAB TRIM LCOUNT PCOUNT PLINES SLINES SCOLS MATCH LMATCH

syn keyword clFunction		asc asize chr name random slen srandom day getarg getcgi getenv lcase scat sconv sdel skey smult srep substr sword trim ucase match

syn keyword clStatement		clear clear_eol clear_eos close copy create unique with where empty define define ldefine delay_form delete escape exit_block exit_do exit_process field fork format get getfile getnext getprev goto head join maintain message no_join on_eop on_key on_exit on_delete openin openout openapp pause popenin popenout popenio print put range read redisplay refresh restart_block screen select sleep text unlock write and not or do

" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if	version >= 508 || !exists("did_cl_syntax_inits")
	if	version < 508
		let did_cl_syntax_inits = 1
		command -nargs=+ HiLink hi link <args>
	else
		command -nargs=+ HiLink hi def link <args>
	endif

	HiLink clifError			Error
	HiLink clWhile				Repeat
	HiLink clConditional		Conditional
	HiLink clDebug				Debug
	HiLink clNeedsWork			Todo
	HiLink clTodo				Todo
	HiLink clComment			Comment
	HiLink clProcedure			Procedure
	HiLink clBreak				Procedure
	HiLink clInclude			Include
	HiLink clSetOption			Statement
	HiLink clSet				Identifier
	HiLink clPreProc			PreProc
	HiLink clOperator			Operator
	HiLink clNumber				Number
	HiLink clString				String
	HiLink clQuote				Delimiter
	HiLink clReserved			Identifier
	HiLink clFunction			Function
	HiLink clStatement			Statement

	delcommand HiLink
endif

let b:current_syntax = "cl"

" vim: ts=4 sw=4
