parent
							
								
									2fca008599
								
							
						
					
					
						commit
						df4b8a9ce5
					
				@ -0,0 +1,195 @@
 | 
			
		||||
"------------------------------------------------------------------------------
 | 
			
		||||
" Exit when your app has already been loaded (or "compatible" mode set)
 | 
			
		||||
if exists("g:loaded_Banana") || &cp
 | 
			
		||||
	finish
 | 
			
		||||
endif
 | 
			
		||||
let g:loaded_Banana= 1 " your version number
 | 
			
		||||
let s:keepcpo           = &cpo
 | 
			
		||||
set cpo&vim
 | 
			
		||||
 | 
			
		||||
" Public Interface:
 | 
			
		||||
" AppFunction: is a function you expect your users to call
 | 
			
		||||
" PickAMap: some sequence of characters that will run your AppFunction
 | 
			
		||||
" Repeat these three lines as needed for multiple functions which will
 | 
			
		||||
" be used to provide an interface for the user
 | 
			
		||||
if !hasmapto('<Plug>BananaEnc')
 | 
			
		||||
	map <unique> <Leader>b <Plug>BananaEnc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if !hasmapto('<Plug>BananaDec')
 | 
			
		||||
	map <unique> <Leader>d <Plug>BananaDec
 | 
			
		||||
endif
 | 
			
		||||
"
 | 
			
		||||
"" Global Maps:
 | 
			
		||||
""
 | 
			
		||||
"noremap <silent> <unique> <script> <Plug>BananaPybanana
 | 
			
		||||
"			\ :set lz<CR>:call <SID>Pybanana()<CR>:set nolz<CR>
 | 
			
		||||
noremap <silent> <unique> <script> <Plug>BananaEnc
 | 
			
		||||
			\ :call <SID>Enc()<CR>
 | 
			
		||||
noremap <silent> <unique> <script> <Plug>BananaDec
 | 
			
		||||
			\ :call <SID>Dec()<CR>
 | 
			
		||||
 | 
			
		||||
"command! Banana call s:PyBanana()
 | 
			
		||||
"nnoremap ;b :Banana<CR>
 | 
			
		||||
"vnoremap ;b :<C-U>Banana<CR>
 | 
			
		||||
"
 | 
			
		||||
"------------------------------------------------------------------------------
 | 
			
		||||
" s:AppFunction: this function is available via the <Plug>/<script>
 | 
			
		||||
" interface above
 | 
			
		||||
"
 | 
			
		||||
"fun! s:Pybanana()
 | 
			
		||||
"python3 << EOL
 | 
			
		||||
"import vim
 | 
			
		||||
"import re
 | 
			
		||||
"
 | 
			
		||||
"def dec2banana(num, dictstart = None, shiftend = None, minlength = None, dictionary = None):
 | 
			
		||||
"    #defaults
 | 
			
		||||
"    if dictstart is None: dictstart = 0
 | 
			
		||||
"    if shiftend is None: shiftend = 0
 | 
			
		||||
"    if minlength is None: minlength = 0
 | 
			
		||||
"    if dictionary is None: dictionary = [list("bcdfglmnprstvz"), list("aeiou")]
 | 
			
		||||
"    
 | 
			
		||||
"    numdict = len(dictionary)
 | 
			
		||||
"    v = num
 | 
			
		||||
"    st = ""
 | 
			
		||||
"    l = 0
 | 
			
		||||
"
 | 
			
		||||
"    i = (numdict - 1 + dictstart + shiftend) % numdict
 | 
			
		||||
"    while not (v == 0 and i == (numdict - 1 + dictstart) % numdict and l >= minlength):
 | 
			
		||||
"        r = v % len(dictionary[i])
 | 
			
		||||
"        v = int(v / len(dictionary[i]))
 | 
			
		||||
"        st = dictionary[i][r] + st
 | 
			
		||||
"        i = (i - 1) % numdict
 | 
			
		||||
"        l += 1
 | 
			
		||||
"   
 | 
			
		||||
"    return(st)
 | 
			
		||||
"    
 | 
			
		||||
"def banana2dec(banana, dictstart = None, shiftend = None, dictionary = None):
 | 
			
		||||
"    #defaults
 | 
			
		||||
"    if dictstart is None: dictstart = 0
 | 
			
		||||
"    if shiftend is None: shiftend = 0
 | 
			
		||||
"    if dictionary is None: dictionary = [list("bcdfglmnprstvz"), list("aeiou")] #, list("123456")
 | 
			
		||||
"
 | 
			
		||||
"    numdict = len(dictionary)
 | 
			
		||||
"    if (len(banana) - shiftend) % numdict != 0:
 | 
			
		||||
"        return("Banana non valida")
 | 
			
		||||
"    v = 0
 | 
			
		||||
"    for i in range(len(banana)):
 | 
			
		||||
"        r = (numdict + i + dictstart) % numdict
 | 
			
		||||
"        try:
 | 
			
		||||
"            v = v * len(dictionary[r]) + dictionary[r].index(banana[i])
 | 
			
		||||
"        except:
 | 
			
		||||
"            return("Carattere non valido in posizione", i+1)
 | 
			
		||||
"    
 | 
			
		||||
"    return(v)
 | 
			
		||||
"
 | 
			
		||||
"def isbanana(banana, dictstart = None, shiftend = None, dictionary = None):
 | 
			
		||||
"    #defaults
 | 
			
		||||
"    if dictstart is None: dictstart = 0
 | 
			
		||||
"    if shiftend is None: shiftend = 0
 | 
			
		||||
"    if dictionary is None: dictionary = [list("bcdfglmnprstvz"), list("aeiou")] #, list("123456")
 | 
			
		||||
"
 | 
			
		||||
"    numdict = len(dictionary)
 | 
			
		||||
"    if (len(banana) - shiftend) % numdict != 0:
 | 
			
		||||
"        return(False)
 | 
			
		||||
"    for i in range(len(banana)):
 | 
			
		||||
"        r = (numdict + i + dictstart) % numdict
 | 
			
		||||
"        if banana[i] not in dictionary[r]:
 | 
			
		||||
"            return(False)
 | 
			
		||||
"
 | 
			
		||||
"    return(True)
 | 
			
		||||
"
 | 
			
		||||
"def callback_dec(x):
 | 
			
		||||
"    b = x[0].strip().lower()
 | 
			
		||||
"    if isbanana(b):
 | 
			
		||||
"        return "%s" % banana2dec(b)
 | 
			
		||||
"    else:
 | 
			
		||||
"        return x[0]
 | 
			
		||||
"
 | 
			
		||||
"def text2dec(text):
 | 
			
		||||
"    text = re.sub(r"[A-Z][A-Z]*", callback_dec, text)
 | 
			
		||||
"	#return text
 | 
			
		||||
"    print(text)
 | 
			
		||||
"
 | 
			
		||||
"def callback(x):
 | 
			
		||||
"    return " %s " % dec2banana(int(x[0], base=10)).upper()
 | 
			
		||||
"
 | 
			
		||||
"def text2banana(text):
 | 
			
		||||
"    text = re.sub(r"[0-9][0-9]*", callback, text)
 | 
			
		||||
"    return text
 | 
			
		||||
"
 | 
			
		||||
"def get_selected_text():
 | 
			
		||||
"    buf = vim.current.buffer
 | 
			
		||||
"    (lnum1, col1) = buf.mark('<')
 | 
			
		||||
"    (lnum2, col2) = buf.mark('>')
 | 
			
		||||
"    lines = vim.eval('getline({}, {})'.format(lnum1, lnum2))
 | 
			
		||||
"    lines[0] = lines[0][col1:]
 | 
			
		||||
"    lines[-1] = lines[-1][:col2]
 | 
			
		||||
"
 | 
			
		||||
"    return "\n".join(lines)
 | 
			
		||||
"
 | 
			
		||||
"def replace_selected_text(new_str):
 | 
			
		||||
"    buf = vim.current.buffer
 | 
			
		||||
"    (lnum1, col1) = buf.mark('<')
 | 
			
		||||
"    (lnum2, col2) = buf.mark('>')
 | 
			
		||||
"    lines = vim.eval('getline({}, {})'.format(lnum1,lnum2))
 | 
			
		||||
"    new_str = lines[0][:col1] + new_str + lines[-1][col2+1:]
 | 
			
		||||
"    new_str_list = new_str.split('\n')
 | 
			
		||||
"    del buf[lnum1-1:lnum2]
 | 
			
		||||
"    buf.append(new_str_list, lnum1-1)
 | 
			
		||||
"    return new_str
 | 
			
		||||
"
 | 
			
		||||
"replace_selected_text(text2banana(get_selected_text()))
 | 
			
		||||
"
 | 
			
		||||
"EOL
 | 
			
		||||
"
 | 
			
		||||
"	" your script function can set up maps to internal functions
 | 
			
		||||
"	"nnoremap <silent> <Left> :set lz<CR>:silent! call
 | 
			
		||||
"	"<SID>AppFunction2()<CR>:set nolz<CR>
 | 
			
		||||
"
 | 
			
		||||
"	" your app can call functions in its own script and not worry
 | 
			
		||||
"	" about name
 | 
			
		||||
"	" clashes by preceding those function names with <SID>
 | 
			
		||||
"	"call s:InternalAppFunction(...)
 | 
			
		||||
"
 | 
			
		||||
"	" or you could call it with
 | 
			
		||||
"	"call s:InternalAppFunction(...)
 | 
			
		||||
"endfun
 | 
			
		||||
 | 
			
		||||
python3 import sys
 | 
			
		||||
python3 import vim
 | 
			
		||||
python3 sys.path.append(vim.eval('expand("<sfile>:h")'))
 | 
			
		||||
 | 
			
		||||
fun! s:Enc()
 | 
			
		||||
	python3 << EOL
 | 
			
		||||
from banana import text2banana,get_selected_text,replace_selected_text
 | 
			
		||||
 | 
			
		||||
replace_selected_text(text2banana(get_selected_text()))
 | 
			
		||||
 | 
			
		||||
EOL
 | 
			
		||||
endfun!
 | 
			
		||||
 | 
			
		||||
fun! s:Dec()
 | 
			
		||||
	python3 << EOL
 | 
			
		||||
from banana import text2dec,get_selected_text,replace_selected_text
 | 
			
		||||
 | 
			
		||||
replace_selected_text(text2dec(get_selected_text()))
 | 
			
		||||
 | 
			
		||||
EOL
 | 
			
		||||
endfun!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"------------------------------------------------------------------------------
 | 
			
		||||
" s:InternalAppFunction: this function cannot be
 | 
			
		||||
" called from outside the
 | 
			
		||||
" script, and its name won't clash with whatever else
 | 
			
		||||
" the user has loaded
 | 
			
		||||
"fun! s:InternalAppFunction(...)
 | 
			
		||||
"
 | 
			
		||||
"	..whatever..
 | 
			
		||||
"endfun
 | 
			
		||||
"
 | 
			
		||||
"
 | 
			
		||||
"------------------------------------------------------------------------------
 | 
			
		||||
let &cpo= s:keepcpo
 | 
			
		||||
unlet s:keepcpo
 | 
			
		||||
@ -0,0 +1,107 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
import vim
 | 
			
		||||
import re
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
def dec2banana(num, dictstart = None, shiftend = None, minlength = None, dictionary = None):
 | 
			
		||||
    #defaults
 | 
			
		||||
    if dictstart is None: dictstart = 0
 | 
			
		||||
    if shiftend is None: shiftend = 0
 | 
			
		||||
    if minlength is None: minlength = 0
 | 
			
		||||
    if dictionary is None: dictionary = [list("bcdfglmnprstvz"), list("aeiou")]
 | 
			
		||||
    
 | 
			
		||||
    numdict = len(dictionary)
 | 
			
		||||
    v = num
 | 
			
		||||
    st = ""
 | 
			
		||||
    l = 0
 | 
			
		||||
 | 
			
		||||
    i = (numdict - 1 + dictstart + shiftend) % numdict
 | 
			
		||||
    while not (v == 0 and i == (numdict - 1 + dictstart) % numdict and l >= minlength):
 | 
			
		||||
        r = v % len(dictionary[i])
 | 
			
		||||
        v = int(v / len(dictionary[i]))
 | 
			
		||||
        st = dictionary[i][r] + st
 | 
			
		||||
        i = (i - 1) % numdict
 | 
			
		||||
        l += 1
 | 
			
		||||
   
 | 
			
		||||
    return(st)
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
def banana2dec(banana, dictstart = None, shiftend = None, dictionary = None):
 | 
			
		||||
    #defaults
 | 
			
		||||
    if dictstart is None: dictstart = 0
 | 
			
		||||
    if shiftend is None: shiftend = 0
 | 
			
		||||
    if dictionary is None: dictionary = [list("bcdfglmnprstvz"), list("aeiou")] #, list("123456")
 | 
			
		||||
 | 
			
		||||
    numdict = len(dictionary)
 | 
			
		||||
    if (len(banana) - shiftend) % numdict != 0:
 | 
			
		||||
        return("Banana non valida")
 | 
			
		||||
    v = 0
 | 
			
		||||
    for i in range(len(banana)):
 | 
			
		||||
        r = (numdict + i + dictstart) % numdict
 | 
			
		||||
        try:
 | 
			
		||||
            v = v * len(dictionary[r]) + dictionary[r].index(banana[i])
 | 
			
		||||
        except:
 | 
			
		||||
            return("Carattere non valido in posizione", i+1)
 | 
			
		||||
    
 | 
			
		||||
    return(v)
 | 
			
		||||
 | 
			
		||||
def isbanana(banana, dictstart = None, shiftend = None, dictionary = None):
 | 
			
		||||
    #defaults
 | 
			
		||||
    if dictstart is None: dictstart = 0
 | 
			
		||||
    if shiftend is None: shiftend = 0
 | 
			
		||||
    if dictionary is None: dictionary = [list("bcdfglmnprstvz"), list("aeiou")] #, list("123456")
 | 
			
		||||
 | 
			
		||||
    numdict = len(dictionary)
 | 
			
		||||
    if (len(banana) - shiftend) % numdict != 0:
 | 
			
		||||
        return(False)
 | 
			
		||||
    for i in range(len(banana)):
 | 
			
		||||
        r = (numdict + i + dictstart) % numdict
 | 
			
		||||
        if banana[i] not in dictionary[r]:
 | 
			
		||||
            return(False)
 | 
			
		||||
 | 
			
		||||
    return(True)
 | 
			
		||||
 | 
			
		||||
def callback(x):
 | 
			
		||||
    return " %s " % dec2banana(int(x[0], base=10)).upper()
 | 
			
		||||
 | 
			
		||||
def text2banana(text):
 | 
			
		||||
    text = re.sub(r"[0-9][0-9]*",callback,text)
 | 
			
		||||
    return text
 | 
			
		||||
 | 
			
		||||
def callback_dec(x):
 | 
			
		||||
    b = x[0].strip().lower()
 | 
			
		||||
    if isbanana(b):
 | 
			
		||||
        return "%s" % banana2dec(b)
 | 
			
		||||
    else:
 | 
			
		||||
        return x[0]
 | 
			
		||||
 | 
			
		||||
def text2dec(text):
 | 
			
		||||
    text = re.sub(r"[A-Z][A-Z]*",callback_dec,text)
 | 
			
		||||
    return text
 | 
			
		||||
 | 
			
		||||
def get_selected_text():
 | 
			
		||||
    buf = vim.current.buffer
 | 
			
		||||
    (lnum1, col1) = buf.mark('<')
 | 
			
		||||
    (lnum2, col2) = buf.mark('>')
 | 
			
		||||
    lines = vim.eval('getline({}, {})'.format(lnum1, lnum2))
 | 
			
		||||
    lines[0] = lines[0][col1:]
 | 
			
		||||
    lines[-1] = lines[-1][:col2]
 | 
			
		||||
 | 
			
		||||
    return "\n".join(lines)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def replace_selected_text(new_str):
 | 
			
		||||
    buf = vim.current.buffer
 | 
			
		||||
    (lnum1, col1) = buf.mark('<')
 | 
			
		||||
    (lnum2, col2) = buf.mark('>')
 | 
			
		||||
    lines = vim.eval('getline({}, {})'.format(lnum1,lnum2))
 | 
			
		||||
    new_str = lines[0][:col1] + new_str + lines[-1][col2+1:]
 | 
			
		||||
    new_str_list = new_str.split('\n')
 | 
			
		||||
    del buf[lnum1-1:lnum2]
 | 
			
		||||
    buf.append(new_str_list, lnum1-1)
 | 
			
		||||
    return new_str
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    print("Ciao sono la libreria banana")
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue