1071d4279SBram Moolenaar" Vim syntax file 2ad3b366cSBram Moolenaar" Language: Erlang (http://www.erlang.org) 3ad3b366cSBram Moolenaar" Maintainer: Csaba Hoch <[email protected]> 4036986f1SBram Moolenaar" Contributor: Adam Rutkowski <[email protected]> 5*1d59aa1fSBram Moolenaar" Last Update: 2020-May-26 66be7f873SBram Moolenaar" License: Vim license 7036986f1SBram Moolenaar" URL: https://github.com/vim-erlang/vim-erlang-runtime 8071d4279SBram Moolenaar 9203d04d7SBram Moolenaar" Acknowledgements: This script was originally created by Kresimir Marzic [1]. 10203d04d7SBram Moolenaar" The script was then revamped by Csaba Hoch [2]. During the revamp, the new 11203d04d7SBram Moolenaar" highlighting style and some code was taken from the Erlang syntax script 12203d04d7SBram Moolenaar" that is part of vimerl [3], created by Oscar Hellström [4] and improved by 13203d04d7SBram Moolenaar" Ricardo Catalinas Jiménez [5]. 14203d04d7SBram Moolenaar 15203d04d7SBram Moolenaar" [1]: Kreąimir Marľić (Kresimir Marzic) <[email protected]> 16203d04d7SBram Moolenaar" [2]: Csaba Hoch <[email protected]> 17203d04d7SBram Moolenaar" [3]: https://github.com/jimenezrick/vimerl 18203d04d7SBram Moolenaar" [4]: Oscar Hellström <[email protected]> (http://oscar.hellstrom.st) 19203d04d7SBram Moolenaar" [5]: Ricardo Catalinas Jiménez <[email protected]> 20203d04d7SBram Moolenaar 21ad3b366cSBram Moolenaar" Customization: 22ad3b366cSBram Moolenaar" 23203d04d7SBram Moolenaar" To use the old highlighting style, add this to your .vimrc: 24ad3b366cSBram Moolenaar" 25203d04d7SBram Moolenaar" let g:erlang_old_style_highlight = 1 26ad3b366cSBram Moolenaar" 27203d04d7SBram Moolenaar" To highlight further module attributes, add them to 28203d04d7SBram Moolenaar" ~/.vim/after/syntax/erlang.vim: 29ad3b366cSBram Moolenaar" 30203d04d7SBram Moolenaar" syn keyword erlangAttribute myattr1 myattr2 contained 31ad3b366cSBram Moolenaar 3289bcfda6SBram Moolenaar" quit when a syntax file was already loaded 3389bcfda6SBram Moolenaarif exists("b:current_syntax") 34071d4279SBram Moolenaar finish 35071d4279SBram Moolenaarendif 36071d4279SBram Moolenaar 379d98fe9cSBram Moolenaarlet s:cpo_save = &cpo 389d98fe9cSBram Moolenaarset cpo&vim 399d98fe9cSBram Moolenaar 40ad3b366cSBram Moolenaar" Case sensitive 41071d4279SBram Moolenaarsyn case match 42071d4279SBram Moolenaar 43ad3b366cSBram Moolenaarsetlocal iskeyword+=$,@-@ 44ad3b366cSBram Moolenaar 45ad3b366cSBram Moolenaar" Comments 46ad3b366cSBram Moolenaarsyn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo 47*1d59aa1fSBram Moolenaarsyn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|param\|private\|equiv\|spec\|throws\)' contained 48ad3b366cSBram Moolenaarsyn match erlangCommentAnnotation /`[^']*'/ contained 49ad3b366cSBram Moolenaarsyn keyword erlangTodo TODO FIXME XXX contained 50ad3b366cSBram Moolenaar 51ad3b366cSBram Moolenaar" Numbers (minimum base is 2, maximum is 36.) 52ad3b366cSBram Moolenaarsyn match erlangNumberInteger '\<\d\+\>' 53ad3b366cSBram Moolenaarsyn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>' 54ad3b366cSBram Moolenaarsyn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>' 55ad3b366cSBram Moolenaar 56ad3b366cSBram Moolenaar" Strings, atoms, characters 57ad3b366cSBram Moolenaarsyn region erlangString start=/"/ end=/"/ contains=erlangStringModifier 58ad3b366cSBram Moolenaarsyn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier 59036986f1SBram Moolenaarsyn match erlangStringModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\|\~\%([ni~]\|\%(-\=\d\+\|\*\)\=\.\=\%(\*\|\d\+\)\=\%(\..\)\=[tl]*[cfegswpWPBX#bx+]\)' contained 60036986f1SBram Moolenaarsyn match erlangQuotedAtomModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained 61ad3b366cSBram Moolenaarsyn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' 62ad3b366cSBram Moolenaar 63203d04d7SBram Moolenaar" Operators, separators 64036986f1SBram Moolenaarsyn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|=>\|:=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' 65ad3b366cSBram Moolenaarsyn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse 66203d04d7SBram Moolenaarsyn match erlangBracket '{\|}\|\[\|]\||\|||' 67203d04d7SBram Moolenaarsyn match erlangPipe '|' 68ad3b366cSBram Moolenaarsyn match erlangRightArrow '->' 69ad3b366cSBram Moolenaar 70203d04d7SBram Moolenaar" Atoms, function calls (order is important) 71203d04d7SBram Moolenaarsyn match erlangAtom '\<\l[[:alnum:]_@]*' contains=erlangBoolean 72203d04d7SBram Moolenaarsyn keyword erlangBoolean true false contained 73203d04d7SBram Moolenaarsyn match erlangLocalFuncCall '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF 74203d04d7SBram Moolenaarsyn match erlangLocalFuncRef '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' 75036986f1SBram Moolenaarsyn match erlangGlobalFuncCall '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangComment,erlangVariable 76036986f1SBram Moolenaarsyn match erlangGlobalFuncRef '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' contains=erlangComment,erlangVariable 77203d04d7SBram Moolenaar 78036986f1SBram Moolenaar" Variables, macros, records, maps 79203d04d7SBram Moolenaarsyn match erlangVariable '\<[A-Z_][[:alnum:]_@]*' 80203d04d7SBram Moolenaarsyn match erlangMacro '??\=[[:alnum:]_@]\+' 81203d04d7SBram Moolenaarsyn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+' 825ef1c6a4SBram Moolenaarsyn region erlangQuotedMacro start=/??\=\s*'/ end=/'/ contains=erlangQuotedAtomModifier 83036986f1SBram Moolenaarsyn match erlangMap '#' 84203d04d7SBram Moolenaarsyn match erlangRecord '#\s*\l[[:alnum:]_@]*' 85036986f1SBram Moolenaarsyn region erlangQuotedRecord start=/#\s*'/ end=/'/ contains=erlangQuotedAtomModifier 86036986f1SBram Moolenaar 87036986f1SBram Moolenaar" Shebang (this line has to be after the ErlangMap) 88036986f1SBram Moolenaarsyn match erlangShebang '^#!.*' 89203d04d7SBram Moolenaar 90203d04d7SBram Moolenaar" Bitstrings 91203d04d7SBram Moolenaarsyn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment 92ad3b366cSBram Moolenaar 93ad3b366cSBram Moolenaar" Constants and Directives 949d98fe9cSBram Moolenaarsyn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment 95*1d59aa1fSBram Moolenaarsyn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\|optional_callbacks\)\>' contains=erlangComment 969d98fe9cSBram Moolenaarsyn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment 979d98fe9cSBram Moolenaarsyn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment 989d98fe9cSBram Moolenaarsyn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment 999d98fe9cSBram Moolenaarsyn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment 1009d98fe9cSBram Moolenaarsyn match erlangType '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment 101ad3b366cSBram Moolenaar 102ad3b366cSBram Moolenaar" Keywords 103036986f1SBram Moolenaarsyn keyword erlangKeyword after begin case catch cond end fun if let of 104203d04d7SBram Moolenaarsyn keyword erlangKeyword receive when try 105ad3b366cSBram Moolenaar 106203d04d7SBram Moolenaar" Build-in-functions (BIFs) 107203d04d7SBram Moolenaarsyn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained 108203d04d7SBram Moolenaarsyn keyword erlangBIF binary_part binary_to_atom contained 109203d04d7SBram Moolenaarsyn keyword erlangBIF binary_to_existing_atom binary_to_float contained 110203d04d7SBram Moolenaarsyn keyword erlangBIF binary_to_integer bitstring_to_list contained 111203d04d7SBram Moolenaarsyn keyword erlangBIF binary_to_list binary_to_term bit_size contained 112203d04d7SBram Moolenaarsyn keyword erlangBIF byte_size check_old_code check_process_code contained 113203d04d7SBram Moolenaarsyn keyword erlangBIF concat_binary date delete_module demonitor contained 114203d04d7SBram Moolenaarsyn keyword erlangBIF disconnect_node element erase error exit contained 115203d04d7SBram Moolenaarsyn keyword erlangBIF float float_to_binary float_to_list contained 116203d04d7SBram Moolenaarsyn keyword erlangBIF garbage_collect get get_keys group_leader contained 117203d04d7SBram Moolenaarsyn keyword erlangBIF halt hd integer_to_binary integer_to_list contained 118203d04d7SBram Moolenaarsyn keyword erlangBIF iolist_to_binary iolist_size is_alive contained 119203d04d7SBram Moolenaarsyn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained 1205ef1c6a4SBram Moolenaarsyn keyword erlangBIF is_float is_function is_integer is_list is_map is_map_key contained 121203d04d7SBram Moolenaarsyn keyword erlangBIF is_number is_pid is_port is_process_alive contained 122203d04d7SBram Moolenaarsyn keyword erlangBIF is_record is_reference is_tuple length link contained 123203d04d7SBram Moolenaarsyn keyword erlangBIF list_to_atom list_to_binary contained 124203d04d7SBram Moolenaarsyn keyword erlangBIF list_to_bitstring list_to_existing_atom contained 125203d04d7SBram Moolenaarsyn keyword erlangBIF list_to_float list_to_integer list_to_pid contained 1265ef1c6a4SBram Moolenaarsyn keyword erlangBIF list_to_tuple load_module make_ref map_size max contained 1275ef1c6a4SBram Moolenaarsyn keyword erlangBIF min module_loaded monitor monitor_node node contained 128203d04d7SBram Moolenaarsyn keyword erlangBIF nodes now open_port pid_to_list port_close contained 129203d04d7SBram Moolenaarsyn keyword erlangBIF port_command port_connect pre_loaded contained 130203d04d7SBram Moolenaarsyn keyword erlangBIF process_flag process_flag process_info contained 131203d04d7SBram Moolenaarsyn keyword erlangBIF process purge_module put register registered contained 132203d04d7SBram Moolenaarsyn keyword erlangBIF round self setelement size spawn spawn_link contained 133203d04d7SBram Moolenaarsyn keyword erlangBIF spawn_monitor spawn_opt split_binary contained 134203d04d7SBram Moolenaarsyn keyword erlangBIF statistics term_to_binary throw time tl contained 135203d04d7SBram Moolenaarsyn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained 136203d04d7SBram Moolenaarsyn keyword erlangBIF unregister whereis contained 137ad3b366cSBram Moolenaar 138ad3b366cSBram Moolenaar" Sync at the beginning of functions: if this is not used, multiline string 139203d04d7SBram Moolenaar" are not always recognized, and the indentation script cannot use the 140203d04d7SBram Moolenaar" "searchpair" (because it would not always skip strings and comments when 141203d04d7SBram Moolenaar" looking for keywords and opening parens/brackets). 142ad3b366cSBram Moolenaarsyn sync match erlangSync grouphere NONE "^[a-z]\s*(" 143203d04d7SBram Moolenaarlet b:erlang_syntax_synced = 1 144ad3b366cSBram Moolenaar 145203d04d7SBram Moolenaar" Define the default highlighting. See ":help group-name" for the groups and 146203d04d7SBram Moolenaar" their colors. 147203d04d7SBram Moolenaar 1489d98fe9cSBram Moolenaarlet s:old_style = (exists("g:erlang_old_style_highlight") && 1499d98fe9cSBram Moolenaar \g:erlang_old_style_highlight == 1) 150203d04d7SBram Moolenaar 151ad3b366cSBram Moolenaar 152203d04d7SBram Moolenaar" Comments 153f37506f6SBram Moolenaarhi def link erlangComment Comment 154f37506f6SBram Moolenaarhi def link erlangCommentAnnotation Special 155f37506f6SBram Moolenaarhi def link erlangTodo Todo 156f37506f6SBram Moolenaarhi def link erlangShebang Comment 157ad3b366cSBram Moolenaar 158203d04d7SBram Moolenaar" Numbers 159f37506f6SBram Moolenaarhi def link erlangNumberInteger Number 160f37506f6SBram Moolenaarhi def link erlangNumberFloat Float 161ad3b366cSBram Moolenaar 162203d04d7SBram Moolenaar" Strings, atoms, characters 163f37506f6SBram Moolenaarhi def link erlangString String 164203d04d7SBram Moolenaar 165203d04d7SBram Moolenaarif s:old_style 166f37506f6SBram Moolenaarhi def link erlangQuotedAtom Type 167203d04d7SBram Moolenaarelse 168f37506f6SBram Moolenaarhi def link erlangQuotedAtom String 169203d04d7SBram Moolenaarendif 170203d04d7SBram Moolenaar 171f37506f6SBram Moolenaarhi def link erlangStringModifier Special 172f37506f6SBram Moolenaarhi def link erlangQuotedAtomModifier Special 173f37506f6SBram Moolenaarhi def link erlangModifier Special 174ad3b366cSBram Moolenaar 175203d04d7SBram Moolenaar" Operators, separators 176f37506f6SBram Moolenaarhi def link erlangOperator Operator 177f37506f6SBram Moolenaarhi def link erlangRightArrow Operator 178203d04d7SBram Moolenaarif s:old_style 179f37506f6SBram Moolenaarhi def link erlangBracket Normal 180f37506f6SBram Moolenaarhi def link erlangPipe Normal 181203d04d7SBram Moolenaarelse 182f37506f6SBram Moolenaarhi def link erlangBracket Delimiter 183f37506f6SBram Moolenaarhi def link erlangPipe Delimiter 184203d04d7SBram Moolenaarendif 185203d04d7SBram Moolenaar 186203d04d7SBram Moolenaar" Atoms, functions, variables, macros 187203d04d7SBram Moolenaarif s:old_style 188f37506f6SBram Moolenaarhi def link erlangAtom Normal 189f37506f6SBram Moolenaarhi def link erlangLocalFuncCall Normal 190f37506f6SBram Moolenaarhi def link erlangLocalFuncRef Normal 191f37506f6SBram Moolenaarhi def link erlangGlobalFuncCall Function 192f37506f6SBram Moolenaarhi def link erlangGlobalFuncRef Function 193f37506f6SBram Moolenaarhi def link erlangVariable Normal 194f37506f6SBram Moolenaarhi def link erlangMacro Normal 1955ef1c6a4SBram Moolenaarhi def link erlangQuotedMacro Normal 196f37506f6SBram Moolenaarhi def link erlangRecord Normal 197036986f1SBram Moolenaarhi def link erlangQuotedRecord Normal 198036986f1SBram Moolenaarhi def link erlangMap Normal 199203d04d7SBram Moolenaarelse 200f37506f6SBram Moolenaarhi def link erlangAtom String 201f37506f6SBram Moolenaarhi def link erlangLocalFuncCall Normal 202f37506f6SBram Moolenaarhi def link erlangLocalFuncRef Normal 203f37506f6SBram Moolenaarhi def link erlangGlobalFuncCall Normal 204f37506f6SBram Moolenaarhi def link erlangGlobalFuncRef Normal 205f37506f6SBram Moolenaarhi def link erlangVariable Identifier 206f37506f6SBram Moolenaarhi def link erlangMacro Macro 2075ef1c6a4SBram Moolenaarhi def link erlangQuotedMacro Macro 208f37506f6SBram Moolenaarhi def link erlangRecord Structure 209036986f1SBram Moolenaarhi def link erlangQuotedRecord Structure 210036986f1SBram Moolenaarhi def link erlangMap Structure 211203d04d7SBram Moolenaarendif 212203d04d7SBram Moolenaar 213203d04d7SBram Moolenaar" Bitstrings 214203d04d7SBram Moolenaarif !s:old_style 215f37506f6SBram Moolenaarhi def link erlangBitType Type 216203d04d7SBram Moolenaarendif 217203d04d7SBram Moolenaar 218203d04d7SBram Moolenaar" Constants and Directives 219203d04d7SBram Moolenaarif s:old_style 220f37506f6SBram Moolenaarhi def link erlangAttribute Type 221f37506f6SBram Moolenaarhi def link erlangMacroDef Type 222f37506f6SBram Moolenaarhi def link erlangUnknownAttribute Normal 223f37506f6SBram Moolenaarhi def link erlangInclude Type 224f37506f6SBram Moolenaarhi def link erlangRecordDef Type 225f37506f6SBram Moolenaarhi def link erlangDefine Type 226f37506f6SBram Moolenaarhi def link erlangPreCondit Type 227f37506f6SBram Moolenaarhi def link erlangType Type 228203d04d7SBram Moolenaarelse 229f37506f6SBram Moolenaarhi def link erlangAttribute Keyword 230f37506f6SBram Moolenaarhi def link erlangMacroDef Macro 231f37506f6SBram Moolenaarhi def link erlangUnknownAttribute Normal 232f37506f6SBram Moolenaarhi def link erlangInclude Include 233f37506f6SBram Moolenaarhi def link erlangRecordDef Keyword 234f37506f6SBram Moolenaarhi def link erlangDefine Define 235f37506f6SBram Moolenaarhi def link erlangPreCondit PreCondit 236f37506f6SBram Moolenaarhi def link erlangType Type 237203d04d7SBram Moolenaarendif 238203d04d7SBram Moolenaar 239203d04d7SBram Moolenaar" Keywords 240f37506f6SBram Moolenaarhi def link erlangKeyword Keyword 241203d04d7SBram Moolenaar 242203d04d7SBram Moolenaar" Build-in-functions (BIFs) 243f37506f6SBram Moolenaarhi def link erlangBIF Function 244ad3b366cSBram Moolenaar 245203d04d7SBram Moolenaarif s:old_style 246f37506f6SBram Moolenaarhi def link erlangBoolean Statement 247f37506f6SBram Moolenaarhi def link erlangExtra Statement 248f37506f6SBram Moolenaarhi def link erlangSignal Statement 249203d04d7SBram Moolenaarelse 250f37506f6SBram Moolenaarhi def link erlangBoolean Boolean 251f37506f6SBram Moolenaarhi def link erlangExtra Statement 252f37506f6SBram Moolenaarhi def link erlangSignal Statement 253203d04d7SBram Moolenaarendif 254ad3b366cSBram Moolenaar 255ad3b366cSBram Moolenaar 256ad3b366cSBram Moolenaarlet b:current_syntax = "erlang" 257ad3b366cSBram Moolenaar 2589d98fe9cSBram Moolenaarlet &cpo = s:cpo_save 2599d98fe9cSBram Moolenaarunlet s:cpo_save 2609d98fe9cSBram Moolenaar 261ad3b366cSBram Moolenaar" vim: sw=2 et 262