1 " viki.vim -- the viki ftplugin
2 " @Author: Thomas Link (samul AT web.de)
3 " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
4 " @Created: 12-Jän-2004.
5 " @Last Change: 29-Mär-2006.
12 if exists("b:did_ftplugin")
15 let b:did_ftplugin = 1
17 let b:vikiCommentStart = "%"
18 let b:vikiCommentEnd = ""
19 if !exists("b:vikiMaxFoldLevel")
20 let b:vikiMaxFoldLevel = 5
22 if !exists("b:vikiInverseFold")
23 let b:vikiInverseFold = 0
26 exe "setlocal commentstring=". substitute(b:vikiCommentStart, "%", "%%", "g")
27 \ ."%s". substitute(b:vikiCommentEnd, "%", "%%", "g")
28 exe "setlocal comments=:". b:vikiCommentStart
30 setlocal foldmethod=expr
31 setlocal foldexpr=VikiFoldLevel(v:lnum)
37 let &include='\(^\s*#INC.\{-}\(\sfile=\|:\)\)'
38 " let &include='\(^\s*#INC.\{-}\(\sfile=\|:\)\|\[\[\)'
39 " set includeexpr=substitute(v:fname,'\].*$','','')
41 let &define='^\s*\(#Def.\{-}id=\|#\(Fn\|Footnote\).\{-}\(:\|id=\)\|#VAR.\{-}\s\)'
43 let b:vikiHeadingMaxLevel = 0
45 " if !exists('b:vikiHideBody') | let b:vikiHideBody = 0 | endif
47 " if !hasmapto(":VikiFind")
48 " nnoremap <buffer> <c-tab> :VikiFindNext<cr>
49 " nnoremap <buffer> <LocalLeader>vn :VikiFindNext<cr>
50 " nnoremap <buffer> <c-s-tab> :VikiFindPrev<cr>
51 " nnoremap <buffer> <LocalLeader>vN :VikiFindPrev<cr>
57 if exists('*VikiFoldLevel')
61 fun! VikiFoldLevel(lnum)
62 let vikiFolds = exists('b:vikiFolds') ? b:vikiFolds : g:vikiFolds
63 if stridx(vikiFolds, 'h') >= 0
65 let fl = <SID>ScanHeading(a:lnum, a:lnum, vikiFolds)
71 let list = <SID>MatchList(a:lnum)
73 " return '>'. (b:vikiHeadingMaxLevel + (list / &sw))
74 return (b:vikiHeadingMaxLevel + (list / &sw))
75 elseif getline(a:lnum) !~ '^[[:blank:]]' && <SID>MatchList(a:lnum - 1) > 0
76 let fl = <SID>ScanHeading(a:lnum - 1, 1, vikiFolds)
79 let fl = strpart(fl, 1)
86 if exists('b:vikiFoldDef')
88 if vikiFoldLine == a:lnum
94 let vfl = VikiFoldLevel(a:lnum - i)
96 let b:vikiFoldDef = 'let vikiFoldLine='. a:lnum
97 \ .'|let vikiFoldLevel="'. vfl .'"'
104 if b:vikiHeadingMaxLevel == 0
106 elseif vikiFolds =~# 'b'
107 return b:vikiHeadingMaxLevel + 1
115 fun! <SID>ScanHeading(lnum, top, vikiFolds)
118 let head = <SID>MatchHead(lnum)
120 if head > b:vikiHeadingMaxLevel
121 let b:vikiHeadingMaxLevel = head
123 if b:vikiInverseFold || a:vikiFolds =~# 'H'
124 if b:vikiMaxFoldLevel > head
125 return ">". (b:vikiMaxFoldLevel - head)
138 fun! <SID>MatchHead(lnum)
139 " let head = matchend(getline(a:lnum), '\V\^'. escape(b:vikiHeadingStart, '\') .'\ze\s\+')
140 return matchend(getline(a:lnum), '\V\^'. b:vikiHeadingStart .'\+\ze\s\+')
143 fun! <SID>MatchList(lnum)
144 let rx = '^[[:blank:]]\+\ze\(#[A-F]\d\?\|#\d[A-F]\?\|[-+*#?@]\|[0-9#]\+\.\|[a-zA-Z?]\.\|.\{-1,}[[:blank:]]::\)[[:blank:]]'
145 return matchend(getline(a:lnum), rx)