{"version":3,"file":"crystal-BueyCNDj.cjs","sources":["../../../node_modules/@codemirror/legacy-modes/mode/crystal.js"],"sourcesContent":["function wordRegExp(words, end) {\n  return new RegExp((end ? \"\" : \"^\") + \"(?:\" + words.join(\"|\") + \")\" + (end ? \"$\" : \"\\\\b\"));\n}\n\nfunction chain(tokenize, stream, state) {\n  state.tokenize.push(tokenize);\n  return tokenize(stream, state);\n}\n\nvar operators = /^(?:[-+/%|&^]|\\*\\*?|[<>]{2})/;\nvar conditionalOperators = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/;\nvar indexingOperators = /^(?:\\[\\][?=]?)/;\nvar anotherOperators = /^(?:\\.(?:\\.{2})?|->|[?:])/;\nvar idents = /^[a-z_\\u009F-\\uFFFF][a-zA-Z0-9_\\u009F-\\uFFFF]*/;\nvar types = /^[A-Z_\\u009F-\\uFFFF][a-zA-Z0-9_\\u009F-\\uFFFF]*/;\nvar keywords = wordRegExp([\n  \"abstract\", \"alias\", \"as\", \"asm\", \"begin\", \"break\", \"case\", \"class\", \"def\", \"do\",\n  \"else\", \"elsif\", \"end\", \"ensure\", \"enum\", \"extend\", \"for\", \"fun\", \"if\",\n  \"include\", \"instance_sizeof\", \"lib\", \"macro\", \"module\", \"next\", \"of\", \"out\", \"pointerof\",\n  \"private\", \"protected\", \"rescue\", \"return\", \"require\", \"select\", \"sizeof\", \"struct\",\n  \"super\", \"then\", \"type\", \"typeof\", \"uninitialized\", \"union\", \"unless\", \"until\", \"when\", \"while\", \"with\",\n  \"yield\", \"__DIR__\", \"__END_LINE__\", \"__FILE__\", \"__LINE__\"\n]);\nvar atomWords = wordRegExp([\"true\", \"false\", \"nil\", \"self\"]);\nvar indentKeywordsArray = [\n  \"def\", \"fun\", \"macro\",\n  \"class\", \"module\", \"struct\", \"lib\", \"enum\", \"union\",\n  \"do\", \"for\"\n];\nvar indentKeywords = wordRegExp(indentKeywordsArray);\nvar indentExpressionKeywordsArray = [\"if\", \"unless\", \"case\", \"while\", \"until\", \"begin\", \"then\"];\nvar indentExpressionKeywords = wordRegExp(indentExpressionKeywordsArray);\nvar dedentKeywordsArray = [\"end\", \"else\", \"elsif\", \"rescue\", \"ensure\"];\nvar dedentKeywords = wordRegExp(dedentKeywordsArray);\nvar dedentPunctualsArray = [\"\\\\)\", \"\\\\}\", \"\\\\]\"];\nvar dedentPunctuals = new RegExp(\"^(?:\" + dedentPunctualsArray.join(\"|\") + \")$\");\nvar nextTokenizer = {\n  \"def\": tokenFollowIdent, \"fun\": tokenFollowIdent, \"macro\": tokenMacroDef,\n  \"class\": tokenFollowType, \"module\": tokenFollowType, \"struct\": tokenFollowType,\n  \"lib\": tokenFollowType, \"enum\": tokenFollowType, \"union\": tokenFollowType\n};\nvar matching = {\"[\": \"]\", \"{\": \"}\", \"(\": \")\", \"<\": \">\"};\n\nfunction tokenBase(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  // Macros\n  if (state.lastToken != \"\\\\\" && stream.match(\"{%\", false)) {\n    return chain(tokenMacro(\"%\", \"%\"), stream, state);\n  }\n\n  if (state.lastToken != \"\\\\\" && stream.match(\"{{\", false)) {\n    return chain(tokenMacro(\"{\", \"}\"), stream, state);\n  }\n\n  // Comments\n  if (stream.peek() == \"#\") {\n    stream.skipToEnd();\n    return \"comment\";\n  }\n\n  // Variables and keywords\n  var matched;\n  if (stream.match(idents)) {\n    stream.eat(/[?!]/);\n\n    matched = stream.current();\n    if (stream.eat(\":\")) {\n      return \"atom\";\n    } else if (state.lastToken == \".\") {\n      return \"property\";\n    } else if (keywords.test(matched)) {\n      if (indentKeywords.test(matched)) {\n        if (!(matched == \"fun\" && state.blocks.indexOf(\"lib\") >= 0) && !(matched == \"def\" && state.lastToken == \"abstract\")) {\n          state.blocks.push(matched);\n          state.currentIndent += 1;\n        }\n      } else if ((state.lastStyle == \"operator\" || !state.lastStyle) && indentExpressionKeywords.test(matched)) {\n        state.blocks.push(matched);\n        state.currentIndent += 1;\n      } else if (matched == \"end\") {\n        state.blocks.pop();\n        state.currentIndent -= 1;\n      }\n\n      if (nextTokenizer.hasOwnProperty(matched)) {\n        state.tokenize.push(nextTokenizer[matched]);\n      }\n\n      return \"keyword\";\n    } else if (atomWords.test(matched)) {\n      return \"atom\";\n    }\n\n    return \"variable\";\n  }\n\n  // Class variables and instance variables\n  // or attributes\n  if (stream.eat(\"@\")) {\n    if (stream.peek() == \"[\") {\n      return chain(tokenNest(\"[\", \"]\", \"meta\"), stream, state);\n    }\n\n    stream.eat(\"@\");\n    stream.match(idents) || stream.match(types);\n    return \"propertyName\";\n  }\n\n  // Constants and types\n  if (stream.match(types)) {\n    return \"tag\";\n  }\n\n  // Symbols or ':' operator\n  if (stream.eat(\":\")) {\n    if (stream.eat(\"\\\"\")) {\n      return chain(tokenQuote(\"\\\"\", \"atom\", false), stream, state);\n    } else if (stream.match(idents) || stream.match(types) ||\n               stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators)) {\n      return \"atom\";\n    }\n    stream.eat(\":\");\n    return \"operator\";\n  }\n\n  // Strings\n  if (stream.eat(\"\\\"\")) {\n    return chain(tokenQuote(\"\\\"\", \"string\", true), stream, state);\n  }\n\n  // Strings or regexps or macro variables or '%' operator\n  if (stream.peek() == \"%\") {\n    var style = \"string\";\n    var embed = true;\n    var delim;\n\n    if (stream.match(\"%r\")) {\n      // Regexps\n      style = \"string.special\";\n      delim = stream.next();\n    } else if (stream.match(\"%w\")) {\n      embed = false;\n      delim = stream.next();\n    } else if (stream.match(\"%q\")) {\n      embed = false;\n      delim = stream.next();\n    } else {\n      if(delim = stream.match(/^%([^\\w\\s=])/)) {\n        delim = delim[1];\n      } else if (stream.match(/^%[a-zA-Z_\\u009F-\\uFFFF][\\w\\u009F-\\uFFFF]*/)) {\n        // Macro variables\n        return \"meta\";\n      } else if (stream.eat('%')) {\n        // '%' operator\n        return \"operator\";\n      }\n    }\n\n    if (matching.hasOwnProperty(delim)) {\n      delim = matching[delim];\n    }\n    return chain(tokenQuote(delim, style, embed), stream, state);\n  }\n\n  // Here Docs\n  if (matched = stream.match(/^<<-('?)([A-Z]\\w*)\\1/)) {\n    return chain(tokenHereDoc(matched[2], !matched[1]), stream, state)\n  }\n\n  // Characters\n  if (stream.eat(\"'\")) {\n    stream.match(/^(?:[^']|\\\\(?:[befnrtv0'\"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\\{[0-9a-fA-F]{1,6}\\})))/);\n    stream.eat(\"'\");\n    return \"atom\";\n  }\n\n  // Numbers\n  if (stream.eat(\"0\")) {\n    if (stream.eat(\"x\")) {\n      stream.match(/^[0-9a-fA-F_]+/);\n    } else if (stream.eat(\"o\")) {\n      stream.match(/^[0-7_]+/);\n    } else if (stream.eat(\"b\")) {\n      stream.match(/^[01_]+/);\n    }\n    return \"number\";\n  }\n\n  if (stream.eat(/^\\d/)) {\n    stream.match(/^[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+-]?\\d+)?/);\n    return \"number\";\n  }\n\n  // Operators\n  if (stream.match(operators)) {\n    stream.eat(\"=\"); // Operators can follow assign symbol.\n    return \"operator\";\n  }\n\n  if (stream.match(conditionalOperators) || stream.match(anotherOperators)) {\n    return \"operator\";\n  }\n\n  // Parens and braces\n  if (matched = stream.match(/[({[]/, false)) {\n    matched = matched[0];\n    return chain(tokenNest(matched, matching[matched], null), stream, state);\n  }\n\n  // Escapes\n  if (stream.eat(\"\\\\\")) {\n    stream.next();\n    return \"meta\";\n  }\n\n  stream.next();\n  return null;\n}\n\nfunction tokenNest(begin, end, style, started) {\n  return function (stream, state) {\n    if (!started && stream.match(begin)) {\n      state.tokenize[state.tokenize.length - 1] = tokenNest(begin, end, style, true);\n      state.currentIndent += 1;\n      return style;\n    }\n\n    var nextStyle = tokenBase(stream, state);\n    if (stream.current() === end) {\n      state.tokenize.pop();\n      state.currentIndent -= 1;\n      nextStyle = style;\n    }\n\n    return nextStyle;\n  };\n}\n\nfunction tokenMacro(begin, end, started) {\n  return function (stream, state) {\n    if (!started && stream.match(\"{\" + begin)) {\n      state.currentIndent += 1;\n      state.tokenize[state.tokenize.length - 1] = tokenMacro(begin, end, true);\n      return \"meta\";\n    }\n\n    if (stream.match(end + \"}\")) {\n      state.currentIndent -= 1;\n      state.tokenize.pop();\n      return \"meta\";\n    }\n\n    return tokenBase(stream, state);\n  };\n}\n\nfunction tokenMacroDef(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  var matched;\n  if (matched = stream.match(idents)) {\n    if (matched == \"def\") {\n      return \"keyword\";\n    }\n    stream.eat(/[?!]/);\n  }\n\n  state.tokenize.pop();\n  return \"def\";\n}\n\nfunction tokenFollowIdent(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  if (stream.match(idents)) {\n    stream.eat(/[!?]/);\n  } else {\n    stream.match(operators) || stream.match(conditionalOperators) || stream.match(indexingOperators);\n  }\n  state.tokenize.pop();\n  return \"def\";\n}\n\nfunction tokenFollowType(stream, state) {\n  if (stream.eatSpace()) {\n    return null;\n  }\n\n  stream.match(types);\n  state.tokenize.pop();\n  return \"def\";\n}\n\nfunction tokenQuote(end, style, embed) {\n  return function (stream, state) {\n    var escaped = false;\n\n    while (stream.peek()) {\n      if (!escaped) {\n        if (stream.match(\"{%\", false)) {\n          state.tokenize.push(tokenMacro(\"%\", \"%\"));\n          return style;\n        }\n\n        if (stream.match(\"{{\", false)) {\n          state.tokenize.push(tokenMacro(\"{\", \"}\"));\n          return style;\n        }\n\n        if (embed && stream.match(\"#{\", false)) {\n          state.tokenize.push(tokenNest(\"#{\", \"}\", \"meta\"));\n          return style;\n        }\n\n        var ch = stream.next();\n\n        if (ch == end) {\n          state.tokenize.pop();\n          return style;\n        }\n\n        escaped = embed && ch == \"\\\\\";\n      } else {\n        stream.next();\n        escaped = false;\n      }\n    }\n\n    return style;\n  };\n}\n\nfunction tokenHereDoc(phrase, embed) {\n  return function (stream, state) {\n    if (stream.sol()) {\n      stream.eatSpace()\n      if (stream.match(phrase)) {\n        state.tokenize.pop();\n        return \"string\";\n      }\n    }\n\n    var escaped = false;\n    while (stream.peek()) {\n      if (!escaped) {\n        if (stream.match(\"{%\", false)) {\n          state.tokenize.push(tokenMacro(\"%\", \"%\"));\n          return \"string\";\n        }\n\n        if (stream.match(\"{{\", false)) {\n          state.tokenize.push(tokenMacro(\"{\", \"}\"));\n          return \"string\";\n        }\n\n        if (embed && stream.match(\"#{\", false)) {\n          state.tokenize.push(tokenNest(\"#{\", \"}\", \"meta\"));\n          return \"string\";\n        }\n\n        escaped = stream.next() == \"\\\\\" && embed;\n      } else {\n        stream.next();\n        escaped = false;\n      }\n    }\n\n    return \"string\";\n  }\n}\n\nexport const crystal = {\n  name: \"crystal\",\n  startState: function () {\n    return {\n      tokenize: [tokenBase],\n      currentIndent: 0,\n      lastToken: null,\n      lastStyle: null,\n      blocks: []\n    };\n  },\n\n  token: function (stream, state) {\n    var style = state.tokenize[state.tokenize.length - 1](stream, state);\n    var token = stream.current();\n\n    if (style && style != \"comment\") {\n      state.lastToken = token;\n      state.lastStyle = style;\n    }\n\n    return style;\n  },\n\n  indent: function (state, textAfter, cx) {\n    textAfter = textAfter.replace(/^\\s*(?:\\{%)?\\s*|\\s*(?:%\\})?\\s*$/g, \"\");\n\n    if (dedentKeywords.test(textAfter) || dedentPunctuals.test(textAfter)) {\n      return cx.unit * (state.currentIndent - 1);\n    }\n\n    return cx.unit * state.currentIndent;\n  },\n\n  languageData: {\n    indentOnInput: wordRegExp(dedentPunctualsArray.concat(dedentKeywordsArray), true),\n    commentTokens: {line: \"#\"}\n  }\n};\n"],"names":["wordRegExp","words","end","RegExp","join","chain","tokenize","stream","state","push","operators","conditionalOperators","indexingOperators","anotherOperators","idents","types","keywords","atomWords","indentKeywords","indentExpressionKeywords","dedentKeywordsArray","dedentKeywords","dedentPunctualsArray","dedentPunctuals","nextTokenizer","def","tokenFollowIdent","fun","macro","eatSpace","matched","match","eat","pop","class","tokenFollowType","module","struct","lib","enum","union","matching","tokenBase","lastToken","tokenMacro","peek","skipToEnd","current","test","blocks","indexOf","currentIndent","lastStyle","hasOwnProperty","tokenNest","tokenQuote","delim","style","embed","next","phrase","sol","escaped","tokenHereDoc","begin","started","length","nextStyle","ch","crystal","name","startState","token","indent","textAfter","cx","replace","unit","languageData","indentOnInput","concat","commentTokens","line"],"mappings":"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","x_google_ignoreList":[0]}