11" Author: Mikolaj Machowski <mikmach@wp.pl>
2- " Version: 0.3
2+ " Version: 0.6
33" Description: Footnotes in Vim
44" Installation: See below
5- " Last change: czw wrz 26 09:00 2002 C
5+ " Last change: pon wrz 30 09:00 2002 C
66"
7+ " Help part:
78" Inspired by Emmanuel Touzery tip:
89" http://vim.sourceforge.net/tip_view.php?tip_id=332
910" and discussion below (thanks to Luc for pluginization hints)
2627"
2728"
2829" Footnotes are placed at the end of the file but above signature delimiter
29- " (is one exists).
30+ " (if one exists).
3031"
3132" Settings:
32- " g :vimfootnotetype - possible values:
33+ " b :vimfootnotetype - possible values:
3334" arabic (default) - [1] [2] [3] ...
3435" alpha - [a] [b] ... [z] [aa] [bb] ... [zz] [a] ...
3536" Alpha - as above but uppercase [A] ...
37+ " roman - [i] [ii] [iii] displayed properly up to 89
38+ " Roman - as above but uppercase [I] ...
3639" star - [*] [**] [***] ...
3740"
3841" Additional commands:
4649" Decrease footnote counter by 1
4750" :FootnoteUndo
4851" FootnoteMeta:
49- " Change type of the footnotes and restart counter (1, a, A, *)
52+ " Change type of the footnotes and restart counter (1, a, A, i, I, *)
5053" :FootnoteMeta
51- " If your previous footnote type was alpha, Alpha or star new type will
52- " be arabic.
54+ " If your previous footnote type was alpha, Alpha, roman, Roman or star
55+ " new type will be arabic.
5356" If your previous footnote type was arabic new type will be alpha.
5457" :FootnoteMeta name_of_the_type
5558" Change footnote type to name_of_the_type. If name_of_the_type is the
5659" same as your current footnote type nothing would be changed.
60+ " You can change your default type of footnote before inserting first
61+ " footnote.
5762" FootnoteRestore:
5863" Restore previous footnote type and counter. Unfortunately there is no easy
5964" way to sort footnotes at the end of file without handmade :!sort on marked
6065" lines (it doesn't work for 'star' type).
6166" :FootnoteRestore
6267"
6368" For easier work with this commands I would suggest place this lines in your
64- " vimrc (they offer very nice competion of Vim commands):
69+ " vimrc (they offer very nice completion of Vim commands):
6570" set laststatus=2
6671" set wildmode=longest,list
6772" set wildmenu
6873"
6974" And/or map :FootnoteComs for something you like.
7075"
7176" """"""""""""""""""""""""""""""""""""""""""""""""""
72- if exists (" g:loaded_footnote_vim" ) | finish | endif
73- let g: loaded_footnote_vim = 1
7477
78+ if exists (" b:loaded_footnote_vim" ) | finish | endif
79+ let b: loaded_footnote_vim = 1
80+
81+ let s: cpo_save = &cpo
82+ set cpo &vim
83+
84+ if ! exists (" g:vimfootnotetype" )
85+ let g: vimfootnotetype = " arabic"
86+ endif
87+ if ! exists (" g:vimfootnotenumber" )
88+ let g: vimfootnotenumber = 0
89+ endif
90+
91+ " Mappings
7592if ! hasmapto (' <Plug>AddVimFootnote' , ' i' )
7693 imap <Leader> f <Plug> AddVimFootnote
7794endif
95+ if ! hasmapto (' <Plug>AddVimFootnote' , ' n' )
96+ nmap <Leader> f <Plug> AddVimFootnote
97+ endif
98+
7899if ! hasmapto (' <Plug>ReturnFromFootnote' , ' i' )
79- imap <leader> r <Plug> ReturnFromFootnote
100+ imap <Leader> r <Plug> ReturnFromFootnote
101+ endif
102+ if ! hasmapto (' <Plug>ReturnFromFootnote' , ' n' )
103+ nmap <Leader> r <Plug> ReturnFromFootnote
80104endif
81105
82- imap <Plug> AddVimFootnote <C-O> :call <SID> VimFootnotes()<CR>
83- imap <Plug> ReturnFromFootnote <C-O> :q<CR><Right>
106+ nnoremap <Plug> AddVimFootnote :call <SID> VimFootnotes('a')<CR>
107+ inoremap <Plug> AddVimFootnote <C-O> :call <SID> VimFootnotes('a')<CR>
108+
109+ inoremap <Plug> ReturnFromFootnote <C-O> :q<CR><Right>
110+ noremap <Plug> ReturnFromFootnote :q<CR><Right>
84111
85112" :Footnote commands
86113command ! -nargs =1 FootnoteNumber call <sid> VimFootnoteNumber (<q-args> )
87114command ! -nargs =0 FootnoteNumberRestore call <sid> VimFootnoteNumberRestore ()
88- command ! -nargs =0 FootnoteUndo
89- \ | let g: vimfootnotenumber = g: vimfootnotenumber - 1
115+ command ! -nargs =0 FootnoteUndo let g: vimfootnotenumber = g: vimfootnotenumber - 1
90116command ! -nargs =? FootnoteMeta call <sid> VimFootnoteMeta (<f-args> )
91117command ! -nargs =0 FootnoteRestore call <sid> VimFootnoteRestore ()
92118
93119function ! s: VimFootnoteNumber (newnumber)
94120 let g: oldvimfootnotenumber = g: vimfootnotenumber
95- let g: vimfootnotenumber = a: newnumber
121+ let g: vimfootnotenumber = a: newnumber - 1
96122endfunction
97123
98124function ! s: VimFootnoteNumberRestore ()
@@ -132,15 +158,12 @@ function! s:VimFootnoteRestore()
132158 let g: oldvimfootnotetype = oldvimfootnotetype2
133159 let g: oldvimfootnotenumber = oldvimfootnotenumber2
134160 else
135- echomsg " You didn't chang footnote type. Yet."
161+ echomsg " You didn't change footnote type. Yet."
136162 return 0
137163 endif
138164endfunction
139165
140166function ! s: VimFootnoteType (footnumber)
141- if ! exists (" g:vimfootnotetype" )
142- let g: vimfootnotetype = " arabic"
143- endif
144167 if (g: vimfootnotetype = ~ " alpha\\ |Alpha" )
145168 if (g: vimfootnotetype == " alpha" )
146169 let upper = " 0"
@@ -158,34 +181,86 @@ function! s:VimFootnoteType(footnumber)
158181 elseif (g: vimfootnotetype == " star" )
159182 let starnumber = 1
160183 let ftnumber = " "
161- while starnumber <= a: footnumber
162- let ftnumber = ftnumber. " * "
163- let starnumber = starnumber+ 1
184+ while ( starnumber <= a: footnumber)
185+ let ftnumber = ftnumber . ' * '
186+ let starnumber = starnumber + 1
164187 endwhile
188+ elseif (g: vimfootnotetype = ~ " roman\\ |Roman" )
189+ let ftnumber = " "
190+ let oneroman = " "
191+ let counter = g: vimfootnotenumber
192+ if (counter >= 50 )
193+ let ftnumber = " l"
194+ let counter = counter - 50
195+ endif
196+ if (counter > 39 && counter < 50 )
197+ let ftnumber = " xl"
198+ let counter = counter - 40
199+ endif
200+ if (counter > 10 )
201+ let tenmodulo = counter % 10
202+ let number_roman_ten = (counter - tenmodulo) / 10
203+ let romanten = 1
204+ while (romanten <= number_roman_ten)
205+ let ftnumber = ftnumber.' x'
206+ let romanten = romanten + 1
207+ endwhile
208+ elseif (counter == 10 )
209+ let ftnumber = ftnumber.' x'
210+ let tenmodulo = " "
211+ else
212+ let tenmodulo = counter
213+ endif
214+ if (tenmodulo == 1 )
215+ let oneroman = ' i'
216+ elseif (tenmodulo == 2 )
217+ let oneroman = ' ii'
218+ elseif (tenmodulo == 3 )
219+ let oneroman = ' iii'
220+ elseif (tenmodulo == 4 )
221+ let oneroman = ' iv'
222+ elseif (tenmodulo == 5 )
223+ let oneroman = ' v'
224+ elseif (tenmodulo == 6 )
225+ let oneroman = ' vi'
226+ elseif (tenmodulo == 7 )
227+ let oneroman = ' vii'
228+ elseif (tenmodulo == 8 )
229+ let oneroman = ' viii'
230+ elseif (tenmodulo == 9 )
231+ let oneroman = ' ix'
232+ elseif (tenmodulo == 0 )
233+ let oneroman = ' '
234+ endif
235+ let ftnumber = ftnumber . oneroman
236+ if (g: vimfootnotetype == " Roman" )
237+ let ftnumber = substitute (ftnumber, " .*" , " \\ U\\ 0" , " g" )
238+ endif
165239 else
166240 let ftnumber = a: footnumber
167241 endif
168242 return ftnumber
169243endfunction
170244
171- function ! s: VimFootnotes ()
172- if exists ( " g:vimfootnotenumber" )
245+ function ! s: VimFootnotes (appendcmd )
246+ if ( g: vimfootnotenumber != 0 )
173247 let g: vimfootnotenumber = g: vimfootnotenumber + 1
174- let b : vimfootnotemark = <sid> VimFootnoteType (g: vimfootnotenumber )
248+ let g : vimfootnotemark = <sid> VimFootnoteType (g: vimfootnotenumber )
175249 let cr = " "
176250 else
177251 let g: vimfootnotenumber = 1
178- let b : vimfootnotemark = <sid> VimFootnoteType (g: vimfootnotenumber )
252+ let g : vimfootnotemark = <sid> VimFootnoteType (g: vimfootnotenumber )
179253 let cr = " \<cr> "
180254 endif
181- exe " normal a [" .b : vimfootnotemark ." ]\<esc> "
255+ exe " normal " . a: appendcmd . " [" .g : vimfootnotemark ." ]\<esc> "
182256 :below 4 split
183257 normal G
184258 if search (" ^-- $" , " bW" )
185- exe " normal O" .cr ." [" .b : vimfootnotemark ." ] "
259+ exe " normal O" .cr ." [" .g : vimfootnotemark ." ] "
186260 else
187- exe " normal o" .cr ." [" .b : vimfootnotemark ." ] "
261+ exe " normal o" .cr ." [" .g : vimfootnotemark ." ] "
188262 endif
189263 startinsert !
190264endfunction
191265
266+ let &cpo = s: cpo_save
0 commit comments