1
0
Fork 0
mirror of https://github.com/kastdeur/dotfiles.git synced 2024-12-22 17:23:33 +01:00
dotfiles/vim/vim-latex/ftplugin/latex-suite/wizardfuncs.vim

376 lines
14 KiB
VimL
Executable file

" File: wizardfuncs.vim
" Author: Mikolaj Machowski <mikmach@wp.pl>
" Description:
"
" Installation:
" History: pluginized by Srinath Avadhanula
"=============================================================================
if exists('s:doneOnce')
finish
endif
let s:doneOnce = 1
let s:mapleader = exists('mapleader') ? mapleader : "\\"
" ==============================================================================
" Specialized functions for handling sections from command line
" ==============================================================================
com! -nargs=? TSection call Tex_section(<f-args>)
com! -nargs=? TSectionAdvanced call Tex_section_adv(<f-args>)
" Tex_VisSecAdv: handles visual selection for sections {{{
function! Tex_VisSecAdv(section)
let shorttitle = input("Short title? ")
let toc = input("Include in table of contents [y]/n ? ")
let sstructure = "\\".a:section
if ( toc == "" || toc == "y" )
let toc = ""
else
let toc = "*"
endif
if shorttitle != ""
let shorttitle = '['.shorttitle.']'
endif
exe "normal `>a}\<cr>\<esc>`<i".sstructure.toc.shorttitle."{"
endfunction
" }}}
" Tex_InsSecAdv: section wizard in insert mode {{{
function! Tex_InsSecAdv(structure)
let ttitle = input("Title? ")
let shorttitle = input("Short title? ")
let toc = input("Include in table of contents [y]/n ? ")
"Structure
let sstructure = "\\".a:structure
"TOC
if ( toc == "" || toc == "y" )
let toc = ""
else
let toc = "*"
endif
"Shorttitle
if shorttitle != ""
let shorttitle = '['.shorttitle.']'
endif
"Title
let ttitle = '{'.ttitle.'}'
"Happy end?
return sstructure.toc.shorttitle.ttitle
endfunction
" }}}
function! Tex_section(...) "{{{
silent let pos = Tex_GetPos()
silent let last_section_value = s:Tex_section_detection()
if a:0 == 0
silent let last_section_name = s:Tex_section_name(last_section_value)
silent call s:Tex_section_call(last_section_name)
elseif a:1 =~ "[+=\-]"
silent let sec_arg = a:1
silent let curr_section_value = s:Tex_section_curr_rel_value(sec_arg, last_section_value)
silent let curr_section_name = s:Tex_section_name(curr_section_value)
silent call s:Tex_section_call(curr_section_name)
elseif a:1 == "?"
echo s:last_section_line
else
silent let curr_section_value = s:Tex_section_curr_value(a:1)
silent let curr_section_name = s:Tex_section_name(curr_section_value)
silent call s:Tex_section_call(curr_section_name)
endif
silent call Tex_SetPos(pos)
endfunction "}}}
function! Tex_section_adv(...) "{{{
let pos = Tex_GetPos()
silent let last_section_value = s:Tex_section_detection()
if a:0 == 0
silent let last_section_name = s:Tex_section_name(last_section_value)
let section = Tex_InsSecAdv(last_section_name)
elseif a:1 =~ "[+=\-]"
silent let sec_arg = a:1
silent let curr_section_value = s:Tex_section_curr_rel_value(sec_arg, last_section_value)
silent let curr_section_name = s:Tex_section_name(curr_section_value)
let section = Tex_InsSecAdv(curr_section_name)
else
silent let curr_section_value = s:Tex_section_curr_value(a:1)
silent let curr_section_name = s:Tex_section_name(curr_section_value)
silent call s:Tex_section_call(curr_section_name)
let section = Tex_InsSecAdv(curr_section_name)
endif
exe "normal i".section
call Tex_SetPos(pos)
endfunction "}}}
function! s:Tex_section_detection() "{{{
let pos = Tex_GetPos()
let last_section1 = search("\\\\\subparagraph\\|\\\\paragraph\\|\\\\subsubsection\\|\\\\subsection\\|\\\\section\\|\\\\chapter\\|\\\part\)", "b")
call Tex_SetPos(pos)
let last_section2 = search("\\\\\part\\|\\\\chapter\\|\\\\section\\|\\\\subsection\\|\\\\subsubsection\\|\\\\paragraph\\|\\\subparagraph\)", "b")
if last_section1 > last_section2
let last_section = last_section1
else
let last_section = last_section2
endif
if last_section != 0
exe last_section
if getline(".") =~ "\\\\part"
let last_section_value = 0
elseif getline(".") =~ "\\\\chapter"
let last_section_value = 1
elseif getline(".") =~ "\\\\section"
let last_section_value = 2
elseif getline(".") =~ "\\\\subsection"
let last_section_value = 3
elseif getline(".") =~ "\\\\subsubsection"
let last_section_value = 4
elseif getline(".") =~ "\\\\paragraph"
let last_section_value = 5
elseif getline(".") =~ "\\\\subparagraph"
let last_section_value = 6
endif
let s:last_section_line = getline(".")
else
let last_section_value = 0
endif
call Tex_SetPos(pos)
return last_section_value
endfunction "}}}
function! s:Tex_section_curr_value(sec_arg) "{{{
if a:sec_arg == "pa" || a:sec_arg == "0" || a:sec_arg == "part"
let curr_section_value = 0
elseif a:sec_arg == "ch" || a:sec_arg == "1" || a:sec_arg == "chapter"
let curr_section_value = 1
elseif a:sec_arg == "se" || a:sec_arg == "2" || a:sec_arg == "section"
let curr_section_value = 2
elseif a:sec_arg == "ss" || a:sec_arg == "3" || a:sec_arg == "subsection"
let curr_section_value = 3
elseif a:sec_arg == "s2" || a:sec_arg == "4" || a:sec_arg == "subsubsection"
let curr_section_value = 4
elseif a:sec_arg == "pr" || a:sec_arg == "5" || a:sec_arg == "paragraph"
let curr_section_value = 5
elseif a:sec_arg == "sp" || a:sec_arg == "6" || a:sec_arg == "subparagraph"
let curr_section_value = 6
endif
return curr_section_value
endfunction "}}}
function! s:Tex_section_curr_rel_value(sec_arg, last_section_value) "{{{
let last_section_value = a:last_section_value
if a:sec_arg == "+" || a:sec_arg == "+1"
let curr_section_value = last_section_value + 1
elseif a:sec_arg == "++" || a:sec_arg == "+2"
let curr_section_value = last_section_value + 2
elseif a:sec_arg == "-" || a:sec_arg == "-1"
let curr_section_value = last_section_value - 1
elseif a:sec_arg == "--" || a:sec_arg == "-2"
let curr_section_value = last_section_value - 2
elseif a:sec_arg == "="
let curr_section_value = last_section_value
else
exe "let curr_section_value = last_section_value".a:sec_arg
endif
if curr_section_value < 0
let curr_section_value = 0
elseif curr_section_value > 6
let curr_section_value = 6
endif
return curr_section_value
endfunction "}}}
function! s:Tex_section_name(section_value) "{{{
if a:section_value == 0
let section_name = "part"
elseif a:section_value == 1
let section_name = "chapter"
elseif a:section_value == 2
let section_name = "section"
elseif a:section_value == 3
let section_name = "subsection"
elseif a:section_value == 4
let section_name = "subsubsection"
elseif a:section_value == 5
let section_name = "paragraph"
elseif a:section_value == 6
let section_name = "subparagraph"
endif
return section_name
endfunction "}}}
function! s:Tex_section_call(section_name) "{{{
exe "normal! i\\".a:section_name."{<++>}<++>\<Esc>0\<C-j>"
" let ret_section = "\\".a:section_name."{<++>}<++>"
" exe "normal! i\<C-r>=IMAP_PutTextWithMovement(ret_section)\<CR>"
" normal f}i
endfunction "}}}
" ==============================================================================
" Add looking help into latexhelp.txt
" ==============================================================================
inoremap <silent> <Plug>Tex_Help <C-o>:call <SID>TexHelp()<CR>
nnoremap <silent> <Plug>Tex_Help :call <SID>TexHelp()<CR>
command! -nargs=0 THelp call <SID>TexHelp()
call Tex_MakeMap('<F1>', '<Plug>Tex_Help', 'i', '')
call Tex_MakeMap('<F1>', '<Plug>Tex_Help', 'n', '')
" TexHelp: Cursor being on LaTeX item check if exists help tag about it " {{{
function! s:TexHelp()
let syntax_item = synIDattr(synID(line('.'),col('.')-1,0),"name")
if syntax_item =~ '^tex'
setlocal isk+=\
let curword = expand('<cword>')
setlocal isk-=\
let v:errmsg = ''
if curword =~ "^\\" || syntax_item == 'texSectionName'
exe 'silent! help '.curword
if v:errmsg =~ '^E149:'
echohl ErrorMsg
exe "echomsg 'Sorry, no help for LaTeX: ".curword."'"
echohl None
let v:errmsg = ''
endif
else
help
endif
else
help
endif
endfunction " }}}
" ==============================================================================
" Tables of shortcuts
" ==============================================================================
"
command! -nargs=? Tshortcuts call Tex_shortcuts(<f-args>)<CR>
" Tex_shortcuts: Show shortcuts in terminal after : command {{{
function! Tex_shortcuts(...)
if a:0 == 0
let shorts = input(" Allowed arguments are:"
\."\n g General"
\."\n e Environments"
\."\n f Fonts"
\."\n s Sections"
\."\n m Math"
\."\n a All"
\."\n Enter your choice (<Enter> quits) : ")
call Tex_shortcuts(shorts)
elseif a:1 == 'g'
echo g:generalshortcuts
elseif a:1 == 'e'
echo g:environmentshortcuts
elseif a:1 == 'f'
echo g:fontshortcuts
elseif a:1 == 's'
echo g:sectionshortcuts
elseif a:1 == 'm'
echo g:mathshortcuts
elseif a:1 == 'a'
echo g:generalshortcuts
echo g:environmentshortcuts
echo g:fontshortcuts
echo g:sectionshortcuts
echo g:mathshortcuts
endif
endfunction
" }}}
" General shortcuts {{{
let g:generalshortcuts = ''
\."\n General shortcuts"
\."\n <mapleader> is a value of <Leader>"
\."\n ".s:mapleader.'ll compile whole document'
\."\n ".s:mapleader.'lv view compiled document'
\."\n ".s:mapleader.'ls forward searching (if possible)'
\."\n ".s:mapleader.'rf refresh folds'
" }}}
" Environment shortcuts {{{
let g:environmentshortcuts = ''
\."\n Environment shortcuts"
\."\n <mapleader> is a value of g:Tex_Leader2"
\."\n I v&V I v&V"
\."\n ELI ".g:Tex_Leader2."li list EQN ".g:Tex_Leader2."qn quotation"
\."\n EDE ".g:Tex_Leader2."de description ESP ".g:Tex_Leader2."sb sloppypar"
\."\n EEN ".g:Tex_Leader2."en enumerate ETI ".g:Tex_Leader2."ti theindex"
\."\n EIT ".g:Tex_Leader2."it itemize ETP ".g:Tex_Leader2."tp titlepage"
\."\n ETI ".g:Tex_Leader2."ti theindex EVM ".g:Tex_Leader2."vm verbatim"
\."\n ETL ".g:Tex_Leader2."tl trivlist EVE ".g:Tex_Leader2."ve verse"
\."\n ETE ".g:Tex_Leader2."te table ETB ".g:Tex_Leader2."tb thebibliography"
\."\n ETG ".g:Tex_Leader2."tg tabbing ENO ".g:Tex_Leader2."no note"
\."\n ETR ".g:Tex_Leader2."tr tabular EOV ".g:Tex_Leader2."ov overlay"
\."\n EAR ".g:Tex_Leader2."ar array ESL ".g:Tex_Leader2."sl slide"
\."\n EDM ".g:Tex_Leader2."dm displaymath EAB ".g:Tex_Leader2."ab abstract"
\."\n EEA ".g:Tex_Leader2."ea eqnarray EAP ".g:Tex_Leader2."ap appendix"
\."\n EEQ ".g:Tex_Leader2."eq equation ECE ".g:Tex_Leader2."ce center"
\."\n EDO ".g:Tex_Leader2."do document EFI ".g:Tex_Leader2."fi figure"
\."\n EFC ".g:Tex_Leader2."fc filecontents ELR ".g:Tex_Leader2."lr lrbox"
\."\n EFL ".g:Tex_Leader2."fl flushleft EMP ".g:Tex_Leader2."mp minipage"
\."\n EFR ".g:Tex_Leader2."fr flushright EPI ".g:Tex_Leader2."pi picture"
\."\n EMA ".g:Tex_Leader2."ma math EQE ".g:Tex_Leader2."qe quote"
" }}}
" Font shortcuts {{{
let g:fontshortcuts = ''
\."\n Font shortcuts"
\."\n <mapleader> is a value of g:Tex_Leader"
\."\n Shortcuts Effects"
\."\n I v&V I&v V"
\."\n FBF ".g:Tex_Leader."bf \\textbf{} {\\bfseries }"
\."\n FMD ".g:Tex_Leader."md \\textmd{} {\\mdseries }"
\."\n"
\."\n FTT ".g:Tex_Leader."tt \\texttt{} {\\ttfamily }"
\."\n FSF ".g:Tex_Leader."sf \\textsf{} {\\sffamily }"
\."\n FRM ".g:Tex_Leader."rm \\textrm{} {\\rmfamily }"
\."\n"
\."\n FUP ".g:Tex_Leader."up \\textup{} {\\upshape }"
\."\n FSL ".g:Tex_Leader."sl \\textsl{} {\\slshape }"
\."\n FSC ".g:Tex_Leader."sc \\textsc{} {\\scshape }"
\."\n FIT ".g:Tex_Leader."it \\textit{} {\\itshape }"
" }}}
" Section shortcuts {{{
let g:sectionshortcuts = ''
\."\n Section shortcuts"
\."\n <mapleader> is a value of g:Tex_Leader2"
\."\n I v&V"
\."\n SPA ".g:Tex_Leader2."pa part"
\."\n SCH ".g:Tex_Leader2."ch chapter"
\."\n SSE ".g:Tex_Leader2."se section"
\."\n SSS ".g:Tex_Leader2."ss subsection"
\."\n SS2 ".g:Tex_Leader2."s2 subsubsection"
\."\n SPG ".g:Tex_Leader2."pg paragraph"
\."\n SSP ".g:Tex_Leader2."sp subparagraph"
" }}}
" Math shortcuts {{{
let g:mathshortcuts = ''
\."\n Math shortcuts - Insert mode"
\."\n `a \\alpha `b \\beta"
\."\n `g \\gamma `d \\delta"
\."\n `e \\varepsilon `z \\zeta"
\."\n `h \\eta `q \\theta"
\."\n `i \\iota `k \\kappa"
\."\n `l \\lambda `m \\mu"
\."\n `n \\nu `x \\xi"
\."\n `p \\pi `r \\rho"
\."\n `s \\sigma `v \\varsigma"
\."\n `t \\tau `u \\upsilon"
\."\n `f \\varphi `c \\chi"
\."\n `y \\psi `w \\omega"
\."\n `A \\Alpha `B \\Beta"
\."\n `G \\Gamma `D \\Delta"
\."\n `E \\Epsilon `Z \\mathrm{Z}"
\."\n `H \\Eta `K \\Kappa"
\."\n `L \\Lambda `M \\Mu"
\."\n `N \\Nu `X \\Xi"
\."\n `P \\Pi `R \\Rho"
\."\n `S \\Sigma `T \\Tau"
\."\n `U \\Upsilon `C \\Chi"
\."\n `Y \\Psi `W \\Omega"
\."\n `( \\subset `) \\Subset"
\."\n `= \\equiv =~ \\approx"
\."\n `- \\bigcap `+ \\bigcup"
\."\n `. \\cdot `* \\times"
\."\n `\\ \\setminus `@ \\circ"
\."\n `& \\wedge `, \\nonumber"
\."\n `8 \\infty `_ \\bar{}"
\."\n `: \\ddot{} `; \\dot{}"
\."\n `^ \\hat{} `~ \\tilde{}"
\."\n `6 \\partial"
" }}}
" vim:fdm=marker:ff=unix:noet:ts=4:sw=4