erlang.js
3.29 KB
CodeMirror.defineMIME("text/x-erlang","erlang"),CodeMirror.defineMode("erlang",function(e,t){function i(e,t){return-1<t.indexOf(e)}function r(e,t){var i=e.start,r=t.length;if(r<=i){var n=e.string.slice(i-r,i);return n==t}return!1}function n(e,t){if(e.eatSpace())return null;if(e.sol()&&"-"==e.peek()){if(e.next(),e.eat(d)&&e.eatWhile(g))return"("==e.peek()?"attribute":i(e.current(),s)?"def":null;e.backUp(1)}var n=e.next();if("%"==n)return e.skipToEnd(),"comment";if("?"==n)return e.eatWhile(g),"variable-2";if("#"==n)return e.eatWhile(g),"bracket";if("$"==n)return"\\"==e.next()&&(e.eatWhile(m)||e.next()),"string";if("'"==n)return a(e);if('"'==n)return o(e);if(f.test(n))return e.eatWhile(g),"variable";if(d.test(n)){if(e.eatWhile(g),"/"==e.peek())return e.next(),e.eatWhile(b)?"meta":(e.backUp(1),"atom");var _=e.current();return i(_,l)?"keyword":"("==e.peek()?!i(_,p)||r(e,":")&&!r(e,"erlang:")?"tag":"builtin":i(_,c)?"property":i(_,u)?"operator":":"==e.peek()?"erlang"==_?"builtin":"tag":"atom"}return b.test(n)?(e.eatWhile(b),e.eat("#")?e.eatWhile(b):(e.eat(".")&&e.eatWhile(b),e.eat(/[eE]/)&&(e.eat(/[-+]/),e.eatWhile(b))),"number"):null}function o(e){return _(e,'"',"\\","string")}function a(e){return _(e,"'","\\","atom")}function _(e,t,i,r){for(;!e.eol();){var n=e.next();if(n==t)return r;n==i&&e.next()}return"error"}var s=["-type","-spec","-export_type","-opaque"],l=["after","begin","catch","case","cond","end","fun","if","let","of","query","receive","try","when"],u=["and","andalso","band","bnot","bor","bsl","bsr","bxor","div","not","or","orelse","rem","xor"],c=["is_atom","is_binary","is_bitstring","is_boolean","is_float","is_function","is_integer","is_list","is_number","is_pid","is_port","is_record","is_reference","is_tuple","atom","binary","bitstring","boolean","function","integer","list","number","pid","port","record","reference","tuple"],p=["abs","adler32","adler32_combine","alive","apply","atom_to_binary","atom_to_list","binary_to_atom","binary_to_existing_atom","binary_to_list","binary_to_term","bit_size","bitstring_to_list","byte_size","check_process_code","contact_binary","crc32","crc32_combine","date","decode_packet","delete_module","disconnect_node","element","erase","exit","float","float_to_list","garbage_collect","get","get_keys","group_leader","halt","hd","integer_to_list","internal_bif","iolist_size","iolist_to_binary","is_alive","is_atom","is_binary","is_bitstring","is_boolean","is_float","is_function","is_integer","is_list","is_number","is_pid","is_port","is_process_alive","is_record","is_reference","is_tuple","length","link","list_to_atom","list_to_binary","list_to_bitstring","list_to_existing_atom","list_to_float","list_to_integer","list_to_pid","list_to_tuple","load_module","make_ref","module_loaded","monitor_node","node","node_link","node_unlink","nodes","notalive","now","open_port","pid_to_list","port_close","port_command","port_connect","port_control","pre_loaded","process_flag","process_info","processes","purge_module","put","register","registered","round","self","setelement","size","spawn","spawn_link","spawn_monitor","spawn_opt","split_binary","statistics","term_to_binary","time","throw","tl","trunc","tuple_size","tuple_to_list","unlink","unregister","whereis"],d=/[a-z_]/,f=/[A-Z_]/,b=/[0-9]/,m=/[0-7]/,g=/[a-z_A-Z0-9]/;return{startState:function(){return{}},token:function(e,t){return n(e,t)}}});