summaryrefslogtreecommitdiffstats
path: root/syntax/erlang.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2014-12-11 22:58:14 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2014-12-11 22:58:14 +0100
commit7f2e3663341d725b073857fcd3b2f5868ce85248 (patch)
tree34c4063119045da0824d46b6c1f8fc8fc0b9c2b4 /syntax/erlang.vim
parent04f868b94aad9ef31d3cd1adc526d720808f7837 (diff)
downloadvim-polyglot-7f2e3663341d725b073857fcd3b2f5868ce85248.tar.gz
vim-polyglot-7f2e3663341d725b073857fcd3b2f5868ce85248.zip
Change erlang provider to hcs42/vim-erlang-runtime
Diffstat (limited to 'syntax/erlang.vim')
-rw-r--r--syntax/erlang.vim376
1 files changed, 255 insertions, 121 deletions
diff --git a/syntax/erlang.vim b/syntax/erlang.vim
index 8b6ad624..7f883559 100644
--- a/syntax/erlang.vim
+++ b/syntax/erlang.vim
@@ -1,137 +1,271 @@
" Vim syntax file
-" Language: Erlang
-" Maintainer: Oscar Hellström <oscar@oscarh.net>
-" URL: http://oscar.hellstrom.st
-" Version: 2010-08-09
-" ------------------------------------------------------------------------------
-" {{{1
-" Options:
+" Language: Erlang (http://www.erlang.org)
+" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
+" Contributor: Adam Rutkowski <hq@mtod.org>
+" Last Update: 2013-Nov-23
+" 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:
+"
+" To use the old highlighting style, add this to your .vimrc:
+"
+" let g:erlang_old_style_highlight = 1
"
-" Erlang BIFs
-" g:erlangHighlightBif - highlight erlang built in functions (default: off)
+" To highlight further module attributes, add them to
+" ~/.vim/after/syntax/erlang.vim:
"
-" }}}
-" -----------------------------------------------------------------------------
+" syn keyword erlangAttribute myattr1 myattr2 contained
-" Setup {{{1
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
- syntax clear
+ syntax clear
elseif exists("b:current_syntax")
- finish
+ finish
endif
-" Erlang is case sensitive
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Case sensitive
syn case match
-" Match groups {{{1
-syn match erlangStringModifier /\\./ contained
-syn match erlangStringModifier /\~\%(-\?[0-9*]\+\)\?\%(\.[0-9*]\+\..\?\)\?\%(c\|f\|e\|g\|s\|w\|p\|W\|P\|B\|X\|#\|b\|+\|n\|i\)/ contained
-syn match erlangModifier /\$\\\?./
-
-syn match erlangInteger /\<\%([0-9]\+#[0-9a-fA-F]\+\|[0-9]\+\)\>/
-syn match erlangFloat /\<[0-9]\+\.[0-9]\+\%(e-\?[0-9]\+\)\?\>/
-
-syn keyword erlangTodo TODO FIXME XXX contained
-syn match erlangComment /%.*$/ contains=@Spell,erlangTodo
-
-syn keyword erlangKeyword band bor bnot bsl bsr bxor div rem xor
-syn keyword erlangKeyword try catch begin receive after cond fun let query
-
-syn keyword erlangConditional case if of end
-syn keyword erlangConditional not and or andalso orelse
-syn keyword erlangConditional when
-
-syn keyword erlangBoolean true false
-
-syn 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
-
-syn match erlangOperator /\/\|*\|+\|-\|++\|--/
-syn match erlangOperator /->\|<-\|||\||\|!\|=/
-syn match erlangOperator /=:=\|==\|\/=\|=\/=\|<\|>\|=<\|>=/
-syn keyword erlangOperator div rem
-
-syn region erlangString start=/"/ end=/"/ skip=/\\/ contains=@Spell,erlangStringModifier
-
-syn match erlangVariable /\<[A-Z_]\w*\>/
-syn match erlangAtom /\%(\%(^-\)\|#\)\@<!\<[a-z][A-Za-z0-9_]*\>\%(\s*[(:]\)\@!/
-syn match erlangAtom /\\\@<!'[^']*\\\@<!'/
-
-syn match erlangRecord /#\w\+/
-
-syn match erlangTuple /{\|}/
-syn match erlangList /\[\|\]/
-
- syn match erlangAttribute /^-\%(vsn\|author\|copyright\|compile\|deprecated\|module\|export\|import\|behaviour\|export_type\|ignore_xref\) *(\@=/
-syn match erlangInclude /^-include\%(_lib\)\?\s*(\@=/
-syn match erlangRecordDef /^-record\s*(\@=/
-syn match erlangDefine /^-\%(define\|undef\)\s*(\@=/
-syn match erlangPreCondit /^-\%(ifdef\|ifndef\|else\|endif\)\%(\s*(\@=\)\?/
-
-syn match erlangType /^-\%(spec\|type\)[( ]\@=/
-
-syn match erlangMacro /\%(-define(\)\@<=\w\+/
-syn match erlangMacro /?\w\+/
-
-syn match erlangBitType /\%(\/\|-\)\@<=\%(bits\|bitstring\|binary\|integer\|float\|unit\)\>/
-syn match erlangBitSize /:\@<=[0-9]\+/
-
-syn match erlangBinary /<<\|>>/
-
-" BIFS
-syn match erlangBIF /\%([^:0-9A-Za-z_]\|\<erlang:\)\@<=\%(abs\|apply\|atom_to_list\|binary_part\|binary_to_list\|binary_to_term\|binary_to_atom\|binary_to_existing_atom\|bitstring_to_list\|check_process_code\|concat_binary\|date\|delete_module\|disconnect_node\|element\|erase\|error\|exit\|float\|float_to_list\|garbage_collect\|get\|get_keys\|group_leader\|halt\|hd\|integer_to_list\|iolist_to_binary\|iolist_size\|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\|monitor_node\|node\|nodes\|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\|bit_size\|byte_size\|spawn\|spawn_link\|spawn_opt\|split_binary\|statistics\|term_to_binary\|throw\|time\|tl\|trunc\|tuple_to_list\|unlink\|unregister\|whereis\)\((\|\/[0-9]\)\@=/
-syn match erlangBIF /\<\%(erlang:\)\@<=\%(append_element\|bump_reductions\|cancel_timer\|decode_packet\|demonitor\|display\|fault\|fun_info\|fun_to_list\|function_exported\|get_cookie\|get_stacktrace\|hash\|hibernate\|info\|is_builtin\|loaded\|localtime\|localtime_to_universaltime\|localtime_to_universaltime\|make_tuple\|md5\|md5_init\|md5_update\|memory\|monitor\|monitor_node\|phash\|phash2\|port_call\|port_info\|port_to_list\|ports\|process_display\|raise\|read_timer\|ref_to_list\|resume_process\|send\|send_after\|send_nosuspend\|set_cookie\|spawn_monitor\|start_timer\|suspend_process\|system_flag\|system_info\|system_monitor\|trace\|trace_delivered\|trace_info\|trace_pattern\|universaltime\|universaltime_to_localtime\|yield\)(\@=/
-syn match erlangGBIF /erlang\(:\w\)\@=/
-" }}}
-
-" Link Erlang stuff to Vim groups {{{1
-hi link erlangTodo Todo
-hi link erlangString String
-hi link erlangNoSpellString String
-hi link erlangModifier SpecialChar
-hi link erlangStringModifier SpecialChar
-hi link erlangComment Comment
-hi link erlangVariable Identifier
-hi link erlangInclude Include
-hi link erlangRecordDef Keyword
-hi link erlangAttribute Keyword
-hi link erlangKeyword Keyword
-hi link erlangMacro Macro
-hi link erlangDefine Define
-hi link erlangPreCondit PreCondit
-hi link erlangPreProc PreProc
-hi link erlangDelimiter Delimiter
-hi link erlangBitDelimiter Normal
-hi link erlangOperator Operator
-hi link erlangConditional Conditional
-hi link erlangGuard Conditional
-hi link erlangBoolean Boolean
-hi link erlangAtom Constant
-hi link erlangRecord Structure
-hi link erlangInteger Number
-hi link erlangFloat Number
-hi link erlangFloat Number
-hi link erlangFloat Number
-hi link erlangFloat Number
-hi link erlangHex Number
-hi link erlangBIF Keyword
-hi link erlangFun Keyword
-hi link erlangList Delimiter
-hi link erlangTuple Delimiter
-hi link erlangBinary Keyword
-hi link erlangBitVariable Identifier
-hi link erlangBitType Type
-hi link erlangType Type
-hi link erlangBitSize Number
-" }}}
-
-" Optional linkings {{{1
-if exists("g:erlangHighlightBif") && g:erlangHighlightBif
- hi link erlangGBIF Keyword
+if version >= 600
+ setlocal iskeyword+=$,@-@
+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
+
+" 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\+\)\=\>'
+
+" Strings, atoms, characters
+syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier
+syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier
+syn match erlangStringModifier '\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\|\~\%([ni~]\|\%(-\=\d\+\|\*\)\=\.\=\%(\*\|\d\+\)\=\%(\..\)\=[tl]*[cfegswpWPBX#bx+]\)' contained
+syn match erlangQuotedAtomModifier '\\\%(\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, maps
+syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*'
+syn match erlangMacro '??\=[[:alnum:]_@]\+'
+syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+'
+syn match erlangMap '#'
+syn match erlangRecord '#\s*\l[[:alnum:]_@]*'
+
+" Shebang (this line has to be after the ErlangMap)
+syn match erlangShebang '^#!.*'
+
+" 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 erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment
+syn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\)\>' contains=erlangComment
+syn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment
+syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment
+syn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment
+syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment
+syn match erlangType '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment
+
+" Keywords
+syn keyword erlangKeyword after begin case catch cond end fun if let of
+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, 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)
+
+" 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
+ let did_erlang_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " Comments
+ HiLink erlangComment Comment
+ HiLink erlangCommentAnnotation Special
+ HiLink erlangTodo Todo
+ HiLink erlangShebang Comment
+
+ " Numbers
+ HiLink erlangNumberInteger Number
+ HiLink erlangNumberFloat Float
+
+ " Strings, atoms, characters
+ HiLink erlangString String
+
+ if s:old_style
+ HiLink erlangQuotedAtom Type
+ else
+ HiLink erlangQuotedAtom String
+ endif
+
+ HiLink erlangStringModifier Special
+ HiLink erlangQuotedAtomModifier Special
+ HiLink erlangModifier Special
+
+ " 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
+
+ " 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
+ HiLink erlangMap 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
+ HiLink erlangMap Structure
+ endif
+
+ " 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
+
+ " Keywords
+ HiLink erlangKeyword Keyword
+
+ " 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: set foldmethod=marker:
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: sw=2 et