Added unite source for table of labels (#330)
This commit is contained in:
parent
0aa80b3040
commit
01adbfe579
54
autoload/unite/sources/vimtex_labels.vim
Normal file
54
autoload/unite/sources/vimtex_labels.vim
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
" vimtex - LaTeX plugin for Vim
|
||||||
|
"
|
||||||
|
" Maintainer: Karl Yngve Lervåg
|
||||||
|
" Email: karl.yngve@gmail.com
|
||||||
|
"
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let s:source = {
|
||||||
|
\ 'name' : 'vimtex_labels',
|
||||||
|
\ 'sorters' : 'sorter_nothing',
|
||||||
|
\ 'default_kind' : 'jump_list',
|
||||||
|
\ 'syntax' : 'uniteSource__vimtex',
|
||||||
|
\ 'hooks' : {},
|
||||||
|
\}
|
||||||
|
|
||||||
|
function! s:source.gather_candidates(args, context) " {{{1
|
||||||
|
let entries = vimtex#labels#get_entries()
|
||||||
|
return map(entries, '{
|
||||||
|
\ "word" : v:val.title,
|
||||||
|
\ "action__path" : v:val.file,
|
||||||
|
\ "action__line" : v:val.line,
|
||||||
|
\ }')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
function! s:source.hooks.on_syntax(args, context) " {{{1
|
||||||
|
syntax match VimtexLabelsChap /chap:.*$/ contains=@Tex
|
||||||
|
\ contained containedin=uniteSource__vimtex
|
||||||
|
syntax match VimtexLabelsEq /eq:.*$/ contains=@Tex
|
||||||
|
\ contained containedin=uniteSource__vimtex
|
||||||
|
syntax match VimtexLabelsFig /fig:.*$/ contains=@Tex
|
||||||
|
\ contained containedin=uniteSource__vimtex
|
||||||
|
syntax match VimtexLabelsSec /sec:.*$/ contains=@Tex
|
||||||
|
\ contained containedin=uniteSource__vimtex
|
||||||
|
syntax match VimtexLabelsTab /tab:.*$/ contains=@Tex
|
||||||
|
\ contained containedin=uniteSource__vimtex
|
||||||
|
|
||||||
|
highlight link VimtexLabelsChap PreProc
|
||||||
|
highlight link VimtexLabelsEq Statement
|
||||||
|
highlight link VimtexLabelsFig Identifier
|
||||||
|
highlight link VimtexLabelsSec Type
|
||||||
|
highlight link VimtexLabelsTab String
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
|
||||||
|
function! unite#sources#vimtex_labels#define()
|
||||||
|
return s:source
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
@ -35,7 +35,7 @@ function! vimtex#labels#open() " {{{1
|
|||||||
|
|
||||||
let index = {}
|
let index = {}
|
||||||
let index.name = s:name
|
let index.name = s:name
|
||||||
let index.entries = s:gather_labels(b:vimtex.tex)
|
let index.entries = vimtex#labels#get_entries()
|
||||||
let index.all_entries = deepcopy(index.entries)
|
let index.all_entries = deepcopy(index.entries)
|
||||||
let index.hook_init_post = function('s:index_hook_init_post')
|
let index.hook_init_post = function('s:index_hook_init_post')
|
||||||
let index.help = [
|
let index.help = [
|
||||||
@ -61,6 +61,33 @@ endfunction
|
|||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
|
function! vimtex#labels#get_entries(...) " {{{1
|
||||||
|
let l:file = a:0 > 0 ? a:1 : b:vimtex.tex
|
||||||
|
let l:tac = []
|
||||||
|
let l:preamble = 1
|
||||||
|
for [l:file, l:lnum, l:line] in vimtex#parser#tex(l:file)
|
||||||
|
if l:line =~# '\v^\s*\\begin\{document\}'
|
||||||
|
let l:preamble = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:preamble
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if l:line =~# '\v\\label\{'
|
||||||
|
call add(tac, {
|
||||||
|
\ 'title' : matchstr(l:line, '\v\\label\{\zs.{-}\ze\}?\s*$'),
|
||||||
|
\ 'file' : l:file,
|
||||||
|
\ 'line' : l:lnum,
|
||||||
|
\ })
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return l:tac
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
|
||||||
function! s:index_clear_filter() dict "{{{1
|
function! s:index_clear_filter() dict "{{{1
|
||||||
let self.entries = copy(self.all_entries)
|
let self.entries = copy(self.all_entries)
|
||||||
call self.refresh()
|
call self.refresh()
|
||||||
@ -100,30 +127,4 @@ endfunction
|
|||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
function! s:gather_labels(file) " {{{1
|
|
||||||
let l:tac = []
|
|
||||||
let l:preamble = 1
|
|
||||||
for [l:file, l:lnum, l:line] in vimtex#parser#tex(a:file)
|
|
||||||
if l:line =~# '\v^\s*\\begin\{document\}'
|
|
||||||
let l:preamble = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if l:preamble
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
if l:line =~# '\v\\label\{'
|
|
||||||
call add(tac, {
|
|
||||||
\ 'title' : matchstr(l:line, '\v\\label\{\zs.{-}\ze\}?\s*$'),
|
|
||||||
\ 'file' : l:file,
|
|
||||||
\ 'line' : l:lnum,
|
|
||||||
\ })
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
return l:tac
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" }}}1
|
|
||||||
|
|
||||||
" vim: fdm=marker sw=2
|
" vim: fdm=marker sw=2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user