" Usage: Unite locationlist	"unite location list
" Usage: Unite locationlist:enc=utf-8 "iconv(getloclist(),enc,&enc)

let s:save_cpo = &cpoptions
set cpoptions&vim

function! unite#sources#locationlist#define() abort
  return s:source
endfunction

let s:source = {
      \ 'name': 'locationlist',
      \ 'description': 'candidates from location list'
      \ }

function! s:source.complete(args, context, arglead, cmdline, cursorpos) abort
  let arglead = matchstr(a:arglead, '[:^]\zs.\+$')
  let options=['enc=']
  return filter(options, 'stridx(v:val, arglead)>=0')
endfunction

function! s:source.gather_candidates(args, context)
  let l:enc = ''
  for l:arg in a:args
    " 		let l:match = matchlist(l:arg, '\(\k\+\)\s*=\s*\([a-zA-Z0-9.!?_ /\\-*]*\)')
    let l:match = matchlist(l:arg, '\(\k\+\)\s*=\s*\(.*\)')
    if len(l:match) > 0
      execute 'let l:' . l:match[1] . " = \'" . l:match[2] . "\'"
    endif
  endfor
  return map(getloclist(0), '{
        \ "word": bufname(v:val.bufnr) . "|" . v:val.lnum . "| " .
        \	(empty(l:enc) ? v:val.text : iconv(v:val.text,l:enc,&encoding)),
        \ "source": "locationlist",
        \ "kind": "jump_list",
        \ "action__path": bufname(v:val.bufnr),
        \ "action__line": v:val.lnum,
        \ "action__pattern": v:val.pattern,
        \ "is_multiline" : 1,
        \ }')
endfunction

let &cpo = s:save_cpo
unlet s:save_cpo

" vim:set foldmethod=marker: