1 " vikiLatex.vim -- viki add-on for LaTeX
2 " @Author: Thomas Link (samul AT web.de)
3 " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
4 " @Created: 28-Jän-2004.
5 " @Last Change: 04-Mrz-2006.
8 if &cp || exists("s:loaded_vikiLatex")
11 let s:loaded_vikiLatex = 1
13 fun! VikiSetupBufferLaTeX(state, ...)
15 let b:vikiNameSuffix = '.tex'
16 call VikiSetupBuffer(a:state, "sSic")
17 let b:vikiAnchorRx = '\\label{%{ANCHOR}}'
18 let b:vikiNameTypes = substitute(b:vikiNameTypes, '\C[Sicx]', "", "g")
19 let b:vikiLaTeXCommands = 'viki\|include\|input\|usepackage\|psfig\|includegraphics\|bibliography\|ref'
20 if exists("g:vikiLaTeXUserCommands")
21 let b:vikiLaTeXCommands = b:vikiLaTeXCommands .'\|'. g:vikiLaTeXUserCommands
23 if b:vikiNameTypes =~# "s"
24 let b:vikiSimpleNameRx = '\(\\\('. b:vikiLaTeXCommands .'\)\(\[\(.\{-}\)\]\)\?{\(.\{-}\)}\)'
25 let b:vikiSimpleNameSimpleRx = '\\\('. b:vikiLaTeXCommands .'\)\(\[.\{-}\]\)\?{.\{-}}'
26 let b:vikiSimpleNameNameIdx = 2
27 let b:vikiSimpleNameDestIdx = 5
28 let b:vikiSimpleNameAnchorIdx = 4
29 let b:vikiSimpleNameCompound = 'let erx="'. escape(b:vikiSimpleNameRx, '\"')
30 \ .'" | let nameIdx='. b:vikiSimpleNameNameIdx
31 \ .' | let destIdx='. b:vikiSimpleNameDestIdx
32 \ .' | let anchorIdx='. b:vikiSimpleNameAnchorIdx
34 let b:vikiSimpleNameRx = noMatch
35 let b:vikiSimpleNameSimpleRx = noMatch
36 let b:vikiSimpleNameNameIdx = 0
37 let b:vikiSimpleNameDestIdx = 0
38 let b:vikiSimpleNameAnchorIdx = 0
42 fun! VikiLatexCheckFilename(filename, ...)
44 """ search in the current directory
47 exe "let fn = '".a:filename."'.a:". i
57 exe "let fn = '".a:filename."'.a:". i
58 exe "let rv = system('kpsewhich ". fn ."')"
60 return substitute(rv, "\n", "", "g")
69 fun! VikiCompleteSimpleNameDefLaTeX(def)
70 let cmd = MvElementAt(a:def, g:vikiDefSep, 0)
71 if cmd == g:vikiDefNil
72 throw "Viki: Malformed command (no name): ".a:def
74 let dest = MvElementAt(a:def, g:vikiDefSep, 1)
75 let opts = MvElementAt(a:def, g:vikiDefSep, 2)
76 let part = MvElementAt(a:def, g:vikiDefSep, 3)
77 let anchor = g:vikiDefNil
78 let useSuffix = g:vikiDefSep
81 let dest = VikiLatexCheckFilename(dest, "", ".tex", ".sty")
82 elseif cmd == "usepackage"
83 let dest = VikiLatexCheckFilename(dest, ".sty")
84 elseif cmd == "include"
85 let dest = VikiLatexCheckFilename(dest, ".tex")
87 let dest = VikiLatexCheckFilename(dest, ".tex")
90 let f == matchstr(dest, "figure=\zs.\{-}\ze[,}]")
91 let dest = VikiLatexCheckFilename(dest, "")
92 elseif cmd == "includegraphics"
93 let dest = VikiLatexCheckFilename(dest, "",
94 \ ".eps", ".ps", ".pdf", ".png", ".jpeg", ".jpg", ".gif", ".wmf")
95 elseif cmd == "bibliography"
96 let n = VikiSelect(dest, ",", "Select Bibliography")
98 let f = MvElementAt(dest, ",", n)
99 let dest = VikiLatexCheckFilename(f, ".bib")
105 let dest = g:vikiSelfRef
106 elseif exists("*VikiLaTeX_".cmd)
107 exe VikiLaTeX_{cmd}(dest, opts)
109 throw "Viki LaTeX: unsupported command: ". cmd
113 throw "Viki LaTeX: can't find: ". cmd ." ". a:def
115 return VikiMakeDef(cmd, dest, anchor, part, 'simple')
119 fun! VikiMinorModeLaTeX(state)
120 let b:vikiFamily = "LaTeX"
121 call VikiMinorMode(a:state)
124 command! VikiMinorModeLaTeX call VikiMinorModeLaTeX(1)
125 " au FileType tex let b:vikiFamily="LaTeX"