diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2020-04-25 21:30:46 +0200 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2020-04-25 21:30:46 +0200 |
commit | d757bfd643cc73c2d495355c153ed0257f5d5b47 (patch) | |
tree | ff210950456938a779d98f6a2ba7321aca512897 /autoload/vimtex/parser.vim | |
parent | 8ec73a3a8974a62a613680a6b6222a77a7b99546 (diff) | |
download | vim-polyglot-d757bfd643cc73c2d495355c153ed0257f5d5b47.tar.gz vim-polyglot-d757bfd643cc73c2d495355c153ed0257f5d5b47.zip |
Change latex provider to luatex, closes #476
Diffstat (limited to 'autoload/vimtex/parser.vim')
-rw-r--r-- | autoload/vimtex/parser.vim | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/autoload/vimtex/parser.vim b/autoload/vimtex/parser.vim new file mode 100644 index 00000000..e1a7970f --- /dev/null +++ b/autoload/vimtex/parser.vim @@ -0,0 +1,144 @@ +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#parser#tex(file, ...) abort " {{{1 + return vimtex#parser#tex#parse(a:file, a:0 > 0 ? a:1 : {}) +endfunction + +" }}}1 +function! vimtex#parser#preamble(file, ...) abort " {{{1 + return vimtex#parser#tex#parse_preamble(a:file, a:0 > 0 ? a:1 : {}) +endfunction + +" }}}1 +function! vimtex#parser#auxiliary(file) abort " {{{1 + return vimtex#parser#auxiliary#parse(a:file) +endfunction + +" }}}1 +function! vimtex#parser#fls(file) abort " {{{1 + return vimtex#parser#fls#parse(a:file) +endfunction + +" }}}1 +function! vimtex#parser#toc(...) abort " {{{1 + let l:vimtex = a:0 > 0 ? a:1 : b:vimtex + + let l:cache = vimtex#cache#open('parsertoc', { + \ 'persistent': 0, + \ 'default': {'entries': [], 'ftime': -1}, + \}) + let l:current = l:cache.get(l:vimtex.tex) + + " Update cache if relevant + let l:ftime = l:vimtex.getftime() + if l:ftime > l:current.ftime + let l:cache.modified = 1 + let l:current.ftime = l:ftime + let l:current.entries = vimtex#parser#toc#parse(l:vimtex.tex) + endif + + return deepcopy(l:current.entries) +endfunction + +" }}}1 +function! vimtex#parser#bib(file, ...) abort " {{{1 + return vimtex#parser#bib#parse(a:file, a:0 > 0 ? a:1 : {}) +endfunction + +" }}}1 + +function! vimtex#parser#get_externalfiles() abort " {{{1 + let l:preamble = vimtex#parser#preamble(b:vimtex.tex) + + let l:result = [] + for l:line in filter(l:preamble, 'v:val =~# ''\\externaldocument''') + let l:name = matchstr(l:line, '{\zs[^}]*\ze}') + call add(l:result, { + \ 'tex' : l:name . '.tex', + \ 'aux' : l:name . '.aux', + \ 'opt' : matchstr(l:line, '\[\zs[^]]*\ze\]'), + \ }) + endfor + + return l:result +endfunction + +" }}}1 +function! vimtex#parser#selection_to_texfile(type, ...) range abort " {{{1 + " + " Get selected lines. Method depends on type of selection, which may be + " either of + " + " 1. range from argument + " 2. Command range + " 3. Visual mapping + " 4. Operator mapping + " + if a:type ==# 'arg' + let l:lines = getline(a:1[0], a:1[1]) + elseif a:type ==# 'cmd' + let l:lines = getline(a:firstline, a:lastline) + elseif a:type ==# 'visual' + let l:lines = getline(line("'<"), line("'>")) + else + let l:lines = getline(line("'["), line("']")) + endif + + " + " Use only the part of the selection that is within the + " + " \begin{document} ... \end{document} + " + " environment. + " + let l:start = 0 + let l:end = len(l:lines) + for l:n in range(len(l:lines)) + if l:lines[l:n] =~# '\\begin\s*{document}' + let l:start = l:n + 1 + elseif l:lines[l:n] =~# '\\end\s*{document}' + let l:end = l:n - 1 + break + endif + endfor + + " + " Check if the selection has any real content + " + if l:start >= len(l:lines) + \ || l:end < 0 + \ || empty(substitute(join(l:lines[l:start : l:end], ''), '\s*', '', '')) + return {} + endif + + " + " Define the set of lines to compile + " + let l:lines = vimtex#parser#preamble(b:vimtex.tex) + \ + ['\begin{document}'] + \ + l:lines[l:start : l:end] + \ + ['\end{document}'] + + " + " Write content to temporary file + " + let l:file = {} + let l:file.root = b:vimtex.root + let l:file.base = b:vimtex.name . '_vimtex_selected.tex' + let l:file.tex = l:file.root . '/' . l:file.base + let l:file.pdf = fnamemodify(l:file.tex, ':r') . '.pdf' + let l:file.log = fnamemodify(l:file.tex, ':r') . '.log' + call writefile(l:lines, l:file.tex) + + return l:file +endfunction + +" }}}1 + +endif |