aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormitchell <70453897+667e-11@users.noreply.github.com>2009-02-28 20:55:22 -0500
committermitchell <70453897+667e-11@users.noreply.github.com>2009-02-28 20:55:22 -0500
commitb1d103ecb28589d507477715f25fba5641d247c8 (patch)
tree2aff52d12db043853c2688added7c31e758460a1 /src
parent36aaa46d7f71e3efa26a7fdf66fac537c060f414 (diff)
downloadtextadept-b1d103ecb28589d507477715f25fba5641d247c8.tar.gz
textadept-b1d103ecb28589d507477715f25fba5641d247c8.zip
Use UTF-8 internally and respect platform filename encoding.
Added 'textadept.iconv' function to interface with GLib's g_convert() and set global _CHARSET to be the platform's filename encoding/code page.
Diffstat (limited to 'src')
-rw-r--r--src/lua_interface.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/lua_interface.c b/src/lua_interface.c
index 29d22e54..94dbb74d 100644
--- a/src/lua_interface.c
+++ b/src/lua_interface.c
@@ -68,6 +68,7 @@ static int l_cf_ta_buffer_new(lua_State *lua),
l_cf_ta_goto_window(lua_State *lua),
l_cf_view_goto_buffer(lua_State *lua),
l_cf_ta_gtkmenu(lua_State *lua),
+ l_cf_ta_iconv(lua_State *lua),
l_cf_ta_reset(lua_State *lua),
l_cf_ta_quit(lua_State *lua),
l_cf_pm_focus(lua_State *lua),
@@ -135,6 +136,7 @@ bool l_init(int argc, char **argv, bool reinit) {
l_cfunc(lua, l_cf_ta_goto_window, "goto_view");
l_cfunc(lua, l_cf_ta_get_split_table, "get_split_table");
l_cfunc(lua, l_cf_ta_gtkmenu, "gtkmenu");
+ l_cfunc(lua, l_cf_ta_iconv, "iconv");
l_cfunc(lua, l_cf_ta_reset, "reset");
l_cfunc(lua, l_cf_ta_quit, "quit");
l_mt(lua, "_textadept_mt", l_ta_mt_index, l_ta_mt_newindex);
@@ -151,6 +153,10 @@ bool l_init(int argc, char **argv, bool reinit) {
lua_pushboolean(lua, 1);
lua_setglobal(lua, "MAC");
#endif
+ const char *charset = 0;
+ g_get_charset(&charset);
+ lua_pushstring(lua, charset);
+ lua_setglobal(lua, "_CHARSET");
if (l_load_script("core/init.lua")) {
lua_getglobal(lua, "textadept");
@@ -1477,6 +1483,18 @@ static int l_cf_ta_gtkmenu(lua_State *lua) {
return 1;
}
+static int l_cf_ta_iconv(lua_State *lua) {
+ const char *text = luaL_checkstring(lua, 1);
+ const char *to = luaL_checkstring(lua, 2);
+ const char *from = luaL_checkstring(lua, 3);
+ char *converted = g_convert(text, -1, to, from, NULL, NULL, NULL);
+ if (converted) {
+ lua_pushstring(lua, const_cast<char*>(converted));
+ g_free(converted);
+ } else luaL_error(lua, "Conversion failed");
+ return 1;
+}
+
static int l_cf_ta_reset(lua_State *lua) {
l_handle_event("resetting");
l_init(0, NULL, true);