45 lines
1.2 KiB
VimL
45 lines
1.2 KiB
VimL
" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
|
|
" @Website: https://github.com/tomtom
|
|
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
" @Last Change: 2016-04-06
|
|
" @Revision: 22
|
|
|
|
|
|
" :display: tlib#dictionary#Rev(dict, ?opts = {}) abort "{{{3
|
|
function! tlib#dictionary#Rev(dict, ...) abort "{{{3
|
|
let opts = a:0 >= 1 ? a:1 : {}
|
|
Tlibtype a:dict, 'dict', opts, 'dict'
|
|
let rev = {}
|
|
let use_string = get(opts, 'use_string', 0)
|
|
let use_eval = get(opts, 'use_eval', 0)
|
|
let values_as_list = get(opts, 'values_as_list', 0)
|
|
for [m, f] in items(a:dict)
|
|
if use_string
|
|
let k = string(f)
|
|
else
|
|
let k = type(f) == 1 ? f : string(f)
|
|
if k ==# ''
|
|
let k = get(opts, 'empty', '')
|
|
if empty(k)
|
|
continue
|
|
endif
|
|
endif
|
|
endif
|
|
if use_eval
|
|
let v = eval(m)
|
|
else
|
|
let v = m
|
|
endif
|
|
if values_as_list
|
|
if has_key(rev, k)
|
|
call add(rev[k], v)
|
|
else
|
|
let rev[k] = [v]
|
|
endif
|
|
else
|
|
let rev[k] = v
|
|
endif
|
|
endfor
|
|
return rev
|
|
endf
|
|
|