add vim9script
parent
378761c34a
commit
e0e8979afd
@ -0,0 +1,117 @@
|
||||
" banana.vim - Convert Base Banana (https://git.lattuga.net/itec/banana) and back
|
||||
" T4 - totem4@tropici.net
|
||||
" Version: 0.1
|
||||
|
||||
vim9script
|
||||
|
||||
if exists("g:autoloaded_Banana") || &cp
|
||||
finish
|
||||
endif
|
||||
|
||||
g:autoloaded_Banana = 1
|
||||
|
||||
export def Enc()
|
||||
if line("'<") > 0
|
||||
call ReplSel(Dec2Ban(GetSel()))
|
||||
else
|
||||
call EncLine()
|
||||
endif
|
||||
enddef
|
||||
|
||||
def EncLine()
|
||||
call setline('.', substitute(getline('.'), '\d\d*', '\=toupper(Doban(submatch(0)))', 'g'))
|
||||
enddef
|
||||
|
||||
export def Dec()
|
||||
if line("'<") > 0
|
||||
call ReplSel(Ban2Dec(GetSel()))
|
||||
else
|
||||
call DecLine()
|
||||
endif
|
||||
enddef
|
||||
|
||||
def DecLine()
|
||||
call setline('.', substitute(getline('.'), '\C\u\u*', '\=Unban(tolower(submatch(0)))', 'g'))
|
||||
enddef
|
||||
|
||||
var dictionary = [['b', 'c', 'd', 'f', 'g', 'l', 'm', 'n', 'p', 'r', 's', 't', 'v', 'z'], ['a', 'e', 'i', 'o', 'u']]
|
||||
var numdict = len(dictionary)
|
||||
|
||||
def Doban(num: string): string
|
||||
var v = str2nr(num)
|
||||
var st = ''
|
||||
var l = 0
|
||||
|
||||
var i = (numdict - 1) % numdict
|
||||
|
||||
while ! (v == 0 && i == (numdict - 1) % numdict && l >= 0)
|
||||
var r = v % len(dictionary[i])
|
||||
v = v / len(dictionary[i])
|
||||
st = dictionary[i][r] .. st
|
||||
i = abs((i - 1) % numdict)
|
||||
l = l + 1
|
||||
endwhile
|
||||
return st
|
||||
enddef
|
||||
|
||||
def Unban(ban: string): string
|
||||
if ! IsBanana(ban)
|
||||
return toupper(ban)
|
||||
endif
|
||||
|
||||
var v = 0
|
||||
for i in range(len(ban))
|
||||
|
||||
var r = (numdict + i) % numdict
|
||||
var p = index(dictionary[r], ban[i])
|
||||
|
||||
v = v * len(dictionary[r]) + p
|
||||
endfor
|
||||
|
||||
return string(v)
|
||||
enddef
|
||||
|
||||
def IsBanana(ban: string): bool
|
||||
if (len(ban) % numdict) != 0
|
||||
return 0
|
||||
endif
|
||||
|
||||
for i in range(len(ban))
|
||||
var r = (numdict + i) % numdict
|
||||
if index(dictionary[r], ban[i]) == -1
|
||||
return 0
|
||||
endif
|
||||
endfor
|
||||
|
||||
return 1
|
||||
enddef
|
||||
|
||||
def GetSel(): string
|
||||
var [lstart, cstart] = getcharpos("'<")[1 : 2]
|
||||
var [lend, cend] = getcharpos("'>")[1 : 2]
|
||||
var lines = getline(lstart, lend)
|
||||
if len(lines) == 0
|
||||
return ''
|
||||
endif
|
||||
lines[-1] = lines[-1][: cend - (&selection == 'inclusive' ? 1 : 2)]
|
||||
lines[0] = lines[0][cstart - 1 : ]
|
||||
return join(lines, "\n")
|
||||
enddef
|
||||
|
||||
def ReplSel(str: string)
|
||||
var [lstart, cstart] = getcharpos("'<")[1 : 2]
|
||||
var [lend, cend] = getcharpos("'>")[1 : 2]
|
||||
var lines = getline(lstart, lend)
|
||||
var new_str = slice(lines[0], 0, cstart - 1) .. str .. lines[-1][cend : ]
|
||||
var new_str_lst = split(new_str, '\n')
|
||||
call setline(lstart, new_str_lst)
|
||||
delmarks < >
|
||||
enddef
|
||||
|
||||
def Dec2Ban(text: string): string
|
||||
return substitute(text, '\d\d*', '\=toupper(Doban(submatch(0)))', 'g')
|
||||
enddef
|
||||
|
||||
def Ban2Dec(text: string): string
|
||||
return substitute(text, '\C\u\u*', '\=Unban(tolower(submatch(0)))', 'g')
|
||||
enddef
|
@ -0,0 +1,30 @@
|
||||
" banana.vim - Convert Base Banana (https://git.lattuga.net/itec/banana) and back
|
||||
" T4 - totem4@tropici.net
|
||||
" Version: 0.1
|
||||
|
||||
vim9script
|
||||
|
||||
if exists("g:loaded_Banana") || &cp
|
||||
finish
|
||||
endif
|
||||
g:loaded_Banana = 1
|
||||
var keepcpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
if !hasmapto('<Plug>BananaEnc')
|
||||
map <unique> <Leader>c <Plug>BananaEnc
|
||||
endif
|
||||
|
||||
if !hasmapto('<Plug>BananaDec')
|
||||
map <unique> <Leader>t <Plug>BananaDec
|
||||
endif
|
||||
|
||||
import autoload 'banana.vim'
|
||||
|
||||
noremap <silent> <unique> <script> <Plug>BananaEnc
|
||||
\ :call <SID>banana.Enc()<CR>
|
||||
noremap <silent> <unique> <script> <Plug>BananaDec
|
||||
\ :call <SID>banana.Dec()<CR>
|
||||
|
||||
&cpo = keepcpo
|
||||
|
Loading…
Reference in New Issue