{"version":3,"file":"groovy-BQvSfgjf.cjs","sources":["../../../node_modules/@codemirror/legacy-modes/mode/groovy.js"],"sourcesContent":["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}\nvar 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\");\nvar blockKeywords = words(\"catch class def do else enum finally for if interface switch trait try while\");\nvar standaloneKeywords = words(\"return break continue\");\nvar atoms = words(\"null true false this\");\n\nvar curPunc;\nfunction 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}\ntokenBase.isBase = true;\n\nfunction 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) {\n        if (stream.eat(\"{\")) {\n          state.tokenize.push(tokenBaseUntilBrace());\n          return \"string\";\n        } else if (stream.match(/^\\w/, false)) {\n          state.tokenize.push(tokenVariableDeref);\n          return \"string\";\n        }\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\nfunction 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\nfunction tokenVariableDeref(stream, state) {\n  var next = stream.match(/^(\\.|[\\w\\$_]+)/)\n  if (!next || !stream.match(next[0] == \".\" ? /^[\\w$_]/ : /^\\./)) state.tokenize.pop()\n  if (!next) return state.tokenize[state.tokenize.length-1](stream, state)\n  return next[0] == \".\" ? null : \"variable\"\n}\n\nfunction 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\nfunction expectExpression(last, newline) {\n  return !last || last == \"operator\" || last == \"->\" || /[\\.\\[\\{\\(,;:]/.test(last) ||\n    last == \"newstatement\" || last == \"keyword\" || last == \"proplabel\" ||\n    (last == \"standalone\" && !newline);\n}\n\nfunction 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}\nfunction pushContext(state, col, type) {\n  return state.context = new Context(state.indented, col, type, null, state.context);\n}\nfunction 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\nexport const groovy = {\n  name: \"groovy\",\n  startState: function(indentUnit) {\n    return {\n      tokenize: [tokenBase],\n      context: new Context(-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, cx) {\n    if (!state.tokenize[state.tokenize.length-1].isBase) return null;\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 : cx.unit);\n    else if (ctx.align) return ctx.column + (closing ? 0 : 1);\n    else return ctx.indented + (closing ? 0 : cx.unit);\n  },\n\n  languageData: {\n    indentOnInput: /^\\s*[{}]$/,\n    commentTokens: {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n    closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"'''\", '\"\"\"']}\n  }\n};\n"],"names":["words","str","obj","split","i","length","curPunc","keywords","blockKeywords","standaloneKeywords","atoms","tokenBase","stream","state","ch","next","startString","test","eatWhile","eat","tokenize","push","tokenComment","skipToEnd","expectExpression","lastToken","cur","current","propertyIsEnumerable","quote","tripleQuoted","t","escaped","end","match","tokenBaseUntilBrace","tokenVariableDeref","pop","depth","peek","isBase","maybeEnd","last","newline","Context","indented","column","type","align","prev","this","pushContext","col","context","popContext","groovy","name","startState","indentUnit","startOfLine","token","ctx","sol","indentation","eatSpace","style","indent","textAfter","cx","firstChar","charAt","closing","unit","languageData","indentOnInput","commentTokens","line","block","open","close","closeBrackets","brackets"],"mappings":"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","x_google_ignoreList":[0]}