diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-06-06 21:36:40 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-06-06 21:36:40 +0200 |
commit | 203d04d76413fb46ada3feb73144f3172b1a9e05 (patch) | |
tree | f21c19b07ab9f7f327d2ba4e3df7fbc58cd6d737 /runtime/syntax/erlang.vim | |
parent | 4cd92d5aae72098baed6e630f548c92dbe54c448 (diff) | |
download | vim-203d04d76413fb46ada3feb73144f3172b1a9e05.zip |
Updated runtime files.
Diffstat (limited to 'runtime/syntax/erlang.vim')
-rw-r--r-- | runtime/syntax/erlang.vim | 297 |
1 files changed, 190 insertions, 107 deletions
diff --git a/runtime/syntax/erlang.vim b/runtime/syntax/erlang.vim index f34a004df..5eb61440c 100644 --- a/runtime/syntax/erlang.vim +++ b/runtime/syntax/erlang.vim @@ -1,23 +1,32 @@ " Vim syntax file " Language: Erlang (http://www.erlang.org) " Maintainer: Csaba Hoch <csaba.hoch@gmail.com> -" Former Maintainer: Kreąimir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr> -" Last Update: 2013-Mar-07 +" Last Update: 2013-Jun-01 " License: Vim license " URL: https://github.com/hcs42/vim-erlang +" Acknowledgements: This script was originally created by Kresimir Marzic [1]. +" The script was then revamped by Csaba Hoch [2]. During the revamp, the new +" highlighting style and some code was taken from the Erlang syntax script +" that is part of vimerl [3], created by Oscar Hellström [4] and improved by +" Ricardo Catalinas Jiménez [5]. + +" [1]: Kreąimir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr> +" [2]: Csaba Hoch <csaba.hoch@gmail.com> +" [3]: https://github.com/jimenezrick/vimerl +" [4]: Oscar Hellström <oscar@oscarh.net> (http://oscar.hellstrom.st) +" [5]: Ricardo Catalinas Jiménez <jimenezrick@gmail.com> + " Customization: " -" There are two optional sets of highlighting: -" -" 1. The BIFs (built-in functions) are highlighted by default. To disable -" this, put the following line in your vimrc: +" To use the old highlighting style, add this to your .vimrc: " -" let g:erlang_highlight_bifs = 0 +" let g:erlang_old_style_highlight = 1 " -" 2. To enable highlighting some special atoms, put this in your vimrc: +" To highlight further module attributes, add them to +" ~/.vim/after/syntax/erlang.vim: " -" let g:erlang_highlight_special_atoms = 1 +" syn keyword erlangAttribute myattr1 myattr2 contained " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded @@ -35,94 +44,108 @@ if version >= 600 endif " Comments -syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo -syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained -syn match erlangCommentAnnotation /`[^']*'/ contained -syn keyword erlangTodo TODO FIXME XXX contained +syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo +syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained +syn match erlangCommentAnnotation /`[^']*'/ contained +syn keyword erlangTodo TODO FIXME XXX contained +syn match erlangShebang '^#!.*' " Numbers (minimum base is 2, maximum is 36.) -syn match erlangNumberInteger '\<\d\+\>' -syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>' -syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>' +syn match erlangNumberInteger '\<\d\+\>' +syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>' +syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>' " Strings, atoms, characters -syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier -syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier -syn match erlangStringModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained -syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained -syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' - -" Operators -syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' -syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse - -" Separators -syn match erlangSeparator '(\|)\|{\|}\|\[\|]\||\|||\|;\|,\|?\|#' -syn match erlangRightArrow '->' - -" Functions call -syn match erlangFCall '\<\%(\a[[:alnum:]@]*\s*\.\s*\)*\a[[:alnum:]@]*\s*:\s*\a[[:alnum:]@]*\>' +syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier +syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier +syn match erlangStringModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained +syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained +syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' + +" Operators, separators +syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' +syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse +syn match erlangBracket '{\|}\|\[\|]\||\|||' +syn match erlangPipe '|' +syn match erlangRightArrow '->' + +" Atoms, function calls (order is important) +syn match erlangAtom '\<\l[[:alnum:]_@]*' contains=erlangBoolean +syn keyword erlangBoolean true false contained +syn match erlangLocalFuncCall '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF +syn match erlangLocalFuncRef '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' +syn 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 +syn 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 + +" Variables, macros, records +syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*' +syn match erlangMacro '??\=[[:alnum:]_@]\+' +syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+' +syn match erlangRecord '#\s*\l[[:alnum:]_@]*' + +" Bitstrings +syn 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 " Constants and Directives -syn match erlangDirective '-\%(behaviour\|behavior\|compile\|define\|else\|endif\|export\|file\|ifdef\|ifndef\|import\|include_lib\|include\|module\|record\|undef\|author\|copyright\|doc\|vsn\|on_load\|export_type\)\>' +syn match erlangUnknownAttribute '-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment +syn match erlangAttribute '-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\|export_type\)' contains=erlangComment +syn match erlangInclude '-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment +syn match erlangRecordDef '-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment +syn match erlangDefine '-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment +syn match erlangPreCondit '-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment +syn match erlangType '-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment " Keywords -syn keyword erlangKeyword after begin case catch cond end fun if let of query receive when try -syn keyword erlangExtra true false - - -if !exists("g:erlang_highlight_bifs") || g:erlang_highlight_bifs == 1 - - " build-in-functions (BIFs) - syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list binary_part binary_to_atom binary_to_existing_atom binary_to_float binary_to_integer bitstring_to_list binary_to_list binary_to_term bit_size byte_size check_old_code check_process_code concat_binary date delete_module demonitor disconnect_node element erase error exit float float_to_binary float_to_list garbage_collect get get_keys group_leader halt hd integer_to_binary integer_to_list iolist_to_binary iolist_size 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 pre_loaded process_flag process_flag process_info process purge_module put register registered round self setelement size spawn spawn_link spawn_monitor spawn_opt split_binary statistics term_to_binary throw time tl trunc tuple_size tuple_to_list unlink unregister whereis - -endif - - -if exists("g:erlang_highlight_special_atoms") && g:erlang_highlight_special_atoms == 1 - - " Processes - syn keyword erlangProcess creation current_function dictionary - syn keyword erlangProcess group_leader heap_size high initial_call - syn keyword erlangProcess linked low memory_in_use message_queue - syn keyword erlangProcess net_kernel node normal priority - syn keyword erlangProcess reductions registered_name runnable - syn keyword erlangProcess running stack_trace status timer - syn keyword erlangProcess trap_exit waiting - - " Ports - syn keyword erlangPort command count_in count_out creation in - syn keyword erlangPort in_format linked node out owner packeting - - " Nodes - syn keyword erlangNode atom_tables communicating creation - syn keyword erlangNode current_gc current_reductions current_runtime - syn keyword erlangNode current_wall_clock distribution_port - syn keyword erlangNode entry_points error_handler friends - syn keyword erlangNode garbage_collection magic_cookie magic_cookies - syn keyword erlangNode module_table monitored_nodes name next_ref - syn keyword erlangNode ports preloaded processes reductions - syn keyword erlangNode ref_state registry runtime wall_clock - - " Reserved - syn keyword erlangReserved apply_lambda module_info module_lambdas - syn keyword erlangReserved record record_index record_info - - " Extras - syn keyword erlangExtra badarg nocookie - - " Signals - syn keyword erlangSignal badsig kill killed exit normal -endif +syn keyword erlangKeyword after begin case catch cond end fun if let of query +syn keyword erlangKeyword receive when try + +" Build-in-functions (BIFs) +syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained +syn keyword erlangBIF binary_part binary_to_atom contained +syn keyword erlangBIF binary_to_existing_atom binary_to_float contained +syn keyword erlangBIF binary_to_integer bitstring_to_list contained +syn keyword erlangBIF binary_to_list binary_to_term bit_size contained +syn keyword erlangBIF byte_size check_old_code check_process_code contained +syn keyword erlangBIF concat_binary date delete_module demonitor contained +syn keyword erlangBIF disconnect_node element erase error exit contained +syn keyword erlangBIF float float_to_binary float_to_list contained +syn keyword erlangBIF garbage_collect get get_keys group_leader contained +syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained +syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained +syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained +syn keyword erlangBIF is_float is_function is_integer is_list contained +syn keyword erlangBIF is_number is_pid is_port is_process_alive contained +syn keyword erlangBIF is_record is_reference is_tuple length link contained +syn keyword erlangBIF list_to_atom list_to_binary contained +syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained +syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained +syn keyword erlangBIF list_to_tuple load_module make_ref max min contained +syn keyword erlangBIF module_loaded monitor monitor_node node contained +syn keyword erlangBIF nodes now open_port pid_to_list port_close contained +syn keyword erlangBIF port_command port_connect pre_loaded contained +syn keyword erlangBIF process_flag process_flag process_info contained +syn keyword erlangBIF process purge_module put register registered contained +syn keyword erlangBIF round self setelement size spawn spawn_link contained +syn keyword erlangBIF spawn_monitor spawn_opt split_binary contained +syn keyword erlangBIF statistics term_to_binary throw time tl contained +syn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained +syn keyword erlangBIF unregister whereis contained " Sync at the beginning of functions: if this is not used, multiline string -" are not always recognized +" are not always recognized, and the indentation script cannot use the +" "searchpair" (because it would not always skip strings and comments when +" looking for keywords and opening parens/brackets). syn sync match erlangSync grouphere NONE "^[a-z]\s*(" +let b:erlang_syntax_synced = 1 + +" Define the default highlighting. See ":help group-name" for the groups and +" their colors. + +let s:old_style = (exists("g:erlang_old_style_highlight") && g:erlang_old_style_highlight == 1) -" Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet -if version >= 508 || !exists ("did_erlang_inits") +if version >= 508 || !exists("did_erlang_inits") if version < 508 let did_erlang_inits = 1 command -nargs=+ HiLink hi link <args> @@ -130,46 +153,106 @@ if version >= 508 || !exists ("did_erlang_inits") command -nargs=+ HiLink hi def link <args> endif - " erlang_characters + " Comments HiLink erlangComment Comment HiLink erlangCommentAnnotation Special HiLink erlangTodo Todo - HiLink erlangSeparator Normal - HiLink erlangOperator Operator - HiLink erlangRightArrow Operator + HiLink erlangShebang Comment - HiLink erlangStartString String + " Numbers + HiLink erlangNumberInteger Number + HiLink erlangNumberFloat Float + + " Strings, atoms, characters HiLink erlangString String - HiLink erlangStringModifier Special - HiLink erlangStartQuotedAtom Type - HiLink erlangQuotedAtom Type + if s:old_style + HiLink erlangQuotedAtom Type + else + HiLink erlangQuotedAtom String + endif + + HiLink erlangStringModifier Special HiLink erlangQuotedAtomModifier Special + HiLink erlangModifier Special - HiLink erlangNumberInteger Number - HiLink erlangNumberFloat Float - HiLink erlangNumberHex Number + " Operators, separators + HiLink erlangOperator Operator + HiLink erlangRightArrow Operator + if s:old_style + HiLink erlangBracket Normal + HiLink erlangPipe Normal + else + HiLink erlangBracket Delimiter + HiLink erlangPipe Delimiter + endif - HiLink erlangModifier Special + " Atoms, functions, variables, macros + if s:old_style + HiLink erlangAtom Normal + HiLink erlangLocalFuncCall Normal + HiLink erlangLocalFuncRef Normal + HiLink erlangGlobalFuncCall Function + HiLink erlangGlobalFuncRef Function + HiLink erlangVariable Normal + HiLink erlangMacro Normal + HiLink erlangRecord Normal + else + HiLink erlangAtom String + HiLink erlangLocalFuncCall Normal + HiLink erlangLocalFuncRef Normal + HiLink erlangGlobalFuncCall Normal + HiLink erlangGlobalFuncRef Normal + HiLink erlangVariable Identifier + HiLink erlangMacro Macro + HiLink erlangRecord Structure + endif - " erlang_functions - HiLink erlangFCall Function - HiLink erlangBIF Function + " Bitstrings + if !s:old_style + HiLink erlangBitType Type + endif + + " Constants and Directives + if s:old_style + HiLink erlangAttribute Type + HiLink erlangMacroDef Type + HiLink erlangUnknownAttribute Normal + HiLink erlangInclude Type + HiLink erlangRecordDef Type + HiLink erlangDefine Type + HiLink erlangPreCondit Type + HiLink erlangType Type + else + HiLink erlangAttribute Keyword + HiLink erlangMacroDef Macro + HiLink erlangUnknownAttribute Normal + HiLink erlangInclude Include + HiLink erlangRecordDef Keyword + HiLink erlangDefine Define + HiLink erlangPreCondit PreCondit + HiLink erlangType Type + endif - " erlang_keywords - HiLink erlangDirective Type + " Keywords HiLink erlangKeyword Keyword - HiLink erlangProcess Special - HiLink erlangPort Special - HiLink erlangNode Special - HiLink erlangReserved Statement - HiLink erlangExtra Statement - HiLink erlangSignal Statement + + " Build-in-functions (BIFs) + HiLink erlangBIF Function + + if s:old_style + HiLink erlangBoolean Statement + HiLink erlangExtra Statement + HiLink erlangSignal Statement + else + HiLink erlangBoolean Boolean + HiLink erlangExtra Statement + HiLink erlangSignal Statement + endif delcommand HiLink endif - let b:current_syntax = "erlang" " vim: sw=2 et |