summaryrefslogtreecommitdiffstats
path: root/autoload/vimtex/kpsewhich.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/vimtex/kpsewhich.vim')
-rw-r--r--autoload/vimtex/kpsewhich.vim53
1 files changed, 53 insertions, 0 deletions
diff --git a/autoload/vimtex/kpsewhich.vim b/autoload/vimtex/kpsewhich.vim
new file mode 100644
index 00000000..65533e28
--- /dev/null
+++ b/autoload/vimtex/kpsewhich.vim
@@ -0,0 +1,53 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1
+
+" vimtex - LaTeX plugin for Vim
+"
+" Maintainer: Karl Yngve LervÄg
+" Email: karl.yngve@gmail.com
+"
+
+function! vimtex#kpsewhich#find(file) abort " {{{1
+ return s:find_cached(a:file)
+endfunction
+
+" }}}1
+function! vimtex#kpsewhich#run(args) abort " {{{1
+ " kpsewhich should be run at the project root directory
+ if exists('b:vimtex.root')
+ call vimtex#paths#pushd(b:vimtex.root)
+ endif
+ let l:output = vimtex#process#capture('kpsewhich ' . a:args)
+ if exists('b:vimtex.root')
+ call vimtex#paths#popd()
+ endif
+
+ " Remove warning lines from output
+ call filter(l:output, 'stridx(v:val, "kpsewhich: warning: ") == -1')
+
+ return l:output
+endfunction
+
+" }}}1
+
+function! s:find(file) abort " {{{1
+ let l:output = vimtex#kpsewhich#run(fnameescape(a:file))
+ if empty(l:output) | return '' | endif
+
+ let l:filename = l:output[0]
+
+ " Ensure absolute path
+ if !vimtex#paths#is_abs(l:filename) && exists('b:vimtex.root')
+ let l:filename = simplify(b:vimtex.root . '/' . l:filename)
+ endif
+
+ return l:filename
+endfunction
+
+" Use caching if possible (requires 'lambda' feature)
+let s:find_cached = has('lambda')
+ \ ? vimtex#cache#wrap(function('s:find'), 'kpsewhich')
+ \ : function('s:find')
+
+" }}}1
+
+endif