| " 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: 2009/04/06 02:38:36 |
| " Version: 1.13 |
| " URL: http://real.metasyntax.net:2357/cvs/cvsweb.cgi/Config/vim/syntax/tcl.vim |
| " |
| " Keywords TODO: click anchor |
| |
| " For version 5.x: Clear all syntax items |
| " For version 6.x: Quit when a syntax file was already loaded |
| if version < 600 |
| syntax clear |
| elseif exists("b:current_syntax") |
| finish |
| endif |
| |
| " Basic Tcl commands: http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm |
| syn keyword tclCommand after append apply array bgerror binary catch cd chan clock |
| syn keyword tclCommand close concat dde dict encoding eof error eval exec exit |
| syn keyword tclCommand expr fblocked fconfigure fcopy file fileevent filename flush |
| syn keyword tclCommand format gets glob global history incr info interp join |
| syn keyword tclCommand lappend lassign lindex linsert list llength load lrange lrepeat |
| syn keyword tclCommand lreplace lreverse lsearch lset lsort memory namespace open package |
| syn keyword tclCommand pid proc puts pwd read regexp registry regsub rename return |
| syn keyword tclCommand scan seek set socket source split string subst tell time |
| syn keyword tclCommand trace unknown unload unset update uplevel upvar variable vwait |
| |
| " The 'Tcl Standard Library' commands: http://www.tcl.tk/man/tcl8.5/TclCmd/library.htm |
| syn keyword tclCommand auto_execok auto_import auto_load auto_mkindex auto_mkindex_old |
| syn keyword tclCommand auto_qualify auto_reset parray tcl_endOfWord tcl_findLibrary |
| syn keyword tclCommand tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter |
| syn keyword tclCommand tcl_wordBreakBefore |
| |
| " Commands that were added in Tcl 8.6 |
| |
| syn keyword tclCommand my oo::copy oo::define oo::objdefine self |
| syn keyword tclCommand coroutine tailcall throw yield |
| |
| " Global variables used by Tcl: http://www.tcl.tk/man/tcl8.5/TclCmd/tclvars.htm |
| syn keyword tclVars env errorCode errorInfo tcl_library tcl_patchLevel tcl_pkgPath |
| syn keyword tclVars tcl_platform tcl_precision tcl_rcFileName tcl_traceCompile |
| syn keyword tclVars tcl_traceExec tcl_wordchars tcl_nonwordchars tcl_version argc argv |
| syn keyword tclVars argv0 tcl_interactive geometry |
| |
| " Strings which expr accepts as boolean values, aside from zero / non-zero. |
| syn keyword tclBoolean true false on off yes no |
| |
| syn keyword tclLabel case default |
| syn keyword tclConditional if then else elseif switch |
| syn keyword tclConditional try finally |
| 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 "${[^}]*}" |
| |
| " 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 propogate 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 '\\\([0-7]\{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=tclSpecial skip=+\\\\\|\\"+ |
| "Match all other legal strings. |
| syn region tclString start=+[^\\]"+ms=s+1 end=+"+ contains=tclSpecial,tclVarRef,tclEmbeddedStatement 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[0-9a-f]\+\(u\=l\=\|lu\)\>" |
| "syn match tclIdentifier "\<[a-z_][a-z0-9_]*\>" |
| syn case match |
| |
| syn region tclComment start="^\s*\#" skip="\\$" end="$" contains=tclTodo |
| syn region tclComment start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo |
| |
| "syn sync ccomment tclComment |
| |
| " Define the default highlighting. |
| " For version 5.7 and earlier: only when not done already |
| " For version 5.8 and later: only when an item doesn't have highlighting yet |
| if version >= 508 || !exists("did_tcl_syntax_inits") |
| if version < 508 |
| let did_tcl_syntax_inits = 1 |
| command -nargs=+ HiLink hi link <args> |
| else |
| command -nargs=+ HiLink hi def link <args> |
| endif |
| |
| HiLink tcltkSwitch Special |
| HiLink tclExpand Special |
| HiLink tclLabel Label |
| HiLink tclConditional Conditional |
| HiLink tclRepeat Repeat |
| HiLink tclNumber Number |
| HiLink tclError Error |
| HiLink tclCommand Statement |
| HiLink tclString String |
| HiLink tclComment Comment |
| HiLink tclSpecial Special |
| HiLink tclTodo Todo |
| " Below here are the commands and their options. |
| HiLink tcltkCommandColor Statement |
| HiLink tcltkWidgetColor Structure |
| HiLink tclLineContinue WarningMsg |
| if exists('g:tcl_warn_continuation') |
| HiLink tclNotLineContinue ErrorMsg |
| endif |
| HiLink tcltkStringSwitch Special |
| HiLink tcltkArraySwitch Special |
| HiLink tcltkLsortSwitch Special |
| HiLink tcltkPackSwitch Special |
| HiLink tcltkPackConfSwitch Special |
| HiLink tcltkMaths Special |
| HiLink tcltkNamespaceSwitch Special |
| HiLink tcltkWidgetSwitch Special |
| HiLink tcltkPackConfColor Identifier |
| HiLink tclVarRef Identifier |
| |
| delcommand HiLink |
| endif |
| |
| let b:current_syntax = "tcl" |
| |
| " vim: ts=8 noet |