diff options
Diffstat (limited to 'runtime/lua/vim/text.lua')
-rw-r--r-- | runtime/lua/vim/text.lua | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/runtime/lua/vim/text.lua b/runtime/lua/vim/text.lua index bc90d490aa..d45c8021c6 100644 --- a/runtime/lua/vim/text.lua +++ b/runtime/lua/vim/text.lua @@ -7,10 +7,9 @@ local M = {} --- @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]) + for i = 1, #str do + enc[i] = string.format('%02X', str:byte(i, i + 1)) end return table.concat(enc) end @@ -18,15 +17,19 @@ end --- Hex decode a string. --- --- @param enc string String to decode ---- @return string : Decoded string +--- @return string? : Decoded string +--- @return string? : Error message, if any function M.hexdecode(enc) - assert(#enc % 2 == 0, 'string must have an even number of hex characters') + if #enc % 2 ~= 0 then + return nil, 'string must have an even number of hex characters' + end + 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) + return table.concat(str), nil end return M |