(function(a){if(typeof exports=="object"&&typeof module=="object")a(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)define(["../../lib/codemirror"],a);else a(CodeMirror)})(function(a){"use strict";a.defineMode("ruby",function(b){function c(a){var b={};for(var c=0,d=a.length;c]/)){a.eat(/[\<\>]/);return"atom"}if(a.eat(/[\+\-\*\/\&\|\:\!]/)){return"atom"}if(a.eat(/[a-zA-Z$@_\xa1-\uffff]/)){a.eatWhile(/[\w$\xa1-\uffff]/);a.eat(/[\?\!\=]/);return"atom"}return"operator"}else if(c=="@"&&a.match(/^@?[a-zA-Z_\xa1-\uffff]/)){a.eat("@");a.eatWhile(/[\w\xa1-\uffff]/);return"variable-2"}else if(c=="$"){if(a.eat(/[a-zA-Z_]/)){a.eatWhile(/[\w]/)}else if(a.eat(/\d/)){a.eat(/\d/)}else{a.next()}return"variable-3"}else if(/[a-zA-Z_\xa1-\uffff]/.test(c)){a.eatWhile(/[\w\xa1-\uffff]/);a.eat(/[\?\!]/);if(a.eat(":"))return"atom";return"ident"}else if(c=="|"&&(b.varList||b.lastTok=="{"||b.lastTok=="do")){i="|";return null}else if(/[\(\)\[\]{}\\;]/.test(c)){i=c;return null}else if(c=="-"&&a.eat(">")){return"arrow"}else if(/[=+\-\/*:\.^%<>~|]/.test(c)){var k=a.eatWhile(/[=+\-\/*:\.^%<>~|]/);if(c=="."&&!k)i=".";return"operator"}else{return null}}function l(a){var b=a.pos,c=0,d,e=false,f=false;while((d=a.next())!=null){if(!f){if("[{(".indexOf(d)>-1){c++}else if("]})".indexOf(d)>-1){c--;if(c<0)break}else if(d=="/"&&c==0){e=true;break}f=d=="\\"}else{f=false}}a.backUp(a.pos-b);return e}function m(a){if(!a)a=1;return function(b,c){if(b.peek()=="}"){if(a==1){c.tokenize.pop();return c.tokenize[c.tokenize.length-1](b,c)}else{c.tokenize[c.tokenize.length-1]=m(a-1)}}else if(b.peek()=="{"){c.tokenize[c.tokenize.length-1]=m(a+1)}return k(b,c)}}function n(){var a=false;return function(b,c){if(a){c.tokenize.pop();return c.tokenize[c.tokenize.length-1](b,c)}a=true;return k(b,c)}}function o(a,b,c,d){return function(e,f){var g=false,h;if(f.context.type==="read-quoted-paused"){f.context=f.context.prev;e.eat("}")}while((h=e.next())!=null){if(h==a&&(d||!g)){f.tokenize.pop();break}if(c&&h=="#"&&!g){if(e.eat("{")){if(a=="}"){f.context={prev:f.context,type:"read-quoted-paused"}}f.tokenize.push(m());break}else if(/[@\$]/.test(e.peek())){f.tokenize.push(n());break}}g=!g&&h=="\\"}return b}}function p(a,b){return function(c,d){if(b)c.eatSpace();if(c.match(a))d.tokenize.pop();else c.skipToEnd();return"string"}}function q(a,b){if(a.sol()&&a.match("=end")&&a.eol())b.tokenize.pop();a.skipToEnd();return"comment"}return{startState:function(){return{tokenize:[k],indented:0,context:{type:"top",indented:-b.indentUnit},continuedLine:false,lastTok:null,varList:false}},token:function(a,b){i=null;if(a.sol())b.indented=a.indentation();var c=b.tokenize[b.tokenize.length-1](a,b),g;var h=i;if(c=="ident"){var j=a.current();c=b.lastTok=="."?"property":d.propertyIsEnumerable(a.current())?"keyword":/^[A-Z]/.test(j)?"tag":b.lastTok=="def"||b.lastTok=="class"||b.varList?"def":"variable";if(c=="keyword"){h=j;if(e.propertyIsEnumerable(j))g="indent";else if(f.propertyIsEnumerable(j))g="dedent";else if((j=="if"||j=="unless")&&a.column()==a.indentation())g="indent";else if(j=="do"&&b.context.indented