playground/vimscript/supersub.vim

44 lines
2.0 KiB
VimL

let g:modes = {
\ "super": ["0123456789abcdefghijklmnoprstuvwxyzABDEGHIJKLMNOPRTUVW+-=()",
\ "⁰¹²³⁴⁵⁶⁷⁸⁹ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂ⁺⁻⁼⁽⁾"],
\ "sub": ["0123456789abcdefghijklmnoprstuvwxyzABDEGHIJKLMNOPRTUVW+-=()",
\ "⁰¹²³⁴⁵⁶⁷⁸⁹ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂ⁺⁻⁼⁽⁾"],
\ }
let g:superscript_from = '0123456789abcdefghijklmnoprstuvwxyzABDEGHIJKLMNOPRTUVW+-=()'
let g:superscript_to = '⁰¹²³⁴⁵⁶⁷⁸⁹ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂ⁺⁻⁼⁽⁾'
function! Core(line_list, from_to_map)
return map(a:line_list, {key, val -> tr(val, a:from_to_map[0], a:from_to_map[1]})
endfunction
" https://stackoverflow.com/questions/1533565/how-to-get-visually-selected-text-in-vimscript
function! Get_visual()
let [line_start, column_start] = getpos("'<")[1:2]
let [line_end, column_end] = getpos("'>")[1:2]
let l:lines = getline(line_start, line_end)
echo l:lines
if len(l:lines) == 0
return ''
endif
"call map(l:lines, {key, val -> tr(val, g:superscript_from, g:superscript_to)})
let l:result = Core(l:lines, g:modes["super"][0], g:modes["super"][1])
let rv = setline(line_start, l:result)
"let rv = setline(line_start, l:lines)
endfunction
" function! s:get_visual_selection()
" " Why is this not a built-in Vim script function?!
" let [line_start, column_start] = getpos("'<")[1:2]
" let [line_end, column_end] = getpos("'>")[1:2]
" let lines = getline(line_start, line_end)
" if len(lines) == 0
" return ''
" endif
" let lines[-1] = lines[-1][: column_end - (&selection == 'inclusive' ? 1 : 2)]
" let lines[0] = lines[0][column_start - 1:]
" return join(lines, "\n")
" endfunction