--- name: Tcl fileTypes: - tcl scopeName: source.tcl repository: escape: name: constant.character.escape.tcl match: "\\\\(\\d{1,3}|x[a-fA-F0-9]+|u[a-fA-F0-9]{1,4}|.|\\n)" bare-string: endCaptures: '1': name: invalid.illegal.tcl begin: "(?:^|(?<=\\s))\"" end: "\"([^\\s\\]]*)" patterns: - include: "#escape" - include: "#variable" comment: matches a single quote-enclosed word without scoping regexp: begin: "(?=\\S)(?![\\n;\\]])" end: "(?=[\\n;\\]])" patterns: - name: string.regexp.tcl begin: "(?=[^ \\t\\n;])" end: "(?=[ \\t\\n;])" patterns: - include: "#braces" - include: "#bare-string" - include: "#escape" - include: "#variable" - begin: "[ \\t]" end: "(?=[\\n;\\]])" patterns: - include: "#variable" - include: "#embedded" - include: "#escape" - include: "#braces" - include: "#string" comment: swallow the rest of the command comment: matches a single word, named as a regexp, then swallows the rest of the command braces: endCaptures: '1': name: invalid.illegal.tcl begin: "(?:^|(?<=\\s))\\{" end: "\\}([^\\s\\]]*)" patterns: - name: constant.character.escape.tcl match: "\\\\[{}\\n]" - include: "#inner-braces" comment: matches a single brace-enclosed word inner-braces: begin: "\\{" end: "\\}" patterns: - name: constant.character.escape.tcl match: "\\\\[{}\\n]" - include: "#inner-braces" comment: matches a nested brace in a brace-enclosed word variable: name: variable.other.tcl captures: '1': name: punctuation.definition.variable.tcl match: "(\\$)([a-zA-Z0-9_:]+(\\([^\\)]+\\))?|\\{[^\\}]*\\})" string: name: string.quoted.double.tcl begin: "(?:^|(?<=\\s))(?=\")" applyEndPatternLast: 1 end: '' patterns: - include: "#bare-string" comment: matches a single quote-enclosed word with scoping embedded: name: source.tcl.embedded endCaptures: '0': name: punctuation.section.embedded.end.tcl begin: "\\[" beginCaptures: '0': name: punctuation.section.embedded.begin.tcl end: "\\]" patterns: - include: source.tcl uuid: F01F22AC-7CBB-11D9-9B10-000A95E13C98 foldingStartMarker: "\\{\\s*$" patterns: - begin: "(?<=^|;)\\s*((#))" contentName: comment.line.number-sign.tcl beginCaptures: '1': name: comment.line.number-sign.tcl '2': name: punctuation.definition.comment.tcl end: "\\n" patterns: - match: "(\\\\\\\\|\\\\\\n)" - captures: '1': name: keyword.control.tcl match: "(?<=^|[\\[{;])\\s*(if|while|for|catch|return|break|continue|switch|exit|foreach)\\b" - captures: '1': name: keyword.control.tcl match: "(?<=^|})\\s*(then|elseif|else)\\b" - captures: '1': name: keyword.other.tcl '2': name: entity.name.function.tcl match: "^\\s*(proc)\\s+([^\\s]+)" - captures: '1': name: keyword.other.tcl match: "(?<=^|[\\[{;])\\s*(after|append|array|auto_execok|auto_import|auto_load|auto_mkindex|auto_mkindex_old|auto_qualify|auto_reset|bgerror|binary|cd|clock|close|concat|dde|encoding|eof|error|eval|exec|expr|fblocked|fconfigure|fcopy|file|fileevent|filename|flush|format|gets|glob|global|history|http|incr|info|interp|join|lappend|library|lindex|linsert|list|llength|load|lrange|lreplace|lsearch|lset|lsort|memory|msgcat|namespace|open|package|parray|pid|pkg::create|pkg_mkIndex|proc|puts|pwd|re_syntax|read|registry|rename|resource|scan|seek|set|socket|SafeBase|source|split|string|subst|Tcl|tcl_endOfWord|tcl_findLibrary|tcl_startOfNextWord|tcl_startOfPreviousWord|tcl_wordBreakAfter|tcl_wordBreakBefore|tcltest|tclvars|tell|time|trace|unknown|unset|update|uplevel|upvar|variable|vwait)\\b" - begin: "(?<=^|[\\[{;])\\s*(regexp|regsub)\\b\\s*" beginCaptures: '1': name: keyword.other.tcl end: "[\\n;\\]]" patterns: - name: constant.character.escape.tcl match: "\\\\(?:.|\\n)" - match: "-\\w+\\s*" comment: switch for regexp - begin: "--\\s*" applyEndPatternLast: 1 end: '' patterns: - include: "#regexp" comment: end of switches - include: "#regexp" comment: special-case regexp/regsub keyword in order to handle the expression - include: "#escape" - include: "#variable" - name: string.quoted.double.tcl endCaptures: '0': name: punctuation.definition.string.end.tcl begin: "\"" beginCaptures: '0': name: punctuation.definition.string.begin.tcl end: "\"" patterns: - include: "#escape" - include: "#variable" - include: "#embedded" foldingStopMarker: "^\\s*\\}" keyEquivalent: "^~T"