aboutsummaryrefslogtreecommitdiff
path: root/dot_vim/ftplugin/latex-suite/texviewer.vim
diff options
context:
space:
mode:
Diffstat (limited to 'dot_vim/ftplugin/latex-suite/texviewer.vim')
-rw-r--r--dot_vim/ftplugin/latex-suite/texviewer.vim1052
1 files changed, 0 insertions, 1052 deletions
diff --git a/dot_vim/ftplugin/latex-suite/texviewer.vim b/dot_vim/ftplugin/latex-suite/texviewer.vim
deleted file mode 100644
index 4dc8861..0000000
--- a/dot_vim/ftplugin/latex-suite/texviewer.vim
+++ /dev/null
@@ -1,1052 +0,0 @@
-" ============================================================================
-" File: texviewer.vim
-" Author: Mikolaj Machowski
-" Created: Sun Jan 26 06:00 PM 2003
-" Description: make a viewer for various purposes: \cite{, \ref{
-" License: Vim Charityware License
-" Part of vim-latexSuite: http://vim-latex.sourceforge.net
-" CVS: $Id: texviewer.vim 1004 2006-03-25 08:40:15Z srinathava $
-" ============================================================================
-" Tex_SetTexViewerMaps: sets maps for this ftplugin {{{
-function! Tex_SetTexViewerMaps()
- inoremap <silent> <Plug>Tex_Completion <Esc>:call Tex_Complete("default","text")<CR>
- if !hasmapto('<Plug>Tex_Completion', 'i')
- if has('gui_running')
- imap <buffer> <silent> <F9> <Plug>Tex_Completion
- else
- imap <buffer> <F9> <Plug>Tex_Completion
- endif
- endif
-endfunction
-
-augroup LatexSuite
- au LatexSuite User LatexSuiteFileType
- \ call Tex_Debug('texviewer.vim: Catching LatexSuiteFileType event', 'view') |
- \ call Tex_SetTexViewerMaps()
-augroup END
-
-command -nargs=1 TLook call Tex_Complete(<q-args>, 'tex')
-command -nargs=1 TLookAll call Tex_Complete(<q-args>, 'all')
-command -nargs=1 TLookBib call Tex_Complete(<q-args>, 'bib')
-
-" }}}
-
-" ==============================================================================
-" Main completion function
-" ==============================================================================
-" Tex_Complete: main function {{{
-" Description:
-function! Tex_Complete(what, where)
-
- " Get info about current window and position of cursor in file
- let s:winnum = winnr()
-
- " Change to the directory of the file being edited before running all the
- " :grep commands. We will change back to the original directory after we
- " finish with the grep.
- let s:origdir = getcwd()
- cd %:p:h
-
- let s:pos = line('.').' | normal! '.virtcol('.').'|'
-
- unlet! s:type
- unlet! s:typeoption
-
- if Tex_GetVarValue('Tex_WriteBeforeCompletion') == 1
- wall
- endif
-
- if a:where == "text"
- " What to do after <F9> depending on context
- let s:curfile = expand("%:p")
- let s:curline = strpart(getline('.'), 0, col('.'))
- let s:prefix = matchstr(s:curline, '.*{\zs.\{-}\(}\|$\)')
- " a command is of the type
- " \psfig[option=value]{figure=}
- " Thus
- " s:curline = '\psfig[option=value]{figure='
- " (with possibly some junk before \psfig)
- " from which we need to extract
- " s:type = 'psfig'
- " s:typeoption = '[option=value]'
- let pattern = '.*\\\(\w\{-}\)\(\[.\{-}\]\)\?{\(\S\+\)\?$'
- if s:curline =~ pattern
- let s:type = substitute(s:curline, pattern, '\1', 'e')
- let s:typeoption = substitute(s:curline, pattern, '\2', 'e')
- call Tex_Debug('Tex_Complete: s:type = '.s:type.', typeoption = '.s:typeoption, 'view')
- endif
-
- if exists("s:type") && s:type =~ 'ref'
- if Tex_GetVarValue('Tex_UseOutlineCompletion') == 1
- call Tex_Debug("Tex_Complete: using outline search method", "view")
- call Tex_StartOutlineCompletion()
-
- elseif Tex_GetVarValue('Tex_UseSimpleLabelSearch') == 1
- call Tex_Debug("Tex_Complete: searching for \\labels in all .tex files in the present directory", "view")
- call Tex_Debug("Tex_Complete: silent! grep! ".Tex_EscapeForGrep('\\label{'.s:prefix)." *.tex", 'view')
- call Tex_Grep('\\label{'.s:prefix, '*.tex')
- call <SID>Tex_SetupCWindow()
-
- elseif Tex_GetVarValue('Tex_ProjectSourceFiles') != ''
- call Tex_Debug('Tex_Complete: searching for \\labels in all Tex_ProjectSourceFiles', 'view')
- call Tex_CD(Tex_GetMainFileName(':p:h'))
- call Tex_Grep('\\label{'.s:prefix, Tex_GetVarValue('Tex_ProjectSourceFiles'))
- call <SID>Tex_SetupCWindow()
-
- else
- call Tex_Debug("Tex_Complete: calling Tex_GrepHelper", "view")
- silent! grep! ____HIGHLY_IMPROBABLE___ %
- call Tex_GrepHelper(s:prefix, 'label')
- call <SID>Tex_SetupCWindow()
- endif
-
- redraw!
-
- elseif exists("s:type") && s:type =~ 'cite'
-
- let s:prefix = matchstr(s:prefix, '\([^,]\+,\)*\zs\([^,]\+\)\ze$')
- call Tex_Debug(":Tex_Complete: using s:prefix = ".s:prefix, "view")
-
- if has('python') && Tex_GetVarValue('Tex_UsePython')
- \ && Tex_GetVarValue('Tex_UseCiteCompletionVer2') == 1
-
- call Tex_CD(s:origdir)
- silent! call Tex_StartCiteCompletion()
-
- elseif Tex_GetVarValue('Tex_UseJabref') == 1
-
- call Tex_CD(s:origdir)
- let g:Remote_WaitingForCite = 1
- let citation = input('Enter citation from jabref (<enter> to leave blank): ')
- let g:Remote_WaitingForCite = 0
- call Tex_CompleteWord(citation)
-
- else
- " grep! nothing %
- " does _not_ clear the search history contrary to what the
- " help-docs say. This was expected. So use something improbable.
- " TODO: Is there a way to clear the search-history w/o making a
- " useless, inefficient search?
- silent! grep! ____HIGHLY_IMPROBABLE___ %
- if g:Tex_RememberCiteSearch && exists('s:citeSearchHistory')
- call <SID>Tex_SetupCWindow(s:citeSearchHistory)
- else
- call Tex_GrepHelper(s:prefix, 'bib')
- redraw!
- call <SID>Tex_SetupCWindow()
- endif
- if g:Tex_RememberCiteSearch && &ft == 'qf'
- let _a = @a
- silent! normal! ggVG"ay
- let s:citeSearchHistory = @a
- let @a = _a
- endif
- endif
-
- elseif exists("s:type") && (s:type =~ 'includegraphics' || s:type == 'psfig')
- call Tex_SetupFileCompletion(
- \ '',
- \ '^\.\\|\.tex$\\|\.bib$\\|\.bbl$\\|\.zip$\\|\.gz$',
- \ 'noext')
-
- elseif exists("s:type") && s:type == 'bibliography'
- call Tex_SetupFileCompletion(
- \ '\.b..$',
- \ '',
- \ 'noext')
-
- elseif exists("s:type") && s:type =~ 'include\(only\)\='
- call Tex_SetupFileCompletion(
- \ '\.t..$',
- \ '',
- \ 'noext')
-
- elseif exists("s:type") && s:type == 'input'
- call Tex_SetupFileCompletion(
- \ '',
- \ '',
- \ 'ext')
-
- elseif exists('s:type') && exists("g:Tex_completion_".s:type)
- call <SID>Tex_CompleteRefCiteCustom('plugin_'.s:type)
-
- else
- let s:word = expand('<cword>')
- if s:word == ''
- if col('.') == strlen(getline('.'))
- startinsert!
- return
- else
- normal! l
- startinsert
- return
- endif
- endif
- call Tex_Debug("silent! grep! ".Tex_EscapeForGrep('\<'.s:word.'\>')." *.tex", 'view')
- call Tex_Grep('\<'.s:word.'\>', '*.tex')
-
- call <SID>Tex_SetupCWindow()
- endif
-
- elseif a:where == 'tex'
- " Process :TLook command
- call Tex_Grep(a:what, "*.tex")
- call <SID>Tex_SetupCWindow()
-
- elseif a:where == 'bib'
- " Process :TLookBib command
- call Tex_Grep(a:what, "*.bib")
- call Tex_Grepadd(a:what, "*.bbl")
- call <SID>Tex_SetupCWindow()
-
- elseif a:where == 'all'
- " Process :TLookAll command
- call Tex_Grep(a:what, "*")
- call <SID>Tex_SetupCWindow()
- endif
-
-endfunction
-" }}}
-" Tex_CompleteWord: inserts a word at the chosen location {{{
-" Description: This function is meant to be called when the user press
-" ``<enter>`` in one of the [Error List] windows which shows the list of
-" matches. completeword is the rest of the word which needs to be inserted.
-function! Tex_CompleteWord(completeword)
- exe s:pos
-
- " Complete word, check if add closing }
- exe 'normal! a'.a:completeword."\<Esc>"
-
- if getline('.')[col('.')-1] !~ '{' && getline('.')[col('.')] !~ '}'
- exe "normal! a}\<Esc>"
- endif
-
- " Return to Insert mode
- if col('.') == strlen(getline('.'))
- startinsert!
- else
- normal! l
- startinsert
- endif
-endfunction " }}}
-
-" ==============================================================================
-" File name completion helper functons
-" ==============================================================================
-" Tex_SetupFileCompletion: {{{
-" Description:
-function! Tex_SetupFileCompletion(accept, reject, ext)
- call FB_SetVar('FB_AllowRegexp', a:accept)
- call FB_SetVar('FB_RejectRegexp', a:reject)
- call FB_SetVar('FB_CallBackFunction', 'Tex_CompleteFileName')
- call FB_SetVar('FB_CallBackFunctionArgs', '"'.a:ext.'"')
-
- call FB_OpenFileBrowser('.')
-endfunction " }}}
-" Tex_CompleteFileName: {{{
-" Description:
-function! Tex_CompleteFileName(filename, ext)
- call Tex_Debug('+Tex_CompleteFileName: getting filename '.a:filename, 'view')
-
- if a:ext == 'noext'
- let completeword = fnamemodify(a:filename, ':r')
- endif
- let completeword = Tex_RelPath(completeword, Tex_GetMainFileName(':p:h'))
-
- call Tex_Debug(":Tex_CompleteFileName: completing with ".completeword, "view")
- call Tex_CompleteWord(completeword)
-endfunction " }}}
-" Tex_Common: common part of strings {{{
-function! s:Tex_Common(path1, path2)
- " Assume the caller handles 'ignorecase'
- if a:path1 == a:path2
- return a:path1
- endif
- let n = 0
- while a:path1[n] == a:path2[n]
- let n = n+1
- endwhile
- return strpart(a:path1, 0, n)
-endfunction " }}}
-" Tex_NormalizePath: {{{
-" Description:
-function! Tex_NormalizePath(path)
- let retpath = a:path
- if has("win32") || has("win16") || has("dos32") || has("dos16")
- let retpath = substitute(retpath, '\\', '/', 'ge')
- endif
- if isdirectory(retpath) && retpath !~ '/$'
- let retpath = retpath.'/'
- endif
- return retpath
-endfunction " }}}
-" Tex_RelPath: ultimate file name {{{
-function! Tex_RelPath(explfilename,texfilename)
- let path1 = Tex_NormalizePath(a:explfilename)
- let path2 = Tex_NormalizePath(a:texfilename)
-
- let n = matchend(<SID>Tex_Common(path1, path2), '.*/')
- let path1 = strpart(path1, n)
- let path2 = strpart(path2, n)
- if path2 !~ '/'
- let subrelpath = ''
- else
- let subrelpath = substitute(path2, '[^/]\{-}/', '../', 'ge')
- let subrelpath = substitute(subrelpath, '[^/]*$', '', 'ge')
- endif
- let relpath = subrelpath.path1
- return escape(Tex_NormalizePath(relpath), ' ')
-endfunction " }}}
-
-" ==============================================================================
-" Helper functions for dealing with the 'quickfix' and 'preview' windows.
-" ==============================================================================
-" Tex_SetupCWindow: set maps and local settings for cwindow {{{
-" Description: Set local maps jkJKq<cr> for cwindow. Also size and basic
-" settings
-"
-function! s:Tex_SetupCWindow(...)
- call Tex_Debug('+Tex_SetupCWindow', 'view')
- cclose
- exe 'copen '. g:Tex_ViewerCwindowHeight
- " If called with an argument, it means we want to re-use some search
- " history from last time. Therefore, just paste it here and proceed.
- if a:0 == 1
- set modifiable
- % d _
- silent! 0put!=a:1
- $ d _
- endif
- setlocal nonumber
- setlocal nowrap
-
- let s:scrollOffVal = &scrolloff
- call <SID>Tex_SyncPreviewWindow()
-
- " If everything went well, then we should be situated in the quickfix
- " window. If there were problems, (no matches etc), then we will not be.
- " Therefore return.
- if &ft != 'qf'
- call Tex_Debug('not in quickfix window, quitting', 'view')
- return
- endif
-
- nnoremap <buffer> <silent> j j:call <SID>Tex_SyncPreviewWindow()<CR>
- nnoremap <buffer> <silent> k k:call <SID>Tex_SyncPreviewWindow()<CR>
- nnoremap <buffer> <silent> <up> <up>:call <SID>Tex_SyncPreviewWindow()<CR>
- nnoremap <buffer> <silent> <down> <down>:call <SID>Tex_SyncPreviewWindow()<CR>
-
- " Change behaviour of <cr> only for 'ref' and 'cite' context.
- if exists("s:type") && s:type =~ 'ref\|cite'
- exec 'nnoremap <buffer> <silent> <cr> '
- \ .':set scrolloff='.s:scrollOffVal.'<CR>'
- \ .':cd '.s:origdir.'<CR>'
- \ .':silent! call <SID>Tex_CompleteRefCiteCustom("'.s:type.'")<CR>'
-
- else
- " In other contexts jump to place described in cwindow and close small
- " windows
- exec 'nnoremap <buffer> <silent> <cr> '
- \ .':set scrolloff='.s:scrollOffVal.'<CR>'
- \ .':cd '.s:origdir.'<CR>'
- \ .':call <SID>Tex_GoToLocation()<cr>'
-
- endif
-
- " Scroll the preview window while in the quickfix window
- nnoremap <buffer> <silent> J :wincmd j<cr><c-e>:wincmd k<cr>
- nnoremap <buffer> <silent> K :wincmd j<cr><c-y>:wincmd k<cr>
-
- " Exit the quickfix window without doing anything.
- exe 'nnoremap <buffer> <silent> q '
- \ .':set scrolloff='.s:scrollOffVal.'<CR>'
- \ .':cd '.s:origdir.'<CR>'
- \ .':call Tex_CloseSmallWindows()<CR>'
-
-endfunction " }}}
-" Tex_CompleteRefCiteCustom: complete/insert name for current item {{{
-" Description: handle completion of items depending on current context
-"
-function! s:Tex_CompleteRefCiteCustom(type)
-
- if a:type =~ 'cite'
- if getline('.') =~ '\\bibitem{'
- let bibkey = matchstr(getline('.'), '\\bibitem{\zs.\{-}\ze}')
- else
- let bibkey = matchstr(getline('.'), '{\zs.\{-}\ze\(,\|$\)')
- endif
- let completeword = strpart(bibkey, strlen(s:prefix))
-
- elseif a:type =~ 'ref'
- let label = matchstr(getline('.'), '\\label{\zs.\{-}\ze}')
- let completeword = strpart(label, strlen(s:prefix))
-
- elseif a:type =~ '^plugin_'
- let type = substitute(a:type, '^plugin_', '', '')
- let completeword = <SID>Tex_DoCompletion(type)
-
- endif
-
- call Tex_CloseSmallWindows()
- call Tex_Debug(":Tex_CompleteRefCiteCustom: completing with ".completeword, "view")
- call Tex_CompleteWord(completeword)
-endfunction " }}}
-" Tex_SyncPreviewWindow: synchronize quickfix and preview window {{{
-" Description: Usually quickfix engine takes care about most of these things
-" but we discard it for better control of events.
-"
-function! s:Tex_SyncPreviewWindow()
- call Tex_Debug('+Tex_SyncPreviewWindow', 'view')
-
- let viewfile = matchstr(getline('.'), '^\f*\ze|\d')
- let viewline = matchstr(getline('.'), '|\zs\d\+\ze')
-
- " Hilight current line in cwindow
- " Normally hightlighting is done with quickfix engine but we use something
- " different and have to do it separately
- syntax clear
- runtime syntax/qf.vim
- exe 'syn match vTodo /\%'. line('.') .'l.*/'
- hi link vTodo Todo
-
- " Close preview window and open it again in new place
- pclose
- exe 'silent! bot pedit +'.viewline.' '.viewfile
-
- " Vanilla 6.1 has bug. This additional setting of cwindow height prevents
- " resizing of this window
- exe g:Tex_ViewerCwindowHeight.' wincmd _'
-
- " Handle situation if there is no item beginning with s:prefix.
- " Unfortunately, because we know it late we have to close everything and
- " return as in complete process
- if v:errmsg =~ 'E32\>'
- exe s:winnum.' wincmd w'
- pclose!
- cclose
- if exists("s:prefix")
- echomsg 'No bibkey, label or word beginning with "'.s:prefix.'"'
- endif
- if col('.') == strlen(getline('.'))
- startinsert!
- else
- normal! l
- startinsert
- endif
- let v:errmsg = ''
- call Tex_Debug('Tex_SyncPreviewWindow: got error E32, no matches found, quitting', 'view')
- return 0
- endif
-
- " Move to preview window. Really is it under cwindow?
- wincmd j
-
- " Settings of preview window
- exe g:Tex_ViewerPreviewHeight.' wincmd _'
- setlocal nofoldenable
-
- if exists('s:type') && s:type =~ 'cite'
- " In cite context place bibkey at the top of preview window.
- setlocal scrolloff=0
- normal! zt
- else
- " In other contexts in the middle. Highlight this line?
- setlocal scrolloff=100
- normal! z.
- endif
-
- " Return to cwindow
- wincmd p
-
-endfunction " }}}
-" Tex_CloseSmallWindows: {{{
-" Description:
-"
-function! Tex_CloseSmallWindows()
- exe s:winnum.' wincmd w'
- pclose!
- cclose
- exe s:pos
-endfunction " }}}
-" Tex_GoToLocation: Go to chosen location {{{
-" Description: Get number of current line and go to this number
-"
-function! s:Tex_GoToLocation()
- pclose!
- let errmsg = v:errmsg
- let v:errmsg = ''
- exe 'silent! cc ' . line('.')
- " If the current buffer is modified, then split
- if v:errmsg =~ '^E37:'
- split
- exe 'silent! cc ' . line('.')
- endif
- cclose
- let v:errmsg = errmsg
-endfunction " }}}
-
-" ==============================================================================
-" Functions for finding \\label's or \\bibitem's in the main file.
-" ==============================================================================
-" Tex_GrepHelper: grep main filename for \\bibitem's or \\label's {{{
-" Description:
-function! Tex_GrepHelper(prefix, what)
- let _path = &path
- let _suffixesadd = &suffixesadd
- let _hidden = &hidden
-
- let mainfname = Tex_GetMainFileName(':p')
- " If we are already editing the file, then use :split without any
- " arguments so it works even if the file is modified.
- " FIXME: If mainfname is being presently edited in another window and
- " is 'modified', then the second split statement will not work.
- " We will need to travel to that window and back.
- if mainfname == expand('%:p')
- split
- else
- exec 'split '.Tex_EscapeSpaces(mainfname)
- endif
-
- let pos = line('.').'| normal! '.virtcol('.').'|'
- if a:what =~ 'bib'
- call Tex_ScanFileForCite(a:prefix)
- else
- call Tex_ScanFileForLabels(a:prefix)
- endif
- exec pos
-
- q
- let &path = _path
- let &suffixesadd = _suffixesadd
-
-endfunction " }}}
-" Tex_ScanFileForCite: search for \bibitem's in .bib or .bbl or tex files {{{
-" Description:
-" Search for bibliographic entries in the presently edited file in the
-" following manner:
-" 1. First see if the file has a \bibliography command.
-" If YES:
-" 1. If a .bib file corresponding to the \bibliography command can be
-" found, then search for '@.*'.a:prefix inside it.
-" 2. Otherwise, if a .bbl file corresponding to the \bibliography command
-" can be found, then search for '\bibitem'.a:prefix inside it.
-" 2. Next see if the file has a \thebibliography environment
-" If YES:
-" 1. Search for '\bibitem'.a:prefix in this file.
-"
-" If neither a \bibliography or \begin{thebibliography} are found, then repeat
-" steps 1 and 2 for every file \input'ed into this file. Abort any searching
-" as soon as the first \bibliography or \begin{thebibliography} is found.
-function! Tex_ScanFileForCite(prefix)
- call Tex_Debug('+Tex_ScanFileForCite: searching for bibkeys in '.bufname('%').' (buffer #'.bufnr('%').')', 'view')
- let presBufNum = bufnr('%')
-
- let foundCiteFile = 0
- " First find out if this file has a \bibliography command in it. If so,
- " assume that this is the only file in the project which defines a
- " bibliography.
- if search('\\\(no\)\?bibliography{', 'w')
- call Tex_Debug('Tex_ScanFileForCite: found bibliography command in '.bufname('%'), 'view')
- " convey that we have found a bibliography command. we do not need to
- " proceed any further.
- let foundCiteFile = 1
-
- " extract the bibliography filenames from the command.
- let bibnames = matchstr(getline('.'), '\\\(no\)\?bibliography{\zs.\{-}\ze}')
- let bibnames = substitute(bibnames, '\s', '', 'g')
-
- call Tex_Debug('trying to search through ['.bibnames.']', 'view')
-
- let &path = '.,'.g:Tex_BIBINPUTS
-
- let i = 1
- while 1
- let bibname = Tex_Strntok(bibnames, ',', i)
- if bibname == ''
- break
- endif
-
- " first try to find if a .bib file exists. If so do not search in
- " the corresponding .bbl file. (because the .bbl file will most
- " probly be generated automatically from the .bib file with
- " bibtex).
-
- let fname = Tex_FindFile(bibname, '.,'.g:Tex_BIBINPUTS, '.bib')
- if fname != ''
- call Tex_Debug('finding .bib file ['.bufname('%').']', 'view')
- exec 'split '.Tex_EscapeSpaces(fname)
- call Tex_Grepadd('@.*{'.a:prefix, "%")
- q
- else
- let fname = Tex_FindFile(bibname, '.,'.g:Tex_BIBINPUTS, '.bbl')
- if fname != ''
- exec 'split '.Tex_EscapeSpaces(fname)
- call Tex_Debug('finding .bbl file ['.bufname('.').']', 'view')
- call Tex_Grepadd('\\bibitem{'.a:prefix, "%")
- q
- endif
- endif
-
- let i = i + 1
- endwhile
-
- if foundCiteFile
- return 1
- endif
- endif
-
- " If we have a thebibliography environment, then again assume that this is
- " the only file which defines the bib-keys. Aand convey this information
- " upwards by returning 1.
- if search('^\s*\\begin{thebibliography}', 'w')
- call Tex_Debug('got a thebibliography environment in '.bufname('%'), 'view')
-
- let foundCiteFile = 1
-
- split
- lcd %:p:h
- call Tex_Debug("silent! grepadd! ".Tex_EscapeForGrep('\\bibitem{'.a:prefix)." %", 'view')
- call Tex_Grepadd('\\bibitem{'.a:prefix, "%")
- q
-
- return 1
- endif
-
- " If we have not found any \bibliography or \thebibliography environment
- " in this file, search for these environments in all the files which this
- " file includes.
-
- exec 0
- let wrap = 'w'
- while search('^\s*\\\(input\|include\)', wrap)
- let wrap = 'W'
-
- let filename = matchstr(getline('.'), '\\\(input\|include\){\zs.\{-}\ze}')
-
- let foundfile = Tex_FindFile(filename, '.,'.g:Tex_TEXINPUTS, '.tex')
- if foundfile != ''
- exec 'split '.Tex_EscapeSpaces(foundfile)
- call Tex_Debug('scanning recursively in ['.foundfile.']', 'view')
- let foundCiteFile = Tex_ScanFileForCite(a:prefix)
- q
- endif
-
- if foundCiteFile
- return 1
- endif
- endwhile
-
-
- return 0
-endfunction " }}}
-" Tex_ScanFileForLabels: greps present file and included files for \\label's {{{
-" Description:
-" Grep the presently edited file for \\label's. If the present file \include's
-" or \input's other files, then recursively scan those as well, i.e we support
-" arbitrary levels of \input'ed-ness.
-function! Tex_ScanFileForLabels(prefix)
- call Tex_Debug("+Tex_ScanFileForLabels: grepping in file [".bufname('%')."]", "view")
-
- lcd %:p:h
- call Tex_Grepadd('\\label{'.a:prefix, "%")
-
- " Then recursively grep for all \include'd or \input'ed files.
- exec 0
- let wrap = 'w'
- while search('^\s*\\\(input\|include\)', wrap)
- let wrap = 'W'
-
- let filename = matchstr(getline('.'), '\\\(input\|include\){\zs.\{-}\ze}')
- let foundfile = Tex_FindFile(filename, '.,'.Tex_TEXINPUTS, '.tex')
- if foundfile != ''
- exec 'split '.Tex_EscapeSpaces(foundfile)
- call Tex_Debug('Tex_ScanFileForLabels: scanning recursively in ['.foundfile.']', 'view')
- call Tex_ScanFileForLabels(a:prefix)
- q
- endif
- endwhile
-
-endfunction " }}}
-
-" ==============================================================================
-" Functions for custom command completion
-" ==============================================================================
-" Tex_completion_{var}: similar variables can be set in package files {{{
-let g:Tex_completion_bibliographystyle = 'abbr,alpha,plain,unsrt'
-let g:Tex_completion_addtocontents = 'lof}{,lot}{,toc}{'
-let g:Tex_completion_addcontentsline = 'lof}{figure}{,lot}{table}{,toc}{chapter}{,toc}{part}{,'.
- \ 'toc}{section}{,toc}{subsection}{,toc}{paragraph}{,'.
- \ 'toc}{subparagraph}{'
-" }}}
-" Tex_PromptForCompletion: prompts for a completion {{{
-" Description:
-function! s:Tex_PromptForCompletion(texcommand,ask)
-
- let common_completion_prompt =
- \ Tex_CreatePrompt(g:Tex_completion_{a:texcommand}, 2, ',') . "\n" .
- \ 'Enter number or completion: '
-
- let inp = input(a:ask."\n".common_completion_prompt)
- if inp =~ '^[0-9]\+$'
- let completion = Tex_Strntok(g:Tex_completion_{a:texcommand}, ',', inp)
- else
- let completion = inp
- endif
-
- return completion
-endfunction " }}}
-" Tex_DoCompletion: fast insertion of completion {{{
-" Description:
-"
-function! s:Tex_DoCompletion(texcommand)
- let completion = <SID>Tex_PromptForCompletion(a:texcommand, 'Choose a completion to insert: ')
- if completion != ''
- return completion
- else
- return ''
- endif
-endfunction " }}}
-
-" ==============================================================================
-" Functions for presenting an outlined version for completion
-" ==============================================================================
-" Tex_StartOutlineCompletion: sets up an outline window {{{
-
-" get the place where this plugin resides for setting cpt and dict options.
-" these lines need to be outside the function.
-let s:path = expand('<sfile>:p:h')
-if has('python') && Tex_GetVarValue('Tex_UsePython')
- python import sys, re
- exec "python sys.path += [r'". s:path . "']"
- python import outline
-endif
-
-function! Tex_StartOutlineCompletion()
- let mainfname = Tex_GetMainFileName(':p')
-
- " open the buffer
- let _report = &report
- let _cmdheight=&cmdheight
- let _lazyredraw = &lazyredraw
- set report=1000
- set cmdheight=1
- set lazyredraw
-
- bot split __OUTLINE__
- exec Tex_GetVarValue('Tex_OutlineWindowHeight', 15).' wincmd _'
-
- setlocal modifiable
- setlocal noswapfile
- setlocal buftype=nowrite
- setlocal bufhidden=delete
- setlocal nowrap
- setlocal foldmethod=marker
- setlocal foldmarker=<<<,>>>
-
- " delete everything in it to the blackhole
- % d _
-
- if has('python') && Tex_GetVarValue('Tex_UsePython')
- exec 'python retval = outline.main('
- \. 'r"' . fnamemodify(mainfname, ':p') . '", '
- \. 'r"' . s:prefix . '")'
-
- " transfer variable from python to a local variable.
- python vim.command("""let retval = "%s" """ % re.sub(r'"|\\', r'\\\g<0>', retval))
-
- 0put!=retval
- else
- exec '0r!'.s:path.'/outline.py '.mainfname.' '.s:prefix
- endif
-
- 0
-
- call Tex_SetupOutlineSyntax()
-
- exec 'nnoremap <buffer> <cr> '
- \ .':cd '.s:origdir.'<CR>'
- \ .':call Tex_FinishOutlineCompletion()<CR>'
- exec 'nnoremap <buffer> q '
- \ .':cd '.s:origdir.'<CR>'
- \ .':close<CR>'
-
- " once the buffer is initialized, go back to the original settings.
- setlocal nomodifiable
- setlocal nomodified
- let &report = _report
- let &cmdheight = _cmdheight
- let &lazyredraw = _lazyredraw
-
-endfunction " }}}
-" Tex_SetupOutlineSyntax: sets up the syntax items for the outline {{{
-" Description:
-function! Tex_SetupOutlineSyntax()
- syn match outlineFileName "<\f\+>$" contained
- syn match foldMarkers "<<<\d$" contained
- syn match firstSemiColon '^:' contained
- syn match firstAngle '^>' contained
-
- syn match sectionNames '\(\d\.\)\+ .*' contains=foldMarkers
- syn match previousLine '^:.*' contains=firstSemiColon
- syn match labelLine '^>.*' contains=firstAngle,outlineFileName
-
- hi def link outlineFileName Ignore
- hi def link foldMarkers Ignore
- hi def link firstSemiColon Ignore
- hi def link firstAngle Ignore
-
- hi def link sectionNames Type
- hi def link previousLine Special
- hi def link labelLine Comment
-endfunction " }}}
-" Tex_FinishOutlineCompletion: inserts the reference back in the text {{{
-function! Tex_FinishOutlineCompletion()
- if getline('.') !~ '^[>:]'
- return
- endif
-
- if getline('.') =~ '^>'
- let ref_complete = matchstr(getline('.'), '^>\s\+\zs\S\+\ze')
- elseif getline('.') =~ '^:'
- let ref_complete = matchstr(getline(line('.')-1), '^>\s\+\zs\S\+\ze')
- endif
-
- let ref_remaining = strpart(ref_complete, strlen(s:prefix))
- close
- call Tex_CompleteWord(ref_remaining)
-endfunction " }}}
-
-" ==============================================================================
-" Functions for presenting a nicer list of bibtex entries
-" ==============================================================================
-" Tex_FindBibFiles: finds all .bib files used by the main file {{{
-" Description:
-function! Tex_FindBibFiles()
-
- let mainfname = Tex_GetMainFileName(':p')
- wincmd n
- exec 'silent! e '.mainfname
-
- if search('\\\(no\)\?bibliography{', 'w')
-
- call Tex_Debug('Tex_FindBibFiles: found bibliography command in '.bufname('%'), 'view')
-
- " extract the bibliography filenames from the command.
- let bibnames = matchstr(getline('.'), '\\\(no\)\?bibliography{\zs.\{-}\ze}')
- let bibnames = substitute(bibnames, '\s', '', 'g')
-
- call Tex_Debug(':Tex_FindBibFiles: trying to search through ['.bibnames.']', 'view')
-
- let bibfiles = ''
- let i = 1
- while 1
- let bibname = Tex_Strntok(bibnames, ',', i)
- if bibname == ''
- break
- endif
- let fname = Tex_FindFile(bibname, '.,'.g:Tex_BIBINPUTS, '.bib')
- if fname != ''
- let bibfiles = bibfiles.fname."\n"
- endif
- let i = i + 1
- endwhile
-
- call Tex_Debug(":Tex_FindBibFiles: returning [".bibfiles."]", "view")
- q
- return bibfiles
-
- else
- q
- return ''
- endif
-
-endfunction " }}}
-" Tex_StartBibtexOutline: sets up an outline window {{{
-
-" get the place where this plugin resides for setting cpt and dict options.
-" these lines need to be outside the function.
-if has('python') && Tex_GetVarValue('Tex_UsePython')
- python import sys, re
- exec "python sys.path += [r'". s:path . "']"
- python import bibtools
-endif
-
-function! Tex_StartCiteCompletion()
- let bibfiles = Tex_FindBibFiles()
- if bibfiles !~ '\S'
- echohl WarningMsg
- echomsg 'No bibfiles found! Sorry'
- echohl None
- return
- endif
-
- bot split __OUTLINE__
- exec Tex_GetVarValue('Tex_OutlineWindowHeight', 15).' wincmd _'
-
- exec 'python Tex_BibFile = bibtools.BibFile("""'.bibfiles.'""")'
- exec 'python Tex_BibFile.addfilter("key ^'.s:prefix.'")'
- call Tex_DisplayBibList()
-
- nnoremap <Plug>Tex_JumpToNextBibEntry :call search('^\S.*\]$', 'W')<CR>:call Tex_EchoBibShortcuts()<CR>z.
- nnoremap <Plug>Tex_JumpToPrevBibEntry :call search('^\S.*\]$', 'bW')<CR>:call Tex_EchoBibShortcuts()<CR>z.
- nnoremap <Plug>Tex_FilterBibEntries :call Tex_HandleBibShortcuts('filter')<CR>
- nnoremap <Plug>Tex_RemoveBibFilters :call Tex_HandleBibShortcuts('remove_filters')<CR>
- nnoremap <Plug>Tex_SortBibEntries :call Tex_HandleBibShortcuts('sort')<CR>
- nnoremap <Plug>Tex_CompleteCiteEntry :call Tex_CompleteCiteEntry()<CR>
-
- nmap <buffer> <silent> n <Plug>Tex_JumpToNextBibEntry
- nmap <buffer> <silent> p <Plug>Tex_JumpToPrevBibEntry
- nmap <buffer> <silent> f <Plug>Tex_FilterBibEntries
- nmap <buffer> <silent> s <Plug>Tex_SortBibEntries
- nmap <buffer> <silent> a <Plug>Tex_RemoveBibFilters
- nmap <buffer> <silent> q :close<CR>
- nmap <buffer> <silent> <CR> <Plug>Tex_CompleteCiteEntry
-
-endfunction " }}}
-" Tex_DisplayBibList: displays the list of bibtex entries {{{
-" Description:
-function! Tex_DisplayBibList()
- " open the buffer
- let _report = &report
- let _cmdheight=&cmdheight
- let _lazyredraw = &lazyredraw
- set report=1000
- set cmdheight=1
- set lazyredraw
-
- setlocal modifiable
- setlocal noswapfile
- setlocal buftype=nowrite
- setlocal bufhidden=delete
- setlocal nowrap
- setlocal foldmethod=marker
- setlocal foldmarker=<<<,>>>
-
-
- " delete everything in it to the blackhole
- % d _
-
- exec 'python Tex_CurBuf = vim.current.buffer'
- exec 'python Tex_CurBuf[:] = str(Tex_BibFile).splitlines()'
-
- call Tex_SetupBibSyntax()
-
- 0
- call Tex_EchoBibShortcuts()
-
- " once the buffer is initialized, go back to the original settings.
- setlocal nomodifiable
- setlocal nomodified
- let &report = _report
- let &cmdheight = _cmdheight
- let &lazyredraw = _lazyredraw
-
-endfunction " }}}
-" Tex_EchoBibShortcuts: echos all the shortcuts in the status line {{{
-" Description:
-function! Tex_EchoBibShortcuts()
- echomsg '(a) all (f) filter (s) sort (n) next (p) previous (q) quit (<CR>) choose'
-endfunction " }}}
-" Tex_SetupBibSyntax: sets up the syntax items for the outline {{{
-" Description:
-function! Tex_SetupBibSyntax()
- syn match BibTitleHeader "^TI" contained
- syn match BibAuthorHeader "^AU" contained
- syn match BibLocationHeader "^IN" contained
- syn match BibMiscHeader "^MI" contained
-
- syn match BibKeyLine '^\S.*\]$' contains=BibKey
- syn match BibTitle "^TI .*" contains=BibTitleHeader
- syn match BibAuthor "^AU .*" contains=BibAuthorHeader
- syn match BibLocation "^IN .*" contains=BibLocationHeader
- syn match BibMisc "^MI .*" contains=BibMiscHeader
-
- hi def link BibTitleHeader Ignore
- hi def link BibAuthorHeader Ignore
- hi def link BibLocationHeader Ignore
- hi def link BibMiscHeader Ignore
-
- hi def link BibKeyLine Visual
- hi def link BibTitle Type
- hi def link BibAuthor Special
- hi def link BibLocation Comment
- hi def link BibMisc Comment
-endfunction " }}}
-" Tex_HandleBibShortcuts: handles user keypresses {{{
-" Description:
-function! Tex_HandleBibShortcuts(command)
-
- if a:command == 'filter' || a:command == 'sort'
-
- let fieldprompt =
- \ "Field acronyms: (`:let g:Tex_EchoBibFields = 0` to avoid this message)\n" .
- \ " [t] title [a] author [b] booktitle \n" .
- \ " [j] journal [y] year [p] bibtype \n" .
- \ " (you can also enter the complete field name) \n"
-
- let fieldprompt = Tex_GetVarValue('Tex_BibFieldPrompt', fieldprompt)
-
- if Tex_GetVarValue('Tex_EchoBibFields', 1) == 1
- echo fieldprompt
- endif
-
- let inp = input('Enter '.a:command.' criterion [field<space>value]: ')
- if inp !~ '\v^\S+\s+\S.*'
- echohl WarningMsg
- echomsg 'Invalid filter specification. Use "field<space>value"'
- echohl None
- return
- endif
-
- if inp != ''
- " If the field is specified as a single character, then replace
- " it with the corresponding 'full form'.
- if inp =~ '^[a-z]\>'
- if Tex_GetVarValue('Tex_BibAcronym_'.inp[0]) != ''
- let inp = substitute(inp, '.', Tex_GetVarValue('Tex_BibAcronym_'.inp[0]), '')
- elseif fieldprompt =~ '\['.inp[0].'\]'
- let full = matchstr(fieldprompt, '\['.inp[0].'\] \zs\w\+\ze')
- let inp = substitute(inp, '.', full, '')
- endif
- endif
- call Tex_Debug(":Tex_HandleBibShortcuts: using inp = [".inp."]", "view")
- if a:command == 'filter'
- exec 'python Tex_BibFile.addfilter("'.inp.'")'
- elseif a:command == 'sort'
- exec "python Tex_BibFile.addsortfield(\"".inp."\")"
- exec 'python Tex_BibFile.sort()'
- endif
- silent! call Tex_DisplayBibList()
- endif
-
- elseif a:command == 'remove_filters'
-
- exec 'python Tex_BibFile.rmfilters()'
- exec 'python Tex_BibFile.addfilter("key ^'.s:prefix.'")'
- call Tex_DisplayBibList()
-
- endif
-
-endfunction " }}}
-" Tex_CompleteCiteEntry: completes cite entry {{{
-" Description:
-function! Tex_CompleteCiteEntry()
- normal! 0
- call search('\[\S\+\]$', 'W')
- if getline('.') !~ '\[\S\+\]$'
- call search('\[\S\+\]$', 'bW')
- endif
-
- if getline('.') !~ '\[\S\+\]$'
- return
- endif
-
- let ref = matchstr(getline('.'), '\[\zs\S\+\ze\]$')
- close
- call Tex_Debug(":Tex_CompleteCiteEntry: completing with ".ref, "view")
- call Tex_CompleteWord(strpart(ref, strlen(s:prefix)))
-endfunction " }}}
-
-com! -nargs=0 TClearCiteHist unlet! s:citeSearchHistory
-
-" vim:fdm=marker:nowrap:noet:ff=unix:ts=4:sw=4