This commit is contained in:
Adam Stankiewicz
2021-06-01 18:17:40 +02:00
parent 730dcb02ca
commit af0eaee017
56 changed files with 813 additions and 430 deletions

View File

@@ -73,9 +73,6 @@ function! s:L2U_SetupGlobal()
" Trigger for the previous mapping of <CR>
let s:l2u_fallback_trigger_cr = "\u0091L2UFallbackCR"
" Trigger for autosub completion cleanup autocommand
let s:l2u_autosub_cleanup_trigger = "\u0091L2UAutosubCleanup"
endfunction
" Each time the filetype changes, we may need to enable or
@@ -371,16 +368,14 @@ function! s:L2U_SetFallbackMapping(s, k)
" general solution. Also, it doesn't work with <CR> since that stops
" parsing of the <C-R>=... expression, so we need to special-case it.
" Also, if the original mapping was intended to be recursive, this
" will break it.
if mmdict["expr"]
if a:s != "<CR>"
let rhs = substitute(rhs, '\c' . a:s, "\<C-R>=LaTeXtoUnicode#PutLiteral('" . a:s . "')\<CR>", 'g')
else
let rhs = substitute(rhs, '\c' . a:s, "\<C-R>=LaTeXtoUnicode#PutLiteralCR()\<CR>", 'g')
endif
" Make the mapping silent even if it wasn't originally
if !mmdict["silent"]
let pre = pre . '<silent>'
" will break it.
if a:s != "<CR>"
let rhs = substitute(rhs, '\c' . a:s, "\<C-R>=LaTeXtoUnicode#PutLiteral('" . a:s . "')\<CR>", 'g')
else
let rhs = substitute(rhs, '\c' . a:s, "\<C-R>=LaTeXtoUnicode#PutLiteralCR()\<CR>", 'g')
endif
" Make the mapping silent even if it wasn't originally
if !mmdict["silent"]
let pre = pre . '<silent>'
endif
endif
@@ -631,7 +626,7 @@ function! LaTeXtoUnicode#AutoSub(...)
let col1 = col('.')
let lnum = line('.')
if col1 == 1
if a:0 > 1
if a:0 > 1
call feedkeys(a:2, 'mi')
endif
let b:l2u_in_autosub = 0
@@ -641,7 +636,7 @@ function! LaTeXtoUnicode#AutoSub(...)
let l = getline(lnum)[0 : col1-1-bs] . v:char
let col0 = match(l, '\\\%([_^]\?[A-Za-z]\+\%' . col1 . 'c\%([^A-Za-z]\|$\)\|[_^]\%([0-9()=+-]\)\%' . col1 .'c\%(.\|$\)\)')
if col0 == -1
if a:0 > 1
if a:0 > 1
call feedkeys(a:2, 'mi')
endif
let b:l2u_in_autosub = 0
@@ -650,33 +645,22 @@ function! LaTeXtoUnicode#AutoSub(...)
let base = l[col0 : col1-1-bs]
let unicode = get(g:l2u_symbols_dict, base, '')
if empty(unicode)
if a:0 > 1
if a:0 > 1
call feedkeys(a:2, 'mi')
endif
let b:l2u_in_autosub = 0
return ''
endif
" create a temporary mapping to reset b:l2u_in_autosub when done
" (when invoked, it removes itself)
exec 'imap <buffer> ' . s:l2u_autosub_cleanup_trigger . ' <Plug>L2UAutosubReset'
inoremap <buffer><expr> <Plug>L2UAutosubReset <SID>L2U_AutosubReset()
" perform the substitution, wrapping it in undo breakpoints so that
" we can revert it as a whole
call feedkeys("\<C-G>u", 'n')
call feedkeys(repeat("\b", len(base) + bs) . unicode . vc . s:l2u_esc_sequence, 'nt')
call feedkeys("\<C-G>u", 'n')
" enqueue the reset mechanism
call feedkeys(s:l2u_autosub_cleanup_trigger)
return ''
endfunction
function! s:L2U_AutosubReset()
" no longer doing substitution
let b:l2u_in_autosub = 0
" remove the mapping that triggered this function
exec 'iunmap <buffer> ' . s:l2u_autosub_cleanup_trigger
" we can revert it as a whole
" at the end, reset the l2u_in_autosub variable without leaving insert mode
" the 'i' mode is the only one that works correctly when executing macros
" the 'n' mode is to avoid user-defined mappings of \b, <C-G> and <C-\><C-O>
call feedkeys("\<C-G>u" .
\ repeat("\b", len(base) + bs) . unicode . vc . s:l2u_esc_sequence .
\ "\<C-G>u" .
\ "\<C-\>\<C-O>:let b:l2u_in_autosub = 0\<CR>",
\ 'ni')
return ''
endfunction