xref: /vim-8.2.3635/runtime/syntax/tcl.vim (revision 519cc559)
1071d4279SBram Moolenaar" Vim syntax file
25c73622aSBram Moolenaar" Language:	Tcl/Tk
35c73622aSBram Moolenaar" Maintainer:	Taylor Venable <[email protected]>
45c73622aSBram Moolenaar" 		(previously Brett Cannon <[email protected]>)
5c81e5e79SBram Moolenaar" 		(previously Dean Copsey <[email protected]>)
6071d4279SBram Moolenaar"		(previously Matt Neumann <[email protected]>)
7071d4279SBram Moolenaar"		(previously Allan Kelly <[email protected]>)
8071d4279SBram Moolenaar" Original:	Robin Becker <[email protected]>
9*519cc559SBram Moolenaar" Last Change:	2021 Nov 16
10*519cc559SBram Moolenaar" Version:	1.14 plus improvements from PR #8948
116e649224SBram Moolenaar" URL:		(removed, no longer worked)
12071d4279SBram Moolenaar
1389bcfda6SBram Moolenaar" quit when a syntax file was already loaded
1489bcfda6SBram Moolenaarif exists("b:current_syntax")
15071d4279SBram Moolenaar  finish
16071d4279SBram Moolenaarendif
17071d4279SBram Moolenaar
18251835e1SBram Moolenaar" Basic Tcl commands: http://www.tcl.tk/man/tcl8.6/TclCmd/contents.htm
19251835e1SBram Moolenaarsyn keyword tclCommand		after append array bgerror binary cd chan clock close concat
20251835e1SBram Moolenaarsyn keyword tclCommand		dde dict encoding eof error eval exec exit expr fblocked
21251835e1SBram Moolenaarsyn keyword tclCommand		fconfigure fcopy file fileevent flush format gets glob
22251835e1SBram Moolenaarsyn keyword tclCommand		global history http incr info interp join lappend lassign
23251835e1SBram Moolenaarsyn keyword tclCommand		lindex linsert list llength lmap load lrange lrepeat
24251835e1SBram Moolenaarsyn keyword tclCommand		lreplace lreverse lsearch lset lsort memory my namespace
25251835e1SBram Moolenaarsyn keyword tclCommand		next nextto open package pid puts pwd read refchan regexp
26251835e1SBram Moolenaarsyn keyword tclCommand		registry regsub rename scan seek self set socket source
27251835e1SBram Moolenaarsyn keyword tclCommand		split string subst tell time trace unknown unload unset
28251835e1SBram Moolenaarsyn keyword tclCommand		update uplevel upvar variable vwait
295c73622aSBram Moolenaar
30251835e1SBram Moolenaar" The 'Tcl Standard Library' commands: http://www.tcl.tk/man/tcl8.6/TclCmd/library.htm
31251835e1SBram Moolenaarsyn keyword tclCommand		auto_execok auto_import auto_load auto_mkindex auto_reset
32251835e1SBram Moolenaarsyn keyword tclCommand		auto_qualify tcl_findLibrary parray tcl_endOfWord
33251835e1SBram Moolenaarsyn keyword tclCommand		tcl_startOfNextWord tcl_startOfPreviousWord
34251835e1SBram Moolenaarsyn keyword tclCommand		tcl_wordBreakAfter tcl_wordBreakBefore
355c73622aSBram Moolenaar
36251835e1SBram Moolenaar" Global variables used by Tcl: http://www.tcl.tk/man/tcl8.6/TclCmd/tclvars.htm
37251835e1SBram Moolenaarsyn keyword tclVars		auto_path env errorCode errorInfo tcl_library tcl_patchLevel
38251835e1SBram Moolenaarsyn keyword tclVars		tcl_pkgPath tcl_platform tcl_precision tcl_rcFileName
39251835e1SBram Moolenaarsyn keyword tclVars		tcl_traceCompile tcl_traceExec tcl_wordchars
40251835e1SBram Moolenaarsyn keyword tclVars		tcl_nonwordchars tcl_version argc argv argv0 tcl_interactive
415c73622aSBram Moolenaar
425c73622aSBram Moolenaar" Strings which expr accepts as boolean values, aside from zero / non-zero.
435c73622aSBram Moolenaarsyn keyword tclBoolean		true false on off yes no
445c73622aSBram Moolenaar
45251835e1SBram Moolenaarsyn keyword tclProcCommand	apply coroutine proc return tailcall yield yieldto
46071d4279SBram Moolenaarsyn keyword tclConditional	if then else elseif switch
47251835e1SBram Moolenaarsyn keyword tclConditional	catch try throw finally
48251835e1SBram Moolenaarsyn keyword tclLabel		default
49071d4279SBram Moolenaarsyn keyword tclRepeat		while for foreach break continue
50251835e1SBram Moolenaar
51071d4279SBram Moolenaarsyn keyword tcltkSwitch	contained	insert create polygon fill outline tag
52071d4279SBram Moolenaar
53071d4279SBram Moolenaar" WIDGETS
54071d4279SBram Moolenaar" commands associated with widgets
55071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained background highlightbackground insertontime cget
56071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained selectborderwidth borderwidth highlightcolor insertwidth
57071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained selectforeground cursor highlightthickness padx setgrid
58071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained exportselection insertbackground pady takefocus
59071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained font insertborderwidth relief xscrollcommand
60071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained foreground insertofftime selectbackground yscrollcommand
61071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained height spacing1 spacing2 spacing3
62071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained state tabs width wrap
63071d4279SBram Moolenaar" button
64071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained command default
65071d4279SBram Moolenaar" canvas
66071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained closeenough confine scrollregion xscrollincrement yscrollincrement orient
67071d4279SBram Moolenaar" checkbutton, radiobutton
68071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained indicatoron offvalue onvalue selectcolor selectimage state variable
69071d4279SBram Moolenaar" entry, frame
70071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained show class colormap container visual
71071d4279SBram Moolenaar" listbox, menu
72071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained selectmode postcommand selectcolor tearoff tearoffcommand title type
73071d4279SBram Moolenaar" menubutton, message
74071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained direction aspect justify
75071d4279SBram Moolenaar" scale
76071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained bigincrement digits from length resolution showvalue sliderlength sliderrelief tickinterval to
77071d4279SBram Moolenaar" scrollbar
78071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained activerelief elementborderwidth
79071d4279SBram Moolenaar" image
80071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained delete names types create
81071d4279SBram Moolenaar" variable reference
82071d4279SBram Moolenaar	" ::optional::namespaces
835c73622aSBram Moolenaarsyn match tclVarRef "$\(\(::\)\?\([[:alnum:]_]*::\)*\)\a[[:alnum:]_]*"
84071d4279SBram Moolenaar	" ${...} may contain any character except '}'
85071d4279SBram Moolenaarsyn match tclVarRef "${[^}]*}"
865c73622aSBram Moolenaar
87251835e1SBram Moolenaar" Used to facilitate hack to utilize string background for certain color
88251835e1SBram Moolenaar" schemes, e.g. inkpot and lettuce.
89251835e1SBram Moolenaarsyn cluster tclVarRefC add=tclVarRef
90251835e1SBram Moolenaarsyn cluster tclSpecialC add=tclSpecial
91251835e1SBram Moolenaar
925c73622aSBram Moolenaar" The syntactic unquote-splicing replacement for [expand].
935c73622aSBram Moolenaarsyn match tclExpand '\s{\*}'
945c73622aSBram Moolenaarsyn match tclExpand '^{\*}'
955c73622aSBram Moolenaar
96071d4279SBram Moolenaar" menu, mane add
97071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained active end last none cascade checkbutton command radiobutton separator
98071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained activebackground actveforeground accelerator background bitmap columnbreak
99071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained font foreground hidemargin image indicatoron label menu offvalue onvalue
100071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained selectcolor selectimage state underline value variable
101071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained add clone configure delete entrycget entryconfigure index insert invoke
102071d4279SBram Moolenaarsyn keyword tcltkWidgetSwitch contained post postcascade type unpost yposition activate
103071d4279SBram Moolenaar"syn keyword tcltkWidgetSwitch contained
104071d4279SBram Moolenaar"syn match tcltkWidgetSwitch contained
105071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<button\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
106071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scale\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
107071d4279SBram Moolenaar
108071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<canvas\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
109071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<checkbutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
110071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<entry\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
111071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<frame\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
112071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<image\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
113071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<listbox\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
114071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<menubutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
115071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<message\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
116071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<radiobutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
117071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scrollbar\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
118071d4279SBram Moolenaar" These words are dual purpose.
119071d4279SBram Moolenaar" match switches
120071d4279SBram Moolenaar"syn match tcltkWidgetSwitch contained "-text"hs=s+1
121071d4279SBram Moolenaarsyn match tcltkWidgetSwitch contained "-text\(var\)\?"hs=s+1
122071d4279SBram Moolenaarsyn match tcltkWidgetSwitch contained "-menu"hs=s+1
123071d4279SBram Moolenaarsyn match tcltkWidgetSwitch contained "-label"hs=s+1
124071d4279SBram Moolenaar" match commands - 2 lines for pretty match.
125071d4279SBram Moolenaar"variable
126071d4279SBram Moolenaar" Special case - If a number follows a variable region, it must be at the end of
127071d4279SBram Moolenaar" the pattern, by definition. Therefore, (1) either include a number as the region
128071d4279SBram Moolenaar" end and exclude tclNumber from the contains list, or (2) make variable
129071d4279SBram Moolenaar" keepend. As (1) would put variable out of step with everything else, use (2).
130071d4279SBram Moolenaarsyn region tcltkCommand matchgroup=tcltkCommandColor start="^\<variable\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand
131071d4279SBram Moolenaarsyn 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
132071d4279SBram Moolenaar" menu
133071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<menu\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
134071d4279SBram Moolenaarsyn 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
135071d4279SBram Moolenaar" label
136071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<label\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
137071d4279SBram Moolenaarsyn 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
138071d4279SBram Moolenaar" text
139071d4279SBram Moolenaarsyn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<text\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tcltkSwitch,tclNumber,tclVarRef,tclString
140071d4279SBram Moolenaarsyn 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
141071d4279SBram Moolenaar
142071d4279SBram Moolenaar" This isn't contained (I don't think) so it's OK to just associate with the Color group.
143071d4279SBram Moolenaar" TODO: This could be wrong.
144071d4279SBram Moolenaarsyn keyword tcltkWidgetColor	toplevel
145071d4279SBram Moolenaar
146071d4279SBram Moolenaar
147071d4279SBram Moolenaarsyn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<configure\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef keepend
148071d4279SBram Moolenaarsyn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<cget\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef
149071d4279SBram Moolenaar
150071d4279SBram Moolenaar
151071d4279SBram Moolenaar" NAMESPACE
152071d4279SBram Moolenaar" commands associated with namespace
153071d4279SBram Moolenaarsyn keyword tcltkNamespaceSwitch contained children code current delete eval
154071d4279SBram Moolenaarsyn keyword tcltkNamespaceSwitch contained export forget import inscope origin
155071d4279SBram Moolenaarsyn keyword tcltkNamespaceSwitch contained parent qualifiers tail which command variable
156071d4279SBram Moolenaarsyn region tcltkCommand matchgroup=tcltkCommandColor start="\<namespace\>" matchgroup=NONE skip="^\s*$" end="{\|}\|]\|\"\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkNamespaceSwitch
157071d4279SBram Moolenaar
158071d4279SBram Moolenaar" EXPR
159071d4279SBram Moolenaar" commands associated with expr
1605c73622aSBram Moolenaarsyn keyword tcltkMaths contained	abs acos asin atan atan2 bool ceil cos cosh double entier
1615c73622aSBram Moolenaarsyn keyword tcltkMaths contained	exp floor fmod hypot int isqrt log log10 max min pow rand
1625c73622aSBram Moolenaarsyn keyword tcltkMaths contained	round sin sinh sqrt srand tan tanh wide
1635c73622aSBram Moolenaar
164071d4279SBram Moolenaarsyn region tcltkCommand matchgroup=tcltkCommandColor start="\<expr\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf
165071d4279SBram Moolenaar
166071d4279SBram Moolenaar" format
167071d4279SBram Moolenaarsyn region tcltkCommand matchgroup=tcltkCommandColor start="\<format\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf
168071d4279SBram Moolenaar
169071d4279SBram Moolenaar" PACK
170071d4279SBram Moolenaar" commands associated with pack
1716c391a74SBram Moolenaarsyn keyword tcltkPackSwitch	contained	forget info propagate slaves
172071d4279SBram Moolenaarsyn keyword tcltkPackConfSwitch	contained	after anchor before expand fill in ipadx ipady padx pady side
173071d4279SBram Moolenaarsyn 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
174071d4279SBram Moolenaar
175071d4279SBram Moolenaar" STRING
176071d4279SBram Moolenaar" commands associated with string
177071d4279SBram Moolenaarsyn keyword tcltkStringSwitch	contained	compare first index last length match range tolower toupper trim trimleft trimright wordstart wordend
178071d4279SBram Moolenaarsyn region tcltkCommand matchgroup=tcltkCommandColor start="\<string\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkStringSwitch,tclNumber,tclVarRef,tclString,tcltkCommand
179071d4279SBram Moolenaar
180071d4279SBram Moolenaar" ARRAY
181071d4279SBram Moolenaar" commands associated with array
182071d4279SBram Moolenaarsyn keyword tcltkArraySwitch	contained	anymore donesearch exists get names nextelement size startsearch set
183071d4279SBram Moolenaar" match from command name to ] or EOL
184071d4279SBram Moolenaarsyn region tcltkCommand matchgroup=tcltkCommandColor start="\<array\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkArraySwitch,tclNumber,tclVarRef,tclString,tcltkCommand
185071d4279SBram Moolenaar
186071d4279SBram Moolenaar" LSORT
187071d4279SBram Moolenaar" switches for lsort
188071d4279SBram Moolenaarsyn keyword tcltkLsortSwitch	contained	ascii dictionary integer real command increasing decreasing index
189071d4279SBram Moolenaar" match from command name to ] or EOL
190071d4279SBram Moolenaarsyn region tcltkCommand matchgroup=tcltkCommandColor start="\<lsort\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkLsortSwitch,tclNumber,tclVarRef,tclString,tcltkCommand
191071d4279SBram Moolenaar
192071d4279SBram Moolenaarsyn keyword tclTodo contained	TODO
193071d4279SBram Moolenaar
1945c73622aSBram Moolenaar" Sequences which are backslash-escaped: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M16
195*519cc559SBram Moolenaar" Octal, hexadecimal, Unicode codepoints, and the classics.
1965c73622aSBram Moolenaar" Tcl takes as many valid characters in a row as it can, so \xAZ in a string is newline followed by 'Z'.
197*519cc559SBram Moolenaarsyn match   tclSpecial contained '\\\(\o\{1,3}\|x\x\{1,2}\|u\x\{1,4}\|[abfnrtv]\)'
1985c73622aSBram Moolenaarsyn match   tclSpecial contained '\\[\[\]\{\}\"\$]'
199071d4279SBram Moolenaar
2005c73622aSBram Moolenaar" Command appearing inside another command or inside a string.
2015c73622aSBram Moolenaarsyn region tclEmbeddedStatement	start='\[' end='\]' contained contains=tclCommand,tclNumber,tclLineContinue,tclString,tclVarRef,tclEmbeddedStatement
202071d4279SBram Moolenaar" A string needs the skip argument as it may legitimately contain \".
203071d4279SBram Moolenaar" Match at start of line
204*519cc559SBram Moolenaarsyn region  tclString		  start=+^"+ end=+"+ contains=@tclSpecialC,@Spell skip=+\\\\\|\\"+
205071d4279SBram Moolenaar"Match all other legal strings.
206*519cc559SBram Moolenaarsyn region  tclString		  start=+[^\\]"+ms=s+1  end=+"+ contains=@tclSpecialC,@tclVarRefC,tclEmbeddedStatement,@Spell skip=+\\\\\|\\"+
207071d4279SBram Moolenaar
2085c73622aSBram Moolenaar" Line continuation is backslash immediately followed by newline.
2095c73622aSBram Moolenaarsyn match tclLineContinue '\\$'
2105c73622aSBram Moolenaar
2115c73622aSBram Moolenaarif exists('g:tcl_warn_continuation')
2125c73622aSBram Moolenaar    syn match tclNotLineContinue '\\\s\+$'
2135c73622aSBram Moolenaarendif
214071d4279SBram Moolenaar
215071d4279SBram Moolenaar"integer number, or floating point number without a dot and with "f".
216071d4279SBram Moolenaarsyn case ignore
217071d4279SBram Moolenaarsyn match  tclNumber		"\<\d\+\(u\=l\=\|lu\|f\)\>"
218071d4279SBram Moolenaar"floating point number, with dot, optional exponent
219071d4279SBram Moolenaarsyn match  tclNumber		"\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
220071d4279SBram Moolenaar"floating point number, starting with a dot, optional exponent
221071d4279SBram Moolenaarsyn match  tclNumber		"\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
222071d4279SBram Moolenaar"floating point number, without dot, with exponent
223071d4279SBram Moolenaarsyn match  tclNumber		"\<\d\+e[-+]\=\d\+[fl]\=\>"
224071d4279SBram Moolenaar"hex number
225*519cc559SBram Moolenaarsyn match  tclNumber		"0x\x\+\(u\=l\=\|lu\)\>"
226*519cc559SBram Moolenaar"syn match  tclIdentifier	"\<\h\w*\>"
227071d4279SBram Moolenaarsyn case match
228071d4279SBram Moolenaar
229*519cc559SBram Moolenaarsyn region  tclComment		start="^\s*\#" skip="\\$" end="$" contains=tclTodo,@Spell
230*519cc559SBram Moolenaarsyn region  tclComment		start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo,@Spell
231071d4279SBram Moolenaar
232251835e1SBram Moolenaar"syn match tclComment /^\s*\#.*$/
233251835e1SBram Moolenaar"syn match tclComment /;\s*\#.*$/hs=s+1
234251835e1SBram Moolenaar
235071d4279SBram Moolenaar"syn sync ccomment tclComment
236071d4279SBram Moolenaar
237071d4279SBram Moolenaar" Define the default highlighting.
23889bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
239071d4279SBram Moolenaar
240f37506f6SBram Moolenaarhi def link tcltkSwitch		Special
241f37506f6SBram Moolenaarhi def link tclExpand		Special
242f37506f6SBram Moolenaarhi def link tclLabel		Label
243f37506f6SBram Moolenaarhi def link tclConditional		Conditional
244f37506f6SBram Moolenaarhi def link tclRepeat		Repeat
245f37506f6SBram Moolenaarhi def link tclNumber		Number
246f37506f6SBram Moolenaarhi def link tclError		Error
247f37506f6SBram Moolenaarhi def link tclCommand		Statement
248f37506f6SBram Moolenaarhi def link tclProcCommand		Type
249f37506f6SBram Moolenaarhi def link tclString		String
250f37506f6SBram Moolenaarhi def link tclComment		Comment
251f37506f6SBram Moolenaarhi def link tclSpecial		Special
252f37506f6SBram Moolenaarhi def link tclTodo		Todo
253071d4279SBram Moolenaar" Below here are the commands and their options.
254f37506f6SBram Moolenaarhi def link tcltkCommandColor	Statement
255f37506f6SBram Moolenaarhi def link tcltkWidgetColor	Structure
256f37506f6SBram Moolenaarhi def link tclLineContinue	WarningMsg
2575c73622aSBram Moolenaarif exists('g:tcl_warn_continuation')
258f37506f6SBram Moolenaarhi def link tclNotLineContinue	ErrorMsg
2595c73622aSBram Moolenaarendif
260f37506f6SBram Moolenaarhi def link tcltkStringSwitch	Special
261f37506f6SBram Moolenaarhi def link tcltkArraySwitch	Special
262f37506f6SBram Moolenaarhi def link tcltkLsortSwitch	Special
263f37506f6SBram Moolenaarhi def link tcltkPackSwitch	Special
264f37506f6SBram Moolenaarhi def link tcltkPackConfSwitch	Special
265f37506f6SBram Moolenaarhi def link tcltkMaths		Special
266f37506f6SBram Moolenaarhi def link tcltkNamespaceSwitch	Special
267f37506f6SBram Moolenaarhi def link tcltkWidgetSwitch	Special
268f37506f6SBram Moolenaarhi def link tcltkPackConfColor	Identifier
269f37506f6SBram Moolenaarhi def link tclVarRef		Identifier
270071d4279SBram Moolenaar
271071d4279SBram Moolenaar
272071d4279SBram Moolenaarlet b:current_syntax = "tcl"
273071d4279SBram Moolenaar
274251835e1SBram Moolenaar" vim: ts=8 noet nolist
275