{"version":3,"sources":["../../node_modules/codemirror/mode/tcl/tcl.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","parseWords","str","obj","words","split","i","length","keywords","functions","isOperatorChar","chain","stream","state","f","tokenize","tokenBase","beforeParams","ch","next","inParams","tokenString","test","eatWhile","eat","tokenComment","match","tokenUnparsed","skipToEnd","skipTo","word","current","toLowerCase","propertyIsEnumerable","quote","escaped","end","maybeEnd","startState","token","eatSpace","lineComment","defineMIME"],"mappings":"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","file":"tcl.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n//tcl mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"tcl\", function() {\n 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 }\n var 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\");\n var functions = parseWords(\"if elseif else and not or eq ne in ni for foreach while switch\");\n var isOperatorChar = /[+\\-*&%=<>!?^\\/\\|]/;\n function chain(stream, state, f) {\n state.tokenize = f;\n return f(stream, state);\n }\n function 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 }\n function 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 }\n function 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 }\n function 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 }\n return {\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 lineComment: \"#\"\n };\n});\nCodeMirror.defineMIME(\"text/x-tcl\", \"tcl\");\n\n});\n"]}