add vim conf files
[arrow.git] / conf_slk120 / vim / _vim / ftplugin / viki.vim
blobe1de5c272b691a5ba1393b3c2a4e5cb0e921e450
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.
6 " @Revision: 146
8 if !g:vikiEnabled
9     finish
10 endif
12 if exists("b:did_ftplugin")
13     finish
14 endif
15 let b:did_ftplugin = 1
17 let b:vikiCommentStart = "%"
18 let b:vikiCommentEnd   = ""
19 if !exists("b:vikiMaxFoldLevel")
20     let b:vikiMaxFoldLevel = 5
21 endif
22 if !exists("b:vikiInverseFold")
23     let b:vikiInverseFold  = 0
24 endif
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)
32 setlocal expandtab
33 setlocal iskeyword+=#
35 let b:vikiEnabled = 2
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>
52 " endif
54 " compiler deplate
57 if exists('*VikiFoldLevel')
58     finish
59 endif
61 fun! VikiFoldLevel(lnum)
62     let vikiFolds = exists('b:vikiFolds') ? b:vikiFolds : g:vikiFolds
63     if stridx(vikiFolds, 'h') >= 0
64         if vikiFolds =~? 'h'
65             let fl = <SID>ScanHeading(a:lnum, a:lnum, vikiFolds)
66             if fl != ''
67                 return fl
68             endif
69         endif
70         if vikiFolds =~# 'l' 
71             let list = <SID>MatchList(a:lnum)
72             if list > 0
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)
77                 if fl != ''
78                     if fl[0] == '>'
79                         let fl = strpart(fl, 1)
80                     endif
81                     return '<'. (fl + 1)
82                 endif
83             endif
84         endif
85         if vikiFolds =~# 's'
86             if exists('b:vikiFoldDef')
87                 exec b:vikiFoldDef
88                 if vikiFoldLine == a:lnum
89                     return vikiFoldLevel
90                 endif
91             endif
92             let i = 1
93             while i > a:lnum
94                 let vfl = VikiFoldLevel(a:lnum - i)
95                 if vfl[0] == '>'
96                     let b:vikiFoldDef = 'let vikiFoldLine='. a:lnum 
97                                 \ .'|let vikiFoldLevel="'. vfl .'"'
98                     return vfl
99                 elseif vfl == '='
100                     let i = i + 1
101                 endif
102             endwh
103         endif
104         if b:vikiHeadingMaxLevel == 0
105             return 0
106         elseif vikiFolds =~# 'b'
107             return b:vikiHeadingMaxLevel + 1
108         else
109             return "="
110         endif
111     endif
112     return 0
113 endfun
115 fun! <SID>ScanHeading(lnum, top, vikiFolds)
116     let lnum = a:lnum
117     while lnum >= a:top
118         let head = <SID>MatchHead(lnum)
119         if head > 0
120             if head > b:vikiHeadingMaxLevel
121                 let b:vikiHeadingMaxLevel = head
122             endif
123             if b:vikiInverseFold || a:vikiFolds =~# 'H'
124                 if b:vikiMaxFoldLevel > head
125                     return ">". (b:vikiMaxFoldLevel - head)
126                 else
127                     return ">0"
128                 end
129             else
130                 return ">". head
131             endif
132         endif
133         let lnum = lnum - 1
134     endwh
135     return ''
136 endf
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\+')
141 endf
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)
146 endf