{"version":3,"sources":["../../node_modules/codemirror/mode/erlang/erlang.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","defineMIME","defineMode","cmCfg","typeWords","keywordWords","separatorRE","separatorWords","operatorAtomWords","operatorSymbolRE","operatorSymbolWords","openParenRE","openParenWords","closeParenRE","closeParenWords","guardWords","bifWords","anumRE","escapesRE","tokenizer","stream","state","in_string","doubleQuote","rval","in_atom","singleQuote","eatSpace","peekToken","match","is_member","current","ch","next","skipToEnd","eatWhile","test","w","token","lookahead","digitRE","radixRE","eat","backUp","nongreedy","greedy","re","words","length","peek","quote","quoteChar","escapeChar","eol","m","pop","element","list","indexOf","type","pushToken","realToken","aToken","tok","col","ind","typ","column","indent","indentation","fakeToken","depth","len","tokenStack","dep","maybe_drop_pre","maybe_drop_post","s","last","push","slice","d","g","i","e","r","E","stack","tt","tokens","ss","concat","indenter","textAfter","t","unit","indentUnit","wordAfter","wordafter","currT","prevT","Pass","getToken","postcommaToken","defaultToken","truthy","str","index","objs","getTokenIndex","stop","oper","propname","propvals","x","startState","lineComment"],"mappings":"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","file":"erlang.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n/*jshint unused:true, eqnull:true, curly:true, bitwise:true */\n/*jshint undef:true, latedef:true, trailing:true */\n/*global CodeMirror:true */\n\n// erlang mode.\n// tokenizer -> token types -> CodeMirror styles\n// tokenizer maintains a parse stack\n// indenter uses the parse stack\n\n// TODO indenter:\n// bit syntax\n// old guard/bif/conversion clashes (e.g. \"float/1\")\n// type/spec/opaque\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.defineMIME(\"text/x-erlang\", \"erlang\");\n\nCodeMirror.defineMode(\"erlang\", function(cmCfg) {\n \"use strict\";\n\n/////////////////////////////////////////////////////////////////////////////\n// constants\n\n var typeWords = [\n \"-type\", \"-spec\", \"-export_type\", \"-opaque\"];\n\n var keywordWords = [\n \"after\",\"begin\",\"catch\",\"case\",\"cond\",\"end\",\"fun\",\"if\",\n \"let\",\"of\",\"query\",\"receive\",\"try\",\"when\"];\n\n var separatorRE = /[\\->,;]/;\n var separatorWords = [\n \"->\",\";\",\",\"];\n\n var operatorAtomWords = [\n \"and\",\"andalso\",\"band\",\"bnot\",\"bor\",\"bsl\",\"bsr\",\"bxor\",\n \"div\",\"not\",\"or\",\"orelse\",\"rem\",\"xor\"];\n\n var operatorSymbolRE = /[\\+\\-\\*\\/<>=\\|:!]/;\n var operatorSymbolWords = [\n \"=\",\"+\",\"-\",\"*\",\"/\",\">\",\">=\",\"<\",\"=<\",\"=:=\",\"==\",\"=/=\",\"/=\",\"||\",\"<-\",\"!\"];\n\n var openParenRE = /[<\\(\\[\\{]/;\n var openParenWords = [\n \"<<\",\"(\",\"[\",\"{\"];\n\n var closeParenRE = /[>\\)\\]\\}]/;\n var closeParenWords = [\n \"}\",\"]\",\")\",\">>\"];\n\n var 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\n var 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] [ß-ö] [ø-ÿ]\n var anumRE = /[\\w@Ø-ÞÀ-Öß-öø-ÿ]/;\n var 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\n function 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\n function 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\n function 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\n function doubleQuote(stream) {\n return quote(stream, '\"', '\\\\');\n }\n\n function singleQuote(stream) {\n return quote(stream,'\\'','\\\\');\n }\n\n function 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\n function lookahead(stream) {\n var m = stream.match(/([\\n\\s]+|%[^\\n]*\\n)*(.)/,false);\n return m ? m.pop() : \"\";\n }\n\n function is_member(element,list) {\n return (-1 < list.indexOf(element));\n }\n\n function 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 \"variable-2\";\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\n function aToken(tok,col,ind,typ) {\n return {token: tok,\n column: col,\n indent: ind,\n type: typ};\n }\n\n function realToken(type,stream) {\n return aToken(stream.current(),\n stream.column(),\n stream.indentation(),\n type);\n }\n\n function fakeToken(type) {\n return aToken(type,0,0,type);\n }\n\n function 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\n function 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\n function 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\n function 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\n function 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\n function indenter(state,textAfter) {\n var t;\n var unit = cmCfg.indentUnit;\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 CodeMirror.Pass;\n }else if (!prevT) {\n return 0;\n }else if (currT.token == \"when\") {\n return currT.column+unit;\n }else if (wordAfter === \"when\" && prevT.type === \"function\") {\n return prevT.indent+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 : CodeMirror.Pass;\n }else if (is_member(wordAfter,closeParenWords)) {\n t = getToken(state,openParenWords);\n return t ? t.column : CodeMirror.Pass;\n }else if (is_member(currT.token,[\",\",\"|\",\"||\"]) ||\n is_member(wordAfter,[\",\",\"|\",\"||\"])) {\n t = postcommaToken(state);\n return t ? t.column+t.token.length : unit;\n }else if (currT.token == \"->\") {\n if (is_member(prevT.token, [\"receive\",\"case\",\"if\",\"try\"])) {\n return prevT.column+unit+unit;\n }else{\n return prevT.column+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+unit : 0;\n }\n }\n\n function wordafter(str) {\n var m = str.match(/,|[a-z]+|\\}|\\]|\\)|>>|\\|+|\\(/);\n\n return truthy(m) && (m.index === 0) ? m[0] : \"\";\n }\n\n function 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\n function 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\n function 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\n function 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\n function truthy(x) {\n return (x !== false) && (x != null);\n }\n\n/////////////////////////////////////////////////////////////////////////////\n// this object defines the mode\n\n return {\n startState:\n function() {\n return {tokenStack: [],\n in_string: false,\n in_atom: false};\n },\n\n token:\n function(stream, state) {\n return tokenizer(stream, state);\n },\n\n indent:\n function(state, textAfter) {\n return indenter(state,textAfter);\n },\n\n lineComment: \"%\"\n };\n});\n\n});\n"]}