diff options
Diffstat (limited to 'ftplugin')
| -rw-r--r-- | ftplugin/cryptol/folding.vim | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/ftplugin/cryptol/folding.vim b/ftplugin/cryptol/folding.vim new file mode 100644 index 00000000..2b8ee5a3 --- /dev/null +++ b/ftplugin/cryptol/folding.vim @@ -0,0 +1,50 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cryptol') == -1 +   +" Copyright © 2013 Edward O'Callaghan. All Rights Reserved. + +"setlocal foldmethod=indent +"setlocal foldignore= + +setlocal foldmethod=expr +setlocal foldexpr=GetPotionFold(v:lnum) + +" Helper function: To tackle non-blank lines, +" wish to know their indentation level +function! IndentLevel(lnum) +    return indent(a:lnum) / &shiftwidth +endfunction + +" Helper function: . +function! NextNonBlankLine(lnum) +    let numlines = line('$') +    let current = a:lnum + 1 + +    while current <= numlines +        if getline(current) =~? '\v\S' +            return current +        endif + +        let current += 1 +    endwhile + +    return -2 +endfunction + +function! GetPotionFold(lnum) +    if getline(a:lnum) =~? '\v^\s*$' +        return '-1' +    endif + +    let this_indent = IndentLevel(a:lnum) +    let next_indent = IndentLevel(NextNonBlankLine(a:lnum)) + +    if next_indent == this_indent +        return this_indent +    elseif next_indent < this_indent +        return this_indent +    elseif next_indent > this_indent +        return '>' . next_indent +    endif +endfunction + +endif | 
