mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 02:34:59 -07:00
feat: add vim.text module (#26069)
This commit is contained in:
parent
b4b7ca2d54
commit
4bf47222c9
@ -3752,4 +3752,26 @@ vim.snippet.jumpable({direction}) *vim.snippet.jumpable()*
|
||||
Return: ~
|
||||
(boolean)
|
||||
|
||||
|
||||
==============================================================================
|
||||
Lua module: vim.text *vim.text*
|
||||
|
||||
vim.text.hexdecode({enc}) *vim.text.hexdecode()*
|
||||
Hex decode a string.
|
||||
|
||||
Parameters: ~
|
||||
• {enc} (string) String to decode
|
||||
|
||||
Return: ~
|
||||
(string) Decoded string
|
||||
|
||||
vim.text.hexencode({str}) *vim.text.hexencode()*
|
||||
Hex encode a string.
|
||||
|
||||
Parameters: ~
|
||||
• {str} (string) String to encode
|
||||
|
||||
Return: ~
|
||||
(string) Hex encoded string
|
||||
|
||||
vim:tw=78:ts=8:sw=4:sts=4:et:ft=help:norl:
|
||||
|
@ -214,6 +214,9 @@ The following new APIs and features were added.
|
||||
• The 'termsync' option asks the terminal emulator to buffer screen updates
|
||||
until the redraw cycle is complete. Requires support from the terminal.
|
||||
|
||||
• Added |vim.text.hexencode()| and |vim.text.hexdecode()| to convert strings
|
||||
to and from byte representations.
|
||||
|
||||
==============================================================================
|
||||
CHANGED FEATURES *news-changed*
|
||||
|
||||
|
@ -57,6 +57,7 @@ vim._submodules = {
|
||||
fs = true,
|
||||
iter = true,
|
||||
re = true,
|
||||
text = true,
|
||||
}
|
||||
|
||||
-- These are for loading runtime modules in the vim namespace lazily.
|
||||
|
32
runtime/lua/vim/text.lua
Normal file
32
runtime/lua/vim/text.lua
Normal file
@ -0,0 +1,32 @@
|
||||
--- Text processing functions.
|
||||
|
||||
local M = {}
|
||||
|
||||
--- Hex encode a string.
|
||||
---
|
||||
--- @param str string String to encode
|
||||
--- @return string Hex encoded string
|
||||
function M.hexencode(str)
|
||||
local bytes = { str:byte(1, #str) }
|
||||
local enc = {} ---@type string[]
|
||||
for i = 1, #bytes do
|
||||
enc[i] = string.format('%02X', bytes[i])
|
||||
end
|
||||
return table.concat(enc)
|
||||
end
|
||||
|
||||
--- Hex decode a string.
|
||||
---
|
||||
--- @param enc string String to decode
|
||||
--- @return string Decoded string
|
||||
function M.hexdecode(enc)
|
||||
assert(#enc % 2 == 0, 'string must have an even number of hex characters')
|
||||
local str = {} ---@type string[]
|
||||
for i = 1, #enc, 2 do
|
||||
local n = assert(tonumber(enc:sub(i, i + 1), 16))
|
||||
str[#str + 1] = string.char(n)
|
||||
end
|
||||
return table.concat(str)
|
||||
end
|
||||
|
||||
return M
|
@ -167,6 +167,7 @@ CONFIG = {
|
||||
'version.lua',
|
||||
'iter.lua',
|
||||
'snippet.lua',
|
||||
'text.lua',
|
||||
],
|
||||
'files': [
|
||||
'runtime/lua/vim/iter.lua',
|
||||
@ -184,6 +185,7 @@ CONFIG = {
|
||||
'runtime/lua/vim/version.lua',
|
||||
'runtime/lua/vim/_inspector.lua',
|
||||
'runtime/lua/vim/snippet.lua',
|
||||
'runtime/lua/vim/text.lua',
|
||||
'runtime/lua/vim/_meta/builtin.lua',
|
||||
'runtime/lua/vim/_meta/diff.lua',
|
||||
'runtime/lua/vim/_meta/mpack.lua',
|
||||
@ -247,6 +249,7 @@ CONFIG = {
|
||||
'regex': 'vim.regex',
|
||||
'spell': 'vim.spell',
|
||||
'snippet': 'vim.snippet',
|
||||
'text': 'vim.text',
|
||||
},
|
||||
'append_only': [
|
||||
'shared.lua',
|
||||
|
23
test/functional/lua/text_spec.lua
Normal file
23
test/functional/lua/text_spec.lua
Normal file
@ -0,0 +1,23 @@
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
local clear = helpers.clear
|
||||
local eq = helpers.eq
|
||||
|
||||
describe('vim.text', function()
|
||||
before_each(clear)
|
||||
|
||||
describe('hexencode() and hexdecode()', function()
|
||||
it('works', function()
|
||||
local cases = {
|
||||
{ 'Hello world!', '48656C6C6F20776F726C6421' },
|
||||
{ '😂', 'F09F9882' },
|
||||
}
|
||||
|
||||
for _, v in ipairs(cases) do
|
||||
local input, output = unpack(v)
|
||||
eq(output, vim.text.hexencode(input))
|
||||
eq(input, vim.text.hexdecode(output))
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user