define("ace/mode/lua",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lua_highlight_rules","ace/range"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./lua_highlight_rules").LuaHighlightRules,h=a("../range").Range,i=function(){this.$tokenizer=new f((new g).getRules())};d.inherits(i,e),function(){function c(b){var c=0;for(var d in b){var e=b[d];e.type=="keyword"?e.value in a&&(c+=a[e.value]):e.type=="paren.lparen"?c++:e.type=="paren.rparen"&&c--}return c<0?-1:c>0?1:0}var a={"function":1,then:1,"do":1,"else":1,elseif:1,repeat:1,end:-1,until:-1},b=["else","elseif","end","until"];this.getNextLineIndent=function(a,b,d){var e=this.$getIndent(b),f=0,g=this.$tokenizer.getLineTokens(b,a),h=g.tokens;return a=="start"&&(f=c(h)),f>0?e+d:f<0&&e.substr(e.length-d.length)==d&&!this.checkOutdent(a,b,"\n")?e.substr(0,e.length-d.length):e},this.checkOutdent=function(a,c,d){if(d!="\n"&&d!="\r"&&d!="\r\n")return!1;if(c.match(/^\s*[\)\}\]]$/))return!0;var e=this.$tokenizer.getLineTokens(c.trim(),a).tokens;return!e||!e.length?!1:e[0].type=="keyword"&&b.indexOf(e[0].value)!=-1},this.autoOutdent=function(a,b,d){var e=b.getLine(d-1),f=this.$getIndent(e).length,g=this.$tokenizer.getLineTokens(e,"start").tokens,i=b.getTabString().length,j=f+i*c(g),k=this.$getIndent(b.getLine(d)).length;if(k|<=|=>|==|~=|=|\\:|\\.\\.\\.|\\.\\."},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qcomment:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment1:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment2:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment3:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment4:[{token:"comment",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qcomment5:[{token:function(a){var b=/\](\=+)\]/,c=this.rules.qcomment5[0],d;c.next="start";if((d=b.exec(a))!=null&&(d=d[1])!=undefined){var e=d.length,f;(f=p.pop())!=e&&(p.push(f),c.next="qcomment5")}return"comment"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"comment",merge:!0,regex:".+"}],qstring:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring1:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\=\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring2:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={2}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring3:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={3}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring4:[{token:"string",regex:"(?:[^\\\\]|\\\\.)*?\\]\\={4}\\]",next:"start"},{token:"string",merge:!0,regex:".+"}],qstring5:[{token:function(a){var b=/\](\=+)\]/,c=this.rules.qstring5[0],d;c.next="start";if((d=b.exec(a))!=null&&(d=d[1])!=undefined){var e=d.length,f;(f=p.pop())!=e&&(p.push(f),c.next="qstring5")}return"string"},regex:"(?:[^\\\\]|\\\\.)*?\\]\\={5}\\=*\\]",next:"start"},{token:"string",merge:!0,regex:".+"}]}};d.inherits(f,e),b.LuaHighlightRules=f})