1 " vikiLatex.vim -- viki add-on for LaTeX
2 " @Author: Thomas Link (micathom AT gmail com?subject=vim)
3 " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
4 " @Created: 28-Jän-2004.
5 " @Last Change: 2007-10-05.
8 if &cp || exists('loaded_viki_latex')
11 let loaded_viki_latex = 1
13 function! viki_latex#SetupBuffer(state, ...)
15 let b:vikiNameSuffix = '.tex'
16 call viki_viki#SetupBuffer(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 function! viki_latex#CheckFilename(filename, ...)
44 """ search in the current directory
47 let fn = a:filename .a:{i}
58 let fn = a:filename .a:{i}
59 let rv = system('kpsewhich '. string(fn))
61 return substitute(rv, "\n", "", "g")
70 function! viki_latex#CompleteSimpleNameDef(def)
71 exec viki#SplitDef(a:def)
72 if v_name == g:vikiDefNil
73 throw "Viki: Malformed command (no name): ". string(a:def)
76 let v_anchor = g:vikiDefNil
77 let useSuffix = g:vikiDefSep
80 let v_dest = viki_latex#CheckFilename(v_dest, "", ".tex", ".sty")
81 elseif v_name == "usepackage"
82 let v_dest = viki_latex#CheckFilename(v_dest, ".sty")
83 elseif v_name == "include"
84 let v_dest = viki_latex#CheckFilename(v_dest, ".tex")
85 elseif v_name == "viki"
86 let v_dest = viki_latex#CheckFilename(v_dest, ".tex")
88 elseif v_name == "psfig"
89 let f == matchstr(v_dest, "figure=\zs.\{-}\ze[,}]")
90 let v_dest = viki_latex#CheckFilename(v_dest, "")
91 elseif v_name == "includegraphics"
92 let v_dest = viki_latex#CheckFilename(v_dest, "",
93 \ ".eps", ".ps", ".pdf", ".png", ".jpeg", ".jpg", ".gif", ".wmf")
94 elseif v_name == "bibliography"
95 if !exists('b:vikiMarkingInexistent')
96 let bibs = split(v_dest, ",")
97 let f = tlib#input#List('s', "Select Bibliography", bibs)
98 let v_dest = empty(f) ? '' : viki_latex#CheckFilename(f, ".bib")
100 elseif v_name == "ref"
101 let v_anchor = v_dest
102 let v_dest = g:vikiSelfRef
103 elseif exists("*VikiLaTeX_".v_name)
104 exec VikiLaTeX_{v_name}(v_dest, opts)
106 throw "Viki LaTeX: unsupported command: ". v_name
110 if !exists('b:vikiMarkingInexistent')
111 throw "Viki LaTeX: can't find: ". v_name ." ". string(a:def)
114 return viki#MakeDef(v_name, v_dest, v_anchor, v_part, 'simple')
118 function! viki_latex#MinorMode(state)
119 let b:vikiFamily = "latex"
120 call viki_viki#MinorMode(a:state)
123 " au FileType tex let b:vikiFamily="LaTeX"