aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorGregory Anders <8965202+gpanders@users.noreply.github.com>2023-11-16 11:35:54 -0600
committerGitHub <noreply@github.com>2023-11-16 11:35:54 -0600
commit4bf47222c973c4bc935d6fde106329f8a0e103e3 (patch)
tree0907dba93d28f3ec0fde9cc15efb4e9cdd7ffef4 /runtime
parentb4b7ca2d548a1cc1a2cd8c48e5c93478811bd275 (diff)
downloadrneovim-4bf47222c973c4bc935d6fde106329f8a0e103e3.tar.gz
rneovim-4bf47222c973c4bc935d6fde106329f8a0e103e3.tar.bz2
rneovim-4bf47222c973c4bc935d6fde106329f8a0e103e3.zip
feat: add vim.text module (#26069)
Diffstat (limited to 'runtime')
-rw-r--r--runtime/doc/lua.txt22
-rw-r--r--runtime/doc/news.txt3
-rw-r--r--runtime/lua/vim/_init_packages.lua1
-rw-r--r--runtime/lua/vim/text.lua32
4 files changed, 58 insertions, 0 deletions
diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt
index db240e8b75..596b58d4ff 100644
--- a/runtime/doc/lua.txt
+++ b/runtime/doc/lua.txt
@@ -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:
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index ae97772b66..98848f548f 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -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*
diff --git a/runtime/lua/vim/_init_packages.lua b/runtime/lua/vim/_init_packages.lua
index 8750afba34..4a961970cc 100644
--- a/runtime/lua/vim/_init_packages.lua
+++ b/runtime/lua/vim/_init_packages.lua
@@ -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.
diff --git a/runtime/lua/vim/text.lua b/runtime/lua/vim/text.lua
new file mode 100644
index 0000000000..cfb0f9b821
--- /dev/null
+++ b/runtime/lua/vim/text.lua
@@ -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