neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

tcl.vim (17274B)


      1 " Vim syntax file
      2 " Language:	Tcl/Tk
      3 " Maintainer:	Taylor Venable <taylor@metasyntax.net>
      4 " 		(previously Brett Cannon <brett@python.org>)
      5 " 		(previously Dean Copsey <copsey@cs.ucdavis.edu>)
      6 "		(previously Matt Neumann <mattneu@purpleturtle.com>)
      7 "		(previously Allan Kelly <allan@fruitloaf.co.uk>)
      8 " Original:	Robin Becker <robin@jessikat.demon.co.uk>
      9 " Last Change:	2021 Nov 16
     10 " Version:	1.14 plus improvements from PR #8948
     11 " URL:		(removed, no longer worked)
     12 
     13 " quit when a syntax file was already loaded
     14 if exists("b:current_syntax")
     15  finish
     16 endif
     17 
     18 " Basic Tcl commands: http://www.tcl.tk/man/tcl8.6/TclCmd/contents.htm
     19 syn keyword tclCommand		after append array bgerror binary cd chan clock close concat
     20 syn keyword tclCommand		dde dict encoding eof error eval exec exit expr fblocked
     21 syn keyword tclCommand		fconfigure fcopy file fileevent flush format gets glob
     22 syn keyword tclCommand		global history http incr info interp join lappend lassign
     23 syn keyword tclCommand		lindex linsert list llength lmap load lrange lrepeat
     24 syn keyword tclCommand		lreplace lreverse lsearch lset lsort memory my namespace
     25 syn keyword tclCommand		next nextto open package pid puts pwd read refchan regexp
     26 syn keyword tclCommand		registry regsub rename scan seek self set socket source
     27 syn keyword tclCommand		split string subst tell time trace unknown unload unset
     28 syn keyword tclCommand		update uplevel upvar variable vwait
     29 
     30 " The 'Tcl Standard Library' commands: http://www.tcl.tk/man/tcl8.6/TclCmd/library.htm
     31 syn keyword tclCommand		auto_execok auto_import auto_load auto_mkindex auto_reset
     32 syn keyword tclCommand		auto_qualify tcl_findLibrary parray tcl_endOfWord
     33 syn keyword tclCommand		tcl_startOfNextWord tcl_startOfPreviousWord
     34 syn keyword tclCommand		tcl_wordBreakAfter tcl_wordBreakBefore
     35 
     36 " Global variables used by Tcl: http://www.tcl.tk/man/tcl8.6/TclCmd/tclvars.htm
     37 syn keyword tclVars		auto_path env errorCode errorInfo tcl_library tcl_patchLevel
     38 syn keyword tclVars		tcl_pkgPath tcl_platform tcl_precision tcl_rcFileName
     39 syn keyword tclVars		tcl_traceCompile tcl_traceExec tcl_wordchars
     40 syn keyword tclVars		tcl_nonwordchars tcl_version argc argv argv0 tcl_interactive
     41 
     42 " Strings which expr accepts as boolean values, aside from zero / non-zero.
     43 syn keyword tclBoolean		true false on off yes no
     44 
     45 syn keyword tclProcCommand	apply coroutine proc return tailcall yield yieldto
     46 syn keyword tclConditional	if then else elseif switch
     47 syn keyword tclConditional	catch try throw finally
     48 syn keyword tclLabel		default
     49 syn keyword tclRepeat		while for foreach break continue
     50 
     51 syn keyword tcltkSwitch	contained	insert create polygon fill outline tag
     52 
     53 " WIDGETS
     54 " commands associated with widgets
     55 syn keyword tcltkWidgetSwitch contained background highlightbackground insertontime cget
     56 syn keyword tcltkWidgetSwitch contained selectborderwidth borderwidth highlightcolor insertwidth
     57 syn keyword tcltkWidgetSwitch contained selectforeground cursor highlightthickness padx setgrid
     58 syn keyword tcltkWidgetSwitch contained exportselection insertbackground pady takefocus
     59 syn keyword tcltkWidgetSwitch contained font insertborderwidth relief xscrollcommand
     60 syn keyword tcltkWidgetSwitch contained foreground insertofftime selectbackground yscrollcommand
     61 syn keyword tcltkWidgetSwitch contained height spacing1 spacing2 spacing3
     62 syn keyword tcltkWidgetSwitch contained state tabs width wrap
     63 " button
     64 syn keyword tcltkWidgetSwitch contained command default
     65 " canvas
     66 syn keyword tcltkWidgetSwitch contained closeenough confine scrollregion xscrollincrement yscrollincrement orient
     67 " checkbutton, radiobutton
     68 syn keyword tcltkWidgetSwitch contained indicatoron offvalue onvalue selectcolor selectimage state variable
     69 " entry, frame
     70 syn keyword tcltkWidgetSwitch contained show class colormap container visual
     71 " listbox, menu
     72 syn keyword tcltkWidgetSwitch contained selectmode postcommand selectcolor tearoff tearoffcommand title type
     73 " menubutton, message
     74 syn keyword tcltkWidgetSwitch contained direction aspect justify
     75 " scale
     76 syn keyword tcltkWidgetSwitch contained bigincrement digits from length resolution showvalue sliderlength sliderrelief tickinterval to
     77 " scrollbar
     78 syn keyword tcltkWidgetSwitch contained activerelief elementborderwidth
     79 " image
     80 syn keyword tcltkWidgetSwitch contained delete names types create
     81 " variable reference
     82 " ::optional::namespaces
     83 syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_]*::\)*\)\a[[:alnum:]_]*"
     84 " ${...} may contain any character except '}'
     85 syn match tclVarRef "${[^}]*}"
     86 
     87 " Used to facilitate hack to utilize string background for certain color
     88 " schemes, e.g. inkpot and lettuce.
     89 syn cluster tclVarRefC add=tclVarRef
     90 syn cluster tclSpecialC add=tclSpecial
     91 
     92 " The syntactic unquote-splicing replacement for [expand].
     93 syn match tclExpand '\s{\*}'
     94 syn match tclExpand '^{\*}'
     95 
     96 " menu, mane add
     97 syn keyword tcltkWidgetSwitch contained active end last none cascade checkbutton command radiobutton separator
     98 syn keyword tcltkWidgetSwitch contained activebackground actveforeground accelerator background bitmap columnbreak
     99 syn keyword tcltkWidgetSwitch contained font foreground hidemargin image indicatoron label menu offvalue onvalue
    100 syn keyword tcltkWidgetSwitch contained selectcolor selectimage state underline value variable
    101 syn keyword tcltkWidgetSwitch contained add clone configure delete entrycget entryconfigure index insert invoke
    102 syn keyword tcltkWidgetSwitch contained post postcascade type unpost yposition activate
    103 "syn keyword tcltkWidgetSwitch contained
    104 "syn match tcltkWidgetSwitch contained
    105 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<button\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    106 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scale\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    107 
    108 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<canvas\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    109 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<checkbutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    110 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<entry\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    111 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<frame\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    112 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<image\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    113 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<listbox\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    114 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<menubutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    115 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<message\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    116 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<radiobutton\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1 contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    117 syn region tcltkWidget matchgroup=tcltkWidgetColor start="\<scrollbar\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    118 " These words are dual purpose.
    119 " match switches
    120 "syn match tcltkWidgetSwitch contained "-text"hs=s+1
    121 syn match tcltkWidgetSwitch contained "-text\(var\)\?"hs=s+1
    122 syn match tcltkWidgetSwitch contained "-menu"hs=s+1
    123 syn match tcltkWidgetSwitch contained "-label"hs=s+1
    124 " match commands - 2 lines for pretty match.
    125 "variable
    126 " Special case - If a number follows a variable region, it must be at the end of
    127 " the pattern, by definition. Therefore, (1) either include a number as the region
    128 " end and exclude tclNumber from the contains list, or (2) make variable
    129 " keepend. As (1) would put variable out of step with everything else, use (2).
    130 syn region tcltkCommand matchgroup=tcltkCommandColor start="^\<variable\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tclString,tclNumber,tclVarRef,tcltkCommand
    131 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
    132 " menu
    133 syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<menu\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    134 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
    135 " label
    136 syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<label\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tclNumber,tclVarRef
    137 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
    138 " text
    139 syn region tcltkWidget matchgroup=tcltkWidgetColor start="^\<text\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkWidget,tcltkWidgetSwitch,tcltkSwitch,tclNumber,tclVarRef,tclString
    140 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
    141 
    142 " This isn't contained (I don't think) so it's OK to just associate with the Color group.
    143 " TODO: This could be wrong.
    144 syn keyword tcltkWidgetColor	toplevel
    145 
    146 
    147 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
    148 syn region tcltkPackConf matchgroup=tcltkPackConfColor start="\<cget\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkWidgetSwitch,tclString,tcltkSwitch,tcltkPackConfSwitch,tclNumber,tclVarRef
    149 
    150 
    151 " NAMESPACE
    152 " commands associated with namespace
    153 syn keyword tcltkNamespaceSwitch contained children code current delete eval
    154 syn keyword tcltkNamespaceSwitch contained export forget import inscope origin
    155 syn keyword tcltkNamespaceSwitch contained parent qualifiers tail which command variable
    156 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<namespace\>" matchgroup=NONE skip="^\s*$" end="{\|}\|]\|\"\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkNamespaceSwitch
    157 
    158 " EXPR
    159 " commands associated with expr
    160 syn keyword tcltkMaths contained	abs acos asin atan atan2 bool ceil cos cosh double entier
    161 syn keyword tcltkMaths contained	exp floor fmod hypot int isqrt log log10 max min pow rand
    162 syn keyword tcltkMaths contained	round sin sinh sqrt srand tan tanh wide
    163 
    164 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
    165 
    166 " format
    167 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
    168 
    169 " PACK
    170 " commands associated with pack
    171 syn keyword tcltkPackSwitch	contained	forget info propagate slaves
    172 syn keyword tcltkPackConfSwitch	contained	after anchor before expand fill in ipadx ipady padx pady side
    173 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
    174 
    175 " STRING
    176 " commands associated with string
    177 syn keyword tcltkStringSwitch	contained	compare first index last length match range tolower toupper trim trimleft trimright wordstart wordend
    178 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<string\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkStringSwitch,tclNumber,tclVarRef,tclString,tcltkCommand
    179 
    180 " ARRAY
    181 " commands associated with array
    182 syn keyword tcltkArraySwitch	contained	anymore donesearch exists get names nextelement size startsearch set
    183 " match from command name to ] or EOL
    184 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<array\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkArraySwitch,tclNumber,tclVarRef,tclString,tcltkCommand
    185 
    186 " LSORT
    187 " switches for lsort
    188 syn keyword tcltkLsortSwitch	contained	ascii dictionary integer real command increasing decreasing index
    189 " match from command name to ] or EOL
    190 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<lsort\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"he=e-1  contains=tclLineContinue,tcltkLsortSwitch,tclNumber,tclVarRef,tclString,tcltkCommand
    191 
    192 syn keyword tclTodo contained	TODO
    193 
    194 " Sequences which are backslash-escaped: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M16
    195 " Octal, hexadecimal, Unicode codepoints, and the classics.
    196 " Tcl takes as many valid characters in a row as it can, so \xAZ in a string is newline followed by 'Z'.
    197 syn match   tclSpecial contained '\\\(\o\{1,3}\|x\x\{1,2}\|u\x\{1,4}\|[abfnrtv]\)'
    198 syn match   tclSpecial contained '\\[\[\]\{\}\"\$]'
    199 
    200 " Command appearing inside another command or inside a string.
    201 syn region tclEmbeddedStatement	start='\[' end='\]' contained contains=tclCommand,tclNumber,tclLineContinue,tclString,tclVarRef,tclEmbeddedStatement
    202 " A string needs the skip argument as it may legitimately contain \".
    203 " Match at start of line
    204 syn region  tclString		  start=+^"+ end=+"+ contains=@tclSpecialC,@Spell skip=+\\\\\|\\"+
    205 "Match all other legal strings.
    206 syn region  tclString		  start=+[^\\]"+ms=s+1  end=+"+ contains=@tclSpecialC,@tclVarRefC,tclEmbeddedStatement,@Spell skip=+\\\\\|\\"+
    207 
    208 " Line continuation is backslash immediately followed by newline.
    209 syn match tclLineContinue '\\$'
    210 
    211 if exists('g:tcl_warn_continuation')
    212    syn match tclNotLineContinue '\\\s\+$'
    213 endif
    214 
    215 "integer number, or floating point number without a dot and with "f".
    216 syn case ignore
    217 syn match  tclNumber		"\<\d\+\(u\=l\=\|lu\|f\)\>"
    218 "floating point number, with dot, optional exponent
    219 syn match  tclNumber		"\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
    220 "floating point number, starting with a dot, optional exponent
    221 syn match  tclNumber		"\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
    222 "floating point number, without dot, with exponent
    223 syn match  tclNumber		"\<\d\+e[-+]\=\d\+[fl]\=\>"
    224 "hex number
    225 syn match  tclNumber		"0x\x\+\(u\=l\=\|lu\)\>"
    226 "syn match  tclIdentifier	"\<\h\w*\>"
    227 syn case match
    228 
    229 syn region  tclComment		start="^\s*\#" skip="\\$" end="$" contains=tclTodo,@Spell
    230 syn region  tclComment		start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo,@Spell
    231 
    232 "syn match tclComment /^\s*\#.*$/
    233 "syn match tclComment /;\s*\#.*$/hs=s+1
    234 
    235 "syn sync ccomment tclComment
    236 
    237 " Define the default highlighting.
    238 " Only when an item doesn't have highlighting yet
    239 
    240 hi def link tcltkSwitch		Special
    241 hi def link tclExpand		Special
    242 hi def link tclLabel		Label
    243 hi def link tclConditional		Conditional
    244 hi def link tclRepeat		Repeat
    245 hi def link tclNumber		Number
    246 hi def link tclError		Error
    247 hi def link tclCommand		Statement
    248 hi def link tclProcCommand		Type
    249 hi def link tclString		String
    250 hi def link tclComment		Comment
    251 hi def link tclSpecial		Special
    252 hi def link tclTodo		Todo
    253 " Below here are the commands and their options.
    254 hi def link tcltkCommandColor	Statement
    255 hi def link tcltkWidgetColor	Structure
    256 hi def link tclLineContinue	WarningMsg
    257 if exists('g:tcl_warn_continuation')
    258 hi def link tclNotLineContinue	ErrorMsg
    259 endif
    260 hi def link tcltkStringSwitch	Special
    261 hi def link tcltkArraySwitch	Special
    262 hi def link tcltkLsortSwitch	Special
    263 hi def link tcltkPackSwitch	Special
    264 hi def link tcltkPackConfSwitch	Special
    265 hi def link tcltkMaths		Special
    266 hi def link tcltkNamespaceSwitch	Special
    267 hi def link tcltkWidgetSwitch	Special
    268 hi def link tcltkPackConfColor	Identifier
    269 hi def link tclVarRef		Identifier
    270 
    271 
    272 let b:current_syntax = "tcl"
    273 
    274 " vim: ts=8 noet nolist