forked from aniani/vim
		
	
		
			
	
	
		
			236 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			236 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|  | " Vim syntax file | ||
|  | " Language:	TCL/TK | ||
|  | " Maintainer:	Dean Copsey <copsey@cs.ucdavis.edu> | ||
|  | "		(previously Matt Neumann <mattneu@purpleturtle.com>) | ||
|  | "		(previously Allan Kelly <allan@fruitloaf.co.uk>) | ||
|  | " Original:	Robin Becker <robin@jessikat.demon.co.uk> | ||
|  | " Last Change:	2004 May 16 | ||
|  | " | ||
|  | " Keywords TODO: format clock click anchor | ||
|  | 
 | ||
|  | " 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 | ||
|  | 
 | ||
|  | " A bunch of useful keywords | ||
|  | syn keyword tclStatement	proc global return lindex | ||
|  | syn keyword tclStatement	llength lappend lreplace lrange list concat incr | ||
|  | syn keyword tclStatement	upvar set | ||
|  | syn keyword tclLabel		case default | ||
|  | syn keyword tclConditional	if then else elseif switch | ||
|  | syn keyword tclRepeat		while for foreach break continue | ||
|  | syn keyword tcltkSwitch	contained	insert create polygon fill outline tag | ||
|  | 
 | ||
|  | " WIDGETS | ||
|  | " commands associated with widgets | ||
|  | syn keyword tcltkWidgetSwitch contained background highlightbackground insertontime cget | ||
|  | syn keyword tcltkWidgetSwitch contained selectborderwidth borderwidth highlightcolor insertwidth | ||
|  | syn keyword tcltkWidgetSwitch contained selectforeground cursor highlightthickness padx setgrid | ||
|  | syn keyword tcltkWidgetSwitch contained exportselection insertbackground pady takefocus | ||
|  | syn keyword tcltkWidgetSwitch contained font insertborderwidth relief xscrollcommand | ||
|  | syn keyword tcltkWidgetSwitch contained foreground insertofftime selectbackground yscrollcommand | ||
|  | syn keyword tcltkWidgetSwitch contained height spacing1 spacing2 spacing3 | ||
|  | syn keyword tcltkWidgetSwitch contained state tabs width wrap | ||
|  | " button | ||
|  | syn keyword tcltkWidgetSwitch contained command default | ||
|  | " canvas | ||
|  | syn keyword tcltkWidgetSwitch contained closeenough confine scrollregion xscrollincrement yscrollincrement orient | ||
|  | " checkbutton, radiobutton | ||
|  | syn keyword tcltkWidgetSwitch contained indicatoron offvalue onvalue selectcolor selectimage state variable | ||
|  | " entry, frame | ||
|  | syn keyword tcltkWidgetSwitch contained show class colormap container visual | ||
|  | " listbox, menu | ||
|  | syn keyword tcltkWidgetSwitch contained selectmode postcommand selectcolor tearoff tearoffcommand title type | ||
|  | " menubutton, message | ||
|  | syn keyword tcltkWidgetSwitch contained direction aspect justify | ||
|  | " scale | ||
|  | syn keyword tcltkWidgetSwitch contained bigincrement digits from length resolution showvalue sliderlength sliderrelief tickinterval to | ||
|  | " scrollbar | ||
|  | syn keyword tcltkWidgetSwitch contained activerelief elementborderwidth | ||
|  | " image | ||
|  | syn keyword tcltkWidgetSwitch contained delete names types create | ||
|  | " variable reference | ||
|  | 	" ::optional::namespaces | ||
|  | syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_.]*::\)*\)\a[a-zA-Z0-9_.]*" | ||
|  | 	" ${...} may contain any character except '}' | ||
|  | syn match tclVarRef "${[^}]*}" | ||
|  | " menu, mane add | ||
|  | syn keyword tcltkWidgetSwitch contained active end last none cascade checkbutton command radiobutton separator | ||
|  | syn keyword tcltkWidgetSwitch contained activebackground actveforeground accelerator background bitmap columnbreak | ||
|  | syn keyword tcltkWidgetSwitch contained font foreground hidemargin image indicatoron label menu offvalue onvalue | ||
|  | syn keyword tcltkWidgetSwitch contained selectcolor selectimage state underline value variable | ||
|  | syn keyword tcltkWidgetSwitch contained add clone configure delete entrycget entryconfigure index insert invoke | ||
|  | syn keyword tcltkWidgetSwitch contained post postcascade type unpost yposition activate | ||
|  | "syn keyword tcltkWidgetSwitch contained | ||
|  | "syn match tcltkWidgetSwitch contained | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<button\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scale\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | 
 | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<canvas\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<checkbutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<entry\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<frame\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<image\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<listbox\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<menubutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<message\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<radiobutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scrollbar\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | " These words are dual purpose. | ||
|  | " match switches | ||
|  | "syn match tcltkWidgetSwitch contained "-text"hs=s+1 | ||
|  | syn match tcltkWidgetSwitch contained "-text\(var\)\?"hs=s+1 | ||
|  | syn match tcltkWidgetSwitch contained "-menu"hs=s+1 | ||
|  | syn match tcltkWidgetSwitch contained "-label"hs=s+1 | ||
|  | " match commands - 2 lines for pretty match. | ||
|  | "variable | ||
|  | " Special case - If a number follows a variable region, it must be at the end of | ||
|  | " the pattern, by definition. Therefore, (1) either include a number as the region | ||
|  | " end and exclude tclNumber from the contains list, or (2) make variable | ||
|  | " keepend. As (1) would put variable out of step with everything else, use (2). | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="^\<variable\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="\s\<variable\>\|\[\<variable\>"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand | ||
|  | " menu | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<menu\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\<menu\>\|\[\<menu\>"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | " label | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<label\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\<label\>\|\[\<label\>"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | " text | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<text\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tcltkSwitch,tclNumber,tclVarRef,tclString | ||
|  | syn region tcltkWidget matchgroup=tcltkWidgetColor start="\s\<text\>\|\[\<text\>"hs=s+1 matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef | ||
|  | 
 | ||
|  | " This isn't contained (I don't think) so it's OK to just associate with the Color group. | ||
|  | " TODO: This could be wrong. | ||
|  | syn keyword tcltkWidgetColor	toplevel | ||
|  | 
 | ||
|  | 
 | ||
|  | syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<configure\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef keepend | ||
|  | syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<cget\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef | ||
|  | 
 | ||
|  | 
 | ||
|  | " NAMESPACE | ||
|  | " commands associated with namespace | ||
|  | syn keyword tcltkNamespaceSwitch contained children code current delete eval | ||
|  | syn keyword tcltkNamespaceSwitch contained export forget import inscope origin | ||
|  | syn keyword tcltkNamespaceSwitch contained parent qualifiers tail which command variable | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="\<namespace\>" matchgroup=NONE skip="^\s*$" end="{\|}\|]\|\"\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkNamespaceSwitch | ||
|  | 
 | ||
|  | " EXPR | ||
|  | " commands associated with expr | ||
|  | syn keyword tcltkMaths	contained	acos	cos	hypot	sinh | ||
|  | syn keyword tcltkMaths	contained	asin	cosh	log	sqrt | ||
|  | syn keyword tcltkMaths	contained	atan	exp	log10	tan | ||
|  | syn keyword tcltkMaths	contained	atan2	floor	pow	tanh | ||
|  | syn keyword tcltkMaths	contained	ceil	fmod	sin | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="\<expr\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf | ||
|  | 
 | ||
|  | " format | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="\<format\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf | ||
|  | 
 | ||
|  | " PACK | ||
|  | " commands associated with pack | ||
|  | syn keyword tcltkPackSwitch	contained	forget info propogate slaves | ||
|  | syn keyword tcltkPackConfSwitch	contained	after anchor before expand fill in ipadx ipady padx pady side | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="\<pack\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkPackSwitch,tcltkPackConf,tcltkPackConfSwitch,tclNumber,tclVarRef,tclString,tcltkCommand keepend | ||
|  | 
 | ||
|  | " STRING | ||
|  | " commands associated with string | ||
|  | syn keyword tcltkStringSwitch	contained	compare first index last length match range tolower toupper trim trimleft trimright wordstart wordend | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="\<string\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkStringSwitch,tclNumber,tclVarRef,tclString,tcltkCommand | ||
|  | 
 | ||
|  | " ARRAY | ||
|  | " commands associated with array | ||
|  | syn keyword tcltkArraySwitch	contained	anymore donesearch exists get names nextelement size startsearch set | ||
|  | " match from command name to ] or EOL | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="\<array\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkArraySwitch,tclNumber,tclVarRef,tclString,tcltkCommand | ||
|  | 
 | ||
|  | " LSORT | ||
|  | " switches for lsort | ||
|  | syn keyword tcltkLsortSwitch	contained	ascii dictionary integer real command increasing decreasing index | ||
|  | " match from command name to ] or EOL | ||
|  | syn region tcltkCommand matchgroup=tcltkCommandColor start="\<lsort\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkLsortSwitch,tclNumber,tclVarRef,tclString,tcltkCommand | ||
|  | 
 | ||
|  | syn keyword tclTodo contained	TODO | ||
|  | 
 | ||
|  | 
 | ||
|  | " String and Character contstants | ||
|  | " Highlight special characters (those which have a backslash) differently | ||
|  | syn match   tclSpecial contained "\\\d\d\d\=\|\\." | ||
|  | " A string needs the skip argument as it may legitimately contain \". | ||
|  | " Match at start of line | ||
|  | syn region  tclString		  start=+^"+ end=+"+ contains=tclSpecial skip=+\\\\\|\\"+ | ||
|  | "Match all other legal strings. | ||
|  | syn region  tclString		  start=+[^\\]"+ms=s+1  end=+"+ contains=tclSpecial skip=+\\\\\|\\"+ | ||
|  | 
 | ||
|  | syn match   tclLineContinue "\\\s*$" | ||
|  | 
 | ||
|  | "integer number, or floating point number without a dot and with "f". | ||
|  | syn case ignore | ||
|  | syn match  tclNumber		"\<\d\+\(u\=l\=\|lu\|f\)\>" | ||
|  | "floating point number, with dot, optional exponent | ||
|  | syn match  tclNumber		"\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" | ||
|  | "floating point number, starting with a dot, optional exponent | ||
|  | syn match  tclNumber		"\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" | ||
|  | "floating point number, without dot, with exponent | ||
|  | syn match  tclNumber		"\<\d\+e[-+]\=\d\+[fl]\=\>" | ||
|  | "hex number | ||
|  | syn match  tclNumber		"0x[0-9a-f]\+\(u\=l\=\|lu\)\>" | ||
|  | "syn match  tclIdentifier	"\<[a-z_][a-z0-9_]*\>" | ||
|  | syn case match | ||
|  | 
 | ||
|  | syn region  tclComment		start="^\s*\#" skip="\\$" end="$" contains=tclTodo | ||
|  | syn region  tclComment		start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo | ||
|  | 
 | ||
|  | "syn sync ccomment tclComment | ||
|  | 
 | ||
|  | " 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_tcl_syntax_inits") | ||
|  |   if version < 508 | ||
|  |     let did_tcl_syntax_inits = 1 | ||
|  |     command -nargs=+ HiLink hi link <args> | ||
|  |   else | ||
|  |     command -nargs=+ HiLink hi def link <args> | ||
|  |   endif | ||
|  | 
 | ||
|  |   HiLink tcltkSwitch		Special | ||
|  |   HiLink tclLabel		Label | ||
|  |   HiLink tclConditional		Conditional | ||
|  |   HiLink tclRepeat		Repeat | ||
|  |   HiLink tclNumber		Number | ||
|  |   HiLink tclError		Error | ||
|  |   HiLink tclStatement		Statement | ||
|  |   "HiLink tclStatementColor	Statement | ||
|  |   HiLink tclString		String | ||
|  |   HiLink tclComment		Comment | ||
|  |   HiLink tclSpecial		Special | ||
|  |   HiLink tclTodo		Todo | ||
|  |   " Below here are the commands and their options. | ||
|  |   HiLink tcltkCommandColor	Statement | ||
|  |   HiLink tcltkWidgetColor	Structure | ||
|  |   HiLink tclLineContinue	WarningMsg | ||
|  |   HiLink tcltkStringSwitch	Special | ||
|  |   HiLink tcltkArraySwitch	Special | ||
|  |   HiLink tcltkLsortSwitch	Special | ||
|  |   HiLink tcltkPackSwitch	Special | ||
|  |   HiLink tcltkPackConfSwitch	Special | ||
|  |   HiLink tcltkMaths		Special | ||
|  |   HiLink tcltkNamespaceSwitch	Special | ||
|  |   HiLink tcltkWidgetSwitch	Special | ||
|  |   HiLink tcltkPackConfColor	Identifier | ||
|  |   "HiLink tcltkLsort		Statement | ||
|  |   HiLink tclVarRef		Identifier | ||
|  | 
 | ||
|  |   delcommand HiLink | ||
|  | endif | ||
|  | 
 | ||
|  | let b:current_syntax = "tcl" | ||
|  | 
 | ||
|  | " vim: ts=8 |