1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-04-14 23:49:19 +08:00

feat(lua): add iconv api

This commit is contained in:
Wang Shidong 2022-05-27 10:22:16 +08:00 committed by GitHub
parent e951f525ca
commit f1178cf30b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44015 additions and 0 deletions

View File

@ -12,6 +12,7 @@ function M.pick(d, keys)
return new_d
end
---
-- @function: 打印table的内容递归
-- @param: tbl 要打印的table
@ -50,6 +51,7 @@ end
return M

View File

@ -1,3 +1,10 @@
local str = {}
function str.trim(str)
=======
--=============================================================================
-- string.lua --- spacevim data#string api
-- Copyright (c) 2016-2019 Wang Shidong & Contributors
@ -11,10 +18,21 @@ local M = {}
function M.trim(str)
return str:match( "^%s*(.-)%s*$" )
end
function str.fill(str, length, ...)
if string.len(str) > length then
end
end
return str
=======
function M.fill(str, length, ...)
local v = ''
if string.len(str) <= length then
@ -99,5 +117,6 @@ end
return M
-- @todo add lua string api

140
lua/spacevim/api/iconv.lua Normal file
View File

@ -0,0 +1,140 @@
local M = {}
local has = require('spacevim').has
local fn = require('spacevim').fn
if has('iconv') == 1 and has('nvim') == 0 then
function M.iconv(str, from, to)
return fn.iconv(str, from, to)
end
else
function M.iconv(str, from, to)
return iconv.iconv(str, from, to, 'strict')
end
end
function M.import()
return iconv
end
function M.iconv(expr, from, to, ...)
local argvs = ...
local errors = 'strict'
if argvs ~= nil then
errors = argvs[1]
end
return iconv.iconv(expr, from, to, errors)
end
function! SpaceVim#api#iconv#iconvb(expr, from, to, ...) abort
let errors = get(a:000, 0, 'strict')
try
return s:iconv.iconvb(a:expr, a:from, a:to, errors)
endtry
endfunction
let s:bytes = SpaceVim#api#iconv#bytes#import()
let s:iconv = {}
function! s:iconv.iconv(expr, from, to, errors) abort
return s:bytes.bytes2str(self.iconvb(a:expr, a:from, a:to, a:errors))
endfunction
function! s:iconv.iconvb(expr, from, to, errors) abort
let expr = s:bytes.tobytes(a:expr)
return self._iconv(expr, a:from, a:to, a:errors)
endfunction
function! s:iconv._iconv(expr, from, to, errors) abort
let from = tolower(a:from)
let to = tolower(a:to)
if !has_key(self.codecs, from)
throw printf('unknown encoding: %s', from)
endif
if !has_key(self.codecs, to)
throw printf('unknown encoding: %s', to)
endif
let decoder_module = call(self.codecs[from], [])
let encoder_module = call(self.codecs[to], [])
let decoder = decoder_module.Codec.new()
let encoder = encoder_module.Codec.new()
let u = decoder.decode(a:expr, a:errors)
let s = encoder.encode(u, a:errors)
return s
endfunction
let s:iconv.codecs = {
\ 'ascii': function('SpaceVim#api#iconv#codecs#ascii#import'),
\ 'utf-8': function('SpaceVim#api#iconv#codecs#utf8#import'),
\ 'utf-16': function('SpaceVim#api#iconv#codecs#utf16#import'),
\ 'utf-16be': function('SpaceVim#api#iconv#codecs#utf16be#import'),
\ 'utf-16le': function('SpaceVim#api#iconv#codecs#utf16le#import'),
\ 'utf-32': function('SpaceVim#api#iconv#codecs#utf32#import'),
\ 'utf-32be': function('SpaceVim#api#iconv#codecs#utf32be#import'),
\ 'utf-32le': function('SpaceVim#api#iconv#codecs#utf32le#import'),
\ 'latin1': function('SpaceVim#api#iconv#codecs#_8859_1#import'),
\ 'iso-8859-1': function('SpaceVim#api#iconv#codecs#_8859_1#import'),
\ 'iso-8859-2': function('SpaceVim#api#iconv#codecs#_8859_2#import'),
\ 'iso-8859-3': function('SpaceVim#api#iconv#codecs#_8859_3#import'),
\ 'iso-8859-4': function('SpaceVim#api#iconv#codecs#_8859_4#import'),
\ 'iso-8859-5': function('SpaceVim#api#iconv#codecs#_8859_5#import'),
\ 'iso-8859-6': function('SpaceVim#api#iconv#codecs#_8859_6#import'),
\ 'iso-8859-7': function('SpaceVim#api#iconv#codecs#_8859_7#import'),
\ 'iso-8859-8': function('SpaceVim#api#iconv#codecs#_8859_8#import'),
\ 'iso-8859-9': function('SpaceVim#api#iconv#codecs#_8859_9#import'),
\ 'iso-8859-10': function('SpaceVim#api#iconv#codecs#_8859_10#import'),
\ 'iso-8859-11': function('SpaceVim#api#iconv#codecs#_8859_11#import'),
\ 'iso-8859-13': function('SpaceVim#api#iconv#codecs#_8859_13#import'),
\ 'iso-8859-14': function('SpaceVim#api#iconv#codecs#_8859_14#import'),
\ 'iso-8859-15': function('SpaceVim#api#iconv#codecs#_8859_15#import'),
\ 'cp037': function('SpaceVim#api#iconv#codecs#_cp037#import'),
\ 'cp1026': function('SpaceVim#api#iconv#codecs#_cp1026#import'),
\ 'cp1250': function('SpaceVim#api#iconv#codecs#_cp1250#import'),
\ 'cp1251': function('SpaceVim#api#iconv#codecs#_cp1251#import'),
\ 'cp1252': function('SpaceVim#api#iconv#codecs#_cp1252#import'),
\ 'cp1253': function('SpaceVim#api#iconv#codecs#_cp1253#import'),
\ 'cp1254': function('SpaceVim#api#iconv#codecs#_cp1254#import'),
\ 'cp1255': function('SpaceVim#api#iconv#codecs#_cp1255#import'),
\ 'cp1256': function('SpaceVim#api#iconv#codecs#_cp1256#import'),
\ 'cp1257': function('SpaceVim#api#iconv#codecs#_cp1257#import'),
\ 'cp1258': function('SpaceVim#api#iconv#codecs#_cp1258#import'),
\ 'cp437': function('SpaceVim#api#iconv#codecs#_cp437#import'),
\ 'cp500': function('SpaceVim#api#iconv#codecs#_cp500#import'),
\ 'cp737': function('SpaceVim#api#iconv#codecs#_cp737#import'),
\ 'cp775': function('SpaceVim#api#iconv#codecs#_cp775#import'),
\ 'cp850': function('SpaceVim#api#iconv#codecs#_cp850#import'),
\ 'cp852': function('SpaceVim#api#iconv#codecs#_cp852#import'),
\ 'cp855': function('SpaceVim#api#iconv#codecs#_cp855#import'),
\ 'cp857': function('SpaceVim#api#iconv#codecs#_cp857#import'),
\ 'cp860': function('SpaceVim#api#iconv#codecs#_cp860#import'),
\ 'cp861': function('SpaceVim#api#iconv#codecs#_cp861#import'),
\ 'cp862': function('SpaceVim#api#iconv#codecs#_cp862#import'),
\ 'cp863': function('SpaceVim#api#iconv#codecs#_cp863#import'),
\ 'cp864': function('SpaceVim#api#iconv#codecs#_cp864#import'),
\ 'cp865': function('SpaceVim#api#iconv#codecs#_cp865#import'),
\ 'cp866': function('SpaceVim#api#iconv#codecs#_cp866#import'),
\ 'cp869': function('SpaceVim#api#iconv#codecs#_cp869#import'),
\ 'cp874': function('SpaceVim#api#iconv#codecs#_cp874#import'),
\ 'cp875': function('SpaceVim#api#iconv#codecs#_cp875#import'),
\ 'cp932': function('SpaceVim#api#iconv#codecs#_cp932#import'),
\ 'cp936': function('SpaceVim#api#iconv#codecs#_cp936#import'),
\ 'cp949': function('SpaceVim#api#iconv#codecs#_cp949#import'),
\ 'cp950': function('SpaceVim#api#iconv#codecs#_cp950#import'),
\ 'euc-jp': function('SpaceVim#api#iconv#codecs#_euc_jp#import'),
\ }
function! SpaceVim#api#iconv#get() abort
return deepcopy(s:self)
endfunction

File diff suppressed because it is too large Load Diff