1
1
" Author: Mikolaj Machowski <[email protected] >
2
- " Version: 0.3
2
+ " Version: 0.6
3
3
" Description: Footnotes in Vim
4
4
" Installation: See below
5
- " Last change: czw wrz 26 09:00 2002 C
5
+ " Last change: pon wrz 30 09:00 2002 C
6
6
"
7
+ " Help part:
7
8
" Inspired by Emmanuel Touzery tip:
8
9
" http://vim.sourceforge.net/tip_view.php?tip_id=332
9
10
" and discussion below (thanks to Luc for pluginization hints)
26
27
"
27
28
"
28
29
" Footnotes are placed at the end of the file but above signature delimiter
29
- " (is one exists).
30
+ " (if one exists).
30
31
"
31
32
" Settings:
32
- " g :vimfootnotetype - possible values:
33
+ " b :vimfootnotetype - possible values:
33
34
" arabic (default) - [1] [2] [3] ...
34
35
" alpha - [a] [b] ... [z] [aa] [bb] ... [zz] [a] ...
35
36
" Alpha - as above but uppercase [A] ...
37
+ " roman - [i] [ii] [iii] displayed properly up to 89
38
+ " Roman - as above but uppercase [I] ...
36
39
" star - [*] [**] [***] ...
37
40
"
38
41
" Additional commands:
46
49
" Decrease footnote counter by 1
47
50
" :FootnoteUndo
48
51
" 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, *)
50
53
" :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.
53
56
" If your previous footnote type was arabic new type will be alpha.
54
57
" :FootnoteMeta name_of_the_type
55
58
" Change footnote type to name_of_the_type. If name_of_the_type is the
56
59
" same as your current footnote type nothing would be changed.
60
+ " You can change your default type of footnote before inserting first
61
+ " footnote.
57
62
" FootnoteRestore:
58
63
" Restore previous footnote type and counter. Unfortunately there is no easy
59
64
" way to sort footnotes at the end of file without handmade :!sort on marked
60
65
" lines (it doesn't work for 'star' type).
61
66
" :FootnoteRestore
62
67
"
63
68
" 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):
65
70
" set laststatus=2
66
71
" set wildmode=longest,list
67
72
" set wildmenu
68
73
"
69
74
" And/or map :FootnoteComs for something you like.
70
75
"
71
76
" """"""""""""""""""""""""""""""""""""""""""""""""""
72
- if exists (" g:loaded_footnote_vim" ) | finish | endif
73
- let g: loaded_footnote_vim = 1
74
77
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
75
92
if ! hasmapto (' <Plug>AddVimFootnote' , ' i' )
76
93
imap <Leader> f <Plug> AddVimFootnote
77
94
endif
95
+ if ! hasmapto (' <Plug>AddVimFootnote' , ' n' )
96
+ nmap <Leader> f <Plug> AddVimFootnote
97
+ endif
98
+
78
99
if ! 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
80
104
endif
81
105
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>
84
111
85
112
" :Footnote commands
86
113
command ! -nargs =1 FootnoteNumber call <sid> VimFootnoteNumber (<q-args> )
87
114
command ! -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
90
116
command ! -nargs =? FootnoteMeta call <sid> VimFootnoteMeta (<f-args> )
91
117
command ! -nargs =0 FootnoteRestore call <sid> VimFootnoteRestore ()
92
118
93
119
function ! s: VimFootnoteNumber (newnumber)
94
120
let g: oldvimfootnotenumber = g: vimfootnotenumber
95
- let g: vimfootnotenumber = a: newnumber
121
+ let g: vimfootnotenumber = a: newnumber - 1
96
122
endfunction
97
123
98
124
function ! s: VimFootnoteNumberRestore ()
@@ -132,15 +158,12 @@ function! s:VimFootnoteRestore()
132
158
let g: oldvimfootnotetype = oldvimfootnotetype2
133
159
let g: oldvimfootnotenumber = oldvimfootnotenumber2
134
160
else
135
- echomsg " You didn't chang footnote type. Yet."
161
+ echomsg " You didn't change footnote type. Yet."
136
162
return 0
137
163
endif
138
164
endfunction
139
165
140
166
function ! s: VimFootnoteType (footnumber)
141
- if ! exists (" g:vimfootnotetype" )
142
- let g: vimfootnotetype = " arabic"
143
- endif
144
167
if (g: vimfootnotetype = ~ " alpha\\ |Alpha" )
145
168
if (g: vimfootnotetype == " alpha" )
146
169
let upper = " 0"
@@ -158,34 +181,86 @@ function! s:VimFootnoteType(footnumber)
158
181
elseif (g: vimfootnotetype == " star" )
159
182
let starnumber = 1
160
183
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
164
187
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
165
239
else
166
240
let ftnumber = a: footnumber
167
241
endif
168
242
return ftnumber
169
243
endfunction
170
244
171
- function ! s: VimFootnotes ()
172
- if exists ( " g:vimfootnotenumber" )
245
+ function ! s: VimFootnotes (appendcmd )
246
+ if ( g: vimfootnotenumber != 0 )
173
247
let g: vimfootnotenumber = g: vimfootnotenumber + 1
174
- let b : vimfootnotemark = <sid> VimFootnoteType (g: vimfootnotenumber )
248
+ let g : vimfootnotemark = <sid> VimFootnoteType (g: vimfootnotenumber )
175
249
let cr = " "
176
250
else
177
251
let g: vimfootnotenumber = 1
178
- let b : vimfootnotemark = <sid> VimFootnoteType (g: vimfootnotenumber )
252
+ let g : vimfootnotemark = <sid> VimFootnoteType (g: vimfootnotenumber )
179
253
let cr = " \<cr> "
180
254
endif
181
- exe " normal a [" .b : vimfootnotemark ." ]\<esc> "
255
+ exe " normal " . a: appendcmd . " [" .g : vimfootnotemark ." ]\<esc> "
182
256
:below 4 split
183
257
normal G
184
258
if search (" ^-- $" , " bW" )
185
- exe " normal O" .cr ." [" .b : vimfootnotemark ." ] "
259
+ exe " normal O" .cr ." [" .g : vimfootnotemark ." ] "
186
260
else
187
- exe " normal o" .cr ." [" .b : vimfootnotemark ." ] "
261
+ exe " normal o" .cr ." [" .g : vimfootnotemark ." ] "
188
262
endif
189
263
startinsert !
190
264
endfunction
191
265
266
+ let &cpo = s: cpo_save
0 commit comments