1" Vim syntax file 2" Language: TCL/TK 3" Maintainer: Brett Cannon <[email protected]> 4" (previously Dean Copsey <[email protected]>) 5" (previously Matt Neumann <[email protected]>) 6" (previously Allan Kelly <[email protected]>) 7" Original: Robin Becker <[email protected]> 8" Last Change: 2006 Nov 17 9" 10" Keywords TODO: format clock click anchor 11 12" For version 5.x: Clear all syntax items 13" For version 6.x: Quit when a syntax file was already loaded 14if version < 600 15 syntax clear 16elseif exists("b:current_syntax") 17 finish 18endif 19 20" A bunch of useful keywords 21syn keyword tclStatement tell socket subst open eof pwd glob list exec pid 22syn keyword tclStatement auto_load_index time unknown eval lrange fblocked 23syn keyword tclStatement lsearch auto_import gets lappend proc variable llength 24syn keyword tclStatement auto_execok return linsert error catch clock info 25syn keyword tclStatement split array fconfigure concat join lreplace source 26syn keyword tclStatement fcopy global auto_qualify update close cd auto_load 27syn keyword tclStatement file append format read package set binary namespace 28syn keyword tclStatement scan trace seek flush after vwait uplevel lset rename 29syn keyword tclStatement fileevent regexp upvar unset encoding expr load regsub 30syn keyword tclStatement interp exit puts incr lindex lsort tclLog string 31syn keyword tclLabel case default 32syn keyword tclConditional if then else elseif switch 33syn keyword tclRepeat while for foreach break continue 34syn keyword tcltkSwitch contained insert create polygon fill outline tag 35 36" WIDGETS 37" commands associated with widgets 38syn keyword tcltkWidgetSwitch contained background highlightbackground insertontime cget 39syn keyword tcltkWidgetSwitch contained selectborderwidth borderwidth highlightcolor insertwidth 40syn keyword tcltkWidgetSwitch contained selectforeground cursor highlightthickness padx setgrid 41syn keyword tcltkWidgetSwitch contained exportselection insertbackground pady takefocus 42syn keyword tcltkWidgetSwitch contained font insertborderwidth relief xscrollcommand 43syn keyword tcltkWidgetSwitch contained foreground insertofftime selectbackground yscrollcommand 44syn keyword tcltkWidgetSwitch contained height spacing1 spacing2 spacing3 45syn keyword tcltkWidgetSwitch contained state tabs width wrap 46" button 47syn keyword tcltkWidgetSwitch contained command default 48" canvas 49syn keyword tcltkWidgetSwitch contained closeenough confine scrollregion xscrollincrement yscrollincrement orient 50" checkbutton, radiobutton 51syn keyword tcltkWidgetSwitch contained indicatoron offvalue onvalue selectcolor selectimage state variable 52" entry, frame 53syn keyword tcltkWidgetSwitch contained show class colormap container visual 54" listbox, menu 55syn keyword tcltkWidgetSwitch contained selectmode postcommand selectcolor tearoff tearoffcommand title type 56" menubutton, message 57syn keyword tcltkWidgetSwitch contained direction aspect justify 58" scale 59syn keyword tcltkWidgetSwitch contained bigincrement digits from length resolution showvalue sliderlength sliderrelief tickinterval to 60" scrollbar 61syn keyword tcltkWidgetSwitch contained activerelief elementborderwidth 62" image 63syn keyword tcltkWidgetSwitch contained delete names types create 64" variable reference 65 " ::optional::namespaces 66syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_.]*::\)*\)\a[a-zA-Z0-9_.]*" 67 " ${...} may contain any character except '}' 68syn match tclVarRef "${[^}]*}" 69" menu, mane add 70syn keyword tcltkWidgetSwitch contained active end last none cascade checkbutton command radiobutton separator 71syn keyword tcltkWidgetSwitch contained activebackground actveforeground accelerator background bitmap columnbreak 72syn keyword tcltkWidgetSwitch contained font foreground hidemargin image indicatoron label menu offvalue onvalue 73syn keyword tcltkWidgetSwitch contained selectcolor selectimage state underline value variable 74syn keyword tcltkWidgetSwitch contained add clone configure delete entrycget entryconfigure index insert invoke 75syn keyword tcltkWidgetSwitch contained post postcascade type unpost yposition activate 76"syn keyword tcltkWidgetSwitch contained 77"syn match tcltkWidgetSwitch contained 78syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<button\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 79syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scale\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 80 81syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<canvas\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 82syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<checkbutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 83syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<entry\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 84syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<frame\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 85syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<image\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 86syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<listbox\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 87syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<menubutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 88syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<message\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 89syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<radiobutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 90syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scrollbar\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 91" These words are dual purpose. 92" match switches 93"syn match tcltkWidgetSwitch contained "-text"hs=s+1 94syn match tcltkWidgetSwitch contained "-text\(var\)\?"hs=s+1 95syn match tcltkWidgetSwitch contained "-menu"hs=s+1 96syn match tcltkWidgetSwitch contained "-label"hs=s+1 97" match commands - 2 lines for pretty match. 98"variable 99" Special case - If a number follows a variable region, it must be at the end of 100" the pattern, by definition. Therefore, (1) either include a number as the region 101" end and exclude tclNumber from the contains list, or (2) make variable 102" keepend. As (1) would put variable out of step with everything else, use (2). 103syn region tcltkCommand matchgroup=tcltkCommandColor start="^\<variable\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand 104syn 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 105" menu 106syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<menu\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 107syn 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 108" label 109syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<label\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef 110syn 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 111" text 112syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<text\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tcltkSwitch,tclNumber,tclVarRef,tclString 113syn 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 114 115" This isn't contained (I don't think) so it's OK to just associate with the Color group. 116" TODO: This could be wrong. 117syn keyword tcltkWidgetColor toplevel 118 119 120syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<configure\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef keepend 121syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<cget\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef 122 123 124" NAMESPACE 125" commands associated with namespace 126syn keyword tcltkNamespaceSwitch contained children code current delete eval 127syn keyword tcltkNamespaceSwitch contained export forget import inscope origin 128syn keyword tcltkNamespaceSwitch contained parent qualifiers tail which command variable 129syn region tcltkCommand matchgroup=tcltkCommandColor start="\<namespace\>" matchgroup=NONE skip="^\s*$" end="{\|}\|]\|\"\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkNamespaceSwitch 130 131" EXPR 132" commands associated with expr 133syn keyword tcltkMaths contained acos cos hypot sinh 134syn keyword tcltkMaths contained asin cosh log sqrt 135syn keyword tcltkMaths contained atan exp log10 tan 136syn keyword tcltkMaths contained atan2 floor pow tanh 137syn keyword tcltkMaths contained ceil fmod sin 138syn region tcltkCommand matchgroup=tcltkCommandColor start="\<expr\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf 139 140" format 141syn region tcltkCommand matchgroup=tcltkCommandColor start="\<format\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf 142 143" PACK 144" commands associated with pack 145syn keyword tcltkPackSwitch contained forget info propogate slaves 146syn keyword tcltkPackConfSwitch contained after anchor before expand fill in ipadx ipady padx pady side 147syn 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 148 149" STRING 150" commands associated with string 151syn keyword tcltkStringSwitch contained compare first index last length match range tolower toupper trim trimleft trimright wordstart wordend 152syn region tcltkCommand matchgroup=tcltkCommandColor start="\<string\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkStringSwitch,tclNumber,tclVarRef,tclString,tcltkCommand 153 154" ARRAY 155" commands associated with array 156syn keyword tcltkArraySwitch contained anymore donesearch exists get names nextelement size startsearch set 157" match from command name to ] or EOL 158syn region tcltkCommand matchgroup=tcltkCommandColor start="\<array\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkArraySwitch,tclNumber,tclVarRef,tclString,tcltkCommand 159 160" LSORT 161" switches for lsort 162syn keyword tcltkLsortSwitch contained ascii dictionary integer real command increasing decreasing index 163" match from command name to ] or EOL 164syn region tcltkCommand matchgroup=tcltkCommandColor start="\<lsort\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkLsortSwitch,tclNumber,tclVarRef,tclString,tcltkCommand 165 166syn keyword tclTodo contained TODO 167 168 169" String and Character contstants 170" Highlight special characters (those which have a backslash) differently 171syn match tclSpecial contained "\\\d\d\d\=\|\\." 172" A string needs the skip argument as it may legitimately contain \". 173" Match at start of line 174syn region tclString start=+^"+ end=+"+ contains=tclSpecial skip=+\\\\\|\\"+ 175"Match all other legal strings. 176syn region tclString start=+[^\\]"+ms=s+1 end=+"+ contains=tclSpecial skip=+\\\\\|\\"+ 177 178syn match tclLineContinue "\\\s*$" 179 180"integer number, or floating point number without a dot and with "f". 181syn case ignore 182syn match tclNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" 183"floating point number, with dot, optional exponent 184syn match tclNumber "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" 185"floating point number, starting with a dot, optional exponent 186syn match tclNumber "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" 187"floating point number, without dot, with exponent 188syn match tclNumber "\<\d\+e[-+]\=\d\+[fl]\=\>" 189"hex number 190syn match tclNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>" 191"syn match tclIdentifier "\<[a-z_][a-z0-9_]*\>" 192syn case match 193 194syn region tclComment start="^\s*\#" skip="\\$" end="$" contains=tclTodo 195syn region tclComment start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo 196 197"syn sync ccomment tclComment 198 199" Define the default highlighting. 200" For version 5.7 and earlier: only when not done already 201" For version 5.8 and later: only when an item doesn't have highlighting yet 202if version >= 508 || !exists("did_tcl_syntax_inits") 203 if version < 508 204 let did_tcl_syntax_inits = 1 205 command -nargs=+ HiLink hi link <args> 206 else 207 command -nargs=+ HiLink hi def link <args> 208 endif 209 210 HiLink tcltkSwitch Special 211 HiLink tclLabel Label 212 HiLink tclConditional Conditional 213 HiLink tclRepeat Repeat 214 HiLink tclNumber Number 215 HiLink tclError Error 216 HiLink tclStatement Statement 217 "HiLink tclStatementColor Statement 218 HiLink tclString String 219 HiLink tclComment Comment 220 HiLink tclSpecial Special 221 HiLink tclTodo Todo 222 " Below here are the commands and their options. 223 HiLink tcltkCommandColor Statement 224 HiLink tcltkWidgetColor Structure 225 HiLink tclLineContinue WarningMsg 226 HiLink tcltkStringSwitch Special 227 HiLink tcltkArraySwitch Special 228 HiLink tcltkLsortSwitch Special 229 HiLink tcltkPackSwitch Special 230 HiLink tcltkPackConfSwitch Special 231 HiLink tcltkMaths Special 232 HiLink tcltkNamespaceSwitch Special 233 HiLink tcltkWidgetSwitch Special 234 HiLink tcltkPackConfColor Identifier 235 "HiLink tcltkLsort Statement 236 HiLink tclVarRef Identifier 237 238 delcommand HiLink 239endif 240 241let b:current_syntax = "tcl" 242 243" vim: ts=8 244