1{"version":3,"sources":["../../node_modules/codemirror/mode/python/python.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","wordRegexp","words","RegExp","join","wordOperators","commonKeywords","commonBuiltins","registerHelper","concat","top","state","scopes","length","defineMode","conf","parserConf","ERRORCLASS","delimiters","singleDelimiters","operators","singleOperators","doubleOperators","doubleDelimiters","tripleDelimiters","i","splice","hangingIndent","indentUnit","myKeywords","myBuiltins","extra_keywords","undefined","extra_builtins","py3","version","Number","identifiers","stringPrefixes","keywords","builtins","tokenBase","stream","sol","lastToken","indent","indentation","type","scopeOffset","offset","eatSpace","lineOffset","pushPyScope","dedent","peek","errorToken","style","tokenBaseInner","inFormat","match","floatLiteral","eat","intLiteral","isFmtString","current","toLowerCase","indexOf","tokenize","tokenStringFactory","formatStringFactory","next","delimiter","tokenOuter","charAt","substr","singleline","OUTCLASS","tokenNestedExpr","depth","inner","tokenString","eol","eatWhile","singleLineStringErrors","isString","pop","push","align","pushBracketScope","column","indented","tokenLexer","beginningOfLine","test","lambda","delimiter_index","slice","external","startState","basecolumn","token","addErr","textAfter","Pass","scope","closing","electricInput","closeBrackets","triples","lineComment","fold","defineMIME","str","split","name"],"mappings":"CAGA,SAAUA,GACR,SAAWC,UAAW,gBAAmBC,SAAU,SACjDF,EAAIG,QAAQ,6BACT,UAAWC,SAAU,YAAcA,OAAOC,IAC7CD,QAAQ,wBAAyBJ,OAEjCA,GAAIM,cACL,SAASA,GACV,YAEA,SAASC,GAAWC,GAClB,MAAO,IAAIC,QAAO,MAAQD,EAAME,KAAK,OAAS,SAGhD,GAAIC,GAAgBJ,GAAY,MAAO,KAAM,MAAO,MACpD,IAAIK,IAAkB,KAAM,SAAU,QAAS,QAAS,WAClC,MAAO,MAAO,OAAQ,OAAQ,SAAU,UACxC,MAAO,OAAQ,SAAU,KAAM,SAC/B,SAAU,OAAQ,QAAS,SAC3B,MAAO,QAAS,OAAQ,QAAS,KACvD,IAAIC,IAAkB,MAAO,MAAO,MAAO,MAAO,OAAQ,YAAa,WAAY,MAC7D,cAAe,UAAW,UAAW,UAAW,OAAQ,MAAO,SAC/D,YAAa,OAAQ,SAAU,QAAS,SAAU,YAClD,UAAW,UAAW,UAAW,OAAQ,OAAQ,MAAO,KACxD,QAAS,MAAO,aAAc,aAAc,OAAQ,MACpD,OAAQ,SAAU,MAAO,MAAO,aAAc,MAAO,OACrD,SAAU,MAAO,OAAQ,MAAO,MAAO,WAAY,QACnD,OAAQ,WAAY,QAAS,MAAO,UAAW,QAC/C,SAAU,eAAgB,MAAO,MAAO,QAAS,QACjD,OAAQ,OAAQ,MAAO,aAAc,iBACrC,WAAY,YAClCP,GAAWQ,eAAe,YAAa,SAAUF,EAAeG,OAAOF,GAEvE,SAASG,GAAIC,GACX,MAAOA,GAAMC,OAAOD,EAAMC,OAAOC,OAAS,GAG5Cb,EAAWc,WAAW,SAAU,SAASC,EAAMC,GAC7C,GAAIC,GAAa,OAEjB,IAAIC,GAAaF,EAAWE,YAAcF,EAAWG,kBAAoB,2BAEzE,IAAIC,IAAaJ,EAAWK,gBAAiBL,EAAWM,gBAAiBN,EAAWO,iBAAkBP,EAAWQ,iBAChGR,EAAWI,WAAa,0DACzC,KAAK,GAAIK,GAAI,EAAGA,EAAIL,EAAUP,OAAQY,IAAK,IAAKL,EAAUK,GAAIL,EAAUM,OAAOD,IAAK,EAEpF,IAAIE,GAAgBX,EAAWW,eAAiBZ,EAAKa,UAErD,IAAIC,GAAavB,EAAgBwB,EAAavB,CAC9C,IAAIS,EAAWe,gBAAkBC,UAC/BH,EAAaA,EAAWpB,OAAOO,EAAWe,eAE5C,IAAIf,EAAWiB,gBAAkBD,UAC/BF,EAAaA,EAAWrB,OAAOO,EAAWiB,eAE5C,IAAIC,KAAQlB,EAAWmB,SAAWC,OAAOpB,EAAWmB,SAAW,EAC/D,IAAID,EAAK,CAEP,GAAIG,GAAcrB,EAAWqB,aAAc,mDAC3CR,GAAaA,EAAWpB,QAAQ,WAAY,QAAS,OAAQ,OAAQ,QAAS,SAC9EqB,GAAaA,EAAWrB,QAAQ,QAAS,QAAS,OAAQ,SAC1D,IAAI6B,GAAiB,GAAInC,QAAO,2CAA4C,SACvE,CACL,GAAIkC,GAAcrB,EAAWqB,aAAc,yBAC3CR,GAAaA,EAAWpB,QAAQ,OAAQ,SACxCqB,GAAaA,EAAWrB,QAAQ,QAAS,aAAc,SAAU,MAAO,SAAU,WAClD,OAAQ,SAAU,OAAQ,YAAa,SAAU,SACjD,SAAU,UAAW,SAAU,QAAS,OAAQ,QAChF,IAAI6B,GAAiB,GAAInC,QAAO,2CAA4C,KAE9E,GAAIoC,GAAWtC,EAAW4B,EAC1B,IAAIW,GAAWvC,EAAW6B,EAG1B,SAASW,GAAUC,EAAQ/B,GACzB,GAAIgC,GAAMD,EAAOC,OAAShC,EAAMiC,WAAa,IAC7C,IAAID,EAAKhC,EAAMkC,OAASH,EAAOI,aAE/B,IAAIH,GAAOjC,EAAIC,GAAOoC,MAAQ,KAAM,CAClC,GAAIC,GAActC,EAAIC,GAAOsC,MAC7B,IAAIP,EAAOQ,WAAY,CACrB,GAAIC,GAAaT,EAAOI,aACxB,IAAIK,EAAaH,EACfI,EAAYzC,OACT,IAAIwC,EAAaH,GAAeK,EAAOX,EAAQ/B,IAAU+B,EAAOY,QAAU,IAC7E3C,EAAM4C,WAAa,IACrB,OAAO,UACF,CACL,GAAIC,GAAQC,EAAef,EAAQ/B,EACnC,IAAIqC,EAAc,GAAKK,EAAOX,EAAQ/B,GACpC6C,GAAS,IAAMvC,CACjB,OAAOuC,IAGX,MAAOC,GAAef,EAAQ/B,GAGhC,QAAS8C,GAAef,EAAQ/B,EAAO+C,GACrC,GAAIhB,EAAOQ,WAAY,MAAO,KAG9B,KAAKQ,GAAYhB,EAAOiB,MAAM,QAAS,MAAO,SAG9C,IAAIjB,EAAOiB,MAAM,WAAY,OAAQ,CACnC,GAAIC,GAAe,KAEnB,IAAIlB,EAAOiB,MAAM,+BAAgC,CAAEC,EAAe,KAClE,GAAIlB,EAAOiB,MAAM,gBAAiB,CAAEC,EAAe,KACnD,GAAIlB,EAAOiB,MAAM,UAAW,CAAEC,EAAe,KAC7C,GAAIA,EAAc,CAEhBlB,EAAOmB,IAAI,KACX,OAAO,SAGT,GAAIC,GAAa,KAEjB,IAAIpB,EAAOiB,MAAM,kBAAmBG,EAAa,IAEjD,IAAIpB,EAAOiB,MAAM,cAAeG,EAAa,IAE7C,IAAIpB,EAAOiB,MAAM,eAAgBG,EAAa,IAE9C,IAAIpB,EAAOiB,MAAM,iCAAkC,CAEjDjB,EAAOmB,IAAI,KAEXC,GAAa,KAGf,GAAIpB,EAAOiB,MAAM,gBAAiBG,EAAa,IAC/C,IAAIA,EAAY,CAEdpB,EAAOmB,IAAI,KACX,OAAO,UAKX,GAAInB,EAAOiB,MAAMrB,GAAiB,CAChC,GAAIyB,GAAcrB,EAAOsB,UAAUC,cAAcC,QAAQ,QAAU,CACnE,KAAKH,EAAa,CAChBpD,EAAMwD,SAAWC,EAAmB1B,EAAOsB,UAAWrD,EAAMwD,SAC5D,OAAOxD,GAAMwD,SAASzB,EAAQ/B,OACzB,CACLA,EAAMwD,SAAWE,EAAoB3B,EAAOsB,UAAWrD,EAAMwD,SAC7D,OAAOxD,GAAMwD,SAASzB,EAAQ/B,IAIlC,IAAK,GAAIc,GAAI,EAAGA,EAAIL,EAAUP,OAAQY,IACpC,GAAIiB,EAAOiB,MAAMvC,EAAUK,IAAK,MAAO,UAEzC,IAAIiB,EAAOiB,MAAMzC,GAAa,MAAO,aAErC,IAAIP,EAAMiC,WAAa,KAAOF,EAAOiB,MAAMtB,GACzC,MAAO,UAET,IAAIK,EAAOiB,MAAMpB,IAAaG,EAAOiB,MAAMtD,GACzC,MAAO,SAET,IAAIqC,EAAOiB,MAAMnB,GACf,MAAO,SAET,IAAIE,EAAOiB,MAAM,iBACf,MAAO,YAET,IAAIjB,EAAOiB,MAAMtB,GAAc,CAC7B,GAAI1B,EAAMiC,WAAa,OAASjC,EAAMiC,WAAa,QACjD,MAAO,KACT,OAAO,WAITF,EAAO4B,MACP,OAAOZ,GAAW,KAAMzC,EAG1B,QAASoD,GAAoBE,EAAWC,GACtC,MAAO,OAAON,QAAQK,EAAUE,OAAO,GAAGR,gBAAkB,EAC1DM,EAAYA,EAAUG,OAAO,EAE/B,IAAIC,GAAaJ,EAAU1D,QAAU,CACrC,IAAI+D,GAAW,QAEf,SAASC,GAAgBC,GACvB,MAAO,UAASpC,EAAQ/B,GACtB,GAAIoE,GAAQtB,EAAef,EAAQ/B,EAAO,KAC1C,IAAIoE,GAAS,cAAe,CAC1B,GAAIrC,EAAOsB,WAAa,IAAK,CAC3BrD,EAAMwD,SAAWU,EAAgBC,EAAQ,OACpC,IAAIpC,EAAOsB,WAAa,IAAK,CAClC,GAAIc,EAAQ,EAAGnE,EAAMwD,SAAWU,EAAgBC,EAAQ,OACnDnE,GAAMwD,SAAWa,GAG1B,MAAOD,IAIX,QAASC,GAAYtC,EAAQ/B,GAC3B,OAAQ+B,EAAOuC,MAAO,CACpBvC,EAAOwC,SAAS,cAChB,IAAIxC,EAAOmB,IAAI,MAAO,CACpBnB,EAAO4B,MACP,IAAIK,GAAcjC,EAAOuC,MACvB,MAAOL,OACJ,IAAIlC,EAAOiB,MAAMY,GAAY,CAClC5D,EAAMwD,SAAWK,CACjB,OAAOI,OACF,IAAIlC,EAAOiB,MAAM,MAAO,CAE7B,MAAOiB,OACF,IAAIlC,EAAOiB,MAAM,IAAK,OAAQ,CAEnChD,EAAMwD,SAAWU,EAAgB,EACjC,IAAInC,EAAOsB,UAAW,MAAOY,OACxB,OAAOjE,GAAMwD,SAASzB,EAAQ/B,OAC9B,IAAI+B,EAAOiB,MAAM,MAAO,CAC7B,MAAOiB,OACF,IAAIlC,EAAOiB,MAAM,KAAM,CAE5B,MAAO1C,OACF,CACLyB,EAAOmB,IAAI,SAGf,GAAIc,EAAY,CACd,GAAI3D,EAAWmE,uBACb,MAAOlE,OAEPN,GAAMwD,SAAWK,EAErB,MAAOI,GAETI,EAAYI,SAAW,IACvB,OAAOJ,GAGT,QAASZ,GAAmBG,EAAWC,GACrC,MAAO,OAAON,QAAQK,EAAUE,OAAO,GAAGR,gBAAkB,EAC1DM,EAAYA,EAAUG,OAAO,EAE/B,IAAIC,GAAaJ,EAAU1D,QAAU,CACrC,IAAI+D,GAAW,QAEf,SAASI,GAAYtC,EAAQ/B,GAC3B,OAAQ+B,EAAOuC,MAAO,CACpBvC,EAAOwC,SAAS,UAChB,IAAIxC,EAAOmB,IAAI,MAAO,CACpBnB,EAAO4B,MACP,IAAIK,GAAcjC,EAAOuC,MACvB,MAAOL,OACJ,IAAIlC,EAAOiB,MAAMY,GAAY,CAClC5D,EAAMwD,SAAWK,CACjB,OAAOI,OACF,CACLlC,EAAOmB,IAAI,SAGf,GAAIc,EAAY,CACd,GAAI3D,EAAWmE,uBACb,MAAOlE,OAEPN,GAAMwD,SAAWK,EAErB,MAAOI,GAETI,EAAYI,SAAW,IACvB,OAAOJ,GAGT,QAAS5B,GAAYzC,GACnB,MAAOD,EAAIC,GAAOoC,MAAQ,KAAMpC,EAAMC,OAAOyE,KAC7C1E,GAAMC,OAAO0E,MAAMrC,OAAQvC,EAAIC,GAAOsC,OAASlC,EAAKa,WACjCmB,KAAM,KACNwC,MAAO,OAG5B,QAASC,GAAiB9C,EAAQ/B,EAAOoC,GACvC,GAAIwC,GAAQ7C,EAAOiB,MAAM,sBAAuB,OAAS,KAAOjB,EAAO+C,SAAW,CAClF9E,GAAMC,OAAO0E,MAAMrC,OAAQtC,EAAMkC,OAASlB,EACvBoB,KAAMA,EACNwC,MAAOA,IAG5B,QAASlC,GAAOX,EAAQ/B,GACtB,GAAI+E,GAAWhD,EAAOI,aACtB,OAAOnC,EAAMC,OAAOC,OAAS,GAAKH,EAAIC,GAAOsC,OAASyC,EAAU,CAC9D,GAAIhF,EAAIC,GAAOoC,MAAQ,KAAM,MAAO,KACpCpC,GAAMC,OAAOyE,MAEf,MAAO3E,GAAIC,GAAOsC,QAAUyC,EAG9B,QAASC,GAAWjD,EAAQ/B,GAC1B,GAAI+B,EAAOC,MAAOhC,EAAMiF,gBAAkB,IAE1C,IAAIpC,GAAQ7C,EAAMwD,SAASzB,EAAQ/B,EACnC,IAAIqD,GAAUtB,EAAOsB,SAGrB,IAAIrD,EAAMiF,iBAAmB5B,GAAW,IACtC,MAAOtB,GAAOiB,MAAMtB,EAAa,OAAS,OAASH,EAAM,WAAajB,CAExE,IAAI,KAAK4E,KAAK7B,GAAUrD,EAAMiF,gBAAkB,KAEhD,KAAKpC,GAAS,YAAcA,GAAS,YAC9B7C,EAAMiC,WAAa,OACxBY,EAAQ,MAGV,IAAIQ,GAAW,QAAUA,GAAW,SAClCrD,EAAM0C,QAAU,CAElB,IAAIW,GAAW,SAAUrD,EAAMmF,OAAS,IACxC,IAAI9B,GAAW,MAAQrD,EAAMmF,QAAUpF,EAAIC,GAAOoC,MAAQ,KACxDK,EAAYzC,EAEd,IAAIqD,EAAQnD,QAAU,IAAM,iBAAiBgF,KAAKrC,GAAQ,CACxD,GAAIuC,GAAkB,MAAM7B,QAAQF,EACpC,IAAI+B,IAAoB,EACtBP,EAAiB9C,EAAQ/B,EAAO,MAAMqF,MAAMD,EAAiBA,EAAgB,GAE/EA,GAAkB,MAAM7B,QAAQF,EAChC,IAAI+B,IAAoB,EAAG,CACzB,GAAIrF,EAAIC,GAAOoC,MAAQiB,EAASrD,EAAMkC,OAASlC,EAAMC,OAAOyE,MAAMpC,OAAStB,MACtE,OAAOV,IAGhB,GAAIN,EAAM0C,OAAS,GAAKX,EAAOuC,OAASvE,EAAIC,GAAOoC,MAAQ,KAAM,CAC/D,GAAIpC,EAAMC,OAAOC,OAAS,EAAGF,EAAMC,OAAOyE,KAC1C1E,GAAM0C,QAAU,EAGlB,MAAOG,GAGT,GAAIyC,IACFC,WAAY,SAASC,GACnB,OACEhC,SAAU1B,EACV7B,SAAUqC,OAAQkD,GAAc,EAAGpD,KAAM,KAAMwC,MAAO,OACtD1C,OAAQsD,GAAc,EACtBvD,UAAW,KACXkD,OAAQ,MACRzC,OAAQ,IAIZ+C,MAAO,SAAS1D,EAAQ/B,GACtB,GAAI0F,GAAS1F,EAAM4C,UACnB,IAAI8C,EAAQ1F,EAAM4C,WAAa,KAC/B,IAAIC,GAAQmC,EAAWjD,EAAQ/B,EAE/B,IAAI6C,GAASA,GAAS,UACpB7C,EAAMiC,UAAaY,GAAS,WAAaA,GAAS,cAAiBd,EAAOsB,UAAYR,CACxF,IAAIA,GAAS,cAAeA,EAAQ,IAEpC,IAAId,EAAOuC,OAAStE,EAAMmF,OACxBnF,EAAMmF,OAAS,KACjB,OAAOO,GAAS7C,EAAQ,IAAMvC,EAAauC,GAG7CX,OAAQ,SAASlC,EAAO2F,GACtB,GAAI3F,EAAMwD,UAAY1B,EACpB,MAAO9B,GAAMwD,SAASiB,SAAWpF,EAAWuG,KAAO,CAErD,IAAIC,GAAQ9F,EAAIC,GAAQ8F,EAAUD,EAAMzD,MAAQuD,EAAU7B,OAAO,EACjE,IAAI+B,EAAMjB,OAAS,KACjB,MAAOiB,GAAMjB,OAASkB,EAAU,EAAI,OAEpC,OAAOD,GAAMvD,QAAUwD,EAAU9E,EAAgB,IAGrD+E,cAAe,gBACfC,eAAgBC,QAAS,OACzBC,YAAa,IACbC,KAAM,SAER,OAAOb,IAGTjG,GAAW+G,WAAW,gBAAiB,SAEvC,IAAI7G,GAAQ,SAAS8G,GAAO,MAAOA,GAAIC,MAAM,KAE7CjH,GAAW+G,WAAW,iBACpBG,KAAM,SACNnF,eAAgB7B,EAAM,8CACA,4CACA","file":"python.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\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\n function wordRegexp(words) {\n return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n }\n\n var wordOperators = wordRegexp([\"and\", \"or\", \"not\", \"is\"]);\n var commonKeywords = [\"as\", \"assert\", \"break\", \"class\", \"continue\",\n \"def\", \"del\", \"elif\", \"else\", \"except\", \"finally\",\n \"for\", \"from\", \"global\", \"if\", \"import\",\n \"lambda\", \"pass\", \"raise\", \"return\",\n \"try\", \"while\", \"with\", \"yield\", \"in\"];\n var commonBuiltins = [\"abs\", \"all\", \"any\", \"bin\", \"bool\", \"bytearray\", \"callable\", \"chr\",\n \"classmethod\", \"compile\", \"complex\", \"delattr\", \"dict\", \"dir\", \"divmod\",\n \"enumerate\", \"eval\", \"filter\", \"float\", \"format\", \"frozenset\",\n \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\",\n \"input\", \"int\", \"isinstance\", \"issubclass\", \"iter\", \"len\",\n \"list\", \"locals\", \"map\", \"max\", \"memoryview\", \"min\", \"next\",\n \"object\", \"oct\", \"open\", \"ord\", \"pow\", \"property\", \"range\",\n \"repr\", \"reversed\", \"round\", \"set\", \"setattr\", \"slice\",\n \"sorted\", \"staticmethod\", \"str\", \"sum\", \"super\", \"tuple\",\n \"type\", \"vars\", \"zip\", \"__import__\", \"NotImplemented\",\n \"Ellipsis\", \"__debug__\"];\n CodeMirror.registerHelper(\"hintWords\", \"python\", commonKeywords.concat(commonBuiltins));\n\n function top(state) {\n return state.scopes[state.scopes.length - 1];\n }\n\n CodeMirror.defineMode(\"python\", function(conf, parserConf) {\n var ERRORCLASS = \"error\";\n\n var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\\(\\)\\[\\]\\{\\}@,:`=;\\.\\\\]/;\n // (Backwards-compatibility with old, cumbersome config system)\n var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters,\n parserConf.operators || /^([-+*/%\\/&|^]=?|[<>=]+|\\/\\/=?|\\*\\*=?|!=|[~!@]|\\.\\.\\.)/]\n for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1)\n\n var hangingIndent = parserConf.hangingIndent || conf.indentUnit;\n\n var myKeywords = commonKeywords, myBuiltins = commonBuiltins;\n if (parserConf.extra_keywords != undefined)\n myKeywords = myKeywords.concat(parserConf.extra_keywords);\n\n if (parserConf.extra_builtins != undefined)\n myBuiltins = myBuiltins.concat(parserConf.extra_builtins);\n\n var py3 = !(parserConf.version && Number(parserConf.version) < 3)\n if (py3) {\n // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator\n var identifiers = parserConf.identifiers|| /^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;\n myKeywords = myKeywords.concat([\"nonlocal\", \"False\", \"True\", \"None\", \"async\", \"await\"]);\n myBuiltins = myBuiltins.concat([\"ascii\", \"bytes\", \"exec\", \"print\"]);\n var stringPrefixes = new RegExp(\"^(([rbuf]|(br)|(fr))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n } else {\n var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/;\n myKeywords = myKeywords.concat([\"exec\", \"print\"]);\n myBuiltins = myBuiltins.concat([\"apply\", \"basestring\", \"buffer\", \"cmp\", \"coerce\", \"execfile\",\n \"file\", \"intern\", \"long\", \"raw_input\", \"reduce\", \"reload\",\n \"unichr\", \"unicode\", \"xrange\", \"False\", \"True\", \"None\"]);\n var stringPrefixes = new RegExp(\"^(([rubf]|(ur)|(br))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n }\n var keywords = wordRegexp(myKeywords);\n var builtins = wordRegexp(myBuiltins);\n\n // tokenizers\n function tokenBase(stream, state) {\n var sol = stream.sol() && state.lastToken != \"\\\\\"\n if (sol) state.indent = stream.indentation()\n // Handle scope changes\n if (sol && top(state).type == \"py\") {\n var scopeOffset = top(state).offset;\n if (stream.eatSpace()) {\n var lineOffset = stream.indentation();\n if (lineOffset > scopeOffset)\n pushPyScope(state);\n else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != \"#\")\n state.errorToken = true;\n return null;\n } else {\n var style = tokenBaseInner(stream, state);\n if (scopeOffset > 0 && dedent(stream, state))\n style += \" \" + ERRORCLASS;\n return style;\n }\n }\n return tokenBaseInner(stream, state);\n }\n\n function tokenBaseInner(stream, state, inFormat) {\n if (stream.eatSpace()) return null;\n\n // Handle Comments\n if (!inFormat && stream.match(/^#.*/)) return \"comment\";\n\n // Handle Number Literals\n if (stream.match(/^[0-9\\.]/, false)) {\n var floatLiteral = false;\n // Floats\n if (stream.match(/^[\\d_]*\\.\\d+(e[\\+\\-]?\\d+)?/i)) { floatLiteral = true; }\n if (stream.match(/^[\\d_]+\\.\\d*/)) { floatLiteral = true; }\n if (stream.match(/^\\.\\d+/)) { floatLiteral = true; }\n if (floatLiteral) {\n // Float literals may be \"imaginary\"\n stream.eat(/J/i);\n return \"number\";\n }\n // Integers\n var intLiteral = false;\n // Hex\n if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true;\n // Binary\n if (stream.match(/^0b[01_]+/i)) intLiteral = true;\n // Octal\n if (stream.match(/^0o[0-7_]+/i)) intLiteral = true;\n // Decimal\n if (stream.match(/^[1-9][\\d_]*(e[\\+\\-]?[\\d_]+)?/)) {\n // Decimal literals may be \"imaginary\"\n stream.eat(/J/i);\n // TODO - Can you have imaginary longs?\n intLiteral = true;\n }\n // Zero by itself with no other piece of number.\n if (stream.match(/^0(?![\\dx])/i)) intLiteral = true;\n if (intLiteral) {\n // Integer literals may be \"long\"\n stream.eat(/L/i);\n return \"number\";\n }\n }\n\n // Handle Strings\n if (stream.match(stringPrefixes)) {\n var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1;\n if (!isFmtString) {\n state.tokenize = tokenStringFactory(stream.current(), state.tokenize);\n return state.tokenize(stream, state);\n } else {\n state.tokenize = formatStringFactory(stream.current(), state.tokenize);\n return state.tokenize(stream, state);\n }\n }\n\n for (var i = 0; i < operators.length; i++)\n if (stream.match(operators[i])) return \"operator\"\n\n if (stream.match(delimiters)) return \"punctuation\";\n\n if (state.lastToken == \".\" && stream.match(identifiers))\n return \"property\";\n\n if (stream.match(keywords) || stream.match(wordOperators))\n return \"keyword\";\n\n if (stream.match(builtins))\n return \"builtin\";\n\n if (stream.match(/^(self|cls)\\b/))\n return \"variable-2\";\n\n if (stream.match(identifiers)) {\n if (state.lastToken == \"def\" || state.lastToken == \"class\")\n return \"def\";\n return \"variable\";\n }\n\n // Handle non-detected items\n stream.next();\n return inFormat ? null :ERRORCLASS;\n }\n\n function formatStringFactory(delimiter, tokenOuter) {\n while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n delimiter = delimiter.substr(1);\n\n var singleline = delimiter.length == 1;\n var OUTCLASS = \"string\";\n\n function tokenNestedExpr(depth) {\n return function(stream, state) {\n var inner = tokenBaseInner(stream, state, true)\n if (inner == \"punctuation\") {\n if (stream.current() == \"{\") {\n state.tokenize = tokenNestedExpr(depth + 1)\n } else if (stream.current() == \"}\") {\n if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1)\n else state.tokenize = tokenString\n }\n }\n return inner\n }\n }\n\n function tokenString(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\{\\}\\\\]/);\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol())\n return OUTCLASS;\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenOuter;\n return OUTCLASS;\n } else if (stream.match('{{')) {\n // ignore {{ in f-str\n return OUTCLASS;\n } else if (stream.match('{', false)) {\n // switch to nested mode\n state.tokenize = tokenNestedExpr(0)\n if (stream.current()) return OUTCLASS;\n else return state.tokenize(stream, state)\n } else if (stream.match('}}')) {\n return OUTCLASS;\n } else if (stream.match('}')) {\n // single } in f-string is an error\n return ERRORCLASS;\n } else {\n stream.eat(/['\"]/);\n }\n }\n if (singleline) {\n if (parserConf.singleLineStringErrors)\n return ERRORCLASS;\n else\n state.tokenize = tokenOuter;\n }\n return OUTCLASS;\n }\n tokenString.isString = true;\n return tokenString;\n }\n\n function tokenStringFactory(delimiter, tokenOuter) {\n while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n delimiter = delimiter.substr(1);\n\n var singleline = delimiter.length == 1;\n var OUTCLASS = \"string\";\n\n function tokenString(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\\\]/);\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol())\n return OUTCLASS;\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenOuter;\n return OUTCLASS;\n } else {\n stream.eat(/['\"]/);\n }\n }\n if (singleline) {\n if (parserConf.singleLineStringErrors)\n return ERRORCLASS;\n else\n state.tokenize = tokenOuter;\n }\n return OUTCLASS;\n }\n tokenString.isString = true;\n return tokenString;\n }\n\n function pushPyScope(state) {\n while (top(state).type != \"py\") state.scopes.pop()\n state.scopes.push({offset: top(state).offset + conf.indentUnit,\n type: \"py\",\n align: null})\n }\n\n function pushBracketScope(stream, state, type) {\n var align = stream.match(/^([\\s\\[\\{\\(]|#.*)*$/, false) ? null : stream.column() + 1\n state.scopes.push({offset: state.indent + hangingIndent,\n type: type,\n align: align})\n }\n\n function dedent(stream, state) {\n var indented = stream.indentation();\n while (state.scopes.length > 1 && top(state).offset > indented) {\n if (top(state).type != \"py\") return true;\n state.scopes.pop();\n }\n return top(state).offset != indented;\n }\n\n function tokenLexer(stream, state) {\n if (stream.sol()) state.beginningOfLine = true;\n\n var style = state.tokenize(stream, state);\n var current = stream.current();\n\n // Handle decorators\n if (state.beginningOfLine && current == \"@\")\n return stream.match(identifiers, false) ? \"meta\" : py3 ? \"operator\" : ERRORCLASS;\n\n if (/\\S/.test(current)) state.beginningOfLine = false;\n\n if ((style == \"variable\" || style == \"builtin\")\n && state.lastToken == \"meta\")\n style = \"meta\";\n\n // Handle scope changes.\n if (current == \"pass\" || current == \"return\")\n state.dedent += 1;\n\n if (current == \"lambda\") state.lambda = true;\n if (current == \":\" && !state.lambda && top(state).type == \"py\")\n pushPyScope(state);\n\n if (current.length == 1 && !/string|comment/.test(style)) {\n var delimiter_index = \"[({\".indexOf(current);\n if (delimiter_index != -1)\n pushBracketScope(stream, state, \"])}\".slice(delimiter_index, delimiter_index+1));\n\n delimiter_index = \"])}\".indexOf(current);\n if (delimiter_index != -1) {\n if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent\n else return ERRORCLASS;\n }\n }\n if (state.dedent > 0 && stream.eol() && top(state).type == \"py\") {\n if (state.scopes.length > 1) state.scopes.pop();\n state.dedent -= 1;\n }\n\n return style;\n }\n\n var external = {\n startState: function(basecolumn) {\n return {\n tokenize: tokenBase,\n scopes: [{offset: basecolumn || 0, type: \"py\", align: null}],\n indent: basecolumn || 0,\n lastToken: null,\n lambda: false,\n dedent: 0\n };\n },\n\n token: function(stream, state) {\n var addErr = state.errorToken;\n if (addErr) state.errorToken = false;\n var style = tokenLexer(stream, state);\n\n if (style && style != \"comment\")\n state.lastToken = (style == \"keyword\" || style == \"punctuation\") ? stream.current() : style;\n if (style == \"punctuation\") style = null;\n\n if (stream.eol() && state.lambda)\n state.lambda = false;\n return addErr ? style + \" \" + ERRORCLASS : style;\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize != tokenBase)\n return state.tokenize.isString ? CodeMirror.Pass : 0;\n\n var scope = top(state), closing = scope.type == textAfter.charAt(0)\n if (scope.align != null)\n return scope.align - (closing ? 1 : 0)\n else\n return scope.offset - (closing ? hangingIndent : 0)\n },\n\n electricInput: /^\\s*[\\}\\]\\)]$/,\n closeBrackets: {triples: \"'\\\"\"},\n lineComment: \"#\",\n fold: \"indent\"\n };\n return external;\n });\n\n CodeMirror.defineMIME(\"text/x-python\", \"python\");\n\n var words = function(str) { return str.split(\" \"); };\n\n CodeMirror.defineMIME(\"text/x-cython\", {\n name: \"python\",\n extra_keywords: words(\"by cdef cimport cpdef ctypedef enum except \"+\n \"extern gil include nogil property public \"+\n \"readonly struct union DEF IF ELIF ELSE\")\n });\n\n});\n"]}