Your IP : 216.73.216.190


Current Path : /proc/1908984/root/proc/2603263/cwd/
Upload File :
Current File : //proc/1908984/root/proc/2603263/cwd/crystal.tar

crystal.js000064400000031034152351711120006562 0ustar00// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
  "use strict";

  CodeMirror.defineMode("crystal", function(config) {
    function wordRegExp(words, end) {
      return new RegExp((end ? "" : "^") + "(?:" + words.join("|") + ")" + (end ? "$" : "\\b"));
    }

    function chain(tokenize, stream, state) {
      state.tokenize.push(tokenize);
      return tokenize(stream, state);
    }

    var operators = /^(?:[-+/%|&^]|\*\*?|[<>]{2})/;
    var conditionalOperators = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/;
    var indexingOperators = /^(?:\[\][?=]?)/;
    var anotherOperators = /^(?:\.(?:\.{2})?|->|[?:])/;
    var idents = /^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/;
    var types = /^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/;
    var keywords = wordRegExp([
      "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 atomWords = wordRegExp(["true", "false", "nil", "self"]);
    var indentKeywordsArray = [
      "def", "fun", "macro",
      "class", "module", "struct", "lib", "enum", "union",
      "do", "for"
    ];
    var indentKeywords = wordRegExp(indentKeywordsArray);
    var indentExpressionKeywordsArray = ["if", "unless", "case", "while", "until", "begin", "then"];
    var indentExpressionKeywords = wordRegExp(indentExpressionKeywordsArray);
    var dedentKeywordsArray = ["end", "else", "elsif", "rescue", "ensure"];
    var dedentKeywords = wordRegExp(dedentKeywordsArray);
    var dedentPunctualsArray = ["\\)", "\\}", "\\]"];
    var dedentPunctuals = new RegExp("^(?:" + dedentPunctualsArray.join("|") + ")$");
    var nextTokenizer = {
      "def": tokenFollowIdent, "fun": tokenFollowIdent, "macro": tokenMacroDef,
      "class": tokenFollowType, "module": tokenFollowType, "struct": tokenFollowType,
      "lib": tokenFollowType, "enum": tokenFollowType, "union": tokenFollowType
    };
    var matching = {"[": "]", "{": "}", "(": ")", "<": ">"};

    function tokenBase(stream, state) {
      if (stream.eatSpace()) {
        return null;
      }

      // Macros
      if (state.lastToken != "\\" && stream.match("{%", false)) {
        return chain(tokenMacro("%", "%"), stream, state);
      }

      if (state.lastToken != "\\" && stream.match("{{", false)) {
        return chain(tokenMacro("{", "}"), stream, state);
      }

      // Comments
      if (stream.peek() == "#") {
        stream.skipToEnd();
        return "comment";
      }

      // Variables and keywords
      var matched;
      if (stream.match(idents)) {
        stream.eat(/[?!]/);

        matched = stream.current();
        if (stream.eat(":")) {
          return "atom";
        } else if (state.lastToken == ".") {
          return "property";
        } else if (keywords.test(matched)) {
          if (indentKeywords.test(matched)) {
            if (!(matched == "fun" && state.blocks.indexOf("lib") >= 0) && !(matched == "def" && state.lastToken == "abstract")) {
              state.blocks.push(matched);
              state.currentIndent += 1;
            }
          } else if ((state.lastStyle == "operator" || !state.lastStyle) && indentExpressionKeywords.test(matched)) {
            state.blocks.push(matched);
            state.currentIndent += 1;
          } else if (matched == "end") {
            state.blocks.pop();
            state.currentIndent -= 1;
          }

          if (nextTokenizer.hasOwnProperty(matched)) {
            state.tokenize.push(nextTokenizer[matched]);
          }

          return "keyword";
        } else if (atomWords.test(matched)) {
          return "atom";
        }

        return "variable";
      }

      // Class variables and instance variables
      // or attributes
      if (stream.eat("@")) {
        if (stream.peek() == "[") {
          return chain(tokenNest("[", "]", "meta"), stream, state);
        }

        stream.eat("@");
        stream.match(idents) || stream.match(types);
        return "variable-2";
      }

      // Constants and types
      if (stream.match(types)) {
        return "tag";
      }

      // Symbols or ':' operator
      if (stream.eat(":")) {
        if (stream.eat("\"")) {
          return chain(tokenQuote("\"", "atom", false), stream, state);
        } else if (stream.match(idents) || stream.match(types) ||
                   stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators)) {
          return "atom";
        }
        stream.eat(":");
        return "operator";
      }

      // Strings
      if (stream.eat("\"")) {
        return chain(tokenQuote("\"", "string", true), stream, state);
      }

      // Strings or regexps or macro variables or '%' operator
      if (stream.peek() == "%") {
        var style = "string";
        var embed = true;
        var delim;

        if (stream.match("%r")) {
          // Regexps
          style = "string-2";
          delim = stream.next();
        } else if (stream.match("%w")) {
          embed = false;
          delim = stream.next();
        } else if (stream.match("%q")) {
          embed = false;
          delim = stream.next();
        } else {
          if(delim = stream.match(/^%([^\w\s=])/)) {
            delim = delim[1];
          } else if (stream.match(/^%[a-zA-Z0-9_\u009F-\uFFFF]*/)) {
            // Macro variables
            return "meta";
          } else {
            // '%' operator
            return "operator";
          }
        }

        if (matching.hasOwnProperty(delim)) {
          delim = matching[delim];
        }
        return chain(tokenQuote(delim, style, embed), stream, state);
      }

      // Here Docs
      if (matched = stream.match(/^<<-('?)([A-Z]\w*)\1/)) {
        return chain(tokenHereDoc(matched[2], !matched[1]), stream, state)
      }

      // Characters
      if (stream.eat("'")) {
        stream.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/);
        stream.eat("'");
        return "atom";
      }

      // Numbers
      if (stream.eat("0")) {
        if (stream.eat("x")) {
          stream.match(/^[0-9a-fA-F_]+/);
        } else if (stream.eat("o")) {
          stream.match(/^[0-7_]+/);
        } else if (stream.eat("b")) {
          stream.match(/^[01_]+/);
        }
        return "number";
      }

      if (stream.eat(/^\d/)) {
        stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+-]?\d+)?/);
        return "number";
      }

      // Operators
      if (stream.match(operators)) {
        stream.eat("="); // Operators can follow assign symbol.
        return "operator";
      }

      if (stream.match(conditionalOperators) || stream.match(anotherOperators)) {
        return "operator";
      }

      // Parens and braces
      if (matched = stream.match(/[({[]/, false)) {
        matched = matched[0];
        return chain(tokenNest(matched, matching[matched], null), stream, state);
      }

      // Escapes
      if (stream.eat("\\")) {
        stream.next();
        return "meta";
      }

      stream.next();
      return null;
    }

    function tokenNest(begin, end, style, started) {
      return function (stream, state) {
        if (!started && stream.match(begin)) {
          state.tokenize[state.tokenize.length - 1] = tokenNest(begin, end, style, true);
          state.currentIndent += 1;
          return style;
        }

        var nextStyle = tokenBase(stream, state);
        if (stream.current() === end) {
          state.tokenize.pop();
          state.currentIndent -= 1;
          nextStyle = style;
        }

        return nextStyle;
      };
    }

    function tokenMacro(begin, end, started) {
      return function (stream, state) {
        if (!started && stream.match("{" + begin)) {
          state.currentIndent += 1;
          state.tokenize[state.tokenize.length - 1] = tokenMacro(begin, end, true);
          return "meta";
        }

        if (stream.match(end + "}")) {
          state.currentIndent -= 1;
          state.tokenize.pop();
          return "meta";
        }

        return tokenBase(stream, state);
      };
    }

    function tokenMacroDef(stream, state) {
      if (stream.eatSpace()) {
        return null;
      }

      var matched;
      if (matched = stream.match(idents)) {
        if (matched == "def") {
          return "keyword";
        }
        stream.eat(/[?!]/);
      }

      state.tokenize.pop();
      return "def";
    }

    function tokenFollowIdent(stream, state) {
      if (stream.eatSpace()) {
        return null;
      }

      if (stream.match(idents)) {
        stream.eat(/[!?]/);
      } else {
        stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators);
      }
      state.tokenize.pop();
      return "def";
    }

    function tokenFollowType(stream, state) {
      if (stream.eatSpace()) {
        return null;
      }

      stream.match(types);
      state.tokenize.pop();
      return "def";
    }

    function tokenQuote(end, style, embed) {
      return function (stream, state) {
        var escaped = false;

        while (stream.peek()) {
          if (!escaped) {
            if (stream.match("{%", false)) {
              state.tokenize.push(tokenMacro("%", "%"));
              return style;
            }

            if (stream.match("{{", false)) {
              state.tokenize.push(tokenMacro("{", "}"));
              return style;
            }

            if (embed && stream.match("#{", false)) {
              state.tokenize.push(tokenNest("#{", "}", "meta"));
              return style;
            }

            var ch = stream.next();

            if (ch == end) {
              state.tokenize.pop();
              return style;
            }

            escaped = embed && ch == "\\";
          } else {
            stream.next();
            escaped = false;
          }
        }

        return style;
      };
    }

    function tokenHereDoc(phrase, embed) {
      return function (stream, state) {
        if (stream.sol()) {
          stream.eatSpace()
          if (stream.match(phrase)) {
            state.tokenize.pop();
            return "string";
          }
        }

        var escaped = false;
        while (stream.peek()) {
          if (!escaped) {
            if (stream.match("{%", false)) {
              state.tokenize.push(tokenMacro("%", "%"));
              return "string";
            }

            if (stream.match("{{", false)) {
              state.tokenize.push(tokenMacro("{", "}"));
              return "string";
            }

            if (embed && stream.match("#{", false)) {
              state.tokenize.push(tokenNest("#{", "}", "meta"));
              return "string";
            }

            escaped = embed && stream.next() == "\\";
          } else {
            stream.next();
            escaped = false;
          }
        }

        return "string";
      }
    }

    return {
      startState: function () {
        return {
          tokenize: [tokenBase],
          currentIndent: 0,
          lastToken: null,
          lastStyle: null,
          blocks: []
        };
      },

      token: function (stream, state) {
        var style = state.tokenize[state.tokenize.length - 1](stream, state);
        var token = stream.current();

        if (style && style != "comment") {
          state.lastToken = token;
          state.lastStyle = style;
        }

        return style;
      },

      indent: function (state, textAfter) {
        textAfter = textAfter.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g, "");

        if (dedentKeywords.test(textAfter) || dedentPunctuals.test(textAfter)) {
          return config.indentUnit * (state.currentIndent - 1);
        }

        return config.indentUnit * state.currentIndent;
      },

      fold: "indent",
      electricInput: wordRegExp(dedentPunctualsArray.concat(dedentKeywordsArray), true),
      lineComment: '#'
    };
  });

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