18c8de839SBram Moolenaar" Vim filetype plugin file (GUI menu and folding) 28c8de839SBram Moolenaar" Language: Debian control files 37254067eSBram Moolenaar" Maintainer: Debian Vim Maintainers 48c8de839SBram Moolenaar" Former Maintainer: Pierre Habouzit <[email protected]> 5*85eee130SBram Moolenaar" Last Change: 2018-01-28 67254067eSBram Moolenaar" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debcontrol.vim 78c8de839SBram Moolenaar 88c8de839SBram Moolenaar" Do these settings once per buffer 9*85eee130SBram Moolenaarif exists('b:did_ftplugin') 108c8de839SBram Moolenaar finish 118c8de839SBram Moolenaarendif 128c8de839SBram Moolenaarlet b:did_ftplugin=1 138c8de839SBram Moolenaar 148c8de839SBram Moolenaar" {{{1 Local settings (do on every load) 15*85eee130SBram Moolenaarif exists('g:debcontrol_fold_enable') 168c8de839SBram Moolenaar setlocal foldmethod=expr 178c8de839SBram Moolenaar setlocal foldexpr=DebControlFold(v:lnum) 188c8de839SBram Moolenaar setlocal foldtext=DebControlFoldText() 198c8de839SBram Moolenaarendif 208c8de839SBram Moolenaarsetlocal textwidth=0 218c8de839SBram Moolenaar 228c8de839SBram Moolenaar" Clean unloading 23*85eee130SBram Moolenaarlet b:undo_ftplugin = 'setlocal tw< foldmethod< foldexpr< foldtext<' 248c8de839SBram Moolenaar 258c8de839SBram Moolenaar" }}}1 268c8de839SBram Moolenaar 278c8de839SBram Moolenaar" {{{1 folding 288c8de839SBram Moolenaar 298c8de839SBram Moolenaarfunction! s:getField(f, lnum) 308c8de839SBram Moolenaar let line = getline(a:lnum) 318c8de839SBram Moolenaar let fwdsteps = 0 328c8de839SBram Moolenaar while line !~ '^'.a:f.':' 338c8de839SBram Moolenaar let fwdsteps += 1 348c8de839SBram Moolenaar let line = getline(a:lnum + fwdsteps) 35*85eee130SBram Moolenaar if line ==# '' 368c8de839SBram Moolenaar return 'unknown' 378c8de839SBram Moolenaar endif 388c8de839SBram Moolenaar endwhile 398c8de839SBram Moolenaar return substitute(line, '^'.a:f.': *', '', '') 408c8de839SBram Moolenaarendfunction 418c8de839SBram Moolenaar 428c8de839SBram Moolenaarfunction! DebControlFoldText() 43*85eee130SBram Moolenaar if v:folddashes ==# '-' " debcontrol entry fold 448c8de839SBram Moolenaar let type = substitute(getline(v:foldstart), ':.*', '', '') 45*85eee130SBram Moolenaar if type ==# 'Source' 468c8de839SBram Moolenaar let ftext = substitute(foldtext(), ' *Source: *', ' ', '') 478c8de839SBram Moolenaar return ftext . ' -- ' . s:getField('Maintainer', v:foldstart) . ' ' 488c8de839SBram Moolenaar endif 498c8de839SBram Moolenaar let arch = s:getField('Architecture', v:foldstart) 508c8de839SBram Moolenaar let ftext = substitute(foldtext(), ' *Package: *', ' [' . arch . '] ', '') 518c8de839SBram Moolenaar return ftext . ': ' . s:getField('Description', v:foldstart) . ' ' 528c8de839SBram Moolenaar endif 538c8de839SBram Moolenaar return foldtext() 548c8de839SBram Moolenaarendfunction 558c8de839SBram Moolenaar 568c8de839SBram Moolenaarfunction! DebControlFold(l) 578c8de839SBram Moolenaar 588c8de839SBram Moolenaar " This is for not merging blank lines around folds to them 59*85eee130SBram Moolenaar if getline(a:l) =~# '^Source:' 608c8de839SBram Moolenaar return '>1' 618c8de839SBram Moolenaar endif 628c8de839SBram Moolenaar 63*85eee130SBram Moolenaar if getline(a:l) =~# '^Package:' 648c8de839SBram Moolenaar return '>1' 658c8de839SBram Moolenaar endif 668c8de839SBram Moolenaar 678c8de839SBram Moolenaar return '=' 688c8de839SBram Moolenaarendfunction 698c8de839SBram Moolenaar 708c8de839SBram Moolenaar" }}}1 71