Skip to content
This repository was archived by the owner on Mar 9, 2020. It is now read-only.

Commit 03bd5b1

Browse files
vvizzovim-scripts
authored andcommitted
Version 0.5
Added: roman and Roman counters Fixed: various bugs with :FootnoteCommands
1 parent 7d48d84 commit 03bd5b1

File tree

1 file changed

+105
-30
lines changed

1 file changed

+105
-30
lines changed

plugin/vimfootnotes.vim

Lines changed: 105 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
" Author: Mikolaj Machowski <[email protected]>
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)
@@ -26,13 +27,15 @@
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:
@@ -46,53 +49,76 @@
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
7592
if !hasmapto('<Plug>AddVimFootnote', 'i')
7693
imap <Leader>f <Plug>AddVimFootnote
7794
endif
95+
if !hasmapto('<Plug>AddVimFootnote', 'n')
96+
nmap <Leader>f <Plug>AddVimFootnote
97+
endif
98+
7899
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
80104
endif
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
86113
command! -nargs=1 FootnoteNumber call <sid>VimFootnoteNumber(<q-args>)
87114
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
90116
command! -nargs=? FootnoteMeta call <sid>VimFootnoteMeta(<f-args>)
91117
command! -nargs=0 FootnoteRestore call <sid>VimFootnoteRestore()
92118

93119
function! s:VimFootnoteNumber(newnumber)
94120
let g:oldvimfootnotenumber = g:vimfootnotenumber
95-
let g:vimfootnotenumber = a:newnumber
121+
let g:vimfootnotenumber = a:newnumber - 1
96122
endfunction
97123

98124
function! 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
138164
endfunction
139165

140166
function! 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
169243
endfunction
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 4split
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!
190264
endfunction
191265

266+
let &cpo = s:cpo_save

0 commit comments

Comments
 (0)