{"version":3,"file":"tcl-CKXdgq-y.cjs","sources":["../../../node_modules/@codemirror/legacy-modes/mode/tcl.js"],"sourcesContent":["function parseWords(str) {\n  var obj = {}, words = str.split(\" \");\n  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n  return obj;\n}\nvar keywords = parseWords(\"Tcl safe after append array auto_execok auto_import auto_load \" +\n                          \"auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror \" +\n                          \"binary break catch cd close concat continue dde eof encoding error \" +\n                          \"eval exec exit expr fblocked fconfigure fcopy file fileevent filename \" +\n                          \"filename flush for foreach format gets glob global history http if \" +\n                          \"incr info interp join lappend lindex linsert list llength load lrange \" +\n                          \"lreplace lsearch lset lsort memory msgcat namespace open package parray \" +\n                          \"pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp \" +\n                          \"registry regsub rename resource return scan seek set socket source split \" +\n                          \"string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord \" +\n                          \"tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest \" +\n                          \"tclvars tell time trace unknown unset update uplevel upvar variable \" +\n                          \"vwait\");\nvar functions = parseWords(\"if elseif else and not or eq ne in ni for foreach while switch\");\nvar isOperatorChar = /[+\\-*&%=<>!?^\\/\\|]/;\nfunction chain(stream, state, f) {\n  state.tokenize = f;\n  return f(stream, state);\n}\nfunction tokenBase(stream, state) {\n  var beforeParams = state.beforeParams;\n  state.beforeParams = false;\n  var ch = stream.next();\n  if ((ch == '\"' || ch == \"'\") && state.inParams) {\n    return chain(stream, state, tokenString(ch));\n  } else if (/[\\[\\]{}\\(\\),;\\.]/.test(ch)) {\n    if (ch == \"(\" && beforeParams) state.inParams = true;\n    else if (ch == \")\") state.inParams = false;\n    return null;\n  } else if (/\\d/.test(ch)) {\n    stream.eatWhile(/[\\w\\.]/);\n    return \"number\";\n  } else if (ch == \"#\") {\n    if (stream.eat(\"*\"))\n      return chain(stream, state, tokenComment);\n    if (ch == \"#\" && stream.match(/ *\\[ *\\[/))\n      return chain(stream, state, tokenUnparsed);\n    stream.skipToEnd();\n    return \"comment\";\n  } else if (ch == '\"') {\n    stream.skipTo(/\"/);\n    return \"comment\";\n  } else if (ch == \"$\") {\n    stream.eatWhile(/[$_a-z0-9A-Z\\.{:]/);\n    stream.eatWhile(/}/);\n    state.beforeParams = true;\n    return \"builtin\";\n  } else if (isOperatorChar.test(ch)) {\n    stream.eatWhile(isOperatorChar);\n    return \"comment\";\n  } else {\n    stream.eatWhile(/[\\w\\$_{}\\xa1-\\uffff]/);\n    var word = stream.current().toLowerCase();\n    if (keywords && keywords.propertyIsEnumerable(word))\n      return \"keyword\";\n    if (functions && functions.propertyIsEnumerable(word)) {\n      state.beforeParams = true;\n      return \"keyword\";\n    }\n    return null;\n  }\n}\nfunction tokenString(quote) {\n  return function(stream, state) {\n    var escaped = false, next, end = false;\n    while ((next = stream.next()) != null) {\n      if (next == quote && !escaped) {\n        end = true;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    if (end) state.tokenize = tokenBase;\n    return \"string\";\n  };\n}\nfunction tokenComment(stream, state) {\n  var maybeEnd = false, ch;\n  while (ch = stream.next()) {\n    if (ch == \"#\" && maybeEnd) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    maybeEnd = (ch == \"*\");\n  }\n  return \"comment\";\n}\nfunction tokenUnparsed(stream, state) {\n  var maybeEnd = 0, ch;\n  while (ch = stream.next()) {\n    if (ch == \"#\" && maybeEnd == 2) {\n      state.tokenize = tokenBase;\n      break;\n    }\n    if (ch == \"]\")\n      maybeEnd++;\n    else if (ch != \" \")\n      maybeEnd = 0;\n  }\n  return \"meta\";\n}\nexport const tcl = {\n  name: \"tcl\",\n  startState: function() {\n    return {\n      tokenize: tokenBase,\n      beforeParams: false,\n      inParams: false\n    };\n  },\n  token: function(stream, state) {\n    if (stream.eatSpace()) return null;\n    return state.tokenize(stream, state);\n  },\n  languageData: {\n    commentTokens: {line: \"#\"}\n  }\n};\n"],"names":["parseWords","str","obj","words","split","i","length","keywords","functions","isOperatorChar","chain","stream","state","f","tokenize","tokenBase","beforeParams","quote","ch","next","inParams","test","eatWhile","eat","tokenComment","match","tokenUnparsed","skipToEnd","skipTo","word","current","toLowerCase","propertyIsEnumerable","escaped","end","maybeEnd","tcl","name","startState","token","eatSpace","languageData","commentTokens","line"],"mappings":"aAAA,SAASA,EAAWC,GAElB,IADA,IAAIC,EAAM,CAAA,EAAIC,EAAQF,EAAIG,MAAM,KACvBC,EAAI,EAAGA,EAAIF,EAAMG,SAAUD,EAAGH,EAAIC,EAAME,KAAM,EACvD,OAAOH,CACT,oEACA,IAAIK,EAAWP,EAAW,+zBAatBQ,EAAYR,EAAW,kEACvBS,EAAiB,qBACrB,SAASC,EAAMC,EAAQC,EAAOC,GAE5B,OADAD,EAAME,SAAWD,EACVA,EAAEF,EAAQC,EACnB,CACA,SAASG,EAAUJ,EAAQC,GACzB,IAAII,EAAeJ,EAAMI,aACzBJ,EAAMI,cAAe,EACrB,IAwCmBC,EAxCfC,EAAKP,EAAOQ,OAChB,GAAW,KAAND,GAAmB,KAANA,IAAcN,EAAMQ,SAE/B,IAAI,mBAAmBC,KAAKH,GAGjC,MAFU,KAANA,GAAaF,EAAcJ,EAAMQ,UAAW,EACjC,KAANF,IAAWN,EAAMQ,UAAW,GAC9B,KACF,GAAI,KAAKC,KAAKH,GAEnB,OADAP,EAAOW,SAAS,UACT,SACF,GAAU,KAANJ,EACT,OAAIP,EAAOY,IAAI,KACNb,EAAMC,EAAQC,EAAOY,GACpB,KAANN,GAAaP,EAAOc,MAAM,YACrBf,EAAMC,EAAQC,EAAOc,IAC9Bf,EAAOgB,YACA,WACF,GAAU,KAANT,EAET,OADAP,EAAOiB,OAAO,KACP,UACF,GAAU,KAANV,EAIT,OAHAP,EAAOW,SAAS,qBAChBX,EAAOW,SAAS,KAChBV,EAAMI,cAAe,EACd,UACF,GAAIP,EAAeY,KAAKH,GAE7B,OADAP,EAAOW,SAASb,GACT,UAEPE,EAAOW,SAAS,wBAChB,IAAIO,EAAOlB,EAAOmB,UAAUC,cAC5B,OAAIxB,GAAYA,EAASyB,qBAAqBH,GACrC,UACLrB,GAAaA,EAAUwB,qBAAqBH,IAC9CjB,EAAMI,cAAe,EACd,WAEF,IACT,CApCE,OAAON,EAAMC,EAAQC,GAsCJK,EAtCuBC,EAuCnC,SAASP,EAAQC,GAEtB,IADA,IAAqBO,EAAjBc,GAAU,EAAaC,GAAM,EACA,OAAzBf,EAAOR,EAAOQ,SAAiB,CACrC,GAAIA,GAAQF,IAAUgB,EAAS,CAC7BC,GAAM,EACN,KACF,CACAD,GAAWA,GAAmB,MAARd,CACxB,CAEA,OADIe,IAAKtB,EAAME,SAAWC,GACnB,QACT,GAbF,CAeA,SAASS,EAAab,EAAQC,GAE5B,IADA,IAAsBM,EAAlBiB,GAAW,EACRjB,EAAKP,EAAOQ,QAAQ,CACzB,GAAU,KAAND,GAAaiB,EAAU,CACzBvB,EAAME,SAAWC,EACjB,KACF,CACAoB,EAAkB,KAANjB,CACd,CACA,MAAO,SACT,CACA,SAASQ,EAAcf,EAAQC,GAE7B,IADA,IAAkBM,EAAdiB,EAAW,EACRjB,EAAKP,EAAOQ,QAAQ,CACzB,GAAU,KAAND,GAAyB,GAAZiB,EAAe,CAC9BvB,EAAME,SAAWC,EACjB,KACF,CACU,KAANG,EACFiB,IACa,KAANjB,IACPiB,EAAW,EACf,CACA,MAAO,MACT,CACY,MAACC,EAAM,CACjBC,KAAM,MACNC,WAAY,WACV,MAAO,CACLxB,SAAUC,EACVC,cAAc,EACdI,UAAU,EAEd,EACAmB,MAAO,SAAS5B,EAAQC,GACtB,OAAID,EAAO6B,WAAmB,KACvB5B,EAAME,SAASH,EAAQC,EAChC,EACA6B,aAAc,CACZC,cAAe,CAACC,KAAM","x_google_ignoreList":[0]}