mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 22:18:33 +00:00
feat(stdlib): add vim.base64 module (#25843)
Add base64 encode() and decode() functions to a vim.base64 module.
This commit is contained in:
65
src/nvim/lua/base64.c
Normal file
65
src/nvim/lua/base64.c
Normal file
@@ -0,0 +1,65 @@
|
||||
#include <assert.h>
|
||||
#include <lauxlib.h>
|
||||
#include <lua.h>
|
||||
|
||||
#include "nvim/base64.h"
|
||||
#include "nvim/lua/base64.h"
|
||||
#include "nvim/memory.h"
|
||||
|
||||
static int nlua_base64_encode(lua_State *L)
|
||||
{
|
||||
if (lua_gettop(L) < 1) {
|
||||
return luaL_error(L, "Expected 1 argument");
|
||||
}
|
||||
|
||||
if (lua_type(L, 1) != LUA_TSTRING) {
|
||||
luaL_argerror(L, 1, "expected string");
|
||||
}
|
||||
|
||||
size_t src_len = 0;
|
||||
const char *src = lua_tolstring(L, 1, &src_len);
|
||||
|
||||
const char *ret = base64_encode(src, src_len);
|
||||
assert(ret != NULL);
|
||||
lua_pushstring(L, ret);
|
||||
xfree((void *)ret);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int nlua_base64_decode(lua_State *L)
|
||||
{
|
||||
if (lua_gettop(L) < 1) {
|
||||
return luaL_error(L, "Expected 1 argument");
|
||||
}
|
||||
|
||||
if (lua_type(L, 1) != LUA_TSTRING) {
|
||||
luaL_argerror(L, 1, "expected string");
|
||||
}
|
||||
|
||||
size_t src_len = 0;
|
||||
const char *src = lua_tolstring(L, 1, &src_len);
|
||||
|
||||
const char *ret = base64_decode(src, src_len);
|
||||
if (ret == NULL) {
|
||||
return luaL_error(L, "Invalid input");
|
||||
}
|
||||
|
||||
lua_pushstring(L, ret);
|
||||
xfree((void *)ret);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const luaL_Reg base64_functions[] = {
|
||||
{ "encode", nlua_base64_encode },
|
||||
{ "decode", nlua_base64_decode },
|
||||
{ NULL, NULL },
|
||||
};
|
||||
|
||||
int luaopen_base64(lua_State *L)
|
||||
{
|
||||
lua_newtable(L);
|
||||
luaL_register(L, NULL, base64_functions);
|
||||
return 1;
|
||||
}
|
12
src/nvim/lua/base64.h
Normal file
12
src/nvim/lua/base64.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef NVIM_LUA_BASE64_H
|
||||
#define NVIM_LUA_BASE64_H
|
||||
|
||||
#include <lauxlib.h>
|
||||
#include <lua.h>
|
||||
#include <lualib.h>
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
# include "lua/base64.h.generated.h"
|
||||
#endif
|
||||
|
||||
#endif // NVIM_LUA_BASE64_H
|
@@ -26,6 +26,7 @@
|
||||
#include "nvim/ex_eval.h"
|
||||
#include "nvim/fold.h"
|
||||
#include "nvim/globals.h"
|
||||
#include "nvim/lua/base64.h"
|
||||
#include "nvim/lua/converter.h"
|
||||
#include "nvim/lua/spell.h"
|
||||
#include "nvim/lua/stdlib.h"
|
||||
@@ -606,6 +607,10 @@ void nlua_state_add_stdlib(lua_State *const lstate, bool is_thread)
|
||||
lua_pushcfunction(lstate, &nlua_iconv);
|
||||
lua_setfield(lstate, -2, "iconv");
|
||||
|
||||
// vim.base64
|
||||
luaopen_base64(lstate);
|
||||
lua_setfield(lstate, -2, "base64");
|
||||
|
||||
nlua_state_add_internal(lstate);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user