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