dot_files/vim-plugins/bundle/xptemplate/autoload/xpt/snipfuncs/evalhelper.vim
2017-07-09 00:26:06 +03:00

69 lines
1.4 KiB
VimL

if exists( "g:__AL_XPT_EVALSUPPORT_f67523jhrk" ) && g:__AL_XPT_EVALSUPPORT_f67523jhrk >= 1
finish
endif
let g:__AL_XPT_EVALSUPPORT_f67523jhrk = 1
let s:oldcpo = &cpo
set cpo-=< cpo+=B
let s:f = xpt#snipfunction#funcs
fun! s:f.GetVar(name)
if a:name =~# '\V\^$_x'
let n = a:name[1 :]
return self.Call(n,[])
endif
let closures = self._ctx.closures
let i = len(closures)
while i > 0
let i = i - 1
let c = closures[i]
let v = get(c,a:name,0)
if v isnot 0
return v
endif
endwhile
return ''
endfunction
fun! s:f.Call(name,args)
let F = get(self,a:name,0)
if type(F) == type(function('tr'))
return call(F,a:args,self)
else
return call(function(a:name),a:args)
endif
endfunction
fun! s:f.Concat(...)
let lst = a:000
if len(lst) == 0
return ''
endif
let rst = {}
for e in lst
if type(e) == type(0)
if e == 0
return 0
else
let elt = string(e)
endif
else
let elt = e
endif
if type(elt) == type('')
let rst.text = get(rst, 'text', '') . elt
elseif type(elt) == type([])
let rst.action = get(rst, 'action', 'pum')
let rst.pum = get(rst, 'pum', elt)
else
if has_key(rst, 'text') && has_key(elt, 'text')
let rst.text .= elt.text
endif
call extend(rst, elt, 'keep')
endif
unlet e
unlet elt
endfor
let ks = keys(rst)
if len(ks) == 1 && ks[0] == 'text'
return rst.text
end
return rst
endfunction
let &cpo = s:oldcpo