1{"version":3,"sources":["../../node_modules/codemirror/mode/groovy/groovy.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMode","config","words","str","obj","split","i","length","keywords","blockKeywords","standaloneKeywords","atoms","curPunc","tokenBase","stream","state","ch","next","startString","test","eatWhile","eat","tokenize","push","tokenComment","skipToEnd","expectExpression","lastToken","cur","current","propertyIsEnumerable","isBase","quote","tripleQuoted","t","escaped","end","match","tokenBaseUntilBrace","pop","depth","peek","maybeEnd","last","newline","Context","indented","column","type","align","prev","this","pushContext","col","context","popContext","startState","basecolumn","indentUnit","startOfLine","token","ctx","sol","indentation","eatSpace","style","indent","textAfter","Pass","firstChar","charAt","closing","electricChars","closeBrackets","triples","fold","blockCommentStart","blockCommentEnd","lineComment","defineMIME"],"mappings":"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","file":"groovy.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"groovy\", function(config) {\n  function words(str) {\n    var obj = {}, words = str.split(\" \");\n    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n    return obj;\n  }\n  var keywords = words(\n    \"abstract as assert boolean break byte case catch char class const continue def default \" +\n    \"do double else enum extends final finally float for goto if implements import in \" +\n    \"instanceof int interface long native new package private protected public return \" +\n    \"short static strictfp super switch synchronized threadsafe throw throws trait transient \" +\n    \"try void volatile while\");\n  var blockKeywords = words(\"catch class def do else enum finally for if interface switch trait try while\");\n  var standaloneKeywords = words(\"return break continue\");\n  var atoms = words(\"null true false this\");\n\n  var curPunc;\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (ch == '\"' || ch == \"'\") {\n      return startString(ch, stream, state);\n    }\n    if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n      curPunc = ch;\n      return null;\n    }\n    if (/\\d/.test(ch)) {\n      stream.eatWhile(/[\\w\\.]/);\n      if (stream.eat(/eE/)) { stream.eat(/\\+\\-/); stream.eatWhile(/\\d/); }\n      return \"number\";\n    }\n    if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize.push(tokenComment);\n        return tokenComment(stream, state);\n      }\n      if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n      if (expectExpression(state.lastToken, false)) {\n        return startString(ch, stream, state);\n      }\n    }\n    if (ch == \"-\" && stream.eat(\">\")) {\n      curPunc = \"->\";\n      return null;\n    }\n    if (/[+\\-*&%=<>!?|\\/~]/.test(ch)) {\n      stream.eatWhile(/[+\\-*&%=<>|~]/);\n      return \"operator\";\n    }\n    stream.eatWhile(/[\\w\\$_]/);\n    if (ch == \"@\") { stream.eatWhile(/[\\w\\$_\\.]/); return \"meta\"; }\n    if (state.lastToken == \".\") return \"property\";\n    if (stream.eat(\":\")) { curPunc = \"proplabel\"; return \"property\"; }\n    var cur = stream.current();\n    if (atoms.propertyIsEnumerable(cur)) { return \"atom\"; }\n    if (keywords.propertyIsEnumerable(cur)) {\n      if (blockKeywords.propertyIsEnumerable(cur)) curPunc = \"newstatement\";\n      else if (standaloneKeywords.propertyIsEnumerable(cur)) curPunc = \"standalone\";\n      return \"keyword\";\n    }\n    return \"variable\";\n  }\n  tokenBase.isBase = true;\n\n  function startString(quote, stream, state) {\n    var tripleQuoted = false;\n    if (quote != \"/\" && stream.eat(quote)) {\n      if (stream.eat(quote)) tripleQuoted = true;\n      else return \"string\";\n    }\n    function t(stream, state) {\n      var escaped = false, next, end = !tripleQuoted;\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) {\n          if (!tripleQuoted) { break; }\n          if (stream.match(quote + quote)) { end = true; break; }\n        }\n        if (quote == '\"' && next == \"$\" && !escaped && stream.eat(\"{\")) {\n          state.tokenize.push(tokenBaseUntilBrace());\n          return \"string\";\n        }\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (end) state.tokenize.pop();\n      return \"string\";\n    }\n    state.tokenize.push(t);\n    return t(stream, state);\n  }\n\n  function tokenBaseUntilBrace() {\n    var depth = 1;\n    function t(stream, state) {\n      if (stream.peek() == \"}\") {\n        depth--;\n        if (depth == 0) {\n          state.tokenize.pop();\n          return state.tokenize[state.tokenize.length-1](stream, state);\n        }\n      } else if (stream.peek() == \"{\") {\n        depth++;\n      }\n      return tokenBase(stream, state);\n    }\n    t.isBase = true;\n    return t;\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize.pop();\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return \"comment\";\n  }\n\n  function expectExpression(last, newline) {\n    return !last || last == \"operator\" || last == \"->\" || /[\\.\\[\\{\\(,;:]/.test(last) ||\n      last == \"newstatement\" || last == \"keyword\" || last == \"proplabel\" ||\n      (last == \"standalone\" && !newline);\n  }\n\n  function Context(indented, column, type, align, prev) {\n    this.indented = indented;\n    this.column = column;\n    this.type = type;\n    this.align = align;\n    this.prev = prev;\n  }\n  function pushContext(state, col, type) {\n    return state.context = new Context(state.indented, col, type, null, state.context);\n  }\n  function popContext(state) {\n    var t = state.context.type;\n    if (t == \")\" || t == \"]\" || t == \"}\")\n      state.indented = state.context.indented;\n    return state.context = state.context.prev;\n  }\n\n  // Interface\n\n  return {\n    startState: function(basecolumn) {\n      return {\n        tokenize: [tokenBase],\n        context: new Context((basecolumn || 0) - config.indentUnit, 0, \"top\", false),\n        indented: 0,\n        startOfLine: true,\n        lastToken: null\n      };\n    },\n\n    token: function(stream, state) {\n      var ctx = state.context;\n      if (stream.sol()) {\n        if (ctx.align == null) ctx.align = false;\n        state.indented = stream.indentation();\n        state.startOfLine = true;\n        // Automatic semicolon insertion\n        if (ctx.type == \"statement\" && !expectExpression(state.lastToken, true)) {\n          popContext(state); ctx = state.context;\n        }\n      }\n      if (stream.eatSpace()) return null;\n      curPunc = null;\n      var style = state.tokenize[state.tokenize.length-1](stream, state);\n      if (style == \"comment\") return style;\n      if (ctx.align == null) ctx.align = true;\n\n      if ((curPunc == \";\" || curPunc == \":\") && ctx.type == \"statement\") popContext(state);\n      // Handle indentation for {x -> \\n ... }\n      else if (curPunc == \"->\" && ctx.type == \"statement\" && ctx.prev.type == \"}\") {\n        popContext(state);\n        state.context.align = false;\n      }\n      else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n      else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n      else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n      else if (curPunc == \"}\") {\n        while (ctx.type == \"statement\") ctx = popContext(state);\n        if (ctx.type == \"}\") ctx = popContext(state);\n        while (ctx.type == \"statement\") ctx = popContext(state);\n      }\n      else if (curPunc == ctx.type) popContext(state);\n      else if (ctx.type == \"}\" || ctx.type == \"top\" || (ctx.type == \"statement\" && curPunc == \"newstatement\"))\n        pushContext(state, stream.column(), \"statement\");\n      state.startOfLine = false;\n      state.lastToken = curPunc || style;\n      return style;\n    },\n\n    indent: function(state, textAfter) {\n      if (!state.tokenize[state.tokenize.length-1].isBase) return CodeMirror.Pass;\n      var firstChar = textAfter && textAfter.charAt(0), ctx = state.context;\n      if (ctx.type == \"statement\" && !expectExpression(state.lastToken, true)) ctx = ctx.prev;\n      var closing = firstChar == ctx.type;\n      if (ctx.type == \"statement\") return ctx.indented + (firstChar == \"{\" ? 0 : config.indentUnit);\n      else if (ctx.align) return ctx.column + (closing ? 0 : 1);\n      else return ctx.indented + (closing ? 0 : config.indentUnit);\n    },\n\n    electricChars: \"{}\",\n    closeBrackets: {triples: \"'\\\"\"},\n    fold: \"brace\",\n    blockCommentStart: \"/*\",\n    blockCommentEnd: \"*/\",\n    lineComment: \"//\"\n  };\n});\n\nCodeMirror.defineMIME(\"text/x-groovy\", \"groovy\");\n\n});\n"]}