Update runtime files.

This commit is contained in:
Bram Moolenaar
2012-02-13 00:05:22 +01:00
parent 61c3519b78
commit 5dc6252d33
20 changed files with 257 additions and 281 deletions

View File

@ -1,10 +1,10 @@
" Vim ftplugin file
" Language: Erlang
" Author: Oscar Hellström <oscar@oscarh.net>
" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
" Author: Oscar Hellstr<EFBFBD>m <oscar@oscarh.net>
" Contributors: Ricardo Catalinas Jim<EFBFBD>nez <jimenezrick@gmail.com>
" Eduardo Lopez (http://github.com/tapichu)
" License: Vim license
" Version: 2011/11/21
" Version: 2012/01/25
if exists('b:did_ftplugin')
finish
@ -27,13 +27,10 @@ if !exists('g:erlang_folding')
let g:erlang_folding = 0
endif
" Local settings
function s:SetErlangOptions()
compiler erlang
if version >= 700
setlocal omnifunc=erlang_complete#Complete
endif
let s:erlang_fun_begin = '^\a\w*(.*$'
let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
function s:SetErlangOptions()
if g:erlang_folding
setlocal foldmethod=expr
setlocal foldexpr=GetErlangFold(v:lnum)
@ -47,104 +44,35 @@ function s:SetErlangOptions()
let &l:keywordprg = g:erlang_keywordprg
endfunction
" Define folding functions
if !exists('*GetErlangFold')
" Folding params
let s:erlang_fun_begin = '^\a\w*(.*$'
let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
let s:erlang_blank_line = '^\s*\(%.*\)\?$'
function GetErlangFold(lnum)
let lnum = a:lnum
let line = getline(lnum)
" Auxiliary fold functions
function s:GetNextNonBlank(lnum)
let lnum = nextnonblank(a:lnum + 1)
let line = getline(lnum)
while line =~ s:erlang_blank_line && 0 != lnum
let lnum = nextnonblank(lnum + 1)
let line = getline(lnum)
endwhile
return lnum
endfunction
if line =~ s:erlang_fun_end
return '<1'
endif
function s:GetFunName(str)
return matchstr(a:str, '^\a\w*(\@=')
endfunction
if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
return '1'
endif
function s:GetFunArgs(str, lnum)
let str = a:str
let lnum = a:lnum
while str !~ '->\s*\(%.*\)\?$'
let lnum = s:GetNextNonBlank(lnum)
if 0 == lnum " EOF
return ''
endif
let str .= getline(lnum)
endwhile
return matchstr(str,
\ '\(^(\s*\)\@<=.*\(\s*)\(\s\+when\s\+.*\)\?\s\+->\s*\(%.*\)\?$\)\@=')
endfunction
if line =~ s:erlang_fun_begin
return '>1'
endif
function s:CountFunArgs(arguments)
let pos = 0
let ac = 0 " arg count
let arguments = a:arguments
" Change list / tuples into just one A(rgument)
let erlang_tuple = '{\([A-Za-z_,|=\-\[\]]\|\s\)*}'
let erlang_list = '\[\([A-Za-z_,|=\-{}]\|\s\)*\]'
return '='
endfunction
" FIXME: Use searchpair?
while arguments =~ erlang_tuple
let arguments = substitute(arguments, erlang_tuple, 'A', 'g')
endwhile
" FIXME: Use searchpair?
while arguments =~ erlang_list
let arguments = substitute(arguments, erlang_list, 'A', 'g')
endwhile
let len = strlen(arguments)
while pos < len && pos > -1
let ac += 1
let pos = matchend(arguments, ',\s*', pos)
endwhile
return ac
endfunction
function ErlangFoldText()
let line = getline(v:foldstart)
let foldlen = v:foldend - v:foldstart + 1
let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
if foldlen < 10
let lines = ' ' . lines
endif
let retval = '+' . v:folddashes . lines
" Main fold function
function GetErlangFold(lnum)
let lnum = a:lnum
let line = getline(lnum)
if line =~ s:erlang_fun_end
return '<1'
endif
if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
return '1'
endif
if line =~ s:erlang_fun_begin
return '>1'
endif
return '='
endfunction
" Erlang fold description (foldtext function)
function ErlangFoldText()
let foldlen = v:foldend - v:foldstart
if 1 < foldlen
let lines = 'lines'
else
let lines = 'line'
endif
let line = getline(v:foldstart)
let name = s:GetFunName(line)
let arguments = s:GetFunArgs(strpart(line, strlen(name)), v:foldstart)
let argcount = s:CountFunArgs(arguments)
let retval = '+' . v:folddashes . ' ' . name . '/' . argcount
let retval .= ' (' . foldlen . ' ' . lines . ')'
return retval
endfunction
endif
return retval
endfunction
call s:SetErlangOptions()