Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | ad3b366 | 2013-05-17 18:14:19 +0200 | [diff] [blame] | 2 | " Language: Erlang (http://www.erlang.org) |
| 3 | " Maintainer: Csaba Hoch <csaba.hoch@gmail.com> |
| 4 | " Former Maintainer: Kreąimir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr> |
| 5 | " Last Update: 2013-Mar-07 |
Bram Moolenaar | 6be7f87 | 2012-01-20 21:08:56 +0100 | [diff] [blame] | 6 | " License: Vim license |
Bram Moolenaar | ad3b366 | 2013-05-17 18:14:19 +0200 | [diff] [blame] | 7 | " URL: https://github.com/hcs42/vim-erlang |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 8 | |
Bram Moolenaar | ad3b366 | 2013-05-17 18:14:19 +0200 | [diff] [blame] | 9 | " Customization: |
| 10 | " |
| 11 | " There are two optional sets of highlighting: |
| 12 | " |
| 13 | " 1. The BIFs (built-in functions) are highlighted by default. To disable |
| 14 | " this, put the following line in your vimrc: |
| 15 | " |
| 16 | " let g:erlang_highlight_bifs = 0 |
| 17 | " |
| 18 | " 2. To enable highlighting some special atoms, put this in your vimrc: |
| 19 | " |
| 20 | " let g:erlang_highlight_special_atoms = 1 |
| 21 | |
| 22 | " For version 5.x: Clear all syntax items |
| 23 | " For version 6.x: Quit when a syntax file was already loaded |
| 24 | if version < 600 |
| 25 | syntax clear |
| 26 | elseif exists("b:current_syntax") |
| 27 | finish |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 28 | endif |
| 29 | |
Bram Moolenaar | ad3b366 | 2013-05-17 18:14:19 +0200 | [diff] [blame] | 30 | " Case sensitive |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 31 | syn case match |
| 32 | |
Bram Moolenaar | ad3b366 | 2013-05-17 18:14:19 +0200 | [diff] [blame] | 33 | if version >= 600 |
| 34 | setlocal iskeyword+=$,@-@ |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 35 | endif |
Bram Moolenaar | ad3b366 | 2013-05-17 18:14:19 +0200 | [diff] [blame] | 36 | |
| 37 | " Comments |
| 38 | syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo |
| 39 | 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 |
| 40 | syn match erlangCommentAnnotation /`[^']*'/ contained |
| 41 | syn keyword erlangTodo TODO FIXME XXX contained |
| 42 | |
| 43 | " Numbers (minimum base is 2, maximum is 36.) |
| 44 | syn match erlangNumberInteger '\<\d\+\>' |
| 45 | syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>' |
| 46 | syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>' |
| 47 | |
| 48 | " Strings, atoms, characters |
| 49 | syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier |
| 50 | syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier |
| 51 | syn match erlangStringModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained |
| 52 | syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained |
| 53 | syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' |
| 54 | |
| 55 | " Operators |
| 56 | syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' |
| 57 | syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse |
| 58 | |
| 59 | " Separators |
| 60 | syn match erlangSeparator '(\|)\|{\|}\|\[\|]\||\|||\|;\|,\|?\|#' |
| 61 | syn match erlangRightArrow '->' |
| 62 | |
| 63 | " Functions call |
| 64 | syn match erlangFCall '\<\%(\a[[:alnum:]@]*\s*\.\s*\)*\a[[:alnum:]@]*\s*:\s*\a[[:alnum:]@]*\>' |
| 65 | |
| 66 | " Constants and Directives |
| 67 | 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\)\>' |
| 68 | |
| 69 | " Keywords |
| 70 | syn keyword erlangKeyword after begin case catch cond end fun if let of query receive when try |
| 71 | syn keyword erlangExtra true false |
| 72 | |
| 73 | |
| 74 | if !exists("g:erlang_highlight_bifs") || g:erlang_highlight_bifs == 1 |
| 75 | |
| 76 | " build-in-functions (BIFs) |
| 77 | 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 |
| 78 | |
| 79 | endif |
| 80 | |
| 81 | |
| 82 | if exists("g:erlang_highlight_special_atoms") && g:erlang_highlight_special_atoms == 1 |
| 83 | |
| 84 | " Processes |
| 85 | syn keyword erlangProcess creation current_function dictionary |
| 86 | syn keyword erlangProcess group_leader heap_size high initial_call |
| 87 | syn keyword erlangProcess linked low memory_in_use message_queue |
| 88 | syn keyword erlangProcess net_kernel node normal priority |
| 89 | syn keyword erlangProcess reductions registered_name runnable |
| 90 | syn keyword erlangProcess running stack_trace status timer |
| 91 | syn keyword erlangProcess trap_exit waiting |
| 92 | |
| 93 | " Ports |
| 94 | syn keyword erlangPort command count_in count_out creation in |
| 95 | syn keyword erlangPort in_format linked node out owner packeting |
| 96 | |
| 97 | " Nodes |
| 98 | syn keyword erlangNode atom_tables communicating creation |
| 99 | syn keyword erlangNode current_gc current_reductions current_runtime |
| 100 | syn keyword erlangNode current_wall_clock distribution_port |
| 101 | syn keyword erlangNode entry_points error_handler friends |
| 102 | syn keyword erlangNode garbage_collection magic_cookie magic_cookies |
| 103 | syn keyword erlangNode module_table monitored_nodes name next_ref |
| 104 | syn keyword erlangNode ports preloaded processes reductions |
| 105 | syn keyword erlangNode ref_state registry runtime wall_clock |
| 106 | |
| 107 | " Reserved |
| 108 | syn keyword erlangReserved apply_lambda module_info module_lambdas |
| 109 | syn keyword erlangReserved record record_index record_info |
| 110 | |
| 111 | " Extras |
| 112 | syn keyword erlangExtra badarg nocookie |
| 113 | |
| 114 | " Signals |
| 115 | syn keyword erlangSignal badsig kill killed exit normal |
| 116 | endif |
| 117 | |
| 118 | " Sync at the beginning of functions: if this is not used, multiline string |
| 119 | " are not always recognized |
| 120 | syn sync match erlangSync grouphere NONE "^[a-z]\s*(" |
| 121 | |
| 122 | " Define the default highlighting. |
| 123 | " For version 5.7 and earlier: only when not done already |
| 124 | " For version 5.8 and later: only when an item doesn't have highlighting yet |
| 125 | if version >= 508 || !exists ("did_erlang_inits") |
| 126 | if version < 508 |
| 127 | let did_erlang_inits = 1 |
| 128 | command -nargs=+ HiLink hi link <args> |
| 129 | else |
| 130 | command -nargs=+ HiLink hi def link <args> |
| 131 | endif |
| 132 | |
| 133 | " erlang_characters |
| 134 | HiLink erlangComment Comment |
| 135 | HiLink erlangCommentAnnotation Special |
| 136 | HiLink erlangTodo Todo |
| 137 | HiLink erlangSeparator Normal |
| 138 | HiLink erlangOperator Operator |
| 139 | HiLink erlangRightArrow Operator |
| 140 | |
| 141 | HiLink erlangStartString String |
| 142 | HiLink erlangString String |
| 143 | HiLink erlangStringModifier Special |
| 144 | |
| 145 | HiLink erlangStartQuotedAtom Type |
| 146 | HiLink erlangQuotedAtom Type |
| 147 | HiLink erlangQuotedAtomModifier Special |
| 148 | |
| 149 | HiLink erlangNumberInteger Number |
| 150 | HiLink erlangNumberFloat Float |
| 151 | HiLink erlangNumberHex Number |
| 152 | |
| 153 | HiLink erlangModifier Special |
| 154 | |
| 155 | " erlang_functions |
| 156 | HiLink erlangFCall Function |
| 157 | HiLink erlangBIF Function |
| 158 | |
| 159 | " erlang_keywords |
| 160 | HiLink erlangDirective Type |
| 161 | HiLink erlangKeyword Keyword |
| 162 | HiLink erlangProcess Special |
| 163 | HiLink erlangPort Special |
| 164 | HiLink erlangNode Special |
| 165 | HiLink erlangReserved Statement |
| 166 | HiLink erlangExtra Statement |
| 167 | HiLink erlangSignal Statement |
| 168 | |
| 169 | delcommand HiLink |
| 170 | endif |
| 171 | |
| 172 | |
| 173 | let b:current_syntax = "erlang" |
| 174 | |
| 175 | " vim: sw=2 et |