add bjson library & update /doc/en/scripting/filesystem.md
This commit is contained in:
parent
b4e0933563
commit
4844997c6a
@ -75,6 +75,55 @@ file.mkdirs(path: str) -> bool
|
|||||||
|
|
||||||
Create directories chain. Returns true if new directory created.
|
Create directories chain. Returns true if new directory created.
|
||||||
|
|
||||||
|
## *json* library
|
||||||
|
|
||||||
|
The library contains functions for serializing and deserializing tables:
|
||||||
|
|
||||||
|
```python
|
||||||
|
json.tostring(object: table, human_readable: bool=false) -> str
|
||||||
|
```
|
||||||
|
|
||||||
|
Serializes an object into a JSON string. If the second parameter is **true**, multi-line human-readable formatting will be used, rather than the compact format used by default.
|
||||||
|
|
||||||
|
```python
|
||||||
|
json.parse(code: str) -> table
|
||||||
|
```
|
||||||
|
|
||||||
|
Parses a JSON string into a table.
|
||||||
|
|
||||||
|
## *toml* library
|
||||||
|
|
||||||
|
The library contains functions for serializing and deserializing tables:
|
||||||
|
|
||||||
|
```python
|
||||||
|
toml.tostring(object: table) -> str
|
||||||
|
```
|
||||||
|
|
||||||
|
Serializes an object into a TOML string.
|
||||||
|
|
||||||
|
```python
|
||||||
|
toml.parse(code: str) -> table
|
||||||
|
```
|
||||||
|
|
||||||
|
Parses a TOML string into a table.
|
||||||
|
|
||||||
|
## *bjson* library
|
||||||
|
|
||||||
|
The library contains functions for working with the binary data exchange format [vcbjson](../../specs/binary_json_spec.md).
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Encodes a table into a byte array
|
||||||
|
bjson.tobytes(
|
||||||
|
-- encoded table
|
||||||
|
value: table,
|
||||||
|
-- compression
|
||||||
|
[optional] compression: bool=true
|
||||||
|
) --> Bytearray
|
||||||
|
|
||||||
|
-- Decodes a byte array into a table
|
||||||
|
bjson.frombytes(bytes: table | Bytearray) --> table
|
||||||
|
```
|
||||||
|
|
||||||
## Storing data in a world
|
## Storing data in a world
|
||||||
|
|
||||||
When saving pack data in the world, you should use the function:
|
When saving pack data in the world, you should use the function:
|
||||||
|
|||||||
@ -125,6 +125,23 @@ toml.parse(code: str) -> table
|
|||||||
|
|
||||||
Парсит TOML строку в таблицу.
|
Парсит TOML строку в таблицу.
|
||||||
|
|
||||||
|
## Библиотека bjson
|
||||||
|
|
||||||
|
Библиотека содержит функции для работы с двоичным форматом обмена данными [vcbjson](../../specs/binary_json_spec.md).
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Кодирует таблицу в массив байт
|
||||||
|
bjson.tobytes(
|
||||||
|
-- кодируемая таблица
|
||||||
|
value: table,
|
||||||
|
-- сжатие
|
||||||
|
[опционально] compression: bool=true
|
||||||
|
) --> Bytearray
|
||||||
|
|
||||||
|
-- Декодирует массив байт в таблицу
|
||||||
|
bjson.frombytes(bytes: table | Bytearray) --> table
|
||||||
|
```
|
||||||
|
|
||||||
## Сохранение данных в мире
|
## Сохранение данных в мире
|
||||||
|
|
||||||
При сохранении данных пака в мире следует использовать функцию
|
При сохранении данных пака в мире следует использовать функцию
|
||||||
|
|||||||
@ -15,12 +15,14 @@
|
|||||||
|
|
||||||
// Libraries
|
// Libraries
|
||||||
extern const luaL_Reg audiolib[];
|
extern const luaL_Reg audiolib[];
|
||||||
|
extern const luaL_Reg bjsonlib[];
|
||||||
extern const luaL_Reg blocklib[];
|
extern const luaL_Reg blocklib[];
|
||||||
extern const luaL_Reg cameralib[];
|
extern const luaL_Reg cameralib[];
|
||||||
extern const luaL_Reg consolelib[];
|
extern const luaL_Reg consolelib[];
|
||||||
extern const luaL_Reg corelib[];
|
extern const luaL_Reg corelib[];
|
||||||
extern const luaL_Reg entitylib[];
|
extern const luaL_Reg entitylib[];
|
||||||
extern const luaL_Reg filelib[];
|
extern const luaL_Reg filelib[];
|
||||||
|
extern const luaL_Reg generationlib[];
|
||||||
extern const luaL_Reg guilib[];
|
extern const luaL_Reg guilib[];
|
||||||
extern const luaL_Reg hudlib[];
|
extern const luaL_Reg hudlib[];
|
||||||
extern const luaL_Reg inputlib[];
|
extern const luaL_Reg inputlib[];
|
||||||
@ -30,7 +32,6 @@ extern const luaL_Reg jsonlib[];
|
|||||||
extern const luaL_Reg mat4lib[];
|
extern const luaL_Reg mat4lib[];
|
||||||
extern const luaL_Reg packlib[];
|
extern const luaL_Reg packlib[];
|
||||||
extern const luaL_Reg playerlib[];
|
extern const luaL_Reg playerlib[];
|
||||||
extern const luaL_Reg generationlib[];
|
|
||||||
extern const luaL_Reg quatlib[]; // quat.cpp
|
extern const luaL_Reg quatlib[]; // quat.cpp
|
||||||
extern const luaL_Reg timelib[];
|
extern const luaL_Reg timelib[];
|
||||||
extern const luaL_Reg tomllib[];
|
extern const luaL_Reg tomllib[];
|
||||||
|
|||||||
40
src/logic/scripting/lua/libs/libbjson.cpp
Normal file
40
src/logic/scripting/lua/libs/libbjson.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#include "coders/binary_json.hpp"
|
||||||
|
#include "api_lua.hpp"
|
||||||
|
#include "util/Buffer.hpp"
|
||||||
|
#include "../lua_custom_types.hpp"
|
||||||
|
|
||||||
|
static int l_tobytes(lua::State* L) {
|
||||||
|
auto value = lua::tovalue(L, 1);
|
||||||
|
bool compress = true;
|
||||||
|
if (lua::gettop(L) >= 2) {
|
||||||
|
compress = lua::toboolean(L, 2);
|
||||||
|
}
|
||||||
|
return lua::newuserdata<lua::LuaBytearray>(
|
||||||
|
L, json::to_binary(value, compress)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int l_frombytes(lua::State* L) {
|
||||||
|
if (lua::istable(L, 1)) {
|
||||||
|
size_t len = lua::objlen(L, 1);
|
||||||
|
util::Buffer<ubyte> buffer(len);
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
lua::rawgeti(L, i + 1);
|
||||||
|
buffer[i] = lua::tointeger(L, -1);
|
||||||
|
lua::pop(L);
|
||||||
|
}
|
||||||
|
return lua::pushvalue(L, json::from_binary(buffer.data(), len));
|
||||||
|
} else if (auto bytes = lua::touserdata<lua::LuaBytearray>(L, -1)) {
|
||||||
|
const auto& buffer = bytes->data();
|
||||||
|
return lua::pushvalue(
|
||||||
|
L, json::from_binary(buffer.data(), buffer.size())
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw std::runtime_error("table or Bytearray expected");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const luaL_Reg bjsonlib[] = {
|
||||||
|
{"tobytes", lua::wrap<l_tobytes>},
|
||||||
|
{"frombytes", lua::wrap<l_frombytes>},
|
||||||
|
{NULL, NULL}};
|
||||||
@ -39,6 +39,7 @@ static void remove_lib_funcs(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void create_libs(State* L, StateType stateType) {
|
static void create_libs(State* L, StateType stateType) {
|
||||||
|
openlib(L, "bjson", bjsonlib);
|
||||||
openlib(L, "block", blocklib);
|
openlib(L, "block", blocklib);
|
||||||
openlib(L, "core", corelib);
|
openlib(L, "core", corelib);
|
||||||
openlib(L, "file", filelib);
|
openlib(L, "file", filelib);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user