blob: 9643d16c2885ef456353250ab3ab34d17fb2eba6 [file] [log] [blame]
Bram Moolenaar8c8de832008-06-24 22:58:06 +00001" Vim filetype plugin file (GUI menu and folding)
Bram Moolenaar00a927d2010-05-14 23:24:24 +02002" Language: Debian control files
Bram Moolenaar72540672018-02-09 22:00:53 +01003" Maintainer: Debian Vim Maintainers
Bram Moolenaar00a927d2010-05-14 23:24:24 +02004" Former Maintainer: Pierre Habouzit <madcoder@debian.org>
Bram Moolenaar72540672018-02-09 22:00:53 +01005" Last Change: 2018-01-06
6" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debcontrol.vim
Bram Moolenaar8c8de832008-06-24 22:58:06 +00007
8" Do these settings once per buffer
9if exists("b:did_ftplugin")
10 finish
11endif
12let b:did_ftplugin=1
13
14" {{{1 Local settings (do on every load)
15if exists("g:debcontrol_fold_enable")
16 setlocal foldmethod=expr
17 setlocal foldexpr=DebControlFold(v:lnum)
18 setlocal foldtext=DebControlFoldText()
19endif
20setlocal textwidth=0
21
22" Clean unloading
23let b:undo_ftplugin = "setlocal tw< foldmethod< foldexpr< foldtext<"
24
25" }}}1
26
27" {{{1 folding
28
29function! s:getField(f, lnum)
30 let line = getline(a:lnum)
31 let fwdsteps = 0
32 while line !~ '^'.a:f.':'
33 let fwdsteps += 1
34 let line = getline(a:lnum + fwdsteps)
35 if line == ''
36 return 'unknown'
37 endif
38 endwhile
39 return substitute(line, '^'.a:f.': *', '', '')
40endfunction
41
42function! DebControlFoldText()
43 if v:folddashes == '-' " debcontrol entry fold
44 let type = substitute(getline(v:foldstart), ':.*', '', '')
45 if type == 'Source'
46 let ftext = substitute(foldtext(), ' *Source: *', ' ', '')
47 return ftext . ' -- ' . s:getField('Maintainer', v:foldstart) . ' '
48 endif
49 let arch = s:getField('Architecture', v:foldstart)
50 let ftext = substitute(foldtext(), ' *Package: *', ' [' . arch . '] ', '')
51 return ftext . ': ' . s:getField('Description', v:foldstart) . ' '
52 endif
53 return foldtext()
54endfunction
55
56function! DebControlFold(l)
57
58 " This is for not merging blank lines around folds to them
59 if getline(a:l) =~ '^Source:'
60 return '>1'
61 endif
62
63 if getline(a:l) =~ '^Package:'
64 return '>1'
65 endif
66
67 return '='
68endfunction
69
70" }}}1