diff options
| -rw-r--r-- | plugins/MirLua/src/m_core.cpp | 23 | ||||
| -rw-r--r-- | plugins/MirLua/src/m_message.cpp | 8 | ||||
| -rw-r--r-- | plugins/MirLua/src/m_msg_buttonsbar.cpp | 22 | ||||
| -rw-r--r-- | plugins/MirLua/src/mlua.cpp | 4 | ||||
| -rw-r--r-- | plugins/MirLua/src/mlua_module_loader.cpp | 2 | ||||
| -rw-r--r-- | plugins/MirLua/src/mlua_utils.cpp | 32 | ||||
| -rw-r--r-- | plugins/MirLua/src/stdafx.h | 3 | ||||
| -rw-r--r-- | plugins/MirLua/src/version.h | 2 | 
8 files changed, 74 insertions, 22 deletions
diff --git a/plugins/MirLua/src/m_core.cpp b/plugins/MirLua/src/m_core.cpp index 2a5564a07b..7fcbe1c2f5 100644 --- a/plugins/MirLua/src/m_core.cpp +++ b/plugins/MirLua/src/m_core.cpp @@ -162,30 +162,21 @@ static int lua_CallService(lua_State *L)  static int lua_Utf8DecodeA(lua_State *L)
  {
 -	const char *string = luaL_checkstring(L, 1);
 -
 -	char *res = mir_utf8decodeA(string);
 -	lua_pushlightuserdata(L, res);
 -
 -	return 1;
 +	return luaM_toansi(L);
  }
  static int lua_Utf8DecodeW(lua_State *L)
  {
 -	const char *string = luaL_checkstring(L, 1);
 -
 -	wchar_t *res = mir_utf8decodeW(string);
 -	lua_pushlightuserdata(L, res);
 -
 -	return 1;
 +	return luaM_toucs2(L);
  }
  static int lua_Free(lua_State *L)
  {
 -	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 -	void *ptr = lua_touserdata(L, 1);
 -	
 -	mir_free(ptr);
 +	if (lua_type(L, 1) == LUA_TLIGHTUSERDATA)
 +	{
 +		void *ptr = lua_touserdata(L, 1);
 +		mir_free(ptr);
 +	}
  	return 0;
  }
 diff --git a/plugins/MirLua/src/m_message.cpp b/plugins/MirLua/src/m_message.cpp index f788b93f19..87e8e1a353 100644 --- a/plugins/MirLua/src/m_message.cpp +++ b/plugins/MirLua/src/m_message.cpp @@ -2,11 +2,11 @@  static int lua_Paste(lua_State *L)
  {
 -	MCONTACT hContect = luaL_checkinteger(L, 1);
 +	MCONTACT hContact = luaL_checkinteger(L, 1);
  	ptrT text(mir_utf8decodeT(luaL_checkstring(L, 2)));
  	MessageWindowInputData mwid = { sizeof(MessageWindowInputData) };
 -	mwid.hContact = luaL_checkinteger(L, 1);
 +	mwid.hContact = hContact;
  	mwid.uFlags = MSG_WINDOW_UFLAG_MSG_BOTH;
  	MessageWindowData mwd = { sizeof(MessageWindowData) };
 @@ -26,11 +26,11 @@ static int lua_Paste(lua_State *L)  static int lua_Send(lua_State *L)
  {
 -	MCONTACT hContect = luaL_checkinteger(L, 1);
 +	MCONTACT hContact = luaL_checkinteger(L, 1);
  	ptrT text(mir_utf8decodeT(luaL_checkstring(L, 2)));
  	MessageWindowInputData mwid = { sizeof(MessageWindowInputData) };
 -	mwid.hContact = luaL_checkinteger(L, 1);
 +	mwid.hContact = hContact;
  	mwid.uFlags = MSG_WINDOW_UFLAG_MSG_BOTH;
  	MessageWindowData mwd = { sizeof(MessageWindowData) };
 diff --git a/plugins/MirLua/src/m_msg_buttonsbar.cpp b/plugins/MirLua/src/m_msg_buttonsbar.cpp index d150d81d79..9b3fc3b8e7 100644 --- a/plugins/MirLua/src/m_msg_buttonsbar.cpp +++ b/plugins/MirLua/src/m_msg_buttonsbar.cpp @@ -137,6 +137,27 @@ static int lua_OnMsgToolBarButtonPressed(lua_State *L)  	return 1;
  }
 +static int lua_DecodeCustomButtonClickData(lua_State *L)
 +{
 +	CustomButtonClickData *bcd = (CustomButtonClickData*)lua_tointeger(L, 1);
 +
 +	lua_newtable(L);
 +	lua_pushstring(L, "Module");
 +	lua_pushstring(L, ptrA(mir_utf8encode(bcd->pszModule)));
 +	lua_settable(L, -3);
 +	lua_pushstring(L, "ButtonID");
 +	lua_pushinteger(L, bcd->dwButtonId);
 +	lua_settable(L, -3);
 +	lua_pushstring(L, "hContact");
 +	lua_pushinteger(L, bcd->hContact);
 +	lua_settable(L, -3);
 +	lua_pushstring(L, "Flags");
 +	lua_pushinteger(L, bcd->flags);
 +	lua_settable(L, -3);
 +
 +	return 1;
 +}
 +
  static luaL_Reg msgbuttinsbarApi[] =
  {
  	{ "AddButton", lua_AddButton },
 @@ -144,6 +165,7 @@ static luaL_Reg msgbuttinsbarApi[] =  	{ "RemoveButton", lua_RemoveButton },
  	{ "OnMsgToolBarButtonPressed", lua_OnMsgToolBarButtonPressed },
 +	{ "DecodeCustomButtonClickData", lua_DecodeCustomButtonClickData },
  	{ NULL, NULL }
  };
 diff --git a/plugins/MirLua/src/mlua.cpp b/plugins/MirLua/src/mlua.cpp index 57fa08c7d5..6ce1b2d3f0 100644 --- a/plugins/MirLua/src/mlua.cpp +++ b/plugins/MirLua/src/mlua.cpp @@ -36,6 +36,10 @@ void CMLua::Load()  	lua_getglobal(L, "_G");
  	lua_pushcclosure(L, luaM_print, 0);
  	lua_setfield(L, -2, "print");
 +	lua_pushcclosure(L, luaM_toansi, 0);
 +	lua_setfield(L, -2, "a");
 +	lua_pushcclosure(L, luaM_toucs2, 0);
 +	lua_setfield(L, -2, "u");
  	lua_pop(L, 1);
  	lua_atpanic(L, luaM_atpanic);
 diff --git a/plugins/MirLua/src/mlua_module_loader.cpp b/plugins/MirLua/src/mlua_module_loader.cpp index bc195cc701..391daadfa6 100644 --- a/plugins/MirLua/src/mlua_module_loader.cpp +++ b/plugins/MirLua/src/mlua_module_loader.cpp @@ -23,7 +23,7 @@ void CLuaModuleLoader::LoadModules()  	PreloadModule(MLUA_GENMENU, luaopen_m_genmenu);
  	PreloadModule(MLUA_MESSAGE, luaopen_m_message);
  	PreloadModule(MLUA_MSGBUTTONSBAR, luaopen_m_msg_buttonsbar);
 -	PreloadModule(MLUA_POPUP, luaopen_m_popup);	
 +	PreloadModule(MLUA_POPUP, luaopen_m_popup);
  	PreloadModule(MLUA_TOPTOOLBAR, luaopen_m_toptoolbar);
  	PreloadModule(MLUA_VARIABLES, luaopen_m_variables);
  	PreloadModule(MLUA_WINDOWS, luaopen_m_windows);
 diff --git a/plugins/MirLua/src/mlua_utils.cpp b/plugins/MirLua/src/mlua_utils.cpp index 7fa59212c5..31af863da2 100644 --- a/plugins/MirLua/src/mlua_utils.cpp +++ b/plugins/MirLua/src/mlua_utils.cpp @@ -38,6 +38,32 @@ int luaM_atpanic(lua_State *L)  	return 0;
  }
 +int luaM_toansi(lua_State *L)
 +{
 +	const char* value = luaL_checkstring(L, 1);
 +	int codepage = luaL_optinteger(L, 2, Langpack_GetDefaultCodePage());
 +
 +	ptrA string(mir_strdup(value));
 +	lua_pushstring(L, mir_utf8decodecp(string, codepage, NULL));
 +
 +	return 1;
 +}
 +
 +int luaM_toucs2(lua_State *L)
 +{
 +	const char* value = luaL_checkstring(L, 1);
 +
 +	ptrW unicode(mir_utf8decodeW(value));
 +	size_t length = mir_wstrlen(unicode) * sizeof(wchar_t);
 +
 +	ptrA string((char*)mir_calloc(length + 1));
 +	memcpy(string, unicode, length);
 +
 +	lua_pushlstring(L, string, length + 1);
 +
 +	return 1;
 +}
 +
  bool luaM_toboolean(lua_State *L, int idx)
  {
  	if (lua_type(L, idx) == LUA_TNUMBER)
 @@ -56,6 +82,9 @@ WPARAM luaM_towparam(lua_State *L, int idx)  	case LUA_TNUMBER:
  		wParam = lua_tonumber(L, idx);
  		break;
 +	case LUA_TSTRING:
 +		wParam = (WPARAM)lua_tostring(L, idx);
 +		break;
  	case LUA_TUSERDATA:
  	case LUA_TLIGHTUSERDATA:
  		wParam = (WPARAM)lua_touserdata(L, idx);
 @@ -75,6 +104,9 @@ LPARAM luaM_tolparam(lua_State *L, int idx)  	case LUA_TNUMBER:
  		lParam = lua_tonumber(L, idx);
  		break;
 +	case LUA_TSTRING:
 +		lParam = (LPARAM)lua_tostring(L, idx);
 +		break;
  	case LUA_TUSERDATA:
  	case LUA_TLIGHTUSERDATA:
  		lParam = (LPARAM)lua_touserdata(L, idx);
 diff --git a/plugins/MirLua/src/stdafx.h b/plugins/MirLua/src/stdafx.h index d871d739ea..867d07f7e8 100644 --- a/plugins/MirLua/src/stdafx.h +++ b/plugins/MirLua/src/stdafx.h @@ -95,6 +95,9 @@ LUAMOD_API int (luaopen_m_windows)(lua_State *L);  int luaM_print(lua_State *L);
  int luaM_atpanic(lua_State *L);
 +int luaM_toansi(lua_State *L);
 +int luaM_toucs2(lua_State *L);
 +
  bool luaM_toboolean(lua_State *L, int idx);
  WPARAM luaM_towparam(lua_State *L, int idx);
  LPARAM luaM_tolparam(lua_State *L, int idx);
 diff --git a/plugins/MirLua/src/version.h b/plugins/MirLua/src/version.h index 3a3afa1b3c..a3ff129847 100644 --- a/plugins/MirLua/src/version.h +++ b/plugins/MirLua/src/version.h @@ -1,7 +1,7 @@  #define __MAJOR_VERSION            0
  #define __MINOR_VERSION            11
  #define __RELEASE_NUM              3
 -#define __BUILD_NUM                2
 +#define __BUILD_NUM                3
  #include <stdver.h>
  | 
