summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/tcl.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/tcl.vim')
-rw-r--r--runtime/syntax/tcl.vim274
1 files changed, 274 insertions, 0 deletions
diff --git a/runtime/syntax/tcl.vim b/runtime/syntax/tcl.vim
new file mode 100644
index 0000000..59cb04f
--- /dev/null
+++ b/runtime/syntax/tcl.vim
@@ -0,0 +1,274 @@
+" Vim syntax file
+" Language: Tcl/Tk
+" Maintainer: Taylor Venable <taylor@metasyntax.net>
+" (previously Brett Cannon <brett@python.org>)
+" (previously 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: 2021 Nov 16
+" Version: 1.14 plus improvements from PR #8948
+" URL: (removed, no longer worked)
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+" Basic Tcl commands: http://www.tcl.tk/man/tcl8.6/TclCmd/contents.htm
+syn keyword tclCommand after append array bgerror binary cd chan clock close concat
+syn keyword tclCommand dde dict encoding eof error eval exec exit expr fblocked
+syn keyword tclCommand fconfigure fcopy file fileevent flush format gets glob
+syn keyword tclCommand global history http incr info interp join lappend lassign
+syn keyword tclCommand lindex linsert list llength lmap load lrange lrepeat
+syn keyword tclCommand lreplace lreverse lsearch lset lsort memory my namespace
+syn keyword tclCommand next nextto open package pid puts pwd read refchan regexp
+syn keyword tclCommand registry regsub rename scan seek self set socket source
+syn keyword tclCommand split string subst tell time trace unknown unload unset
+syn keyword tclCommand update uplevel upvar variable vwait
+
+" The 'Tcl Standard Library' commands: http://www.tcl.tk/man/tcl8.6/TclCmd/library.htm
+syn keyword tclCommand auto_execok auto_import auto_load auto_mkindex auto_reset
+syn keyword tclCommand auto_qualify tcl_findLibrary parray tcl_endOfWord
+syn keyword tclCommand tcl_startOfNextWord tcl_startOfPreviousWord
+syn keyword tclCommand tcl_wordBreakAfter tcl_wordBreakBefore
+
+" Global variables used by Tcl: http://www.tcl.tk/man/tcl8.6/TclCmd/tclvars.htm
+syn keyword tclVars auto_path env errorCode errorInfo tcl_library tcl_patchLevel
+syn keyword tclVars tcl_pkgPath tcl_platform tcl_precision tcl_rcFileName
+syn keyword tclVars tcl_traceCompile tcl_traceExec tcl_wordchars
+syn keyword tclVars tcl_nonwordchars tcl_version argc argv argv0 tcl_interactive
+
+" Strings which expr accepts as boolean values, aside from zero / non-zero.
+syn keyword tclBoolean true false on off yes no
+
+syn keyword tclProcCommand apply coroutine proc return tailcall yield yieldto
+syn keyword tclConditional if then else elseif switch
+syn keyword tclConditional catch try throw finally
+syn keyword tclLabel default
+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[[:alnum:]_]*"
+ " ${...} may contain any character except '}'
+syn match tclVarRef "${[^}]*}"
+
+" Used to facilitate hack to utilize string background for certain color
+" schemes, e.g. inkpot and lettuce.
+syn cluster tclVarRefC add=tclVarRef
+syn cluster tclSpecialC add=tclSpecial
+
+" The syntactic unquote-splicing replacement for [expand].
+syn match tclExpand '\s{\*}'
+syn match tclExpand '^{\*}'
+
+" 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 abs acos asin atan atan2 bool ceil cos cosh double entier
+syn keyword tcltkMaths contained exp floor fmod hypot int isqrt log log10 max min pow rand
+syn keyword tcltkMaths contained round sin sinh sqrt srand tan tanh wide
+
+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 propagate 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
+
+" Sequences which are backslash-escaped: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M16
+" Octal, hexadecimal, Unicode codepoints, and the classics.
+" Tcl takes as many valid characters in a row as it can, so \xAZ in a string is newline followed by 'Z'.
+syn match tclSpecial contained '\\\(\o\{1,3}\|x\x\{1,2}\|u\x\{1,4}\|[abfnrtv]\)'
+syn match tclSpecial contained '\\[\[\]\{\}\"\$]'
+
+" Command appearing inside another command or inside a string.
+syn region tclEmbeddedStatement start='\[' end='\]' contained contains=tclCommand,tclNumber,tclLineContinue,tclString,tclVarRef,tclEmbeddedStatement
+" A string needs the skip argument as it may legitimately contain \".
+" Match at start of line
+syn region tclString start=+^"+ end=+"+ contains=@tclSpecialC,@Spell skip=+\\\\\|\\"+
+"Match all other legal strings.
+syn region tclString start=+[^\\]"+ms=s+1 end=+"+ contains=@tclSpecialC,@tclVarRefC,tclEmbeddedStatement,@Spell skip=+\\\\\|\\"+
+
+" Line continuation is backslash immediately followed by newline.
+syn match tclLineContinue '\\$'
+
+if exists('g:tcl_warn_continuation')
+ syn match tclNotLineContinue '\\\s\+$'
+endif
+
+"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\x\+\(u\=l\=\|lu\)\>"
+"syn match tclIdentifier "\<\h\w*\>"
+syn case match
+
+syn region tclComment start="^\s*\#" skip="\\$" end="$" contains=tclTodo,@Spell
+syn region tclComment start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo,@Spell
+
+"syn match tclComment /^\s*\#.*$/
+"syn match tclComment /;\s*\#.*$/hs=s+1
+
+"syn sync ccomment tclComment
+
+" Define the default highlighting.
+" Only when an item doesn't have highlighting yet
+
+hi def link tcltkSwitch Special
+hi def link tclExpand Special
+hi def link tclLabel Label
+hi def link tclConditional Conditional
+hi def link tclRepeat Repeat
+hi def link tclNumber Number
+hi def link tclError Error
+hi def link tclCommand Statement
+hi def link tclProcCommand Type
+hi def link tclString String
+hi def link tclComment Comment
+hi def link tclSpecial Special
+hi def link tclTodo Todo
+" Below here are the commands and their options.
+hi def link tcltkCommandColor Statement
+hi def link tcltkWidgetColor Structure
+hi def link tclLineContinue WarningMsg
+if exists('g:tcl_warn_continuation')
+hi def link tclNotLineContinue ErrorMsg
+endif
+hi def link tcltkStringSwitch Special
+hi def link tcltkArraySwitch Special
+hi def link tcltkLsortSwitch Special
+hi def link tcltkPackSwitch Special
+hi def link tcltkPackConfSwitch Special
+hi def link tcltkMaths Special
+hi def link tcltkNamespaceSwitch Special
+hi def link tcltkWidgetSwitch Special
+hi def link tcltkPackConfColor Identifier
+hi def link tclVarRef Identifier
+
+
+let b:current_syntax = "tcl"
+
+" vim: ts=8 noet nolist