mirror of https://github.com/odrling/Aegisub
Move some of the automation machinery to libaegisub
This commit is contained in:
parent
15ae2b0ccc
commit
b8af29da0d
|
@ -10,9 +10,10 @@ CXXFLAGS += -I../libaegisub/include -I../src -I ../vendor/lua/src $(CXXFLAGS_WX)
|
|||
CPPFLAGS += $(CPPFLAGS_BOOST)
|
||||
|
||||
LIBS := -L../libaegisub -laegisub -L../vendor/lua -llua-aegisub $(LIBS)
|
||||
LIBS += ../vendor/luabins/libluabins.a
|
||||
LIBS += $(LIBS_WX) $(LIBS_BOOST) $(LIBS_ICU)
|
||||
|
||||
SRC += tests/aegisub.cpp ../src/auto4_regex.cpp
|
||||
SRC += tests/aegisub.cpp
|
||||
|
||||
test: $(LIB_SHARED)
|
||||
moon tests/runner.moon
|
||||
|
|
|
@ -18,7 +18,7 @@ select = select
|
|||
type = type
|
||||
|
||||
-- Get the boost::regex binding
|
||||
regex = aegisub.__init_regex()
|
||||
regex = require 'aegisub.__re_impl'
|
||||
|
||||
-- Return the first n elements from ...
|
||||
select_first = (n, a, ...) ->
|
||||
|
|
|
@ -14,15 +14,9 @@
|
|||
//
|
||||
// Aegisub Project http://www.aegisub.org/
|
||||
|
||||
|
||||
#include "auto4_lua_utils.h"
|
||||
|
||||
namespace Automation4 { int regex_init(lua_State *L); }
|
||||
#include <libaegisub/lua/modules.h>
|
||||
|
||||
extern "C" int luaopen_aegisub(lua_State *L) {
|
||||
lua_pushstring(L, "aegisub");
|
||||
lua_newtable(L);
|
||||
set_field(L, "__init_regex", Automation4::regex_init);
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
agi::lua::preload_modules(L);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -121,8 +121,6 @@
|
|||
<ClInclude Include="$(SrcDir)auto4_base.h" />
|
||||
<ClInclude Include="$(SrcDir)auto4_lua.h" />
|
||||
<ClInclude Include="$(SrcDir)auto4_lua_factory.h" />
|
||||
<ClInclude Include="$(SrcDir)auto4_lua_scriptreader.h" />
|
||||
<ClInclude Include="$(SrcDir)auto4_lua_utils.h" />
|
||||
<ClInclude Include="$(SrcDir)avisynth.h" />
|
||||
<ClInclude Include="$(SrcDir)avisynth_wrap.h" />
|
||||
<ClInclude Include="$(SrcDir)base_grid.h" />
|
||||
|
@ -187,7 +185,6 @@
|
|||
<ClInclude Include="$(SrcDir)include\aegisub\toolbar.h" />
|
||||
<ClInclude Include="$(SrcDir)include\aegisub\video_provider.h" />
|
||||
<ClInclude Include="$(SrcDir)initial_line_state.h" />
|
||||
<ClInclude Include="$(SrcDir)lpeg.h" />
|
||||
<ClInclude Include="$(SrcDir)main.h" />
|
||||
<ClInclude Include="$(SrcDir)mkv_wrap.h" />
|
||||
<ClInclude Include="$(SrcDir)options.h" />
|
||||
|
@ -308,8 +305,6 @@
|
|||
<ClCompile Include="$(SrcDir)auto4_lua_assfile.cpp" />
|
||||
<ClCompile Include="$(SrcDir)auto4_lua_dialog.cpp" />
|
||||
<ClCompile Include="$(SrcDir)auto4_lua_progresssink.cpp" />
|
||||
<ClCompile Include="$(SrcDir)auto4_lua_scriptreader.cpp" />
|
||||
<ClCompile Include="$(SrcDir)auto4_regex.cpp" />
|
||||
<ClCompile Include="$(SrcDir)avisynth_wrap.cpp" />
|
||||
<ClCompile Include="$(SrcDir)base_grid.cpp" />
|
||||
<ClCompile Include="$(SrcDir)charset_detect.cpp" />
|
||||
|
@ -382,7 +377,6 @@
|
|||
<ClCompile Include="$(SrcDir)hotkey.cpp" />
|
||||
<ClCompile Include="$(SrcDir)hotkey_data_view_model.cpp" />
|
||||
<ClCompile Include="$(SrcDir)initial_line_state.cpp" />
|
||||
<ClCompile Include="$(SrcDir)lpeg.cpp" />
|
||||
<ClCompile Include="$(SrcDir)main.cpp" />
|
||||
<ClCompile Include="$(SrcDir)menu.cpp" />
|
||||
<ClCompile Include="$(SrcDir)mkv_wrap.cpp" />
|
||||
|
|
|
@ -261,9 +261,6 @@
|
|||
<ClInclude Include="$(SrcDir)export_fixstyle.h">
|
||||
<Filter>Features\Export</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)auto4_lua_scriptreader.h">
|
||||
<Filter>Automation\Lua</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)auto4_lua.h">
|
||||
<Filter>Automation\Lua</Filter>
|
||||
</ClInclude>
|
||||
|
@ -615,12 +612,6 @@
|
|||
<ClInclude Include="$(SrcDir)subs_controller.h">
|
||||
<Filter>ASS</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)auto4_lua_utils.h">
|
||||
<Filter>Automation\Lua</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)lpeg.h">
|
||||
<Filter>Automation\Lua</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)resolution_resampler.h">
|
||||
<Filter>Features\Resolution resampler</Filter>
|
||||
</ClInclude>
|
||||
|
@ -896,9 +887,6 @@
|
|||
<ClCompile Include="$(SrcDir)auto4_lua_progresssink.cpp">
|
||||
<Filter>Automation\Lua</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)auto4_lua_scriptreader.cpp">
|
||||
<Filter>Automation\Lua</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)dialog_automation.cpp">
|
||||
<Filter>Automation\UI</Filter>
|
||||
</ClCompile>
|
||||
|
@ -1163,12 +1151,6 @@
|
|||
<ClCompile Include="$(SrcDir)subs_controller.cpp">
|
||||
<Filter>ASS</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)auto4_regex.cpp">
|
||||
<Filter>Automation\Lua</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)lpeg.cpp">
|
||||
<Filter>Automation\Lua</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)resolution_resampler.cpp">
|
||||
<Filter>Features\Resolution resampler</Filter>
|
||||
</ClCompile>
|
||||
|
|
|
@ -65,6 +65,9 @@
|
|||
<ClInclude Include="$(SrcDir)include\libaegisub\line_iterator.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\line_wrap.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\log.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\lua\modules.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\lua\script_reader.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\lua\utils.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\make_unique.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\mru.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\of_type_adaptor.h" />
|
||||
|
@ -82,6 +85,7 @@
|
|||
<ClInclude Include="$(SrcDir)include\libaegisub\util_osx.h" />
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\vfr.h" />
|
||||
<ClInclude Include="$(SrcDir)lagi_pre.h" />
|
||||
<ClInclude Include="$(SrcDir)lua\modules\lpeg.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="$(SrcDir)windows\lagi_pre.cpp">
|
||||
|
@ -116,6 +120,10 @@
|
|||
<ClCompile Include="$(SrcDir)common\thesaurus.cpp" />
|
||||
<ClCompile Include="$(SrcDir)common\util.cpp" />
|
||||
<ClCompile Include="$(SrcDir)common\vfr.cpp" />
|
||||
<ClCompile Include="$(SrcDir)lua\modules.cpp" />
|
||||
<ClCompile Include="$(SrcDir)lua\modules\lpeg.cpp" />
|
||||
<ClCompile Include="$(SrcDir)lua\modules\re.cpp" />
|
||||
<ClCompile Include="$(SrcDir)lua\script_reader.cpp" />
|
||||
<ClCompile Include="$(SrcDir)windows\access.cpp" />
|
||||
<ClCompile Include="$(SrcDir)windows\charset_conv_win.cpp" />
|
||||
<ClCompile Include="$(SrcDir)windows\fs.cpp" />
|
||||
|
|
|
@ -21,6 +21,12 @@
|
|||
<Filter Include="ASS">
|
||||
<UniqueIdentifier>{c97bd8a3-ebb7-4c43-9ca0-4ab8479d9388}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Lua">
|
||||
<UniqueIdentifier>{ce495b25-1630-42e1-8ab0-053c313448f0}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Lua\Modules">
|
||||
<UniqueIdentifier>{2cf3ad94-e8a9-4a89-b47e-29523d90fd08}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="$(SrcDir)common\charset_6937.h">
|
||||
|
@ -173,6 +179,18 @@
|
|||
<ClInclude Include="$(SrcDir)include\libaegisub\make_unique.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\lua\utils.h">
|
||||
<Filter>Lua</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\lua\script_reader.h">
|
||||
<Filter>Lua</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)lua\modules\lpeg.h">
|
||||
<Filter>Lua\Modules</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SrcDir)include\libaegisub\lua\modules.h">
|
||||
<Filter>Lua</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="$(SrcDir)windows\lagi_pre.cpp">
|
||||
|
@ -283,6 +301,18 @@
|
|||
<ClCompile Include="$(SrcDir)common\character_count.cpp">
|
||||
<Filter>Source Files\Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)lua\script_reader.cpp">
|
||||
<Filter>Lua</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)lua\modules\lpeg.cpp">
|
||||
<Filter>Lua\Modules</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)lua\modules\re.cpp">
|
||||
<Filter>Lua\Modules</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(SrcDir)lua\modules.cpp">
|
||||
<Filter>Lua</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="$(SrcDir)include\libaegisub\charsets.def">
|
||||
|
|
|
@ -41,6 +41,10 @@ SRC += \
|
|||
common/thesaurus.cpp \
|
||||
common/util.cpp \
|
||||
common/vfr.cpp \
|
||||
lua/modules.cpp \
|
||||
lua/modules/lpeg.cpp \
|
||||
lua/modules/re.cpp \
|
||||
lua/script_reader.cpp \
|
||||
unix/access.cpp \
|
||||
unix/fs.cpp \
|
||||
unix/log.cpp \
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright (c) 2014, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
//
|
||||
// Permission to use, copy, modify, and distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
// copyright notice and this permission notice appear in all copies.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
//
|
||||
// Aegisub Project http://www.aegisub.org/
|
||||
|
||||
struct lua_State;
|
||||
|
||||
namespace agi { namespace lua {
|
||||
void preload_modules(lua_State *L);
|
||||
} }
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2013, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
// Copyright (c) 2014, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
//
|
||||
// Permission to use, copy, modify, and distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
|
@ -11,16 +11,13 @@
|
|||
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
/// @file auto4_lua_scriptreader.h
|
||||
/// @see auto4_lua_scriptreader.cpp
|
||||
/// @ingroup scripting
|
||||
///
|
||||
//
|
||||
// Aegisub Project http://www.aegisub.org/
|
||||
|
||||
#include <libaegisub/fs_fwd.h>
|
||||
|
||||
struct lua_State;
|
||||
|
||||
namespace Automation4 {
|
||||
namespace agi { namespace lua {
|
||||
bool LoadFile(lua_State *L, agi::fs::path const& filename);
|
||||
}
|
||||
} }
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2012, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
// Copyright (c) 2014, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
//
|
||||
// Permission to use, copy, modify, and distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
|
@ -14,16 +14,15 @@
|
|||
//
|
||||
// Aegisub Project http://www.aegisub.org/
|
||||
|
||||
#include <libaegisub/fs.h>
|
||||
#include <libaegisub/log.h>
|
||||
|
||||
#include <libaegisub/fs.h>
|
||||
|
||||
#include <lua.h>
|
||||
#include <lualib.h>
|
||||
#include <lauxlib.h>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include <wx/string.h>
|
||||
|
||||
namespace agi { namespace lua {
|
||||
|
||||
inline void push_value(lua_State *L, bool value) { lua_pushboolean(L, value); }
|
||||
inline void push_value(lua_State *L, const char *value) { lua_pushstring(L, value); }
|
||||
|
@ -33,15 +32,12 @@ inline void push_value(lua_State *L, void *p) { lua_pushlightuserdata(L, p); }
|
|||
|
||||
template<typename Integer>
|
||||
typename std::enable_if<std::is_integral<Integer>::value>::type
|
||||
push_value(lua_State *L, Integer value) { lua_pushinteger(L, value); }
|
||||
|
||||
inline void push_value(lua_State *L, wxString const& value) {
|
||||
lua_pushstring(L, value.utf8_str());
|
||||
push_value(lua_State *L, Integer value) {
|
||||
lua_pushinteger(L, static_cast<lua_Integer>(value));
|
||||
}
|
||||
|
||||
inline void push_value(lua_State *L, agi::fs::path const& value) {
|
||||
std::string strval = value.string();
|
||||
lua_pushlstring(L, strval.c_str(), strval.size());
|
||||
inline void push_value(lua_State *L, fs::path const& value) {
|
||||
lua_pushstring(L, value.string().c_str());
|
||||
}
|
||||
|
||||
inline void push_value(lua_State *L, std::string const& value) {
|
||||
|
@ -63,22 +59,26 @@ inline void set_field(lua_State *L, const char *name, T value) {
|
|||
lua_setfield(L, -2, name);
|
||||
}
|
||||
|
||||
inline wxString get_wxstring(lua_State *L, int idx) {
|
||||
return wxString::FromUTF8(lua_tostring(L, idx));
|
||||
}
|
||||
|
||||
inline wxString check_wxstring(lua_State *L, int idx) {
|
||||
return wxString::FromUTF8(luaL_checkstring(L, idx));
|
||||
}
|
||||
|
||||
inline std::string get_string_or_default(lua_State *L, int idx) {
|
||||
size_t len = 0;
|
||||
const char *str = lua_tolstring(L, idx, &len);
|
||||
if (!str)
|
||||
str = "<not a string>";
|
||||
return "<not a string>";
|
||||
return std::string(str, len);
|
||||
}
|
||||
|
||||
inline std::string get_string(lua_State *L, int idx) {
|
||||
size_t len = 0;
|
||||
const char *str = lua_tolstring(L, idx, &len);
|
||||
return std::string(str ? str : "", len);
|
||||
}
|
||||
|
||||
inline std::string check_string(lua_State *L, int idx) {
|
||||
size_t len = 0;
|
||||
const char *str = luaL_checklstring(L, idx, &len);
|
||||
return std::string(str ? str : "", len);
|
||||
}
|
||||
|
||||
inline std::string get_global_string(lua_State *L, const char *name) {
|
||||
lua_getglobal(L, name);
|
||||
std::string ret;
|
||||
|
@ -88,6 +88,20 @@ inline std::string get_global_string(lua_State *L, const char *name) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
template<typename T, typename... Args>
|
||||
T *make(lua_State *L, const char *mt, Args&&... args) {
|
||||
auto obj = static_cast<T*>(lua_newuserdata(L, sizeof(T)));
|
||||
new(obj) T(std::forward<Args>(args)...);
|
||||
luaL_getmetatable(L, mt);
|
||||
lua_setmetatable(L, -2);
|
||||
return obj;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T& get(lua_State *L, int idx, const char *mt) {
|
||||
return *static_cast<T *>(luaL_checkudata(L, idx, mt));
|
||||
}
|
||||
|
||||
struct LuaForEachBreak {};
|
||||
|
||||
template<typename Func>
|
||||
|
@ -144,3 +158,5 @@ struct LuaStackcheck {
|
|||
LuaStackcheck(lua_State*) { }
|
||||
};
|
||||
#endif
|
||||
|
||||
} }
|
|
@ -0,0 +1,38 @@
|
|||
// Copyright (c) 2014, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
//
|
||||
// Permission to use, copy, modify, and distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
// copyright notice and this permission notice appear in all copies.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
//
|
||||
// Aegisub Project http://www.aegisub.org/
|
||||
|
||||
#include "libaegisub/lua/modules.h"
|
||||
|
||||
#include "libaegisub/lua/utils.h"
|
||||
|
||||
int luaopen_lpeg(lua_State *L);
|
||||
extern "C" int luaopen_luabins(lua_State *L);
|
||||
extern "C" int luaopen_re_impl(lua_State *L);
|
||||
|
||||
namespace agi { namespace lua {
|
||||
int regex_init(lua_State *L);
|
||||
|
||||
void preload_modules(lua_State *L) {
|
||||
lua_getglobal(L, "package");
|
||||
lua_getfield(L, -1, "preload");
|
||||
|
||||
set_field(L, "lpeg", luaopen_lpeg);
|
||||
set_field(L, "luabins", luaopen_luabins);
|
||||
set_field(L, "aegisub.__re_impl", luaopen_re_impl);
|
||||
|
||||
lua_pop(L, 2);
|
||||
}
|
||||
} }
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2013, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
// Copyright (c) 2014, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
//
|
||||
// Permission to use, copy, modify, and distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
|
@ -14,34 +14,33 @@
|
|||
//
|
||||
// Aegisub Project http://www.aegisub.org/
|
||||
|
||||
#include "auto4_lua_utils.h"
|
||||
#include "libaegisub/lua/utils.h"
|
||||
|
||||
#include <boost/regex/icu.hpp>
|
||||
#include <lauxlib.h>
|
||||
|
||||
namespace {
|
||||
using namespace agi::lua;
|
||||
|
||||
boost::u32regex& get_regex(lua_State *L) {
|
||||
return *static_cast<boost::u32regex*>(luaL_checkudata(L, 1, "aegisub.regex"));
|
||||
return get<boost::u32regex>(L, 1, "aegisub.regex");
|
||||
}
|
||||
|
||||
boost::smatch& get_smatch(lua_State *L) {
|
||||
return *static_cast<boost::smatch*>(luaL_checkudata(L, 1, "aegisub.smatch"));
|
||||
return get<boost::smatch>(L, 1, "aegisub.smatch");
|
||||
}
|
||||
|
||||
int regex_matches(lua_State *L) {
|
||||
lua_pushboolean(L, u32regex_match(luaL_checkstring(L, 2), get_regex(L)));
|
||||
lua_pushboolean(L, u32regex_match(check_string(L, 2), get_regex(L)));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int regex_match(lua_State *L) {
|
||||
auto re = get_regex(L);
|
||||
std::string str = luaL_checkstring(L, 2);
|
||||
std::string str = check_string(L, 2);
|
||||
int start = lua_tointeger(L, 3);
|
||||
|
||||
auto result = static_cast<boost::smatch*>(lua_newuserdata(L, sizeof(boost::smatch)));
|
||||
new(result) boost::smatch;
|
||||
luaL_getmetatable(L, "aegisub.smatch");
|
||||
lua_setmetatable(L, -2);
|
||||
|
||||
auto result = make<boost::smatch>(L, "aegisub.smatch");
|
||||
if (!u32regex_search(str.cbegin() + start, str.cend(), *result, re,
|
||||
start > 0 ? boost::match_prev_avail | boost::match_not_bob : boost::match_default))
|
||||
{
|
||||
|
@ -67,7 +66,7 @@ int regex_get_match(lua_State *L) {
|
|||
|
||||
int regex_search(lua_State *L) {
|
||||
auto re = get_regex(L);
|
||||
std::string str = luaL_checkstring(L, 2);
|
||||
std::string str = check_string(L, 2);
|
||||
int start = luaL_checkinteger(L, 3) - 1;
|
||||
boost::smatch result;
|
||||
if (!u32regex_search(str.cbegin() + start, str.cend(), result, re,
|
||||
|
@ -84,8 +83,8 @@ int regex_search(lua_State *L) {
|
|||
|
||||
int regex_replace(lua_State *L) {
|
||||
auto re = get_regex(L);
|
||||
const auto replacement = luaL_checkstring(L, 2);
|
||||
const std::string str = luaL_checkstring(L, 3);
|
||||
const auto replacement = check_string(L, 2);
|
||||
const std::string str = check_string(L, 3);
|
||||
int max_count = luaL_checkinteger(L, 4);
|
||||
|
||||
// Can't just use regex_replace here since it can only do one or infinite replacements
|
||||
|
@ -111,12 +110,11 @@ int regex_replace(lua_State *L) {
|
|||
}
|
||||
|
||||
int regex_compile(lua_State *L) {
|
||||
std::string pattern(luaL_checkstring(L, 1));
|
||||
std::string pattern(check_string(L, 1));
|
||||
int flags = luaL_checkinteger(L, 2);
|
||||
boost::u32regex *re = static_cast<boost::u32regex*>(lua_newuserdata(L, sizeof(boost::u32regex)));
|
||||
auto re = make<boost::u32regex>(L, "aegisub.regex");
|
||||
|
||||
try {
|
||||
new(re) boost::u32regex;
|
||||
*re = boost::make_u32regex(pattern, boost::u32regex::perl | flags);
|
||||
}
|
||||
catch (std::exception const& e) {
|
||||
|
@ -127,9 +125,6 @@ int regex_compile(lua_State *L) {
|
|||
// can report the original call site
|
||||
}
|
||||
|
||||
luaL_getmetatable(L, "aegisub.regex");
|
||||
lua_setmetatable(L, -2);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -178,8 +173,7 @@ int regex_init_flags(lua_State *L) {
|
|||
|
||||
}
|
||||
|
||||
namespace Automation4 {
|
||||
int regex_init(lua_State *L) {
|
||||
extern "C" int luaopen_re_impl(lua_State *L) {
|
||||
if (luaL_newmetatable(L, "aegisub.regex")) {
|
||||
set_field(L, "__gc", regex_gc);
|
||||
lua_pop(L, 1);
|
||||
|
@ -201,4 +195,3 @@ int regex_init(lua_State *L) {
|
|||
set_field(L, "init_flags", regex_init_flags);
|
||||
return 1;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2013, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
// Copyright (c) 2014, Thomas Goyne <plorkyeran@aegisub.org>
|
||||
//
|
||||
// Permission to use, copy, modify, and distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
|
@ -11,21 +11,17 @@
|
|||
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
//
|
||||
// Aegisub Project http://www.aegisub.org/
|
||||
|
||||
/// @file auto4_lua_scriptreader.cpp
|
||||
/// @brief Script-file reader for Lua 5.1-based scripting engine
|
||||
/// @ingroup scripting
|
||||
///
|
||||
#include "libaegisub/lua/script_reader.h"
|
||||
|
||||
#include "auto4_lua_scriptreader.h"
|
||||
#include "libaegisub/file_mapping.h"
|
||||
#include "libaegisub/lua/utils.h"
|
||||
|
||||
#include "auto4_lua_utils.h"
|
||||
#include <lauxlib.h>
|
||||
|
||||
#include <libaegisub/file_mapping.h>
|
||||
|
||||
#include <lua.h>
|
||||
|
||||
namespace Automation4 {
|
||||
namespace agi { namespace lua {
|
||||
bool LoadFile(lua_State *L, agi::fs::path const& raw_filename) {
|
||||
auto filename = raw_filename;
|
||||
try {
|
||||
|
@ -37,7 +33,7 @@ namespace Automation4 {
|
|||
|
||||
agi::read_file_mapping file(filename);
|
||||
auto buff = file.read();
|
||||
size_t size = file.size();
|
||||
size_t size = static_cast<size_t>(file.size());
|
||||
|
||||
// Discard the BOM if present
|
||||
if (size >= 3 && buff[0] == -17 && buff[1] == -69 && buff[2] == -65) {
|
||||
|
@ -72,4 +68,4 @@ namespace Automation4 {
|
|||
lua_pop(L, 1); // Remove the extra nil for the stackchecker
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} }
|
|
@ -106,7 +106,7 @@ charset_detect.o: CXXFLAGS += -D_X86_
|
|||
font_file_lister_fontconfig.o: CXXFLAGS += $(CFLAGS_FONTCONFIG)
|
||||
text_file_reader.o: CXXFLAGS += -D_X86_
|
||||
video_provider_manager.o: CXXFLAGS += $(CFLAGS_FFMS2)
|
||||
auto4_lua.o auto4_lua_assfile.o auto4_lua_dialog.o auto4_lua_progresssink.o auto4_lua_regex.o auto4_lua_scriptreader.o auto4_regex.o lpeg.o: CXXFLAGS += $(CFLAGS_LUA)
|
||||
auto4_lua.o auto4_lua_assfile.o auto4_lua_dialog.o auto4_lua_progresssink.o: CXXFLAGS += $(CFLAGS_LUA)
|
||||
|
||||
SRC += \
|
||||
MatroskaParser.c \
|
||||
|
@ -147,8 +147,6 @@ SRC += \
|
|||
auto4_lua_assfile.cpp \
|
||||
auto4_lua_dialog.cpp \
|
||||
auto4_lua_progresssink.cpp \
|
||||
auto4_lua_scriptreader.cpp \
|
||||
auto4_regex.cpp \
|
||||
avisynth_wrap.cpp \
|
||||
base_grid.cpp \
|
||||
charset_detect.cpp \
|
||||
|
@ -200,7 +198,6 @@ SRC += \
|
|||
hotkey.cpp \
|
||||
hotkey_data_view_model.cpp \
|
||||
initial_line_state.cpp \
|
||||
lpeg.cpp \
|
||||
main.cpp \
|
||||
menu.cpp \
|
||||
mkv_wrap.cpp \
|
||||
|
|
|
@ -34,14 +34,13 @@
|
|||
|
||||
#include "auto4_lua.h"
|
||||
|
||||
#include "auto4_lua_utils.h"
|
||||
#include "ass_attachment.h"
|
||||
#include "ass_dialogue.h"
|
||||
#include "ass_info.h"
|
||||
#include "ass_file.h"
|
||||
#include "ass_style.h"
|
||||
#include "auto4_lua_factory.h"
|
||||
#include "auto4_lua_scriptreader.h"
|
||||
#include "command/command.h"
|
||||
#include "compat.h"
|
||||
#include "include/aegisub/context.h"
|
||||
#include "main.h"
|
||||
|
@ -52,6 +51,9 @@
|
|||
#include "utils.h"
|
||||
|
||||
#include <libaegisub/access.h>
|
||||
#include <libaegisub/lua/modules.h>
|
||||
#include <libaegisub/lua/script_reader.h>
|
||||
#include <libaegisub/lua/utils.h>
|
||||
#include <libaegisub/path.h>
|
||||
#include <libaegisub/make_unique.h>
|
||||
|
||||
|
@ -67,8 +69,9 @@
|
|||
#include <boost/tokenizer.hpp>
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <lualib.h>
|
||||
#include <lauxlib.h>
|
||||
#include <mutex>
|
||||
|
||||
#include <wx/clipbrd.h>
|
||||
#include <wx/filefn.h>
|
||||
#include <wx/filename.h>
|
||||
|
@ -76,13 +79,21 @@
|
|||
#include <wx/msgdlg.h>
|
||||
#include <wx/window.h>
|
||||
|
||||
// Forward declarations of stuff with no public headers
|
||||
int luaopen_lpeg (lua_State *L);
|
||||
extern "C" int luaopen_luabins(lua_State * L);
|
||||
namespace Automation4 { int regex_init(lua_State *L); }
|
||||
using namespace agi::lua;
|
||||
using namespace Automation4;
|
||||
|
||||
namespace {
|
||||
using namespace Automation4;
|
||||
|
||||
wxString get_wxstring(lua_State *L, int idx)
|
||||
{
|
||||
return wxString::FromUTF8(lua_tostring(L, idx));
|
||||
}
|
||||
|
||||
wxString check_wxstring(lua_State *L, int idx)
|
||||
{
|
||||
return wxString::FromUTF8(luaL_checkstring(L, idx));
|
||||
}
|
||||
|
||||
void set_context(lua_State *L, const agi::Context *c)
|
||||
{
|
||||
// Explicit cast is needed to discard the const
|
||||
|
@ -115,7 +126,7 @@ namespace {
|
|||
int get_translation(lua_State *L)
|
||||
{
|
||||
wxString str(check_wxstring(L, 1));
|
||||
push_value(L, _(str));
|
||||
push_value(L, _(str).utf8_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -426,19 +437,18 @@ namespace {
|
|||
try {
|
||||
// create lua environment
|
||||
L = lua_open();
|
||||
LuaStackcheck _stackcheck(L);
|
||||
LuaStackcheck stackcheck(L);
|
||||
|
||||
// register standard libs
|
||||
push_value(L, luaopen_base); lua_call(L, 0, 0);
|
||||
push_value(L, luaopen_io); lua_call(L, 0, 0);
|
||||
push_value(L, luaopen_lpeg); lua_call(L, 0, 0);
|
||||
push_value(L, luaopen_math); lua_call(L, 0, 0);
|
||||
push_value(L, luaopen_os); lua_call(L, 0, 0);
|
||||
push_value(L, luaopen_package); lua_call(L, 0, 0);
|
||||
push_value(L, luaopen_string); lua_call(L, 0, 0);
|
||||
push_value(L, luaopen_table); lua_call(L, 0, 0);
|
||||
push_value(L, luaopen_luabins); lua_call(L, 0, 0);
|
||||
_stackcheck.check_stack(0);
|
||||
agi::lua::preload_modules(L);
|
||||
stackcheck.check_stack(0);
|
||||
|
||||
// dofile and loadfile are replaced with include
|
||||
lua_pushnil(L);
|
||||
|
@ -476,19 +486,19 @@ namespace {
|
|||
push_value(L, LuaModuleLoader);
|
||||
lua_rawseti(L, -2, 2);
|
||||
lua_pop(L, 2);
|
||||
_stackcheck.check_stack(0);
|
||||
stackcheck.check_stack(0);
|
||||
|
||||
// prepare stuff in the registry
|
||||
|
||||
// store the script's filename
|
||||
push_value(L, GetFilename().stem());
|
||||
lua_setfield(L, LUA_REGISTRYINDEX, "filename");
|
||||
_stackcheck.check_stack(0);
|
||||
stackcheck.check_stack(0);
|
||||
|
||||
// reference to the script object
|
||||
push_value(L, this);
|
||||
lua_setfield(L, LUA_REGISTRYINDEX, "aegisub");
|
||||
_stackcheck.check_stack(0);
|
||||
stackcheck.check_stack(0);
|
||||
|
||||
// make "aegisub" table
|
||||
lua_pushstring(L, "aegisub");
|
||||
|
@ -504,14 +514,17 @@ namespace {
|
|||
set_field(L, "decode_path", decode_path);
|
||||
set_field(L, "cancel", cancel_script);
|
||||
set_field(L, "lua_automation_version", 4);
|
||||
set_field(L, "__init_regex", regex_init);
|
||||
set_field(L, "__init_clipboard", clipboard_init);
|
||||
set_field(L, "file_name", get_file_name);
|
||||
set_field(L, "gettext", get_translation);
|
||||
|
||||
// store aegisub table to globals
|
||||
lua_settable(L, LUA_GLOBALSINDEX);
|
||||
_stackcheck.check_stack(0);
|
||||
stackcheck.check_stack(0);
|
||||
|
||||
// Preload packaged binary modules
|
||||
preload_modules(L);
|
||||
stackcheck.check_stack(0);
|
||||
|
||||
// load user script
|
||||
if (!LoadFile(L, GetFilename())) {
|
||||
|
@ -519,7 +532,7 @@ namespace {
|
|||
lua_pop(L, 1);
|
||||
throw ScriptLoadError(err);
|
||||
}
|
||||
_stackcheck.check_stack(1);
|
||||
stackcheck.check_stack(1);
|
||||
|
||||
// and execute it
|
||||
// this is where features are registered
|
||||
|
@ -530,7 +543,7 @@ namespace {
|
|||
lua_pop(L, 1);
|
||||
throw ScriptLoadError(err);
|
||||
}
|
||||
_stackcheck.check_stack(0);
|
||||
stackcheck.check_stack(0);
|
||||
|
||||
lua_getglobal(L, "version");
|
||||
if (lua_isnumber(L, -1) && lua_tointeger(L, -1) == 3) {
|
||||
|
@ -548,7 +561,7 @@ namespace {
|
|||
|
||||
lua_pop(L, 1);
|
||||
// if we got this far, the script should be ready
|
||||
_stackcheck.check_stack(0);
|
||||
stackcheck.check_stack(0);
|
||||
|
||||
}
|
||||
catch (agi::Exception const& e) {
|
||||
|
|
|
@ -34,8 +34,6 @@
|
|||
|
||||
#include "auto4_base.h"
|
||||
|
||||
#include "command/command.h"
|
||||
|
||||
#include <deque>
|
||||
#include <vector>
|
||||
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
|
||||
#include "auto4_lua.h"
|
||||
|
||||
#include "auto4_lua_utils.h"
|
||||
#include "ass_dialogue.h"
|
||||
#include "ass_info.h"
|
||||
#include "ass_file.h"
|
||||
|
@ -44,6 +43,7 @@
|
|||
|
||||
#include <libaegisub/exception.h>
|
||||
#include <libaegisub/make_unique.h>
|
||||
#include <libaegisub/lua/utils.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <boost/algorithm/string/case_conv.hpp>
|
||||
|
@ -51,6 +51,8 @@
|
|||
#include <memory>
|
||||
|
||||
namespace {
|
||||
using namespace agi::lua;
|
||||
|
||||
DEFINE_SIMPLE_EXCEPTION_NOINNER(BadField, Automation4::MacroRunError, "automation/macro/bad_field")
|
||||
BadField bad_field(const char *expected_type, const char *name, const char *line_clasee)
|
||||
{
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
|
||||
#include "auto4_lua.h"
|
||||
|
||||
#include "auto4_lua_utils.h"
|
||||
#include "ass_style.h"
|
||||
#include "colour_button.h"
|
||||
#include "compat.h"
|
||||
|
@ -43,6 +42,7 @@
|
|||
#include "validators.h"
|
||||
|
||||
#include <libaegisub/make_unique.h>
|
||||
#include <libaegisub/lua/utils.h>
|
||||
|
||||
#include <boost/algorithm/string/case_conv.hpp>
|
||||
#include <boost/range/adaptors.hpp>
|
||||
|
@ -64,6 +64,7 @@
|
|||
#include <wx/valnum.h>
|
||||
#include <wx/window.h>
|
||||
|
||||
using namespace agi::lua;
|
||||
namespace {
|
||||
inline void get_if_right_type(lua_State *L, std::string &def) {
|
||||
if (lua_isstring(L, -1))
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#include "auto4_lua.h"
|
||||
|
||||
#include "auto4_lua_utils.h"
|
||||
#include <libaegisub/lua/utils.h>
|
||||
|
||||
#include <wx/filedlg.h>
|
||||
|
||||
|
@ -51,6 +51,11 @@ namespace {
|
|||
lua_pushnil(L);
|
||||
lua_setfield(L, idx, name);
|
||||
}
|
||||
|
||||
wxString check_wxstring(lua_State *L, int idx)
|
||||
{
|
||||
return wxString::FromUTF8(luaL_checkstring(L, idx));
|
||||
}
|
||||
}
|
||||
|
||||
namespace Automation4 {
|
||||
|
|
Loading…
Reference in New Issue