home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / dos / ftplugin / debcontrol.vim < prev    next >
Encoding:
Text File  |  2010-08-15  |  1.9 KB  |  71 lines

  1. " Vim filetype plugin file (GUI menu and folding)
  2. " Language:     Debian control files
  3. " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
  4. " Former Maintainer:    Pierre Habouzit <madcoder@debian.org>
  5. " Last Change:  2008-03-08
  6. " URL:          http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/ftplugin/debcontrol.vim
  7.  
  8. " Do these settings once per buffer
  9. if exists("b:did_ftplugin")
  10.   finish
  11. endif
  12. let b:did_ftplugin=1
  13.  
  14. " {{{1 Local settings (do on every load)
  15. if exists("g:debcontrol_fold_enable")
  16.   setlocal foldmethod=expr
  17.   setlocal foldexpr=DebControlFold(v:lnum)
  18.   setlocal foldtext=DebControlFoldText()
  19. endif
  20. setlocal textwidth=0
  21.  
  22. " Clean unloading
  23. let b:undo_ftplugin = "setlocal tw< foldmethod< foldexpr< foldtext<"
  24.  
  25. " }}}1
  26.  
  27. " {{{1 folding
  28.  
  29. function! 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.': *', '', '')
  40. endfunction
  41.  
  42. function! 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()
  54. endfunction
  55.  
  56. function! 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 '='
  68. endfunction
  69.  
  70. " }}}1
  71.