summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2008-04-20 23:45:39 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2008-04-20 23:45:39 -0500
commit4486e40a8279e584501879e188fecd501a970932 (patch)
treecebeec5188cbf64afd5dadf4efb0343dbd1f5159
parentf4bdc5170b903c73bce6fcb74c384387b3662b17 (diff)
downloadvim-foldtext-4486e40a8279e584501879e188fecd501a970932.tar.gz
vim-foldtext-4486e40a8279e584501879e188fecd501a970932.zip
add a foldtext function for perl files
-rw-r--r--vimrc64
1 files changed, 64 insertions, 0 deletions
diff --git a/vimrc b/vimrc
index 5bc6a2a..2effd03 100644
--- a/vimrc
+++ b/vimrc
@@ -205,6 +205,69 @@ function Cpp_foldtext()
return Base_foldtext(line)
endfunction
" }}}
+" Perl {{{
+function Perl_foldtext()
+ let line = getline(v:foldstart)
+
+ let matches = matchlist(line, '^\s*sub \(\w\+\)')
+ if !empty(matches)
+ let linenum = v:foldstart
+ let sub_type = 'sub'
+ let params = []
+ while linenum <= v:foldend
+ let linenum += 1
+ let next_line = getline(linenum)
+ " skip the opening brace and comment lines
+ if next_line =~ '\s*{\s*' || next_line =~ '^\s*#'
+ continue
+ endif
+
+ " handle 'my $var = shift;' type lines
+ let var = '\%(\$\|@\|%\|\*\)\w\+'
+ let shift_line = matchlist(next_line,
+ \ 'my\s*\(' . var . '\)\s*=\s*shift\%(\s*||\s*\(.\{-}\)\)\?;')
+ if !empty(shift_line)
+ if shift_line[1] == '$self'
+ let sub_type = 'method'
+ elseif shift_line[1] == '$class'
+ let sub_type = 'static method'
+ else
+ let arg = shift_line[1]
+ " also catch default arguments
+ if shift_line[2] != ''
+ let arg .= ' = ' . shift_line[2]
+ endif
+ let params += [l:arg]
+ endif
+ continue
+ endif
+
+ " handle 'my ($a, $b) = @_;' type lines
+ let rest_line = matchlist(next_line, 'my (\(.*\)) = @_;')
+ if !empty(rest_line)
+ let rest_params = split(rest_line[1], ',\s*')
+ let params += rest_params
+ break
+ endif
+
+ " handle 'my %args = @_;' type lines
+ let hash_line = matchlist(next_line, 'my %\w+ = @_;')
+ if !empty(hash_line)
+ let params += ['paramhash']
+ break
+ endif
+
+ " if we haven't continued yet, assume arg unpacking is done
+ break
+ endwhile
+
+ return Base_foldtext(sub_type . ' ' . matches[1] .
+ \ '(' . join(params, ', ') . ')')
+ endif
+
+ return Base_foldtext(line)
+endfunction
+" }}}
" }}}
"}}}
"}}}
@@ -259,6 +322,7 @@ autocmd FileType tex setlocal makeprg=~/bin/latexpdf\ --show\ %
" Set up custom folding {{{
autocmd FileType tex set foldtext=Latex_foldtext()
autocmd FileType cpp set foldtext=Cpp_foldtext()
+autocmd FileType perl set foldtext=Perl_foldtext()
" }}}
"}}}