summaryrefslogtreecommitdiff
path: root/libs/ardour/luascripting.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-03-23 13:46:57 +0100
committerRobin Gareus <robin@gareus.org>2016-03-23 17:00:10 +0100
commit829da7eb336bd9d6707aba580def83e8e247d8f9 (patch)
tree6b178a42ab32f60ab3c801921494a68a31099016 /libs/ardour/luascripting.cc
parentb031d762c9cd0ff5704d966deb9ac234f8e18d6a (diff)
refactor lua header includes
Diffstat (limited to 'libs/ardour/luascripting.cc')
-rw-r--r--libs/ardour/luascripting.cc47
1 files changed, 42 insertions, 5 deletions
diff --git a/libs/ardour/luascripting.cc b/libs/ardour/luascripting.cc
index d3768c17d5..5350ea8f11 100644
--- a/libs/ardour/luascripting.cc
+++ b/libs/ardour/luascripting.cc
@@ -23,6 +23,7 @@
#include "pbd/compose.h"
#include "ardour/luascripting.h"
+#include "ardour/lua_script_params.h"
#include "ardour/search_paths.h"
#include "lua/luastate.h"
@@ -275,24 +276,33 @@ LuaScriptInfo::str2type (const std::string& str) {
}
LuaScriptParamList
-LuaScripting::script_params (LuaScriptInfoPtr lsi, const std::string &fn)
+LuaScriptParams::script_params (LuaScriptInfoPtr lsi, const std::string &pname)
{
- LuaScriptParamList rv;
assert (lsi);
+ return LuaScriptParams::script_params (lsi->path, pname);
+}
+
+LuaScriptParamList
+LuaScriptParams::script_params (const std::string& s, const std::string &pname, bool file)
+{
+ LuaScriptParamList rv;
LuaState lua;
lua_State* L = lua.getState();
- lua.Print.connect (&LuaScripting::lua_print);
lua.do_command ("io = nil;");
lua.do_command ("function ardour () end");
try {
- lua.do_file (lsi->path);
+ if (file) {
+ lua.do_file (s);
+ } else {
+ lua.do_command (s);
+ }
} catch (luabridge::LuaException const& e) {
return rv;
}
- luabridge::LuaRef lua_params = luabridge::getGlobal (L, fn.c_str());
+ luabridge::LuaRef lua_params = luabridge::getGlobal (L, pname.c_str());
if (lua_params.isFunction ()) {
luabridge::LuaRef params = lua_params ();
if (params.isTable ()) {
@@ -320,6 +330,33 @@ LuaScripting::script_params (LuaScriptInfoPtr lsi, const std::string &fn)
return rv;
}
+void
+LuaScriptParams::params_to_ref (luabridge::LuaRef *tbl_args, const LuaScriptParamList& args)
+{
+ assert (tbl_args && (*tbl_args).isTable ());
+ for (LuaScriptParamList::const_iterator i = args.begin(); i != args.end(); ++i) {
+ if ((*i)->optional && !(*i)->is_set) { continue; }
+ (*tbl_args)[(*i)->name] = (*i)->value;
+ }
+}
+
+void
+LuaScriptParams::ref_to_params (LuaScriptParamList& args, luabridge::LuaRef *tbl_ref)
+{
+ assert (tbl_ref && (*tbl_ref).isTable ());
+ for (luabridge::Iterator i (*tbl_ref); !i.isNil (); ++i) {
+ if (!i.key ().isString ()) { assert(0); continue; }
+ std::string name = i.key ().cast<std::string> ();
+ std::string value = i.value ().cast<std::string> ();
+ for (LuaScriptParamList::const_iterator ii = args.begin(); ii != args.end(); ++ii) {
+ if ((*ii)->name == name) {
+ (*ii)->value = value;
+ break;
+ }
+ }
+ }
+}
+
bool
LuaScripting::try_compile (const std::string& script, const LuaScriptParamList& args)
{