summaryrefslogtreecommitdiffstats
path: root/ftplugin/latex-box
diff options
context:
space:
mode:
Diffstat (limited to 'ftplugin/latex-box')
-rw-r--r--ftplugin/latex-box/common.vim38
-rw-r--r--ftplugin/latex-box/complete.vim3
-rw-r--r--ftplugin/latex-box/findmain.vim10
-rw-r--r--ftplugin/latex-box/folding.vim115
-rw-r--r--ftplugin/latex-box/latexmk.vim35
-rw-r--r--ftplugin/latex-box/mappings.vim6
-rw-r--r--ftplugin/latex-box/motion.vim26
7 files changed, 156 insertions, 77 deletions
diff --git a/ftplugin/latex-box/common.vim b/ftplugin/latex-box/common.vim
index 72a6ef0f..bf6305cc 100644
--- a/ftplugin/latex-box/common.vim
+++ b/ftplugin/latex-box/common.vim
@@ -25,8 +25,20 @@ setlocal efm+=%E!\ %m
" More info for undefined control sequences
setlocal efm+=%Z<argument>\ %m
+" More info for some errors
+setlocal efm+=%Cl.%l\ %m
+
" Show or ignore warnings
if g:LatexBox_show_warnings
+ " Parse biblatex warnings
+ setlocal efm+=%-C(biblatex)%.%#in\ t%.%#
+ setlocal efm+=%-C(biblatex)%.%#Please\ v%.%#
+ setlocal efm+=%-C(biblatex)%.%#LaTeX\ a%.%#
+ setlocal efm+=%-Z(biblatex)%m
+
+ " Parse hyperref warnings
+ setlocal efm+=%-C(hyperref)%.%#on\ input\ line\ %l.
+
for w in g:LatexBox_ignore_warnings
let warning = escape(substitute(w, '[\,]', '%\\\\&', 'g'), ' ')
exe 'setlocal efm+=%-G%.%#'. warning .'%.%#'
@@ -44,6 +56,7 @@ endif
" Push file to file stack
setlocal efm+=%+P**%f
+setlocal efm+=%+P**\"%f\"
" Ignore unmatched lines
setlocal efm+=%-G%.%#
@@ -114,8 +127,8 @@ function! LatexBox_GetMainTexFile()
endif
" 5. borrow the Vim-Latex-Suite method of finding it
- if Tex_GetMainFileName() != expand('%:p')
- let b:main_tex_file = Tex_GetMainFileName()
+ if LatexBox_GetMainFileName() != expand('%:p')
+ let b:main_tex_file = LatexBox_GetMainFileName()
return b:main_tex_file
endif
@@ -127,6 +140,8 @@ endfunction
function! s:PromptForMainFile()
let saved_dir = getcwd()
execute 'cd ' . fnameescape(expand('%:p:h'))
+
+ " Prompt for file
let l:file = ''
while !filereadable(l:file)
let l:file = input('main LaTeX file: ', '', 'file')
@@ -135,6 +150,16 @@ function! s:PromptForMainFile()
endif
endwhile
let l:file = fnamemodify(l:file, ':p')
+
+ " Make persistent
+ let l:persistent = ''
+ while l:persistent !~ '\v^(y|n)'
+ let l:persistent = input('make choice persistent? (y, n) ')
+ if l:persistent == 'y'
+ call writefile([], l:file . '.latexmain')
+ endif
+ endwhile
+
execute 'cd ' . fnameescape(saved_dir)
return l:file
endfunction
@@ -212,15 +237,16 @@ if !exists('g:LatexBox_viewer')
endif
endif
-function! LatexBox_View()
+function! LatexBox_View(...)
+ let lvargs = join(a:000, ' ')
let outfile = LatexBox_GetOutputFile()
if !filereadable(outfile)
echomsg fnamemodify(outfile, ':.') . ' is not readable'
return
endif
- let cmd = g:LatexBox_viewer . ' ' . shellescape(outfile)
+ let cmd = g:LatexBox_viewer . ' ' . lvargs . ' ' . shellescape(outfile)
if has('win32')
- let cmd = '!start /b' . cmd . ' >nul'
+ let cmd = '!start /b ' . cmd . ' >nul'
else
let cmd = '!' . cmd . ' &>/dev/null &'
endif
@@ -230,7 +256,7 @@ function! LatexBox_View()
endif
endfunction
-command! LatexView call LatexBox_View()
+command! -nargs=* LatexView call LatexBox_View('<args>')
" }}}
" In Comment {{{
diff --git a/ftplugin/latex-box/complete.vim b/ftplugin/latex-box/complete.vim
index 866ffc3c..458e8d81 100644
--- a/ftplugin/latex-box/complete.vim
+++ b/ftplugin/latex-box/complete.vim
@@ -328,6 +328,7 @@ function! LatexBox_BibComplete(regexp)
let type = printf('%-' . s:type_length . 's', type)
let auth = m['author'] == '' ? '' : m['author'][:20] . ' '
let auth = substitute(auth, '\~', ' ', 'g')
+ let auth = substitute(auth, ',.*\ze', ' et al. ', '')
let year = m['year'] == '' ? '' : '(' . m['year'] . ')'
let w = { 'word': m['key'],
\ 'abbr': type . auth . year,
@@ -365,7 +366,7 @@ function! s:ExtractLabels()
let curname = strpart( getline( lblline ), lblbegin, nameend - lblbegin - 1 )
" Ignore cref entries (because they are duplicates)
- if curname =~ "\@cref\|cref\@"
+ if curname =~# "@cref$"
continue
endif
diff --git a/ftplugin/latex-box/findmain.vim b/ftplugin/latex-box/findmain.vim
index 0b9c404f..622c408f 100644
--- a/ftplugin/latex-box/findmain.vim
+++ b/ftplugin/latex-box/findmain.vim
@@ -1,4 +1,4 @@
-" Tex_GetMainFileName: gets the name of the main file being compiled. {{{
+" LatexBox_GetMainFileName: gets the name of the main file being compiled. {{{
" Description: returns the full path name of the main file.
" This function checks for the existence of a .latexmain file
" which might point to the location of a "main" latex file.
@@ -13,7 +13,8 @@
" NOTE: From version 1.6 onwards, this function always trims
" away the .latexmain part of the file name before applying the
" modifier argument.
-function! Tex_GetMainFileName(...)
+" NOTE: This function is copied from the Latex-Suite project!
+function! LatexBox_GetMainFileName(...)
if a:0 > 0
let modifier = a:1
else
@@ -51,10 +52,7 @@ function! Tex_GetMainFileName(...)
let lheadfile = expand('%'.modifier)
endif
- if lheadfile !~ '\.tex$'
- let lheadfile .= '.tex'
- endif
- exe 'cd '.s:origdir
+ exe 'cd '.s:origdir
" NOTE: The caller of this function needs to escape the file name with
" fnameescape() . The reason its not done here is that escaping is not
diff --git a/ftplugin/latex-box/folding.vim b/ftplugin/latex-box/folding.vim
index badfc137..4fe13bc8 100644
--- a/ftplugin/latex-box/folding.vim
+++ b/ftplugin/latex-box/folding.vim
@@ -1,29 +1,22 @@
" Folding support for LaTeX
+
"
" Options
-" g:LatexBox_Folding - Turn on/off folding
-" g:LatexBox_fold_preamble - Turn on/off folding of preamble
-" g:LatexBox_fold_parts - Define parts (eq. appendix, frontmatter) to fold
-" g:LatexBox_fold_sections - Define section levels to fold
-" g:LatexBox_fold_envs - Turn on/off folding of environments
+" g:LatexBox_Folding - Turn on/off folding
+" g:LatexBox_fold_text - Turn on/off LatexBox fold text function
+" g:LatexBox_fold_preamble - Turn on/off folding of preamble
+" g:LatexBox_fold_parts - Define parts (eq. appendix, frontmatter) to fold
+" g:LatexBox_fold_sections - Define section levels to fold
+" g:LatexBox_fold_envs - Turn on/off folding of environments
+" g:LatexBox_fold_toc - Turn on/off folding of TOC
+" g:LatexBox_fold_toc_levels - Set max TOC fold level
"
-
-" {{{1 Set options
-if exists('g:LatexBox_Folding') && g:LatexBox_Folding == 1
- setl foldmethod=expr
- setl foldexpr=LatexBox_FoldLevel(v:lnum)
- setl foldtext=LatexBox_FoldText()
- "
- " The foldexpr function returns "=" for most lines, which means it can become
- " slow for large files. The following is a hack that is based on this reply to
- " a discussion on the Vim Developer list:
- " http://permalink.gmane.org/gmane.editors.vim.devel/14100
- "
- augroup FastFold
- autocmd!
- autocmd InsertEnter *.tex setlocal foldmethod=manual
- autocmd InsertLeave *.tex setlocal foldmethod=expr
- augroup end
+" {{{1 Initialize options to default values.
+if !exists('g:LatexBox_Folding')
+ let g:LatexBox_Folding=0
+endif
+if !exists('g:LatexBox_fold_text')
+ let g:LatexBox_fold_text=1
endif
if !exists('g:LatexBox_fold_preamble')
let g:LatexBox_fold_preamble=1
@@ -57,7 +50,45 @@ endif
if !exists('g:LatexBox_fold_toc_levels')
let g:LatexBox_fold_toc_levels=1
endif
+if !exists('g:LatexBox_fold_automatic')
+ let g:LatexBox_fold_automatic=1
+endif
+" }}}1
+if g:LatexBox_Folding == 0
+ finish
+endif
+
+" {{{1 Set folding options for vim
+setl foldexpr=LatexBox_FoldLevel(v:lnum)
+if g:LatexBox_fold_text == 1
+ setl foldtext=LatexBox_FoldText()
+endif
+if g:LatexBox_fold_automatic == 1
+ setl foldmethod=expr
+
+ "
+ " The foldexpr function returns "=" for most lines, which means it can become
+ " slow for large files. The following is a hack that is based on this reply to
+ " a discussion on the Vim Developer list:
+ " http://permalink.gmane.org/gmane.editors.vim.devel/14100
+ "
+ augroup FastFold
+ autocmd!
+ autocmd InsertEnter *.tex setlocal foldmethod=manual
+ autocmd InsertLeave *.tex setlocal foldmethod=expr
+ augroup end
+else
+ setl foldmethod=manual
+endif
+
+function! LatexBox_FoldOnDemand()
+ setl foldmethod=expr
+ normal! zx
+ setl foldmethod=manual
+endfunction
+
+command! LatexFold call LatexBox_FoldOnDemand()
" {{{1 LatexBox_FoldLevel help functions
@@ -137,9 +168,9 @@ function! LatexBox_FoldLevel(lnum)
" Fold preamble
if g:LatexBox_fold_preamble == 1
- if line =~# '\s*\\documentclass'
+ if line =~# s:notcomment . s:notbslash . '\s*\\documentclass'
return ">1"
- elseif line =~# '^\s*\\begin\s*{\s*document\s*}'
+ elseif line =~# s:notcomment . s:notbslash . '\s*\\begin\s*{\s*document\s*}'
return "0"
endif
endif
@@ -247,24 +278,13 @@ function! s:CaptionFrame(line)
endif
endfunction
-" {{{1 LatexBox_FoldText
-function! LatexBox_FoldText()
- " Initialize
+function! LatexBox_FoldText_title()
let line = getline(v:foldstart)
- let nlines = v:foldend - v:foldstart + 1
- let level = ''
let title = 'Not defined'
- " Fold level
- let level = strpart(repeat('-', v:foldlevel-1) . '*',0,3)
- if v:foldlevel > 3
- let level = strpart(level, 1) . v:foldlevel
- endif
- let level = printf('%-3s', level)
-
" Preamble
if line =~ '\s*\\documentclass'
- let title = "Preamble"
+ return "Preamble"
endif
" Parts, sections and fakesections
@@ -280,11 +300,11 @@ function! LatexBox_FoldText()
elseif line =~ '\\appendix'
let title = "Appendix"
elseif line =~ secpat1 . '.*}'
- let title = matchstr(line, secpat1 . '\zs.*\ze}')
+ let title = matchstr(line, secpat1 . '\zs.\{-}\ze}')
elseif line =~ secpat1
let title = matchstr(line, secpat1 . '\zs.*')
elseif line =~ secpat2 . '.*\]'
- let title = matchstr(line, secpat2 . '\zs.*\ze\]')
+ let title = matchstr(line, secpat2 . '\zs.\{-}\ze\]')
elseif line =~ secpat2
let title = matchstr(line, secpat2 . '\zs.*')
elseif line =~ 'Fake' . sections . ':'
@@ -330,7 +350,22 @@ function! LatexBox_FoldText()
endif
endif
- let title = strpart(title, 0, 68)
+ return title
+endfunction
+
+" {{{1 LatexBox_FoldText
+function! LatexBox_FoldText()
+ let nlines = v:foldend - v:foldstart + 1
+ let title = strpart(LatexBox_FoldText_title(), 0, 68)
+ let level = ''
+
+ " Fold level
+ let level = strpart(repeat('-', v:foldlevel-1) . '*',0,3)
+ if v:foldlevel > 3
+ let level = strpart(level, 1) . v:foldlevel
+ endif
+ let level = printf('%-3s', level)
+
return printf('%-3s %-68s #%5d', level, title, nlines)
endfunction
diff --git a/ftplugin/latex-box/latexmk.vim b/ftplugin/latex-box/latexmk.vim
index dfa55f0e..bb70f83d 100644
--- a/ftplugin/latex-box/latexmk.vim
+++ b/ftplugin/latex-box/latexmk.vim
@@ -413,23 +413,38 @@ function! LatexBox_LatexErrors(status, ...)
if a:status < 0
botright copen
else
- " Write status message to screen
- redraw
- if a:status > 0 || len(getqflist())>1
- echomsg 'Compiling to ' . g:LatexBox_output_type . ' ... failed!'
- else
- echomsg 'Compiling to ' . g:LatexBox_output_type . ' ... success!'
- endif
-
" Only open window when an error/warning is detected
- if g:LatexBox_quickfix
+ if g:LatexBox_quickfix >= 3
+ \ ? s:log_contains_error(log)
+ \ : g:LatexBox_quickfix > 0
belowright cw
- if g:LatexBox_quickfix==2
+ if g:LatexBox_quickfix == 2 || g:LatexBox_quickfix == 4
wincmd p
endif
endif
+ redraw
+
+ " Write status message to screen
+ if a:status > 0 || len(getqflist())>1
+ if s:log_contains_error(log)
+ let l:status_msg = ' ... failed!'
+ else
+ let l:status_msg = ' ... there were warnings!'
+ endif
+ else
+ let l:status_msg = ' ... success!'
+ endif
+ echomsg 'Compiling to ' . g:LatexBox_output_type . l:status_msg
endif
endfunction
+
+function! s:log_contains_error(file)
+ let lines = readfile(a:file)
+ let lines = filter(lines, 'v:val =~ ''^.*:\d\+: ''')
+ let lines = uniq(map(lines, 'matchstr(v:val, ''^.*\ze:\d\+:'')'))
+ let lines = filter(lines, 'filereadable(fnameescape(v:val))')
+ return len(lines) > 0
+endfunction
" }}}
" LatexmkStatus {{{
diff --git a/ftplugin/latex-box/mappings.vim b/ftplugin/latex-box/mappings.vim
index 6ff621c1..648d9b56 100644
--- a/ftplugin/latex-box/mappings.vim
+++ b/ftplugin/latex-box/mappings.vim
@@ -27,6 +27,12 @@ map <silent> <buffer> <LocalLeader>lt :LatexTOC<CR>
map <silent> <buffer> <LocalLeader>lj :LatexLabels<CR>
" }}}
+" Folding {{{
+if g:LatexBox_Folding == 1
+ map <buffer> <LocalLeader>lf :LatexFold<CR>
+endif
+" }}}
+
" Jump to match {{{
if !exists('g:LatexBox_loaded_matchparen')
nmap <buffer> % <Plug>LatexBox_JumpToMatch
diff --git a/ftplugin/latex-box/motion.vim b/ftplugin/latex-box/motion.vim
index 04275aca..41605aea 100644
--- a/ftplugin/latex-box/motion.vim
+++ b/ftplugin/latex-box/motion.vim
@@ -345,24 +345,22 @@ function! s:ReadTOC(auxfile, texfile, ...)
endif
" parse section number
let secnum = ''
- if len(tree[1]) > 3 && empty(tree[1][1])
- call remove(tree[1], 1)
+ let tree = tree[1]
+ if len(tree) > 3 && empty(tree[1])
+ call remove(tree, 1)
endif
- if len(tree[1]) > 1 && tree[1][0] =~ '\(numberline\|tocsection\)'
- if !empty(tree[1][1])
- let secnum = LatexBox_TreeToTex(tree[1][1])
- let secnum = substitute(secnum, '\\\S\+\s', '', 'g')
- let secnum = substitute(secnum, '\\\S\+{\(.\{-}\)}', '\1', 'g')
- let secnum = substitute(secnum, '^{\+\|}\+$', '', 'g')
- endif
- let tree = tree[1][2:]
- else
- let tree = tree[1]
+ if len(tree) > 1 && tree[0] =~ '^\\\(numberline\|tocsection\)'
+ let secnum = LatexBox_TreeToTex(tree[1])
+ let secnum = substitute(secnum, '\\\S\+\s', '', 'g')
+ let secnum = substitute(secnum, '\\\S\+{\(.\{-}\)}', '\1', 'g')
+ let secnum = substitute(secnum, '^{\+\|}\+$', '', 'g')
+ call remove(tree, 1)
endif
" parse section title
let text = LatexBox_TreeToTex(tree)
- let text = substitute(text, '^{\+\|}\+$', '', 'g')
- let text = substitute(text, '\*', '', 'g')
+ let text = substitute(text, '^{\+\|}\+$', '', 'g')
+ let text = substitute(text, '\m^\\\(no\)\?numberline\s*', '', '')
+ let text = substitute(text, '\*', '', 'g')
" add TOC entry
call add(fileindices[texfile], len(toc))