blob: 28bc4a5d350069135f82225deb9975351f9e429f [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar6be7f872012-01-20 21:08:56 +01002" Language: Erlang
3" Author: Oscar Hellström <oscar@oscarh.net> (http://oscar.hellstrom.st)
4" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
5" License: Vim license
6" Version: 2011/09/11
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
Bram Moolenaar6be7f872012-01-20 21:08:56 +01008if exists("b:current_syntax")
9 finish
10else
11 let b:current_syntax = "erlang"
Bram Moolenaar071d4272004-06-13 20:20:40 +000012endif
13
Bram Moolenaar6be7f872012-01-20 21:08:56 +010014if !exists("g:erlang_highlight_bif")
15 let g:erlang_highlight_bif = 1
16endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000017
Bram Moolenaar6be7f872012-01-20 21:08:56 +010018" Erlang is case sensitive
Bram Moolenaar071d4272004-06-13 20:20:40 +000019syn case match
20
Bram Moolenaar6be7f872012-01-20 21:08:56 +010021" Match groups
22syn match erlangStringModifier /\\./ contained
23syn match erlangStringModifier /\~\%(-\?[0-9*]\+\)\?\%(\.[0-9*]\+\..\?\)\?\%(c\|f\|e\|g\|s\|w\|p\|W\|P\|B\|X\|#\|b\|+\|n\|i\)/ contained
24syn match erlangModifier /\$\\\?./
Bram Moolenaar071d4272004-06-13 20:20:40 +000025
Bram Moolenaar6be7f872012-01-20 21:08:56 +010026syn match erlangInteger /\<\%([0-9]\+#[0-9a-fA-F]\+\|[0-9]\+\)\>/
27syn match erlangFloat /\<[0-9]\+\.[0-9]\+\%(e-\?[0-9]\+\)\?\>/
Bram Moolenaar071d4272004-06-13 20:20:40 +000028
Bram Moolenaar6be7f872012-01-20 21:08:56 +010029syn keyword erlangTodo TODO FIXME XXX contained
30syn match erlangComment /%.*$/ contains=@Spell,erlangTodo,erlangAnnotation
31syn match erlangAnnotation /\%(%\s\)\@<=@\%(author\|clear\|copyright\|deprecated\|doc\|docfile\|end\|equiv\|headerfile\|hidden\|private\|reference\|see\|since\|spec\|throws\|title\|todo\|TODO\|type\|version\)/ contained
32syn match erlangAnnotation /`[^']\+'/ contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000033
Bram Moolenaar6be7f872012-01-20 21:08:56 +010034syn keyword erlangKeyword band bor bnot bsl bsr bxor div rem xor
35syn keyword erlangKeyword try catch begin receive after cond fun let query
Bram Moolenaar071d4272004-06-13 20:20:40 +000036
Bram Moolenaar6be7f872012-01-20 21:08:56 +010037syn keyword erlangConditional case if of end
38syn keyword erlangConditional not and or andalso orelse
39syn keyword erlangConditional when
Bram Moolenaar071d4272004-06-13 20:20:40 +000040
Bram Moolenaar6be7f872012-01-20 21:08:56 +010041syn keyword erlangBoolean true false
Bram Moolenaar446cb832008-06-24 21:56:24 +000042
Bram Moolenaar6be7f872012-01-20 21:08:56 +010043syn keyword erlangGuard is_list is_alive is_atom is_binary is_bitstring is_boolean is_tuple is_number is_integer is_float is_function is_constant is_pid is_port is_reference is_record is_process_alive
44
45syn match erlangOperator /\/\|*\|+\|-\|++\|--/
46syn match erlangOperator /->\|<-\|||\||\|!\|=/
47syn match erlangOperator /=:=\|==\|\/=\|=\/=\|<\|>\|=<\|>=/
48syn keyword erlangOperator div rem
49
50syn region erlangString start=/"/ end=/"/ skip=/\\/ contains=@Spell,erlangStringModifier
51
52syn match erlangVariable /\<[A-Z_]\w*\>/
53syn match erlangAtom /\%(\%(^-\)\|#\)\@<!\<[a-z][A-Za-z0-9_]*\>\%(\s*[(:]\)\@!/
54syn match erlangAtom /\\\@<!'[^']*\\\@<!'/
55
56syn match erlangRecord /#\w\+/
57
58syn match erlangTuple /{\|}/
59syn match erlangList /\[\|\]/
60
61syn match erlangAttribute /^-\%(vsn\|author\|copyright\|compile\|deprecated\|module\|export\|import\|behaviour\|behavior\|export_type\|ignore_xref\|on_load\)\s*(\@=/
62syn match erlangInclude /^-include\%(_lib\)\?\s*(\@=/
63syn match erlangRecordDef /^-record\s*(\@=/
64syn match erlangDefine /^-\%(define\|undef\)\s*(\@=/
65syn match erlangPreCondit /^-\%(ifdef\|ifndef\|else\|endif\)\%(\s*(\@=\)\?/
66
67syn match erlangType /^-\%(spec\|type\)[( ]\@=/
68
69syn match erlangMacro /\%(-define(\)\@<=\w\+/
70syn match erlangMacro /?\??\w\+/
71
72syn match erlangBitType /\%(\/\|-\)\@<=\%(bits\|bitstring\|binary\|integer\|float\|unit\)\>/
73syn match erlangBitSize /:\@<=[0-9]\+/
74
75syn match erlangBinary /<<\|>>/
76
77" BIFs
78syn match erlangBIF /\%([^:0-9A-Za-z_]\|\<erlang:\)\@<=\%(abs\|apply\|atom_to_binary\|atom_to_list\|binary_part\|binary_to_atom\|binary_to_existing_atom\|binary_to_list\|binary_to_term\|bit_size\|bitstring_to_list\|byte_size\|check_process_code\|date\|delete_module\|demonitor\|disconnect_node\|element\|erase\|exit\|float\|float_to_list\|garbage_collect\|get\|get_keys\|group_leader\|hd\|integer_to_list\|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\|max\|min\|module_loaded\|monitor\|monitor_node\|node\|nodes\|now\|open_port\|pid_to_list\|port_close\|port_command\|port_connect\|port_control\|pre_loaded\|processes\|process_flag\|process_info\|purge_module\|put\|register\|registered\|round\|self\|setelement\|size\|spawn\|spawn_link\|spawn_monitor\|spawn_opt\|split_binary\|statistics\|term_to_binary\|time\|tl\|trunc\|tuple_size\|tuple_to_list\|unlink\|unregister\|whereis\)\%((\|\/[0-9]\)\@=/
79syn match erlangBIF /\<\%(erlang:\)\@<=\%(append_element\|bump_reductions\|cancel_timer\|decode_packet\|display\|function_exported\|fun_info\|fun_to_list\|get_cookie\|get_stacktrace\|hash\|is_builtin\|loaded\|load_nif\|localtime\|localtime_to_universaltime\|make_tuple\|memory\|monitor_node\|phash\|port_call\|port_info\|ports\|port_to_list\|process_display\|read_timer\|ref_to_list\|resume_process\|send\|send_after\|send_nosuspend\|set_cookie\|start_timer\|suspend_process\|system_flag\|system_info\|system_monitor\|system_profile\|trace\|trace_delivered\|trace_info\|trace_pattern\|universaltime\|universaltime_to_localtime\|yield\)(\@=/
80syn match erlangGBIF /erlang\%(:\w\)\@=/
81
82" Link Erlang stuff to Vim groups
83hi link erlangTodo Todo
84hi link erlangString String
85hi link erlangNoSpellString String
86hi link erlangModifier SpecialChar
87hi link erlangStringModifier SpecialChar
88hi link erlangComment Comment
89hi link erlangAnnotation Special
90hi link erlangVariable Identifier
91hi link erlangInclude Include
92hi link erlangRecordDef Keyword
93hi link erlangAttribute Keyword
94hi link erlangKeyword Keyword
95hi link erlangMacro Macro
96hi link erlangDefine Define
97hi link erlangPreCondit PreCondit
98hi link erlangPreProc PreProc
99hi link erlangDelimiter Delimiter
100hi link erlangBitDelimiter Normal
101hi link erlangOperator Operator
102hi link erlangConditional Conditional
103hi link erlangGuard Conditional
104hi link erlangBoolean Boolean
105hi link erlangAtom Constant
106hi link erlangRecord Structure
107hi link erlangInteger Number
108hi link erlangFloat Number
109hi link erlangFloat Number
110hi link erlangFloat Number
111hi link erlangFloat Number
112hi link erlangHex Number
113hi link erlangFun Keyword
114hi link erlangList Delimiter
115hi link erlangTuple Delimiter
116hi link erlangBinary Keyword
117hi link erlangBitVariable Identifier
118hi link erlangBitType Type
119hi link erlangType Type
120hi link erlangBitSize Number
121
122" Optional highlighting
123if g:erlang_highlight_bif
124 hi link erlangBIF Keyword
125 hi link erlangGBIF Keyword
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126endif