spacevim/bundle/calendar.vim/autoload/calendar/string.vim
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

81 lines
2.5 KiB
VimL

" =============================================================================
" Filename: autoload/calendar/string.vim
" Author: itchyny
" License: MIT License
" Last Change: 2016/11/06 12:00:00.
" =============================================================================
let s:save_cpo = &cpo
set cpo&vim
" String manipulations.
" All the functions were imported from vital.vim.
" https://github.com/vim-jp/vital.vim (Public Domain)
let s:cache = calendar#countcache#new('string.vim')
function! calendar#string#truncate(str, width) abort
let key = a:width . 'C' . a:str
if s:cache.has_key(key) | return s:cache.get(key) | endif
if a:str =~# '^[\x20-\x7e]*$'
return len(a:str) < a:width
\ ? printf('%-' . a:width . 's', a:str)
\ : strpart(a:str, 0, a:width)
endif
let ret = a:str
let width = strdisplaywidth(a:str)
if width > a:width
let ret = calendar#string#strwidthpart(ret, a:width)
let width = strdisplaywidth(ret)
endif
if width < a:width
let ret .= repeat(' ', a:width - width)
endif
return s:cache.save(key, ret)
endfunction
function! calendar#string#truncate_reverse(str, width) abort
let key = a:width . 'U' . a:str
if s:cache.has_key(key) | return s:cache.get(key) | endif
if a:str =~# '^[\x20-\x7e]*$'
return len(a:str) < a:width
\ ? printf('%-' . a:width . 's', a:str)
\ : strpart(a:str, len(a:str) - a:width)
endif
let ret = a:str
let width = strdisplaywidth(a:str)
if width > a:width
let ret = calendar#string#strwidthpart_reverse(ret, a:width)
let width = strdisplaywidth(ret)
endif
if width < a:width
let ret = repeat(' ', a:width - width) . ret
endif
return s:cache.save(key, ret)
endfunction
function! calendar#string#strdisplaywidth(str) abort
return strdisplaywidth(a:str)
endfunction
function! calendar#string#strwidthpart(str, width) abort
let key = a:width . 'T' . a:str
if s:cache.has_key(key) | return s:cache.get(key) | endif
let str = tr(a:str, "\t", ' ')
let vcol = a:width + 2
let ret = matchstr(str, '.*\%<' . (vcol < 0 ? 0 : vcol) . 'v')
return s:cache.save(key, ret)
endfunction
function! calendar#string#strwidthpart_reverse(str, width) abort
let key = a:width . 'R' . a:str
if s:cache.has_key(key) | return s:cache.get(key) | endif
let str = tr(a:str, "\t", ' ')
let vcol = strdisplaywidth(str) - a:width
let ret = matchstr(str, '\%>' . (vcol < 0 ? 0 : vcol) . 'v.*')
return s:cache.save(key, ret)
endfunction
let &cpo = s:save_cpo
unlet s:save_cpo