3 " Maintainer: Brett Cannon <brett@python.org>
4 " (previously Dean Copsey <copsey@cs.ucdavis.edu>)
5 " (previously Matt Neumann <mattneu@purpleturtle.com>)
6 " (previously Allan Kelly <allan@fruitloaf.co.uk>)
7 " Original: Robin Becker <robin@jessikat.demon.co.uk>
8 " Last Change: 2006 Nov 17
10 " Keywords TODO: format clock click anchor
12 " For version 5.x: Clear all syntax items
13 " For version 6.x: Quit when a syntax file was already loaded
16 elseif exists("b:current_syntax")
20 " A bunch of useful keywords
21 syn keyword tclStatement tell socket subst open eof pwd glob list exec pid
22 syn keyword tclStatement auto_load_index time unknown eval lrange fblocked
23 syn keyword tclStatement lsearch auto_import gets lappend proc variable llength
24 syn keyword tclStatement auto_execok return linsert error catch clock info
25 syn keyword tclStatement split array fconfigure concat join lreplace source
26 syn keyword tclStatement fcopy global auto_qualify update close cd auto_load
27 syn keyword tclStatement file append format read package set binary namespace
28 syn keyword tclStatement scan trace seek flush after vwait uplevel lset rename
29 syn keyword tclStatement fileevent regexp upvar unset encoding expr load regsub
30 syn keyword tclStatement interp exit puts incr lindex lsort tclLog string
31 syn keyword tclLabel case default
32 syn keyword tclConditional if then else elseif switch
33 syn keyword tclRepeat while for foreach break continue
34 syn keyword tcltkSwitch contained insert create polygon fill outline tag
37 " commands associated with widgets
38 syn keyword tcltkWidgetSwitch contained background highlightbackground insertontime cget
39 syn keyword tcltkWidgetSwitch contained selectborderwidth borderwidth highlightcolor insertwidth
40 syn keyword tcltkWidgetSwitch contained selectforeground cursor highlightthickness padx setgrid
41 syn keyword tcltkWidgetSwitch contained exportselection insertbackground pady takefocus
42 syn keyword tcltkWidgetSwitch contained font insertborderwidth relief xscrollcommand
43 syn keyword tcltkWidgetSwitch contained foreground insertofftime selectbackground yscrollcommand
44 syn keyword tcltkWidgetSwitch contained height spacing1 spacing2 spacing3
45 syn keyword tcltkWidgetSwitch contained state tabs width wrap
47 syn keyword tcltkWidgetSwitch contained command default
49 syn keyword tcltkWidgetSwitch contained closeenough confine scrollregion xscrollincrement yscrollincrement orient
50 " checkbutton, radiobutton
51 syn keyword tcltkWidgetSwitch contained indicatoron offvalue onvalue selectcolor selectimage state variable
53 syn keyword tcltkWidgetSwitch contained show class colormap container visual
55 syn keyword tcltkWidgetSwitch contained selectmode postcommand selectcolor tearoff tearoffcommand title type
57 syn keyword tcltkWidgetSwitch contained direction aspect justify
59 syn keyword tcltkWidgetSwitch contained bigincrement digits from length resolution showvalue sliderlength sliderrelief tickinterval to
61 syn keyword tcltkWidgetSwitch contained activerelief elementborderwidth
63 syn keyword tcltkWidgetSwitch contained delete names types create
65 " ::optional::namespaces
66 syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_.]*::\)*\)\a[a-zA-Z0-9_.]*"
67 " ${...} may contain any character except '}'
68 syn match tclVarRef "${[^}]*}"
70 syn keyword tcltkWidgetSwitch contained active end last none cascade checkbutton command radiobutton separator
71 syn keyword tcltkWidgetSwitch contained activebackground actveforeground accelerator background bitmap columnbreak
72 syn keyword tcltkWidgetSwitch contained font foreground hidemargin image indicatoron label menu offvalue onvalue
73 syn keyword tcltkWidgetSwitch contained selectcolor selectimage state underline value variable
74 syn keyword tcltkWidgetSwitch contained add clone configure delete entrycget entryconfigure index insert invoke
75 syn keyword tcltkWidgetSwitch contained post postcascade type unpost yposition activate
76 "syn keyword tcltkWidgetSwitch contained
77 "syn match tcltkWidgetSwitch contained
78 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<button\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
79 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scale\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
81 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<canvas\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
82 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<checkbutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
83 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<entry\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
84 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<frame\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
85 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<image\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
86 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<listbox\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
87 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<menubutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
88 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<message\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
89 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<radiobutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
90 syn 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.
93 "syn match tcltkWidgetSwitch contained "-text"hs=s+1
94 syn match tcltkWidgetSwitch contained "-text\(var\)\?"hs=s+1
95 syn match tcltkWidgetSwitch contained "-menu"hs=s+1
96 syn match tcltkWidgetSwitch contained "-label"hs=s+1
97 " match commands - 2 lines for pretty match.
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).
103 syn region tcltkCommand matchgroup=tcltkCommandColor start="^\<variable\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand
104 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
106 syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<menu\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
107 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
109 syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<label\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
110 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
112 syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<text\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tcltkSwitch,tclNumber,tclVarRef,tclString
113 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
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.
117 syn keyword tcltkWidgetColor toplevel
120 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
121 syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<cget\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef
125 " commands associated with namespace
126 syn keyword tcltkNamespaceSwitch contained children code current delete eval
127 syn keyword tcltkNamespaceSwitch contained export forget import inscope origin
128 syn keyword tcltkNamespaceSwitch contained parent qualifiers tail which command variable
129 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<namespace\>" matchgroup=NONE skip="^\s*$" end="{\|}\|]\|\"\|[^\\]*\s*$"me=e-1 contains=tclLineContinue,tcltkNamespaceSwitch
132 " commands associated with expr
133 syn keyword tcltkMaths contained acos cos hypot sinh
134 syn keyword tcltkMaths contained asin cosh log sqrt
135 syn keyword tcltkMaths contained atan exp log10 tan
136 syn keyword tcltkMaths contained atan2 floor pow tanh
137 syn keyword tcltkMaths contained ceil fmod sin
138 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
141 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
144 " commands associated with pack
145 syn keyword tcltkPackSwitch contained forget info propogate slaves
146 syn keyword tcltkPackConfSwitch contained after anchor before expand fill in ipadx ipady padx pady side
147 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
150 " commands associated with string
151 syn keyword tcltkStringSwitch contained compare first index last length match range tolower toupper trim trimleft trimright wordstart wordend
152 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<string\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkStringSwitch,tclNumber,tclVarRef,tclString,tcltkCommand
155 " commands associated with array
156 syn keyword tcltkArraySwitch contained anymore donesearch exists get names nextelement size startsearch set
157 " match from command name to ] or EOL
158 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<array\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkArraySwitch,tclNumber,tclVarRef,tclString,tcltkCommand
162 syn keyword tcltkLsortSwitch contained ascii dictionary integer real command increasing decreasing index
163 " match from command name to ] or EOL
164 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<lsort\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkLsortSwitch,tclNumber,tclVarRef,tclString,tcltkCommand
166 syn keyword tclTodo contained TODO
169 " String and Character contstants
170 " Highlight special characters (those which have a backslash) differently
171 syn match tclSpecial contained "\\\d\d\d\=\|\\."
172 " A string needs the skip argument as it may legitimately contain \".
173 " Match at start of line
174 syn region tclString start=+^"+ end=+"+ contains=tclSpecial skip=+\\\\\|\\"+
175 "Match all other legal strings.
176 syn region tclString start=+[^\\]"+ms=s+1 end=+"+ contains=tclSpecial skip=+\\\\\|\\"+
178 syn match tclLineContinue "\\\s*$"
180 "integer number, or floating point number without a dot and with "f".
182 syn match tclNumber "\<\d\+\(u\=l\=\|lu\|f\)\>"
183 "floating point number, with dot, optional exponent
184 syn match tclNumber "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
185 "floating point number, starting with a dot, optional exponent
186 syn match tclNumber "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
187 "floating point number, without dot, with exponent
188 syn match tclNumber "\<\d\+e[-+]\=\d\+[fl]\=\>"
190 syn match tclNumber "0x[0-9a-f]\+\(u\=l\=\|lu\)\>"
191 "syn match tclIdentifier "\<[a-z_][a-z0-9_]*\>"
194 syn region tclComment start="^\s*\#" skip="\\$" end="$" contains=tclTodo
195 syn region tclComment start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo
197 "syn sync ccomment tclComment
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
202 if version >= 508 || !exists("did_tcl_syntax_inits")
204 let did_tcl_syntax_inits = 1
205 command -nargs=+ HiLink hi link <args>
207 command -nargs=+ HiLink hi def link <args>
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
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
241 let b:current_syntax = "tcl"