From daabbe364007fc7546df63981422b53b9a20c6fc Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 22 Apr 2015 20:55:05 +0200 Subject: lua: add utils.format_json() function Requested. Why not. --- DOCS/man/lua.rst | 8 ++++++++ player/lua.c | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/DOCS/man/lua.rst b/DOCS/man/lua.rst index 4700b90cb2..ff70600a1d 100644 --- a/DOCS/man/lua.rst +++ b/DOCS/man/lua.rst @@ -639,6 +639,14 @@ strictly part of the guaranteed API. trailing text is returned as 3rd return value. (The 3rd return value is always there, but with ``trail`` set, no error is raised.) +``utils.format_json(v)`` + Format the given Lua table (or value) as a JSON string and return it. On + error, returns ``nil, error``. (Errors usually only happen on value types + incompatible with JSON.) + + The argument value uses similar conventions as ``mp.set_property_native()`` + to distinguish empty objects and arrays. + ``utils.to_string(v)`` Turn the given value into a string. Formats tables and their contents. This doesn't do anything special; it is only needed because Lua is terrible. diff --git a/player/lua.c b/player/lua.c index 51c0e1a752..4ef772fd84 100644 --- a/player/lua.c +++ b/player/lua.c @@ -1255,6 +1255,23 @@ static int script_parse_json(lua_State *L) return 3; } +static int script_format_json(lua_State *L) +{ + void *tmp = mp_lua_PITA(L); + struct mpv_node node; + makenode(tmp, &node, L, 1); + char *dst = talloc_strdup(tmp, ""); + if (json_write(&dst, &node) >= 0) { + lua_pushstring(L, dst); + lua_pushnil(L); + } else { + lua_pushnil(L); + lua_pushstring(L, "error"); + } + talloc_free_children(tmp); + return 2; +} + #define FN_ENTRY(name) {#name, script_ ## name} struct fn_entry { const char *name; @@ -1303,6 +1320,7 @@ static const struct fn_entry utils_fns[] = { FN_ENTRY(join_path), FN_ENTRY(subprocess), FN_ENTRY(parse_json), + FN_ENTRY(format_json), {0} }; -- cgit v1.2.3