{"version":3,"file":"erlang-aNM9Wno5.cjs","sources":["../../../node_modules/@codemirror/legacy-modes/mode/erlang.js"],"sourcesContent":["/////////////////////////////////////////////////////////////////////////////\n// constants\n\nvar typeWords = [\n  \"-type\", \"-spec\", \"-export_type\", \"-opaque\"];\n\nvar keywordWords = [\n  \"after\",\"begin\",\"catch\",\"case\",\"cond\",\"end\",\"fun\",\"if\",\n  \"let\",\"of\",\"query\",\"receive\",\"try\",\"when\"];\n\nvar separatorRE    = /[\\->,;]/;\nvar separatorWords = [\n  \"->\",\";\",\",\"];\n\nvar operatorAtomWords = [\n  \"and\",\"andalso\",\"band\",\"bnot\",\"bor\",\"bsl\",\"bsr\",\"bxor\",\n  \"div\",\"not\",\"or\",\"orelse\",\"rem\",\"xor\"];\n\nvar operatorSymbolRE    = /[\\+\\-\\*\\/<>=\\|:!]/;\nvar operatorSymbolWords = [\n  \"=\",\"+\",\"-\",\"*\",\"/\",\">\",\">=\",\"<\",\"=<\",\"=:=\",\"==\",\"=/=\",\"/=\",\"||\",\"<-\",\"!\"];\n\nvar openParenRE    = /[<\\(\\[\\{]/;\nvar openParenWords = [\n  \"<<\",\"(\",\"[\",\"{\"];\n\nvar closeParenRE    = /[>\\)\\]\\}]/;\nvar closeParenWords = [\n  \"}\",\"]\",\")\",\">>\"];\n\nvar guardWords = [\n  \"is_atom\",\"is_binary\",\"is_bitstring\",\"is_boolean\",\"is_float\",\n  \"is_function\",\"is_integer\",\"is_list\",\"is_number\",\"is_pid\",\n  \"is_port\",\"is_record\",\"is_reference\",\"is_tuple\",\n  \"atom\",\"binary\",\"bitstring\",\"boolean\",\"function\",\"integer\",\"list\",\n  \"number\",\"pid\",\"port\",\"record\",\"reference\",\"tuple\"];\n\nvar bifWords = [\n  \"abs\",\"adler32\",\"adler32_combine\",\"alive\",\"apply\",\"atom_to_binary\",\n  \"atom_to_list\",\"binary_to_atom\",\"binary_to_existing_atom\",\n  \"binary_to_list\",\"binary_to_term\",\"bit_size\",\"bitstring_to_list\",\n  \"byte_size\",\"check_process_code\",\"contact_binary\",\"crc32\",\n  \"crc32_combine\",\"date\",\"decode_packet\",\"delete_module\",\n  \"disconnect_node\",\"element\",\"erase\",\"exit\",\"float\",\"float_to_list\",\n  \"garbage_collect\",\"get\",\"get_keys\",\"group_leader\",\"halt\",\"hd\",\n  \"integer_to_list\",\"internal_bif\",\"iolist_size\",\"iolist_to_binary\",\n  \"is_alive\",\"is_atom\",\"is_binary\",\"is_bitstring\",\"is_boolean\",\n  \"is_float\",\"is_function\",\"is_integer\",\"is_list\",\"is_number\",\"is_pid\",\n  \"is_port\",\"is_process_alive\",\"is_record\",\"is_reference\",\"is_tuple\",\n  \"length\",\"link\",\"list_to_atom\",\"list_to_binary\",\"list_to_bitstring\",\n  \"list_to_existing_atom\",\"list_to_float\",\"list_to_integer\",\n  \"list_to_pid\",\"list_to_tuple\",\"load_module\",\"make_ref\",\"module_loaded\",\n  \"monitor_node\",\"node\",\"node_link\",\"node_unlink\",\"nodes\",\"notalive\",\n  \"now\",\"open_port\",\"pid_to_list\",\"port_close\",\"port_command\",\n  \"port_connect\",\"port_control\",\"pre_loaded\",\"process_flag\",\n  \"process_info\",\"processes\",\"purge_module\",\"put\",\"register\",\n  \"registered\",\"round\",\"self\",\"setelement\",\"size\",\"spawn\",\"spawn_link\",\n  \"spawn_monitor\",\"spawn_opt\",\"split_binary\",\"statistics\",\n  \"term_to_binary\",\"time\",\"throw\",\"tl\",\"trunc\",\"tuple_size\",\n  \"tuple_to_list\",\"unlink\",\"unregister\",\"whereis\"];\n\n// upper case: [A-Z] [Ø-Þ] [À-Ö]\n// lower case: [a-z] [ß-ö] [ø-ÿ]\nvar anumRE       = /[\\w@Ø-ÞÀ-Öß-öø-ÿ]/;\nvar escapesRE    =\n    /[0-7]{1,3}|[bdefnrstv\\\\\"']|\\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/;\n\n/////////////////////////////////////////////////////////////////////////////\n// tokenizer\n\nfunction tokenizer(stream,state) {\n  // in multi-line string\n  if (state.in_string) {\n    state.in_string = (!doubleQuote(stream));\n    return rval(state,stream,\"string\");\n  }\n\n  // in multi-line atom\n  if (state.in_atom) {\n    state.in_atom = (!singleQuote(stream));\n    return rval(state,stream,\"atom\");\n  }\n\n  // whitespace\n  if (stream.eatSpace()) {\n    return rval(state,stream,\"whitespace\");\n  }\n\n  // attributes and type specs\n  if (!peekToken(state) &&\n      stream.match(/-\\s*[a-zß-öø-ÿ][\\wØ-ÞÀ-Öß-öø-ÿ]*/)) {\n    if (is_member(stream.current(),typeWords)) {\n      return rval(state,stream,\"type\");\n    }else{\n      return rval(state,stream,\"attribute\");\n    }\n  }\n\n  var ch = stream.next();\n\n  // comment\n  if (ch == '%') {\n    stream.skipToEnd();\n    return rval(state,stream,\"comment\");\n  }\n\n  // colon\n  if (ch == \":\") {\n    return rval(state,stream,\"colon\");\n  }\n\n  // macro\n  if (ch == '?') {\n    stream.eatSpace();\n    stream.eatWhile(anumRE);\n    return rval(state,stream,\"macro\");\n  }\n\n  // record\n  if (ch == \"#\") {\n    stream.eatSpace();\n    stream.eatWhile(anumRE);\n    return rval(state,stream,\"record\");\n  }\n\n  // dollar escape\n  if (ch == \"$\") {\n    if (stream.next() == \"\\\\\" && !stream.match(escapesRE)) {\n      return rval(state,stream,\"error\");\n    }\n    return rval(state,stream,\"number\");\n  }\n\n  // dot\n  if (ch == \".\") {\n    return rval(state,stream,\"dot\");\n  }\n\n  // quoted atom\n  if (ch == '\\'') {\n    if (!(state.in_atom = (!singleQuote(stream)))) {\n      if (stream.match(/\\s*\\/\\s*[0-9]/,false)) {\n        stream.match(/\\s*\\/\\s*[0-9]/,true);\n        return rval(state,stream,\"fun\");      // 'f'/0 style fun\n      }\n      if (stream.match(/\\s*\\(/,false) || stream.match(/\\s*:/,false)) {\n        return rval(state,stream,\"function\");\n      }\n    }\n    return rval(state,stream,\"atom\");\n  }\n\n  // string\n  if (ch == '\"') {\n    state.in_string = (!doubleQuote(stream));\n    return rval(state,stream,\"string\");\n  }\n\n  // variable\n  if (/[A-Z_Ø-ÞÀ-Ö]/.test(ch)) {\n    stream.eatWhile(anumRE);\n    return rval(state,stream,\"variable\");\n  }\n\n  // atom/keyword/BIF/function\n  if (/[a-z_ß-öø-ÿ]/.test(ch)) {\n    stream.eatWhile(anumRE);\n\n    if (stream.match(/\\s*\\/\\s*[0-9]/,false)) {\n      stream.match(/\\s*\\/\\s*[0-9]/,true);\n      return rval(state,stream,\"fun\");      // f/0 style fun\n    }\n\n    var w = stream.current();\n\n    if (is_member(w,keywordWords)) {\n      return rval(state,stream,\"keyword\");\n    }else if (is_member(w,operatorAtomWords)) {\n      return rval(state,stream,\"operator\");\n    }else if (stream.match(/\\s*\\(/,false)) {\n      // 'put' and 'erlang:put' are bifs, 'foo:put' is not\n      if (is_member(w,bifWords) &&\n          ((peekToken(state).token != \":\") ||\n           (peekToken(state,2).token == \"erlang\"))) {\n        return rval(state,stream,\"builtin\");\n      }else if (is_member(w,guardWords)) {\n        return rval(state,stream,\"guard\");\n      }else{\n        return rval(state,stream,\"function\");\n      }\n    }else if (lookahead(stream) == \":\") {\n      if (w == \"erlang\") {\n        return rval(state,stream,\"builtin\");\n      } else {\n        return rval(state,stream,\"function\");\n      }\n    }else if (is_member(w,[\"true\",\"false\"])) {\n      return rval(state,stream,\"boolean\");\n    }else{\n      return rval(state,stream,\"atom\");\n    }\n  }\n\n  // number\n  var digitRE      = /[0-9]/;\n  var radixRE      = /[0-9a-zA-Z]/;         // 36#zZ style int\n  if (digitRE.test(ch)) {\n    stream.eatWhile(digitRE);\n    if (stream.eat('#')) {                // 36#aZ  style integer\n      if (!stream.eatWhile(radixRE)) {\n        stream.backUp(1);                 //\"36#\" - syntax error\n      }\n    } else if (stream.eat('.')) {       // float\n      if (!stream.eatWhile(digitRE)) {\n        stream.backUp(1);        // \"3.\" - probably end of function\n      } else {\n        if (stream.eat(/[eE]/)) {        // float with exponent\n          if (stream.eat(/[-+]/)) {\n            if (!stream.eatWhile(digitRE)) {\n              stream.backUp(2);            // \"2e-\" - syntax error\n            }\n          } else {\n            if (!stream.eatWhile(digitRE)) {\n              stream.backUp(1);            // \"2e\" - syntax error\n            }\n          }\n        }\n      }\n    }\n    return rval(state,stream,\"number\");   // normal integer\n  }\n\n  // open parens\n  if (nongreedy(stream,openParenRE,openParenWords)) {\n    return rval(state,stream,\"open_paren\");\n  }\n\n  // close parens\n  if (nongreedy(stream,closeParenRE,closeParenWords)) {\n    return rval(state,stream,\"close_paren\");\n  }\n\n  // separators\n  if (greedy(stream,separatorRE,separatorWords)) {\n    return rval(state,stream,\"separator\");\n  }\n\n  // operators\n  if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) {\n    return rval(state,stream,\"operator\");\n  }\n\n  return rval(state,stream,null);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// utilities\nfunction nongreedy(stream,re,words) {\n  if (stream.current().length == 1 && re.test(stream.current())) {\n    stream.backUp(1);\n    while (re.test(stream.peek())) {\n      stream.next();\n      if (is_member(stream.current(),words)) {\n        return true;\n      }\n    }\n    stream.backUp(stream.current().length-1);\n  }\n  return false;\n}\n\nfunction greedy(stream,re,words) {\n  if (stream.current().length == 1 && re.test(stream.current())) {\n    while (re.test(stream.peek())) {\n      stream.next();\n    }\n    while (0 < stream.current().length) {\n      if (is_member(stream.current(),words)) {\n        return true;\n      }else{\n        stream.backUp(1);\n      }\n    }\n    stream.next();\n  }\n  return false;\n}\n\nfunction doubleQuote(stream) {\n  return quote(stream, '\"', '\\\\');\n}\n\nfunction singleQuote(stream) {\n  return quote(stream,'\\'','\\\\');\n}\n\nfunction quote(stream,quoteChar,escapeChar) {\n  while (!stream.eol()) {\n    var ch = stream.next();\n    if (ch == quoteChar) {\n      return true;\n    }else if (ch == escapeChar) {\n      stream.next();\n    }\n  }\n  return false;\n}\n\nfunction lookahead(stream) {\n  var m = stream.match(/^\\s*([^\\s%])/, false)\n  return m ? m[1] : \"\";\n}\n\nfunction is_member(element,list) {\n  return (-1 < list.indexOf(element));\n}\n\nfunction rval(state,stream,type) {\n\n  // parse stack\n  pushToken(state,realToken(type,stream));\n\n  // map erlang token type to CodeMirror style class\n  //     erlang             -> CodeMirror tag\n  switch (type) {\n  case \"atom\":        return \"atom\";\n  case \"attribute\":   return \"attribute\";\n  case \"boolean\":     return \"atom\";\n  case \"builtin\":     return \"builtin\";\n  case \"close_paren\": return null;\n  case \"colon\":       return null;\n  case \"comment\":     return \"comment\";\n  case \"dot\":         return null;\n  case \"error\":       return \"error\";\n  case \"fun\":         return \"meta\";\n  case \"function\":    return \"tag\";\n  case \"guard\":       return \"property\";\n  case \"keyword\":     return \"keyword\";\n  case \"macro\":       return \"macroName\";\n  case \"number\":      return \"number\";\n  case \"open_paren\":  return null;\n  case \"operator\":    return \"operator\";\n  case \"record\":      return \"bracket\";\n  case \"separator\":   return null;\n  case \"string\":      return \"string\";\n  case \"type\":        return \"def\";\n  case \"variable\":    return \"variable\";\n  default:            return null;\n  }\n}\n\nfunction aToken(tok,col,ind,typ) {\n  return {token:  tok,\n          column: col,\n          indent: ind,\n          type:   typ};\n}\n\nfunction realToken(type,stream) {\n  return aToken(stream.current(),\n                stream.column(),\n                stream.indentation(),\n                type);\n}\n\nfunction fakeToken(type) {\n  return aToken(type,0,0,type);\n}\n\nfunction peekToken(state,depth) {\n  var len = state.tokenStack.length;\n  var dep = (depth ? depth : 1);\n\n  if (len < dep) {\n    return false;\n  }else{\n    return state.tokenStack[len-dep];\n  }\n}\n\nfunction pushToken(state,token) {\n\n  if (!(token.type == \"comment\" || token.type == \"whitespace\")) {\n    state.tokenStack = maybe_drop_pre(state.tokenStack,token);\n    state.tokenStack = maybe_drop_post(state.tokenStack);\n  }\n}\n\nfunction maybe_drop_pre(s,token) {\n  var last = s.length-1;\n\n  if (0 < last && s[last].type === \"record\" && token.type === \"dot\") {\n    s.pop();\n  }else if (0 < last && s[last].type === \"group\") {\n    s.pop();\n    s.push(token);\n  }else{\n    s.push(token);\n  }\n  return s;\n}\n\nfunction maybe_drop_post(s) {\n  if (!s.length) return s\n  var last = s.length-1;\n\n  if (s[last].type === \"dot\") {\n    return [];\n  }\n  if (last > 1 && s[last].type === \"fun\" && s[last-1].token === \"fun\") {\n    return s.slice(0,last-1);\n  }\n  switch (s[last].token) {\n  case \"}\":    return d(s,{g:[\"{\"]});\n  case \"]\":    return d(s,{i:[\"[\"]});\n  case \")\":    return d(s,{i:[\"(\"]});\n  case \">>\":   return d(s,{i:[\"<<\"]});\n  case \"end\":  return d(s,{i:[\"begin\",\"case\",\"fun\",\"if\",\"receive\",\"try\"]});\n  case \",\":    return d(s,{e:[\"begin\",\"try\",\"when\",\"->\",\n                              \",\",\"(\",\"[\",\"{\",\"<<\"]});\n  case \"->\":   return d(s,{r:[\"when\"],\n                           m:[\"try\",\"if\",\"case\",\"receive\"]});\n  case \";\":    return d(s,{E:[\"case\",\"fun\",\"if\",\"receive\",\"try\",\"when\"]});\n  case \"catch\":return d(s,{e:[\"try\"]});\n  case \"of\":   return d(s,{e:[\"case\"]});\n  case \"after\":return d(s,{e:[\"receive\",\"try\"]});\n  default:     return s;\n  }\n}\n\nfunction d(stack,tt) {\n  // stack is a stack of Token objects.\n  // tt is an object; {type:tokens}\n  // type is a char, tokens is a list of token strings.\n  // The function returns (possibly truncated) stack.\n  // It will descend the stack, looking for a Token such that Token.token\n  //  is a member of tokens. If it does not find that, it will normally (but\n  //  see \"E\" below) return stack. If it does find a match, it will remove\n  //  all the Tokens between the top and the matched Token.\n  // If type is \"m\", that is all it does.\n  // If type is \"i\", it will also remove the matched Token and the top Token.\n  // If type is \"g\", like \"i\", but add a fake \"group\" token at the top.\n  // If type is \"r\", it will remove the matched Token, but not the top Token.\n  // If type is \"e\", it will keep the matched Token but not the top Token.\n  // If type is \"E\", it behaves as for type \"e\", except if there is no match,\n  //  in which case it will return an empty stack.\n\n  for (var type in tt) {\n    var len = stack.length-1;\n    var tokens = tt[type];\n    for (var i = len-1; -1 < i ; i--) {\n      if (is_member(stack[i].token,tokens)) {\n        var ss = stack.slice(0,i);\n        switch (type) {\n        case \"m\": return ss.concat(stack[i]).concat(stack[len]);\n        case \"r\": return ss.concat(stack[len]);\n        case \"i\": return ss;\n        case \"g\": return ss.concat(fakeToken(\"group\"));\n        case \"E\": return ss.concat(stack[i]);\n        case \"e\": return ss.concat(stack[i]);\n        }\n      }\n    }\n  }\n  return (type == \"E\" ? [] : stack);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// indenter\n\nfunction indenter(state, textAfter, cx) {\n  var t;\n  var wordAfter = wordafter(textAfter);\n  var currT = peekToken(state,1);\n  var prevT = peekToken(state,2);\n\n  if (state.in_string || state.in_atom) {\n    return null;\n  }else if (!prevT) {\n    return 0;\n  }else if (currT.token == \"when\") {\n    return currT.column + cx.unit;\n  }else if (wordAfter === \"when\" && prevT.type === \"function\") {\n    return prevT.indent+cx.unit;\n  }else if (wordAfter === \"(\" && currT.token === \"fun\") {\n    return  currT.column+3;\n  }else if (wordAfter === \"catch\" && (t = getToken(state,[\"try\"]))) {\n    return t.column;\n  }else if (is_member(wordAfter,[\"end\",\"after\",\"of\"])) {\n    t = getToken(state,[\"begin\",\"case\",\"fun\",\"if\",\"receive\",\"try\"]);\n    return t ? t.column : null;\n  }else if (is_member(wordAfter,closeParenWords)) {\n    t = getToken(state,openParenWords);\n    return t ? t.column : null;\n  }else if (is_member(currT.token,[\",\",\"|\",\"||\"]) ||\n            is_member(wordAfter,[\",\",\"|\",\"||\"])) {\n    t = postcommaToken(state);\n    return t ? t.column+t.token.length : cx.unit;\n  }else if (currT.token == \"->\") {\n    if (is_member(prevT.token, [\"receive\",\"case\",\"if\",\"try\"])) {\n      return prevT.column+cx.unit+cx.unit;\n    }else{\n      return prevT.column+cx.unit;\n    }\n  }else if (is_member(currT.token,openParenWords)) {\n    return currT.column+currT.token.length;\n  }else{\n    t = defaultToken(state);\n    return truthy(t) ? t.column+cx.unit : 0;\n  }\n}\n\nfunction wordafter(str) {\n  var m = str.match(/,|[a-z]+|\\}|\\]|\\)|>>|\\|+|\\(/);\n\n  return truthy(m) && (m.index === 0) ? m[0] : \"\";\n}\n\nfunction postcommaToken(state) {\n  var objs = state.tokenStack.slice(0,-1);\n  var i = getTokenIndex(objs,\"type\",[\"open_paren\"]);\n\n  return truthy(objs[i]) ? objs[i] : false;\n}\n\nfunction defaultToken(state) {\n  var objs = state.tokenStack;\n  var stop = getTokenIndex(objs,\"type\",[\"open_paren\",\"separator\",\"keyword\"]);\n  var oper = getTokenIndex(objs,\"type\",[\"operator\"]);\n\n  if (truthy(stop) && truthy(oper) && stop < oper) {\n    return objs[stop+1];\n  } else if (truthy(stop)) {\n    return objs[stop];\n  } else {\n    return false;\n  }\n}\n\nfunction getToken(state,tokens) {\n  var objs = state.tokenStack;\n  var i = getTokenIndex(objs,\"token\",tokens);\n\n  return truthy(objs[i]) ? objs[i] : false;\n}\n\nfunction getTokenIndex(objs,propname,propvals) {\n\n  for (var i = objs.length-1; -1 < i ; i--) {\n    if (is_member(objs[i][propname],propvals)) {\n      return i;\n    }\n  }\n  return false;\n}\n\nfunction truthy(x) {\n  return (x !== false) && (x != null);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// this object defines the mode\n\nexport const erlang = {\n  name: \"erlang\",\n  startState() {\n    return {tokenStack: [],\n            in_string:  false,\n            in_atom:    false};\n  },\n\n  token: tokenizer,\n\n  indent: indenter,\n\n  languageData: {\n    commentTokens: {line: \"%\"}\n  }\n};\n\n"],"names":["typeWords","keywordWords","separatorRE","separatorWords","operatorAtomWords","operatorSymbolRE","operatorSymbolWords","openParenRE","openParenWords","closeParenRE","closeParenWords","guardWords","bifWords","anumRE","escapesRE","nongreedy","stream","re","words","current","length","test","backUp","peek","next","is_member","greedy","doubleQuote","quote","singleQuote","quoteChar","escapeChar","eol","ch","element","list","indexOf","rval","state","type","token","tokenStack","s","last","pop","push","maybe_drop_pre","slice","d","g","i","e","r","m","E","maybe_drop_post","pushToken","aToken","column","indentation","realToken","tok","col","ind","typ","indent","fakeToken","peekToken","depth","len","dep","stack","tt","tokens","ss","concat","getToken","objs","getTokenIndex","truthy","propname","propvals","x","erlang","name","startState","in_string","in_atom","eatSpace","match","skipToEnd","eatWhile","w","lookahead","digitRE","eat","textAfter","cx","t","wordAfter","index","currT","prevT","unit","postcommaToken","stop","oper","defaultToken","languageData","commentTokens","line"],"mappings":"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","x_google_ignoreList":[0]}