diff options
Diffstat (limited to 'runtime/syntax/tcl.vim')
-rw-r--r-- | runtime/syntax/tcl.vim | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/runtime/syntax/tcl.vim b/runtime/syntax/tcl.vim new file mode 100644 index 000000000..145da9087 --- /dev/null +++ b/runtime/syntax/tcl.vim @@ -0,0 +1,235 @@ +" Vim syntax file +" Language: TCL/TK +" Maintainer: 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: 2004 May 16 +" +" Keywords TODO: format clock 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 + +" A bunch of useful keywords +syn keyword tclStatement proc global return lindex +syn keyword tclStatement llength lappend lreplace lrange list concat incr +syn keyword tclStatement upvar set +syn keyword tclLabel case default +syn keyword tclConditional if then else elseif switch +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[a-zA-Z0-9_.]*" + " ${...} may contain any character except '}' +syn match tclVarRef "${[^}]*}" +" 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 acos cos hypot sinh +syn keyword tcltkMaths contained asin cosh log sqrt +syn keyword tcltkMaths contained atan exp log10 tan +syn keyword tcltkMaths contained atan2 floor pow tanh +syn keyword tcltkMaths contained ceil fmod sin +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 + + +" String and Character contstants +" Highlight special characters (those which have a backslash) differently +syn match tclSpecial contained "\\\d\d\d\=\|\\." +" 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 skip=+\\\\\|\\"+ + +syn match tclLineContinue "\\\s*$" + +"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 tclLabel Label + HiLink tclConditional Conditional + HiLink tclRepeat Repeat + HiLink tclNumber Number + HiLink tclError Error + HiLink tclStatement Statement + "HiLink tclStatementColor 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 + 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 tcltkLsort Statement + HiLink tclVarRef Identifier + + delcommand HiLink +endif + +let b:current_syntax = "tcl" + +" vim: ts=8 |