blob: 5b8292ba6ec6779713c5c5851a0ae465db881429 [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>
James McCoy0076ddc2024-05-25 14:56:49 -04005" Last Change: 2024 May 25
Bram Moolenaarbe4e0162023-02-02 13:59:48 +00006" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/ftplugin/debcontrol.vim
Bram Moolenaar8c8de832008-06-24 22:58:06 +00007
8" Do these settings once per buffer
Bram Moolenaar85eee132018-05-06 17:57:30 +02009if exists('b:did_ftplugin')
Bram Moolenaar8c8de832008-06-24 22:58:06 +000010 finish
11endif
12let b:did_ftplugin=1
13
14" {{{1 Local settings (do on every load)
Bram Moolenaar85eee132018-05-06 17:57:30 +020015if exists('g:debcontrol_fold_enable')
Bram Moolenaar8c8de832008-06-24 22:58:06 +000016 setlocal foldmethod=expr
17 setlocal foldexpr=DebControlFold(v:lnum)
18 setlocal foldtext=DebControlFoldText()
19endif
20setlocal textwidth=0
21
James McCoy0076ddc2024-05-25 14:56:49 -040022setlocal comments=:#
23setlocal commentstring=#\ %s
24
Bram Moolenaar8c8de832008-06-24 22:58:06 +000025" Clean unloading
James McCoy0076ddc2024-05-25 14:56:49 -040026let b:undo_ftplugin = 'setlocal tw< foldmethod< foldexpr< foldtext< comments< commentstring<'
Bram Moolenaar8c8de832008-06-24 22:58:06 +000027
28" }}}1
29
30" {{{1 folding
31
32function! s:getField(f, lnum)
33 let line = getline(a:lnum)
34 let fwdsteps = 0
35 while line !~ '^'.a:f.':'
36 let fwdsteps += 1
37 let line = getline(a:lnum + fwdsteps)
Bram Moolenaar85eee132018-05-06 17:57:30 +020038 if line ==# ''
Bram Moolenaar8c8de832008-06-24 22:58:06 +000039 return 'unknown'
40 endif
41 endwhile
42 return substitute(line, '^'.a:f.': *', '', '')
43endfunction
44
45function! DebControlFoldText()
Bram Moolenaar85eee132018-05-06 17:57:30 +020046 if v:folddashes ==# '-' " debcontrol entry fold
Bram Moolenaar8c8de832008-06-24 22:58:06 +000047 let type = substitute(getline(v:foldstart), ':.*', '', '')
Bram Moolenaar85eee132018-05-06 17:57:30 +020048 if type ==# 'Source'
Bram Moolenaar8c8de832008-06-24 22:58:06 +000049 let ftext = substitute(foldtext(), ' *Source: *', ' ', '')
50 return ftext . ' -- ' . s:getField('Maintainer', v:foldstart) . ' '
51 endif
52 let arch = s:getField('Architecture', v:foldstart)
53 let ftext = substitute(foldtext(), ' *Package: *', ' [' . arch . '] ', '')
54 return ftext . ': ' . s:getField('Description', v:foldstart) . ' '
55 endif
56 return foldtext()
57endfunction
58
59function! DebControlFold(l)
60
61 " This is for not merging blank lines around folds to them
Bram Moolenaar85eee132018-05-06 17:57:30 +020062 if getline(a:l) =~# '^Source:'
Bram Moolenaar8c8de832008-06-24 22:58:06 +000063 return '>1'
64 endif
65
Bram Moolenaar85eee132018-05-06 17:57:30 +020066 if getline(a:l) =~# '^Package:'
Bram Moolenaar8c8de832008-06-24 22:58:06 +000067 return '>1'
68 endif
69
70 return '='
71endfunction
72
73" }}}1