blob: af4e910b254d0023e2db2ca9db40d5b7ef17f446 [file] [log] [blame]
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001" Vim ftplugin file
2" Language: Erlang
Bram Moolenaar5dc62522012-02-13 00:05:22 +01003" Author: Oscar Hellström <oscar@oscarh.net>
4" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
Bram Moolenaar6be7f872012-01-20 21:08:56 +01005" Eduardo Lopez (http://github.com/tapichu)
6" License: Vim license
Bram Moolenaar5dc62522012-02-13 00:05:22 +01007" Version: 2012/01/25
Bram Moolenaar6be7f872012-01-20 21:08:56 +01008
9if exists('b:did_ftplugin')
10 finish
11else
12 let b:did_ftplugin = 1
13endif
14
15if exists('s:did_function_definitions')
16 call s:SetErlangOptions()
17 finish
18else
19 let s:did_function_definitions = 1
20endif
21
22if !exists('g:erlang_keywordprg')
23 let g:erlang_keywordprg = 'erl -man'
24endif
25
26if !exists('g:erlang_folding')
27 let g:erlang_folding = 0
28endif
29
Bram Moolenaar5dc62522012-02-13 00:05:22 +010030let s:erlang_fun_begin = '^\a\w*(.*$'
31let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
Bram Moolenaar6be7f872012-01-20 21:08:56 +010032
Bram Moolenaar5dc62522012-02-13 00:05:22 +010033function s:SetErlangOptions()
Bram Moolenaar6be7f872012-01-20 21:08:56 +010034 if g:erlang_folding
35 setlocal foldmethod=expr
36 setlocal foldexpr=GetErlangFold(v:lnum)
37 setlocal foldtext=ErlangFoldText()
38 endif
39
40 setlocal comments=:%%%,:%%,:%
41 setlocal commentstring=%%s
42
43 setlocal formatoptions+=ro
44 let &l:keywordprg = g:erlang_keywordprg
45endfunction
46
Bram Moolenaar5dc62522012-02-13 00:05:22 +010047function GetErlangFold(lnum)
48 let lnum = a:lnum
49 let line = getline(lnum)
Bram Moolenaar6be7f872012-01-20 21:08:56 +010050
Bram Moolenaar5dc62522012-02-13 00:05:22 +010051 if line =~ s:erlang_fun_end
52 return '<1'
53 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010054
Bram Moolenaar5dc62522012-02-13 00:05:22 +010055 if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
56 return '1'
57 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010058
Bram Moolenaar5dc62522012-02-13 00:05:22 +010059 if line =~ s:erlang_fun_begin
60 return '>1'
61 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010062
Bram Moolenaar5dc62522012-02-13 00:05:22 +010063 return '='
64endfunction
Bram Moolenaar6be7f872012-01-20 21:08:56 +010065
Bram Moolenaar5dc62522012-02-13 00:05:22 +010066function ErlangFoldText()
67 let line = getline(v:foldstart)
68 let foldlen = v:foldend - v:foldstart + 1
69 let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
70 if foldlen < 10
71 let lines = ' ' . lines
72 endif
73 let retval = '+' . v:folddashes . lines
Bram Moolenaar6be7f872012-01-20 21:08:56 +010074
Bram Moolenaar5dc62522012-02-13 00:05:22 +010075 return retval
76endfunction
Bram Moolenaar6be7f872012-01-20 21:08:56 +010077
78call s:SetErlangOptions()