mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06: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: ~
|
Return: ~
|
||||||
(boolean)
|
(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:
|
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
|
• The 'termsync' option asks the terminal emulator to buffer screen updates
|
||||||
until the redraw cycle is complete. Requires support from the terminal.
|
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*
|
CHANGED FEATURES *news-changed*
|
||||||
|
|
||||||
|
@ -57,6 +57,7 @@ vim._submodules = {
|
|||||||
fs = true,
|
fs = true,
|
||||||
iter = true,
|
iter = true,
|
||||||
re = true,
|
re = true,
|
||||||
|
text = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
-- These are for loading runtime modules in the vim namespace lazily.
|
-- 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',
|
'version.lua',
|
||||||
'iter.lua',
|
'iter.lua',
|
||||||
'snippet.lua',
|
'snippet.lua',
|
||||||
|
'text.lua',
|
||||||
],
|
],
|
||||||
'files': [
|
'files': [
|
||||||
'runtime/lua/vim/iter.lua',
|
'runtime/lua/vim/iter.lua',
|
||||||
@ -184,6 +185,7 @@ CONFIG = {
|
|||||||
'runtime/lua/vim/version.lua',
|
'runtime/lua/vim/version.lua',
|
||||||
'runtime/lua/vim/_inspector.lua',
|
'runtime/lua/vim/_inspector.lua',
|
||||||
'runtime/lua/vim/snippet.lua',
|
'runtime/lua/vim/snippet.lua',
|
||||||
|
'runtime/lua/vim/text.lua',
|
||||||
'runtime/lua/vim/_meta/builtin.lua',
|
'runtime/lua/vim/_meta/builtin.lua',
|
||||||
'runtime/lua/vim/_meta/diff.lua',
|
'runtime/lua/vim/_meta/diff.lua',
|
||||||
'runtime/lua/vim/_meta/mpack.lua',
|
'runtime/lua/vim/_meta/mpack.lua',
|
||||||
@ -247,6 +249,7 @@ CONFIG = {
|
|||||||
'regex': 'vim.regex',
|
'regex': 'vim.regex',
|
||||||
'spell': 'vim.spell',
|
'spell': 'vim.spell',
|
||||||
'snippet': 'vim.snippet',
|
'snippet': 'vim.snippet',
|
||||||
|
'text': 'vim.text',
|
||||||
},
|
},
|
||||||
'append_only': [
|
'append_only': [
|
||||||
'shared.lua',
|
'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