!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(k){"use strict";function v(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var x=v(["and","or","not","is"]),_=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in"],z=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function w(e){return e.scopes[e.scopes.length-1]}k.registerHelper("hintWords","python",_.concat(z)),k.defineMode("python",function(t,l){for(var c="error",a=l.delimiters||l.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,s=[l.singleOperators,l.doubleOperators,l.doubleDelimiters,l.tripleDelimiters,l.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@])/],e=0;en;){if("py"!=w(t).type)return!0;t.scopes.pop()}return w(t).offset!=n}function o(e,t){e.sol()&&(t.beginningOfLine=!0);var n,r,i,o,a=t.tokenize(e,t),s=e.current();if(t.beginningOfLine&&"@"==s)return e.match(p,!1)?"meta":f?"operator":c;if(/\S/.test(s)&&(t.beginningOfLine=!1),"variable"!=a&&"builtin"!=a||"meta"!=t.lastToken||(a="meta"),"pass"!=s&&"return"!=s||(t.dedent+=1),"lambda"==s&&(t.lambda=!0),":"!=s||t.lambda||"py"!=w(t).type||y(t),1==s.length&&!/string|comment/.test(a)){var l="[({".indexOf(s);if(-1!=l&&(n=e,r=t,i="])}".slice(l,l+1),o=n.match(/^([\s\[\{\(]|#.*)*$/,!1)?null:n.column()+1,r.scopes.push({offset:r.indent+u,type:i,align:o})),-1!=(l="])}".indexOf(s))){if(w(t).type!=s)return c;t.indent=t.scopes.pop().offset-u}}return 0