diff options
author | jluehrs2 <jluehrs2@uiuc.edu> | 2008-04-20 23:45:39 -0500 |
---|---|---|
committer | jluehrs2 <jluehrs2@uiuc.edu> | 2008-04-20 23:45:39 -0500 |
commit | 4486e40a8279e584501879e188fecd501a970932 (patch) | |
tree | cebeec5188cbf64afd5dadf4efb0343dbd1f5159 | |
parent | f4bdc5170b903c73bce6fcb74c384387b3662b17 (diff) | |
download | vim-foldtext-4486e40a8279e584501879e188fecd501a970932.tar.gz vim-foldtext-4486e40a8279e584501879e188fecd501a970932.zip |
add a foldtext function for perl files
-rw-r--r-- | vimrc | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -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() " }}} "}}} |