diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2020-05-20 20:19:03 +0200 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2020-05-20 20:19:03 +0200 |
commit | a9cc6fd2188ddc37257c834b6f5a5fa86d0eebd5 (patch) | |
tree | 952fc9cf50a5f4c42ffb2b1c0077155bcda3e7c1 /autoload/vimtex/compiler | |
parent | 3c47f192b5758222a1e8055c7e08650e05d0d171 (diff) | |
download | vim-polyglot-a9cc6fd2188ddc37257c834b6f5a5fa86d0eebd5.tar.gz vim-polyglot-a9cc6fd2188ddc37257c834b6f5a5fa86d0eebd5.zip |
Remove latex, fixes #484
Diffstat (limited to 'autoload/vimtex/compiler')
-rw-r--r-- | autoload/vimtex/compiler/arara.vim | 218 | ||||
-rw-r--r-- | autoload/vimtex/compiler/latexmk.vim | 700 | ||||
-rw-r--r-- | autoload/vimtex/compiler/latexrun.vim | 250 | ||||
-rw-r--r-- | autoload/vimtex/compiler/tectonic.vim | 255 |
4 files changed, 0 insertions, 1423 deletions
diff --git a/autoload/vimtex/compiler/arara.vim b/autoload/vimtex/compiler/arara.vim deleted file mode 100644 index 8234b77d..00000000 --- a/autoload/vimtex/compiler/arara.vim +++ /dev/null @@ -1,218 +0,0 @@ -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#compiler#arara#init(options) abort " {{{1 - let l:compiler = deepcopy(s:compiler) - - call l:compiler.init(extend(a:options, - \ get(g:, 'vimtex_compiler_arara', {}), 'keep')) - - return l:compiler -endfunction - -" }}}1 - -let s:compiler = { - \ 'name' : 'arara', - \ 'backend' : has('nvim') ? 'nvim' - \ : v:version >= 800 ? 'jobs' : 'process', - \ 'root' : '', - \ 'target' : '', - \ 'target_path' : '', - \ 'background' : 1, - \ 'output' : tempname(), - \ 'options' : ['--log'], - \} - -function! s:compiler.init(options) abort dict " {{{1 - call extend(self, a:options) - - if !executable('arara') - call vimtex#log#warning('arara is not executable!') - throw 'vimtex: Requirements not met' - endif - - call extend(self, deepcopy(s:compiler_{self.backend})) - - " Processes run with the new jobs api will not run in the foreground - if self.backend !=# 'process' - let self.background = 1 - endif -endfunction - -" }}}1 - -function! s:compiler.build_cmd() abort dict " {{{1 - let l:cmd = 'arara' - - for l:opt in self.options - let l:cmd .= ' ' . l:opt - endfor - - return l:cmd . ' ' . vimtex#util#shellescape(self.target) -endfunction - -" }}}1 -function! s:compiler.cleanup() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.pprint_items() abort dict " {{{1 - let l:configuration = [] - - if self.backend ==# 'process' - call add(l:configuration, ['background', self.background]) - endif - - call add(l:configuration, ['arara options', self.options]) - - let l:list = [] - call add(l:list, ['backend', self.backend]) - if self.background - call add(l:list, ['output', self.output]) - endif - - if self.target_path !=# b:vimtex.tex - call add(l:list, ['root', self.root]) - call add(l:list, ['target', self.target_path]) - endif - - call add(l:list, ['configuration', l:configuration]) - - if has_key(self, 'process') - call add(l:list, ['process', self.process]) - endif - - if has_key(self, 'job') - call add(l:list, ['cmd', self.cmd]) - endif - - return l:list -endfunction - -" }}}1 - -function! s:compiler.clean(...) abort dict " {{{1 - call vimtex#log#warning('Clean not implemented for arara') -endfunction - -" }}}1 -function! s:compiler.start(...) abort dict " {{{1 - call self.exec() - - if self.background - call vimtex#log#info('Compiler started in background') - else - call vimtex#compiler#callback(!vimtex#qf#inquire(self.target)) - endif -endfunction - -" }}}1 -function! s:compiler.start_single() abort dict " {{{1 - call self.start() -endfunction - -" }}}1 -function! s:compiler.stop() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.is_running() abort dict " {{{1 - return 0 -endfunction - -" }}}1 -function! s:compiler.kill() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.get_pid() abort dict " {{{1 - return 0 -endfunction - -" }}}1 - -let s:compiler_process = {} -function! s:compiler_process.exec() abort dict " {{{1 - let self.process = vimtex#process#new() - let self.process.name = 'arara' - let self.process.background = self.background - let self.process.workdir = self.root - let self.process.output = self.output - let self.process.cmd = self.build_cmd() - call self.process.run() -endfunction - -" }}}1 - -let s:compiler_jobs = {} -function! s:compiler_jobs.exec() abort dict " {{{1 - let self.cmd = self.build_cmd() - let l:cmd = has('win32') - \ ? 'cmd /s /c "' . self.cmd . '"' - \ : ['sh', '-c', self.cmd] - let l:options = { - \ 'out_io' : 'file', - \ 'err_io' : 'file', - \ 'out_name' : self.output, - \ 'err_name' : self.output, - \} - - let s:cb_target = self.target_path !=# b:vimtex.tex ? self.target_path : '' - let l:options.exit_cb = function('s:callback') - - call vimtex#paths#pushd(self.root) - let self.job = job_start(l:cmd, l:options) - call vimtex#paths#popd() -endfunction - -" }}}1 -function! s:callback(ch, msg) abort " {{{1 - call vimtex#compiler#callback(!vimtex#qf#inquire(s:cb_target)) -endfunction - -" }}}1 - -let s:compiler_nvim = {} -function! s:compiler_nvim.exec() abort dict " {{{1 - let self.cmd = self.build_cmd() - let l:cmd = has('win32') - \ ? 'cmd /s /c "' . self.cmd . '"' - \ : ['sh', '-c', self.cmd] - - let l:shell = { - \ 'on_stdout' : function('s:callback_nvim_output'), - \ 'on_stderr' : function('s:callback_nvim_output'), - \ 'on_exit' : function('s:callback_nvim_exit'), - \ 'cwd' : self.root, - \ 'target' : self.target_path, - \ 'output' : self.output, - \} - - let self.job = jobstart(l:cmd, l:shell) -endfunction - -" }}}1 -function! s:callback_nvim_output(id, data, event) abort dict " {{{1 - if !empty(a:data) - call writefile(filter(a:data, '!empty(v:val)'), self.output, 'a') - endif -endfunction - -" }}}1 -function! s:callback_nvim_exit(id, data, event) abort dict " {{{1 - let l:target = self.target !=# b:vimtex.tex ? self.target : '' - call vimtex#compiler#callback(!vimtex#qf#inquire(l:target)) -endfunction - -" }}}1 - -endif diff --git a/autoload/vimtex/compiler/latexmk.vim b/autoload/vimtex/compiler/latexmk.vim deleted file mode 100644 index d7a36708..00000000 --- a/autoload/vimtex/compiler/latexmk.vim +++ /dev/null @@ -1,700 +0,0 @@ -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#compiler#latexmk#init(options) abort " {{{1 - let l:compiler = deepcopy(s:compiler) - - call l:compiler.init(extend(a:options, - \ get(g:, 'vimtex_compiler_latexmk', {}), 'keep')) - - return l:compiler -endfunction - -" }}}1 -function! vimtex#compiler#latexmk#wrap_option(name, value) abort " {{{1 - return has('win32') - \ ? ' -e "$' . a:name . ' = ''' . a:value . '''"' - \ : ' -e ''$' . a:name . ' = "' . a:value . '"''' -endfunction - -"}}}1 - -function! vimtex#compiler#latexmk#get_rc_opt(root, opt, type, default) abort " {{{1 - " - " Parse option from .latexmkrc. - " - " Arguments: - " root Root of LaTeX project - " opt Name of options - " type 0 if string, 1 if integer, 2 if list - " default Value to return if option not found in latexmkrc file - " - " Output: - " [value, location] - " - " value Option value (integer or string) - " location An integer that indicates where option was found - " -1: not found (default value returned) - " 0: global latexmkrc file - " 1: local latexmkrc file - " - - if a:type == 0 - let l:pattern = '^\s*\$' . a:opt . '\s*=\s*[''"]\(.\+\)[''"]' - elseif a:type == 1 - let l:pattern = '^\s*\$' . a:opt . '\s*=\s*\(\d\+\)' - elseif a:type == 2 - let l:pattern = '^\s*@' . a:opt . '\s*=\s*(\(.*\))' - else - throw 'vimtex: argument error' - endif - - " Candidate files - " - each element is a pair [path_to_file, is_local_rc_file]. - let l:files = [ - \ [a:root . '/latexmkrc', 1], - \ [a:root . '/.latexmkrc', 1], - \ [fnamemodify('~/.latexmkrc', ':p'), 0], - \] - if !empty($XDG_CONFIG_HOME) - call add(l:files, [$XDG_CONFIG_HOME . '/latexmk/latexmkrc', 0]) - endif - - let l:result = [a:default, -1] - - for [l:file, l:is_local] in l:files - if filereadable(l:file) - let l:match = matchlist(readfile(l:file), l:pattern) - if len(l:match) > 1 - let l:result = [l:match[1], l:is_local] - break - end - endif - endfor - - " Parse the list - if a:type == 2 && l:result[1] > -1 - let l:array = split(l:result[0], ',') - let l:result[0] = [] - for l:x in l:array - let l:x = substitute(l:x, "^'", '', '') - let l:x = substitute(l:x, "'$", '', '') - let l:result[0] += [l:x] - endfor - endif - - return l:result -endfunction - -" }}}1 - -let s:compiler = { - \ 'name' : 'latexmk', - \ 'executable' : 'latexmk', - \ 'backend' : has('nvim') ? 'nvim' - \ : v:version >= 800 ? 'jobs' : 'process', - \ 'root' : '', - \ 'target' : '', - \ 'target_path' : '', - \ 'background' : 1, - \ 'build_dir' : '', - \ 'callback' : 1, - \ 'continuous' : 1, - \ 'output' : tempname(), - \ 'options' : [ - \ '-verbose', - \ '-file-line-error', - \ '-synctex=1', - \ '-interaction=nonstopmode', - \ ], - \ 'hooks' : [], - \ 'shell' : fnamemodify(&shell, ':t'), - \} - -function! s:compiler.init(options) abort dict " {{{1 - call extend(self, a:options) - - call self.init_check_requirements() - call self.init_build_dir_option() - call self.init_pdf_mode_option() - - call extend(self, deepcopy(s:compiler_{self.backend})) - - " Continuous processes can't run in foreground, neither can processes run - " with the new jobs api - if self.continuous || self.backend !=# 'process' - let self.background = 1 - endif - - if self.backend !=# 'process' - let self.shell = 'sh' - endif -endfunction - -" }}}1 -function! s:compiler.init_build_dir_option() abort dict " {{{1 - " - " Check if .latexmkrc sets the build_dir - if so this should be respected - " - let l:out_dir = - \ vimtex#compiler#latexmk#get_rc_opt(self.root, 'out_dir', 0, '')[0] - - if !empty(l:out_dir) - if !empty(self.build_dir) && (self.build_dir !=# l:out_dir) - call vimtex#log#warning( - \ 'Setting out_dir from latexmkrc overrides build_dir!', - \ 'Changed build_dir from: ' . self.build_dir, - \ 'Changed build_dir to: ' . l:out_dir) - endif - let self.build_dir = l:out_dir - endif -endfunction - -" }}}1 -function! s:compiler.init_pdf_mode_option() abort dict " {{{1 - " If the TeX program directive was not set, and if the pdf_mode is set in - " a .latexmkrc file, then deduce the compiler engine from the value of - " pdf_mode. - - " Parse the pdf_mode option. If not found, it is set to -1. - let [l:pdf_mode, l:is_local] = - \ vimtex#compiler#latexmk#get_rc_opt(self.root, 'pdf_mode', 1, -1) - - " If pdf_mode has a supported value (1: pdflatex, 4: lualatex, 5: xelatex), - " override the value of self.tex_program. - if l:pdf_mode == 1 - let l:tex_program = 'pdflatex' - elseif l:pdf_mode == 3 - let l:tex_program = 'pdfdvi' - elseif l:pdf_mode == 4 - let l:tex_program = 'lualatex' - elseif l:pdf_mode == 5 - let l:tex_program = 'xelatex' - else - return - endif - - if self.tex_program ==# '_' - " The TeX program directive was not specified - let self.tex_program = l:tex_program - elseif l:is_local && self.tex_program !=# l:tex_program - call vimtex#log#warning( - \ 'Value of pdf_mode from latexmkrc is inconsistent with ' . - \ 'TeX program directive!', - \ 'TeX program: ' . self.tex_program, - \ 'pdf_mode: ' . l:tex_program, - \ 'The value of pdf_mode will be ignored.') - endif -endfunction - -" }}}1 -function! s:compiler.init_check_requirements() abort dict " {{{1 - " Check option validity - if self.callback - if !(has('clientserver') || has('nvim') || has('job')) - let self.callback = 0 - call vimtex#log#warning( - \ 'Can''t use callbacks without +job, +nvim, or +clientserver', - \ 'Callback option has been disabled.') - endif - endif - - " Check for required executables - let l:required = [self.executable] - if self.continuous && !(has('win32') || has('win32unix')) - let l:required += ['pgrep'] - endif - let l:missing = filter(l:required, '!executable(v:val)') - - " Disable latexmk if required programs are missing - if len(l:missing) > 0 - for l:cmd in l:missing - call vimtex#log#warning(l:cmd . ' is not executable') - endfor - throw 'vimtex: Requirements not met' - endif -endfunction - -" }}}1 - -function! s:compiler.build_cmd() abort dict " {{{1 - if has('win32') - let l:cmd = 'set max_print_line=2000 & ' . self.executable - else - if self.shell ==# 'fish' - let l:cmd = 'set max_print_line 2000; and ' . self.executable - else - let l:cmd = 'max_print_line=2000 ' . self.executable - endif - endif - - for l:opt in self.options - let l:cmd .= ' ' . l:opt - endfor - - let l:cmd .= ' ' . self.get_engine() - - if !empty(self.build_dir) - let l:cmd .= ' -outdir=' . fnameescape(self.build_dir) - endif - - if self.continuous - let l:cmd .= ' -pvc' - - " Set viewer options - if !get(g:, 'vimtex_view_automatic', 1) - \ || get(get(b:vimtex, 'viewer', {}), 'xwin_id') > 0 - \ || get(s:, 'silence_next_callback', 0) - let l:cmd .= ' -view=none' - elseif g:vimtex_view_enabled - \ && has_key(b:vimtex.viewer, 'latexmk_append_argument') - let l:cmd .= b:vimtex.viewer.latexmk_append_argument() - endif - - if self.callback - if has('job') || has('nvim') - for [l:opt, l:val] in items({ - \ 'success_cmd' : 'vimtex_compiler_callback_success', - \ 'failure_cmd' : 'vimtex_compiler_callback_failure', - \}) - let l:func = 'echo ' . l:val - let l:cmd .= vimtex#compiler#latexmk#wrap_option(l:opt, l:func) - endfor - elseif empty(v:servername) - call vimtex#log#warning('Can''t use callbacks with empty v:servername') - else - " Some notes: - " - We excape the v:servername because this seems necessary on Windows - " for neovim, see e.g. Github Issue #877 - for [l:opt, l:val] in items({'success_cmd' : 1, 'failure_cmd' : 0}) - let l:callback = has('win32') - \ ? '"vimtex#compiler#callback(' . l:val . ')"' - \ : '\"vimtex\#compiler\#callback(' . l:val . ')\"' - let l:func = vimtex#util#shellescape('""') - \ . g:vimtex_compiler_progname - \ . vimtex#util#shellescape('""') - \ . ' --servername ' . vimtex#util#shellescape(v:servername) - \ . ' --remote-expr ' . l:callback - let l:cmd .= vimtex#compiler#latexmk#wrap_option(l:opt, l:func) - endfor - endif - endif - endif - - return l:cmd . ' ' . vimtex#util#shellescape(self.target) -endfunction - -" }}}1 -function! s:compiler.get_engine() abort dict " {{{1 - return get(extend(g:vimtex_compiler_latexmk_engines, - \ { - \ 'pdfdvi' : '-pdfdvi', - \ 'pdflatex' : '-pdf', - \ 'luatex' : '-lualatex', - \ 'lualatex' : '-lualatex', - \ 'xelatex' : '-xelatex', - \ 'context (pdftex)' : '-pdf -pdflatex=texexec', - \ 'context (luatex)' : '-pdf -pdflatex=context', - \ 'context (xetex)' : '-pdf -pdflatex=''texexec --xtx''', - \ }, 'keep'), self.tex_program, '-pdf') -endfunction - -" }}}1 -function! s:compiler.cleanup() abort dict " {{{1 - if self.is_running() - call self.kill() - endif -endfunction - -" }}}1 -function! s:compiler.pprint_items() abort dict " {{{1 - let l:configuration = [ - \ ['continuous', self.continuous], - \ ['callback', self.callback], - \] - - if self.backend ==# 'process' && !self.continuous - call add(l:configuration, ['background', self.background]) - endif - - if !empty(self.build_dir) - call add(l:configuration, ['build_dir', self.build_dir]) - endif - call add(l:configuration, ['latexmk options', self.options]) - call add(l:configuration, ['latexmk engine', self.get_engine()]) - - let l:list = [] - call add(l:list, ['backend', self.backend]) - if self.executable !=# s:compiler.executable - call add(l:list, ['latexmk executable', self.executable]) - endif - if self.background - call add(l:list, ['output', self.output]) - endif - - if self.target_path !=# b:vimtex.tex - call add(l:list, ['root', self.root]) - call add(l:list, ['target', self.target_path]) - endif - - call add(l:list, ['configuration', l:configuration]) - - if has_key(self, 'process') - call add(l:list, ['process', self.process]) - endif - - if has_key(self, 'job') - if self.continuous - if self.backend ==# 'jobs' - call add(l:list, ['job', self.job]) - else - call add(l:list, ['pid', self.get_pid()]) - endif - endif - call add(l:list, ['cmd', self.cmd]) - endif - - return l:list -endfunction - -" }}}1 - -function! s:compiler.clean(full) abort dict " {{{1 - let l:restart = self.is_running() - if l:restart - call self.stop() - endif - - " Define and run the latexmk clean cmd - let l:cmd = (has('win32') - \ ? 'cd /D "' . self.root . '" & ' - \ : 'cd ' . vimtex#util#shellescape(self.root) . '; ') - \ . self.executable . ' ' . (a:full ? '-C ' : '-c ') - if !empty(self.build_dir) - let l:cmd .= printf(' -outdir=%s ', fnameescape(self.build_dir)) - endif - let l:cmd .= vimtex#util#shellescape(self.target) - call vimtex#process#run(l:cmd) - - call vimtex#log#info('Compiler clean finished' . (a:full ? ' (full)' : '')) - - if l:restart - let self.silent_next_callback = 1 - silent call self.start() - endif -endfunction - -" }}}1 -function! s:compiler.start(...) abort dict " {{{1 - if self.is_running() - call vimtex#log#warning( - \ 'Compiler is already running for `' . self.target . "'") - return - endif - - " - " Create build dir if it does not exist - " - if !empty(self.build_dir) - let l:dirs = split(glob(self.root . '/**/*.tex'), '\n') - call map(l:dirs, 'fnamemodify(v:val, '':h'')') - call map(l:dirs, 'strpart(v:val, strlen(self.root) + 1)') - call vimtex#util#uniq(sort(filter(l:dirs, "v:val !=# ''"))) - call map(l:dirs, - \ (vimtex#paths#is_abs(self.build_dir) ? '' : "self.root . '/' . ") - \ . "self.build_dir . '/' . v:val") - call filter(l:dirs, '!isdirectory(v:val)') - - " Create the non-existing directories - for l:dir in l:dirs - call mkdir(l:dir, 'p') - endfor - endif - - call self.exec() - - if self.continuous - call vimtex#log#info('Compiler started in continuous mode' - \ . (a:0 > 0 ? ' (single shot)' : '')) - if exists('#User#VimtexEventCompileStarted') - doautocmd <nomodeline> User VimtexEventCompileStarted - endif - else - if self.background - call vimtex#log#info('Compiler started in background!') - else - call vimtex#compiler#callback(!vimtex#qf#inquire(self.target)) - endif - endif -endfunction - -" }}}1 -function! s:compiler.stop() abort dict " {{{1 - if self.is_running() - call self.kill() - call vimtex#log#info('Compiler stopped (' . self.target . ')') - if exists('#User#VimtexEventCompileStopped') - doautocmd <nomodeline> User VimtexEventCompileStopped - endif - else - call vimtex#log#warning( - \ 'There is no process to stop (' . self.target . ')') - endif -endfunction - -" }}}1 - -let s:compiler_process = {} -function! s:compiler_process.exec() abort dict " {{{1 - let l:process = vimtex#process#new() - let l:process.name = 'latexmk' - let l:process.continuous = self.continuous - let l:process.background = self.background - let l:process.workdir = self.root - let l:process.output = self.output - let l:process.cmd = self.build_cmd() - - if l:process.continuous - if (has('win32') || has('win32unix')) - " Not implemented - else - for l:pid in split(system( - \ 'pgrep -f "^[^ ]*perl.*latexmk.*' . self.target . '"'), "\n") - let l:path = resolve('/proc/' . l:pid . '/cwd') . '/' . self.target - if l:path ==# self.target_path - let l:process.pid = str2nr(l:pid) - break - endif - endfor - endif - endif - - function! l:process.set_pid() abort dict " {{{2 - if (has('win32') || has('win32unix')) - let pidcmd = 'tasklist /fi "imagename eq latexmk.exe"' - let pidinfo = vimtex#process#capture(pidcmd)[-1] - let self.pid = str2nr(split(pidinfo,'\s\+')[1]) - else - let self.pid = str2nr(system('pgrep -nf "^[^ ]*perl.*latexmk"')[:-2]) - endif - - return self.pid - endfunction - - " }}}2 - - let self.process = l:process - call self.process.run() -endfunction - -" }}}1 -function! s:compiler_process.start_single() abort dict " {{{1 - let l:continuous = self.continuous - let self.continuous = self.background && self.callback && !empty(v:servername) - - if self.continuous - let g:vimtex_compiler_callback_hooks += ['VimtexSSCallback'] - function! VimtexSSCallback(status) abort - silent call vimtex#compiler#stop() - call remove(g:vimtex_compiler_callback_hooks, 'VimtexSSCallback') - endfunction - endif - - call self.start(1) - let self.continuous = l:continuous -endfunction - -" }}}1 -function! s:compiler_process.is_running() abort dict " {{{1 - return exists('self.process.pid') && self.process.pid > 0 -endfunction - -" }}}1 -function! s:compiler_process.kill() abort dict " {{{1 - call self.process.stop() -endfunction - -" }}}1 -function! s:compiler_process.get_pid() abort dict " {{{1 - return has_key(self, 'process') ? self.process.pid : 0 -endfunction - -" }}}1 - -let s:compiler_jobs = {} -function! s:compiler_jobs.exec() abort dict " {{{1 - let self.cmd = self.build_cmd() - let l:cmd = has('win32') - \ ? 'cmd /s /c "' . self.cmd . '"' - \ : ['sh', '-c', self.cmd] - - let l:options = { - \ 'out_io' : 'file', - \ 'err_io' : 'file', - \ 'out_name' : self.output, - \ 'err_name' : self.output, - \} - if self.continuous - let l:options.out_io = 'pipe' - let l:options.err_io = 'pipe' - let l:options.out_cb = function('s:callback_continuous_output') - let l:options.err_cb = function('s:callback_continuous_output') - call writefile([], self.output, 'a') - else - let s:cb_target = self.target_path !=# b:vimtex.tex - \ ? self.target_path : '' - let l:options.exit_cb = function('s:callback') - endif - - call vimtex#paths#pushd(self.root) - let self.job = job_start(l:cmd, l:options) - call vimtex#paths#popd() -endfunction - -" }}}1 -function! s:compiler_jobs.start_single() abort dict " {{{1 - let l:continuous = self.continuous - let self.continuous = 0 - call self.start() - let self.continuous = l:continuous -endfunction - -" }}}1 -function! s:compiler_jobs.kill() abort dict " {{{1 - call job_stop(self.job) -endfunction - -" }}}1 -function! s:compiler_jobs.is_running() abort dict " {{{1 - return has_key(self, 'job') && job_status(self.job) ==# 'run' -endfunction - -" }}}1 -function! s:compiler_jobs.get_pid() abort dict " {{{1 - return has_key(self, 'job') - \ ? get(job_info(self.job), 'process') : 0 -endfunction - -" }}}1 -function! s:callback(ch, msg) abort " {{{1 - call vimtex#compiler#callback(!vimtex#qf#inquire(s:cb_target)) -endfunction - -" }}}1 -function! s:callback_continuous_output(channel, msg) abort " {{{1 - if exists('b:vimtex') && filewritable(b:vimtex.compiler.output) - call writefile([a:msg], b:vimtex.compiler.output, 'a') - endif - - if a:msg ==# 'vimtex_compiler_callback_success' - call vimtex#compiler#callback(1) - elseif a:msg ==# 'vimtex_compiler_callback_failure' - call vimtex#compiler#callback(0) - endif - - try - for l:Hook in get(get(get(b:, 'vimtex', {}), 'compiler', {}), 'hooks', []) - call l:Hook(a:msg) - endfor - catch /E716/ - endtry -endfunction - -" }}}1 - -let s:compiler_nvim = {} -function! s:compiler_nvim.exec() abort dict " {{{1 - let self.cmd = self.build_cmd() - let l:cmd = has('win32') - \ ? 'cmd /s /c "' . self.cmd . '"' - \ : ['sh', '-c', self.cmd] - - let l:shell = { - \ 'on_stdout' : function('s:callback_nvim_output'), - \ 'on_stderr' : function('s:callback_nvim_output'), - \ 'cwd' : self.root, - \ 'target' : self.target_path, - \ 'output' : self.output, - \} - - if !self.continuous - let l:shell.on_exit = function('s:callback_nvim_exit') - endif - - " Initialize output file - try - call writefile([], self.output) - endtry - - let self.job = jobstart(l:cmd, l:shell) -endfunction - -" }}}1 -function! s:compiler_nvim.start_single() abort dict " {{{1 - let l:continuous = self.continuous - let self.continuous = 0 - call self.start() - let self.continuous = l:continuous -endfunction - -" }}}1 -function! s:compiler_nvim.kill() abort dict " {{{1 - call jobstop(self.job) -endfunction - -" }}}1 -function! s:compiler_nvim.is_running() abort dict " {{{1 - try - let pid = jobpid(self.job) - return 1 - catch - return 0 - endtry -endfunction - -" }}}1 -function! s:compiler_nvim.get_pid() abort dict " {{{1 - try - return jobpid(self.job) - catch - return 0 - endtry -endfunction - -" }}}1 -function! s:callback_nvim_output(id, data, event) abort dict " {{{1 - " Filter out unwanted newlines - let l:data = split(substitute(join(a:data, 'QQ'), '^QQ\|QQ$', '', ''), 'QQ') - - if !empty(l:data) && filewritable(self.output) - call writefile(l:data, self.output, 'a') - endif - - if match(a:data, 'vimtex_compiler_callback_success') != -1 - call vimtex#compiler#callback(!vimtex#qf#inquire(self.target)) - elseif match(a:data, 'vimtex_compiler_callback_failure') != -1 - call vimtex#compiler#callback(0) - endif - - try - for l:Hook in get(get(get(b:, 'vimtex', {}), 'compiler', {}), 'hooks', []) - call l:Hook(join(a:data, "\n")) - endfor - catch /E716/ - endtry -endfunction - -" }}}1 -function! s:callback_nvim_exit(id, data, event) abort dict " {{{1 - let l:target = self.target !=# b:vimtex.tex ? self.target : '' - call vimtex#compiler#callback(!vimtex#qf#inquire(l:target)) -endfunction - -" }}}1 - -endif diff --git a/autoload/vimtex/compiler/latexrun.vim b/autoload/vimtex/compiler/latexrun.vim deleted file mode 100644 index 01ebc02f..00000000 --- a/autoload/vimtex/compiler/latexrun.vim +++ /dev/null @@ -1,250 +0,0 @@ -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#compiler#latexrun#init(options) abort " {{{1 - let l:compiler = deepcopy(s:compiler) - - call l:compiler.init(extend(a:options, - \ get(g:, 'vimtex_compiler_latexrun', {}), 'keep')) - - return l:compiler -endfunction - -" }}}1 - -let s:compiler = { - \ 'name' : 'latexrun', - \ 'backend' : has('nvim') ? 'nvim' - \ : v:version >= 800 ? 'jobs' : 'process', - \ 'root' : '', - \ 'target' : '', - \ 'target_path' : '', - \ 'background' : 1, - \ 'build_dir' : '', - \ 'output' : tempname(), - \ 'options' : [ - \ '--verbose-cmds', - \ '--latex-args="-synctex=1"', - \ ], - \} - -function! s:compiler.init(options) abort dict " {{{1 - call extend(self, a:options) - - if !executable('latexrun') - call vimtex#log#warning('latexrun is not executable!') - throw 'vimtex: Requirements not met' - endif - - call extend(self, deepcopy(s:compiler_{self.backend})) - - " Processes run with the new jobs api will not run in the foreground - if self.backend !=# 'process' - let self.background = 1 - endif -endfunction - -" }}}1 - -function! s:compiler.build_cmd() abort dict " {{{1 - let l:cmd = 'latexrun' - - for l:opt in self.options - let l:cmd .= ' ' . l:opt - endfor - - let l:cmd .= ' --latex-cmd ' . self.get_engine() - - let l:cmd .= ' -O ' - \ . (empty(self.build_dir) ? '.' : fnameescape(self.build_dir)) - - return l:cmd . ' ' . vimtex#util#shellescape(self.target) -endfunction - -" }}}1 -function! s:compiler.get_engine() abort dict " {{{1 - return get(extend(g:vimtex_compiler_latexrun_engines, - \ { - \ '_' : 'pdflatex', - \ 'pdflatex' : 'pdflatex', - \ 'lualatex' : 'lualatex', - \ 'xelatex' : 'xelatex', - \ }, 'keep'), self.tex_program, '_') -endfunction - -" }}}1 -function! s:compiler.cleanup() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.pprint_items() abort dict " {{{1 - let l:configuration = [] - - if self.backend ==# 'process' - call add(l:configuration, ['background', self.background]) - endif - - if !empty(self.build_dir) - call add(l:configuration, ['build_dir', self.build_dir]) - endif - call add(l:configuration, ['latexrun options', self.options]) - call add(l:configuration, ['latexrun engine', self.get_engine()]) - - let l:list = [] - call add(l:list, ['backend', self.backend]) - if self.background - call add(l:list, ['output', self.output]) - endif - - if self.target_path !=# b:vimtex.tex - call add(l:list, ['root', self.root]) - call add(l:list, ['target', self.target_path]) - endif - - call add(l:list, ['configuration', l:configuration]) - - if has_key(self, 'process') - call add(l:list, ['process', self.process]) - endif - - if has_key(self, 'job') - call add(l:list, ['cmd', self.cmd]) - endif - - return l:list -endfunction - -" }}}1 - -function! s:compiler.clean(...) abort dict " {{{1 - let l:cmd = (has('win32') - \ ? 'cd /D "' . self.root . '" & ' - \ : 'cd ' . vimtex#util#shellescape(self.root) . '; ') - \ . 'latexrun --clean-all' - \ . ' -O ' - \ . (empty(self.build_dir) ? '.' : fnameescape(self.build_dir)) - call vimtex#process#run(l:cmd) - - call vimtex#log#info('Compiler clean finished') -endfunction - -" }}}1 -function! s:compiler.start(...) abort dict " {{{1 - call self.exec() - - if self.background - call vimtex#log#info('Compiler started in background') - else - call vimtex#compiler#callback(!vimtex#qf#inquire(self.target)) - endif -endfunction - -" }}}1 -function! s:compiler.start_single() abort dict " {{{1 - call self.start() -endfunction - -" }}}1 -function! s:compiler.stop() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.is_running() abort dict " {{{1 - return 0 -endfunction - -" }}}1 -function! s:compiler.kill() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.get_pid() abort dict " {{{1 - return 0 -endfunction - -" }}}1 - -let s:compiler_process = {} -function! s:compiler_process.exec() abort dict " {{{1 - let self.process = vimtex#process#new() - let self.process.name = 'latexrun' - let self.process.background = self.background - let self.process.workdir = self.root - let self.process.output = self.output - let self.process.cmd = self.build_cmd() - call self.process.run() -endfunction - -" }}}1 - -let s:compiler_jobs = {} -function! s:compiler_jobs.exec() abort dict " {{{1 - let self.cmd = self.build_cmd() - let l:cmd = has('win32') - \ ? 'cmd /s /c "' . self.cmd . '"' - \ : ['sh', '-c', self.cmd] - let l:options = { - \ 'out_io' : 'file', - \ 'err_io' : 'file', - \ 'out_name' : self.output, - \ 'err_name' : self.output, - \} - - let s:cb_target = self.target_path !=# b:vimtex.tex ? self.target_path : '' - let l:options.exit_cb = function('s:callback') - - call vimtex#paths#pushd(self.root) - let self.job = job_start(l:cmd, l:options) - call vimtex#paths#popd() -endfunction - -" }}}1 -function! s:callback(ch, msg) abort " {{{1 - call vimtex#compiler#callback(!vimtex#qf#inquire(s:cb_target)) -endfunction - -" }}}1 - -let s:compiler_nvim = {} -function! s:compiler_nvim.exec() abort dict " {{{1 - let self.cmd = self.build_cmd() - let l:cmd = has('win32') - \ ? 'cmd /s /c "' . self.cmd . '"' - \ : ['sh', '-c', self.cmd] - - let l:shell = { - \ 'on_stdout' : function('s:callback_nvim_output'), - \ 'on_stderr' : function('s:callback_nvim_output'), - \ 'on_exit' : function('s:callback_nvim_exit'), - \ 'cwd' : self.root, - \ 'target' : self.target_path, - \ 'output' : self.output, - \} - - let self.job = jobstart(l:cmd, l:shell) -endfunction - -" }}}1 -function! s:callback_nvim_output(id, data, event) abort dict " {{{1 - if !empty(a:data) - call writefile(filter(a:data, '!empty(v:val)'), self.output, 'a') - endif -endfunction - -" }}}1 -function! s:callback_nvim_exit(id, data, event) abort dict " {{{1 - let l:target = self.target !=# b:vimtex.tex ? self.target : '' - call vimtex#compiler#callback(!vimtex#qf#inquire(l:target)) -endfunction - -" }}}1 - -endif diff --git a/autoload/vimtex/compiler/tectonic.vim b/autoload/vimtex/compiler/tectonic.vim deleted file mode 100644 index 3b9e8139..00000000 --- a/autoload/vimtex/compiler/tectonic.vim +++ /dev/null @@ -1,255 +0,0 @@ -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#compiler#tectonic#init(options) abort " {{{1 - let l:compiler = deepcopy(s:compiler) - - call l:compiler.init(extend(a:options, - \ get(g:, 'vimtex_compiler_tectonic', {}), 'keep')) - - return l:compiler -endfunction - -" }}}1 - -let s:compiler = { - \ 'name' : 'tectonic', - \ 'backend' : has('nvim') ? 'nvim' - \ : v:version >= 800 ? 'jobs' : 'process', - \ 'root' : '', - \ 'target' : '', - \ 'target_path' : '', - \ 'background' : 1, - \ 'build_dir' : '', - \ 'output' : tempname(), - \ 'options' : [ - \ '--keep-logs', - \ '--synctex' - \ ], - \} - -function! s:compiler.init(options) abort dict " {{{1 - call extend(self, a:options) - - if !executable('tectonic') - call vimtex#log#warning('tectonic is not executable!') - throw 'vimtex: Requirements not met' - endif - - call extend(self, deepcopy(s:compiler_{self.backend})) - - " Processes run with the new jobs api will not run in the foreground - if self.backend !=# 'process' - let self.background = 1 - endif -endfunction - -" }}}1 - -function! s:compiler.build_cmd() abort dict " {{{1 - let l:cmd = 'tectonic' - - for l:opt in self.options - if l:opt =~# '^-\%(o\|-outdir\)' - call vimtex#log#warning("Don't use --outdir or -o in compiler options," - \ . ' use build_dir instead, see :help g:vimtex_compiler_tectonic' - \ . ' for more details') - continue - endif - - let l:cmd .= ' ' . l:opt - endfor - - if empty(self.build_dir) - let self.build_dir = fnamemodify(self.target_path, ':p:h') - elseif !isdirectory(self.build_dir) - call vimtex#log#warning( - \ "build_dir doesn't exist, it will be created: " . self.build_dir) - call mkdir(self.build_dir, 'p') - endif - - return l:cmd - \ . ' --outdir=' . self.build_dir - \ . ' ' . vimtex#util#shellescape(self.target) -endfunction - -" }}}1 -function! s:compiler.cleanup() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.pprint_items() abort dict " {{{1 - let l:configuration = [] - - if self.backend ==# 'process' - call add(l:configuration, ['background', self.background]) - endif - - call add(l:configuration, ['tectonic options', self.options]) - - let l:list = [] - call add(l:list, ['backend', self.backend]) - if self.background - call add(l:list, ['output', self.output]) - endif - - if self.target_path !=# b:vimtex.tex - call add(l:list, ['root', self.root]) - call add(l:list, ['target', self.target_path]) - endif - - call add(l:list, ['configuration', l:configuration]) - - if has_key(self, 'process') - call add(l:list, ['process', self.process]) - endif - - if has_key(self, 'job') - call add(l:list, ['cmd', self.cmd]) - endif - - return l:list -endfunction - -" }}}1 - -function! s:compiler.clean(...) abort dict " {{{1 - let l:files = ['synctex.gz', 'toc', 'out', 'aux', 'log'] - - " If a full clean is required - if a:0 > 0 && a:1 - call extend(l:intermediate, ['pdf']) - endif - - let l:basename = self.build_dir . '/' . fnamemodify(self.target_path, ':t:r') - call map(l:files, 'l:basename . v:val') - - call vimtex#process#run('rm -f ' . join(l:files)) - call vimtex#log#info('Compiler clean finished') -endfunction - -" }}}1 -function! s:compiler.start(...) abort dict " {{{1 - call self.exec() - - if self.background - call vimtex#log#info('Compiler started in background') - else - call vimtex#compiler#callback(!vimtex#qf#inquire(self.target)) - endif -endfunction - -" }}}1 -function! s:compiler.start_single() abort dict " {{{1 - call self.start() -endfunction - -" }}}1 -function! s:compiler.stop() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.is_running() abort dict " {{{1 - return 0 -endfunction - -" }}}1 -function! s:compiler.kill() abort dict " {{{1 - " Pass -endfunction - -" }}}1 -function! s:compiler.get_pid() abort dict " {{{1 - return 0 -endfunction - -" }}}1 - -let s:compiler_process = {} -function! s:compiler_process.exec() abort dict " {{{1 - let self.process = vimtex#process#new() - let self.process.name = 'tectonic' - let self.process.background = self.background - let self.process.workdir = self.root - let self.process.output = self.output - let self.process.cmd = self.build_cmd() - call self.process.run() -endfunction - -" }}}1 - -let s:compiler_jobs = {} -function! s:compiler_jobs.exec() abort dict " {{{1 - let self.cmd = self.build_cmd() - let l:cmd = has('win32') - \ ? 'cmd /s /c "' . self.cmd . '"' - \ : ['sh', '-c', self.cmd] - let l:options = { - \ 'out_io' : 'file', - \ 'err_io' : 'file', - \ 'out_name' : self.output, - \ 'err_name' : self.output, - \} - - let s:cb_target = self.target_path !=# b:vimtex.tex ? self.target_path : '' - let l:options.exit_cb = function('s:callback') - - if !empty(self.root) - let l:save_pwd = getcwd() - execute 'lcd' fnameescape(self.root) - endif - let self.job = job_start(l:cmd, l:options) - if !empty(self.root) - execute 'lcd' fnameescape(l:save_pwd) - endif -endfunction - -" }}}1 -function! s:callback(ch, msg) abort " {{{1 - call vimtex#compiler#callback(!vimtex#qf#inquire(s:cb_target)) -endfunction - -" }}}1 - -let s:compiler_nvim = {} -function! s:compiler_nvim.exec() abort dict " {{{1 - let self.cmd = self.build_cmd() - let l:cmd = has('win32') - \ ? 'cmd /s /c "' . self.cmd . '"' - \ : ['sh', '-c', self.cmd] - - let l:shell = { - \ 'on_stdout' : function('s:callback_nvim_output'), - \ 'on_stderr' : function('s:callback_nvim_output'), - \ 'on_exit' : function('s:callback_nvim_exit'), - \ 'cwd' : self.root, - \ 'target' : self.target_path, - \ 'output' : self.output, - \} - - let self.job = jobstart(l:cmd, l:shell) -endfunction - -" }}}1 -function! s:callback_nvim_output(id, data, event) abort dict " {{{1 - if !empty(a:data) - call writefile(filter(a:data, '!empty(v:val)'), self.output, 'a') - endif -endfunction - -" }}}1 -function! s:callback_nvim_exit(id, data, event) abort dict " {{{1 - let l:target = self.target !=# b:vimtex.tex ? self.target : '' - call vimtex#compiler#callback(!vimtex#qf#inquire(l:target)) -endfunction - -" }}}1 - -endif |