| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | /** * @param {string} value * @returns {RegExp} * *//** * @param {RegExp | string } re * @returns {string} */function source(re) {  if (!re) return null;  if (typeof re === "string") return re;  return re.source;}/** * @param {RegExp | string } re * @returns {string} */function optional(re) {  return concat('(', re, ')?');}/** * @param {...(RegExp | string) } args * @returns {string} */function concat(...args) {  const joined = args.map((x) => source(x)).join("");  return joined;}/*Language: TclDescription: Tcl is a very simple programming language.Author: Radek Liska <radekliska@gmail.com>Website: https://www.tcl.tk/about/language.html*/function tcl(hljs) {  const TCL_IDENT = /[a-zA-Z_][a-zA-Z0-9_]*/;  const NUMBER = {    className: 'number',    variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]  };  return {    name: 'Tcl',    aliases: ['tk'],    keywords: 'after append apply array auto_execok auto_import auto_load auto_mkindex ' +      'auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock ' +      'close concat continue dde dict encoding eof error eval exec exit expr fblocked ' +      'fconfigure fcopy file fileevent filename flush for foreach format gets glob global ' +      'history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list ' +      'llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 '+      'mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex '+      'platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename '+      'return safe scan seek set socket source split string subst switch tcl_endOfWord '+      'tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter '+      'tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update '+      'uplevel upvar variable vwait while',    contains: [      hljs.COMMENT(';[ \\t]*#', '$'),      hljs.COMMENT('^[ \\t]*#', '$'),      {        beginKeywords: 'proc',        end: '[\\{]',        excludeEnd: true,        contains: [          {            className: 'title',            begin: '[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',            end: '[ \\t\\n\\r]',            endsWithParent: true,            excludeEnd: true          }        ]      },      {        className: "variable",        variants: [          {            begin: concat(              /\$/,              optional(/::/),              TCL_IDENT,              '(::',              TCL_IDENT,              ')*'            )          },          {            begin: '\\$\\{(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',            end: '\\}',            contains: [              NUMBER            ]          }        ]      },      {        className: 'string',        contains: [hljs.BACKSLASH_ESCAPE],        variants: [          hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})        ]      },      NUMBER    ]  }}module.exports = tcl;
 |