blob: ece11d724988f2156b1e14d91a04d984d08b8503 [file] [log] [blame]
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001" Vim ftplugin file
2" Language: Erlang
Bram Moolenaarcb80aa22020-10-26 21:12:46 +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
Bram Moolenaar84f72352012-03-11 15:57:40 +010022let s:cpo_save = &cpo
23set cpo&vim
24
Bram Moolenaar6be7f872012-01-20 21:08:56 +010025if !exists('g:erlang_keywordprg')
26 let g:erlang_keywordprg = 'erl -man'
27endif
28
29if !exists('g:erlang_folding')
30 let g:erlang_folding = 0
31endif
32
Bram Moolenaar5dc62522012-02-13 00:05:22 +010033let s:erlang_fun_begin = '^\a\w*(.*$'
34let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
Bram Moolenaar6be7f872012-01-20 21:08:56 +010035
Bram Moolenaar5dc62522012-02-13 00:05:22 +010036function s:SetErlangOptions()
Bram Moolenaar6be7f872012-01-20 21:08:56 +010037 if g:erlang_folding
38 setlocal foldmethod=expr
39 setlocal foldexpr=GetErlangFold(v:lnum)
40 setlocal foldtext=ErlangFoldText()
41 endif
42
43 setlocal comments=:%%%,:%%,:%
44 setlocal commentstring=%%s
45
46 setlocal formatoptions+=ro
47 let &l:keywordprg = g:erlang_keywordprg
48endfunction
49
Bram Moolenaar5dc62522012-02-13 00:05:22 +010050function GetErlangFold(lnum)
51 let lnum = a:lnum
52 let line = getline(lnum)
Bram Moolenaar6be7f872012-01-20 21:08:56 +010053
Bram Moolenaar5dc62522012-02-13 00:05:22 +010054 if line =~ s:erlang_fun_end
55 return '<1'
56 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010057
Bram Moolenaar5dc62522012-02-13 00:05:22 +010058 if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
59 return '1'
60 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010061
Bram Moolenaar5dc62522012-02-13 00:05:22 +010062 if line =~ s:erlang_fun_begin
63 return '>1'
64 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010065
Bram Moolenaar5dc62522012-02-13 00:05:22 +010066 return '='
67endfunction
Bram Moolenaar6be7f872012-01-20 21:08:56 +010068
Bram Moolenaar5dc62522012-02-13 00:05:22 +010069function ErlangFoldText()
70 let line = getline(v:foldstart)
71 let foldlen = v:foldend - v:foldstart + 1
72 let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
73 if foldlen < 10
74 let lines = ' ' . lines
75 endif
76 let retval = '+' . v:folddashes . lines
Bram Moolenaar6be7f872012-01-20 21:08:56 +010077
Bram Moolenaar5dc62522012-02-13 00:05:22 +010078 return retval
79endfunction
Bram Moolenaar6be7f872012-01-20 21:08:56 +010080
81call s:SetErlangOptions()
Bram Moolenaar84f72352012-03-11 15:57:40 +010082
83let b:undo_ftplugin = "setlocal foldmethod< foldexpr< foldtext<"
84 \ . " comments< commentstring< formatoptions<"
85
86let &cpo = s:cpo_save
87unlet s:cpo_save