1(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("crystal",function(a){function b(a,b){return new RegExp((b?"":"^")+"(?:"+a.join("|")+")"+(b?"$":"\\b"))}function c(a,b,c){c.tokenize.push(a);return a(b,c)}var d=/^(?:[-+\/%|&^]|\*\*?|[<>]{2})/;var e=/^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/;var f=/^(?:\[\][?=]?)/;var g=/^(?:\.(?:\.{2})?|->|[?:])/;var h=/^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/;var i=/^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/;var j=b(["abstract","alias","as","asm","begin","break","case","class","def","do","else","elsif","end","ensure","enum","extend","for","fun","if","include","instance_sizeof","lib","macro","module","next","of","out","pointerof","private","protected","rescue","return","require","select","sizeof","struct","super","then","type","typeof","uninitialized","union","unless","until","when","while","with","yield","__DIR__","__END_LINE__","__FILE__","__LINE__"]);var k=b(["true","false","nil","self"]);var l=["def","fun","macro","class","module","struct","lib","enum","union","do","for"];var m=b(l);var n=["if","unless","case","while","until","begin","then"];var o=b(n);var p=["end","else","elsif","rescue","ensure"];var q=b(p);var r=["\\)","\\}","\\]"];var s=new RegExp("^(?:"+r.join("|")+")$");var t={def:z,fun:z,macro:y,"class":A,module:A,struct:A,lib:A,"enum":A,union:A};var u={"[":"]","{":"}","(":")","<":">"};function v(a,b){if(a.eatSpace()){return null}if(b.lastToken!="\\"&&a.match("{%",false)){return c(x("%","%"),a,b)}if(b.lastToken!="\\"&&a.match("{{",false)){return c(x("{","}"),a,b)}if(a.peek()=="#"){a.skipToEnd();return"comment"}var l;if(a.match(h)){a.eat(/[?!]/);l=a.current();if(a.eat(":")){return"atom"}else if(b.lastToken=="."){return"property"}else if(j.test(l)){if(m.test(l)){if(!(l=="fun"&&b.blocks.indexOf("lib")>=0)&&!(l=="def"&&b.lastToken=="abstract")){b.blocks.push(l);b.currentIndent+=1}}else if((b.lastStyle=="operator"||!b.lastStyle)&&o.test(l)){b.blocks.push(l);b.currentIndent+=1}else if(l=="end"){b.blocks.pop();b.currentIndent-=1}if(t.hasOwnProperty(l)){b.tokenize.push(t[l])}return"keyword"}else if(k.test(l)){return"atom"}return"variable"}if(a.eat("@")){if(a.peek()=="["){return c(w("[","]","meta"),a,b)}a.eat("@");a.match(h)||a.match(i);return"variable-2"}if(a.match(i)){return"tag"}if(a.eat(":")){if(a.eat('"')){return c(B('"',"atom",false),a,b)}else if(a.match(h)||a.match(i)||a.match(d)||a.match(e)||a.match(f)){return"atom"}a.eat(":");return"operator"}if(a.eat('"')){return c(B('"',"string",true),a,b)}if(a.peek()=="%"){var n="string";var p=true;var q;if(a.match("%r")){n="string-2";q=a.next()}else if(a.match("%w")){p=false;q=a.next()}else if(a.match("%q")){p=false;q=a.next()}else{if(q=a.match(/^%([^\w\s=])/)){q=q[1]}else if(a.match(/^%[a-zA-Z0-9_\u009F-\uFFFF]*/)){return"meta"}else{return"operator"}}if(u.hasOwnProperty(q)){q=u[q]}return c(B(q,n,p),a,b)}if(l=a.match(/^<<-('?)([A-Z]\w*)\1/)){return c(C(l[2],!l[1]),a,b)}if(a.eat("'")){a.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/);a.eat("'");return"atom"}if(a.eat("0")){if(a.eat("x")){a.match(/^[0-9a-fA-F]+/)}else if(a.eat("o")){a.match(/^[0-7]+/)}else if(a.eat("b")){a.match(/^[01]+/)}return"number"}if(a.eat(/^\d/)){a.match(/^\d*(?:\.\d+)?(?:[eE][+-]?\d+)?/);return"number"}if(a.match(d)){a.eat("=");return"operator"}if(a.match(e)||a.match(g)){return"operator"}if(l=a.match(/[({[]/,false)){l=l[0];return c(w(l,u[l],null),a,b)}if(a.eat("\\")){a.next();return"meta"}a.next();return null}function w(a,b,c,d){return function(e,f){if(!d&&e.match(a)){f.tokenize[f.tokenize.length-1]=w(a,b,c,true);f.currentIndent+=1;return c}var g=v(e,f);if(e.current()===b){f.tokenize.pop();f.currentIndent-=1;g=c}return g}}function x(a,b,c){return function(d,e){if(!c&&d.match("{"+a)){e.currentIndent+=1;e.tokenize[e.tokenize.length-1]=x(a,b,true);return"meta"}if(d.match(b+"}")){e.currentIndent-=1;e.tokenize.pop();return"meta"}return v(d,e)}}function y(a,b){if(a.eatSpace()){return null}var c;if(c=a.match(h)){if(c=="def"){return"keyword"}a.eat(/[?!]/)}b.tokenize.pop();return"def"}function z(a,b){if(a.eatSpace()){return null}if(a.match(h)){a.eat(/[!?]/)}else{a.match(d)||a.match(e)||a.match(f)}b.tokenize.pop();return"def"}function A(a,b){if(a.eatSpace()){return null}a.match(i);b.tokenize.pop();return"def"}function B(a,b,c){return function(d,e){var f=false;while(d.peek()){if(!f){if(d.match("{%",false)){e.tokenize.push(x("%","%"));return b}if(d.match("{{",false)){e.tokenize.push(x("{","}"));return b}if(c&&d.match("#{",false)){e.tokenize.push(w("#{","}","meta"));return b}var g=d.next();if(g==a){e.tokenize.pop();return b}f=c&&g=="\\"}else{d.next();f=false}}return b}}function C(a,b){return function(c,d){if(c.sol()){c.eatSpace();if(c.match(a)){d.tokenize.pop();return"string"}}var e=false;while(c.peek()){if(!e){if(c.match("{%",false)){d.tokenize.push(x("%","%"));return"string"}if(c.match("{{",false)){d.tokenize.push(x("{","}"));return"string"}if(b&&c.match("#{",false)){d.tokenize.push(w("#{","}","meta"));return"string"}e=b&&c.next()=="\\"}else{c.next();e=false}}return"string"}}return{startState:function(){return{tokenize:[v],currentIndent:0,lastToken:null,lastStyle:null,blocks:[]}},token:function(a,b){var c=b.tokenize[b.tokenize.length-1](a,b);var d=a.current();if(c&&c!="comment"){b.lastToken=d;b.lastStyle=c}return c},indent:function(b,c){c=c.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g,"");if(q.test(c)||s.test(c)){return a.indentUnit*(b.currentIndent-1)}return a.indentUnit*b.currentIndent},fold:"indent",electricInput:b(r.concat(p),true),lineComment:"#"}});a.defineMIME("text/x-crystal","crystal")});
2//# sourceMappingURL=crystal.min.js.map