From 56041a314402b93835ce26e8a4d1e49db34e0c72 Mon Sep 17 00:00:00 2001 From: Valentin Batz Date: Sun, 24 Jul 2005 19:16:14 +0000 Subject: [PATCH] Added an option to specify a charset for a whole network. For example /recode add IRCnet iso-8859-1 (http://bugs.irssi.org/index.php?do=details&id=284) Patch by Sergey Safonov. Replaced g_convert by g_convert_with_fallback in recode_in (http://bugs.irssi.org/index.php?do=details&id=241) Patch by Kuang-che Wu. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@3881 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- docs/help/in/recode.in | 15 ++++++++------- src/core/recode.c | 12 +++++++++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/docs/help/in/recode.in b/docs/help/in/recode.in index 510fc825..2ab2fb1b 100644 --- a/docs/help/in/recode.in +++ b/docs/help/in/recode.in @@ -4,14 +4,15 @@ RECODE %|List the conversion database -RECODE ADD %|[[/]] - %|Add an entry to the conversion database (if target is omitted, - the current channel or query will be used). You can specify the - to have different charsets for the same for - different networks. +RECODE ADD %||[/]] + %|Add an entry to the conversion database (if tag or target is + omitted, the current channel or query will be used). You can specify + the to have different charsets for the same for + different networks. You can omit the target, and specify only the tag + if you want to add an entry for the network. -RECODE REMOVE %|[] - %|Remove an entry from the conversion database (if target is +RECODE REMOVE %|[|] + %|Remove an entry from the conversion database (if tag or target is omitted, the current channel or query will be used) To specify your local charset you have to set term_charset diff --git a/src/core/recode.c b/src/core/recode.c index 353d8ed2..b3668ed0 100644 --- a/src/core/recode.c +++ b/src/core/recode.c @@ -87,23 +87,27 @@ char *recode_in(const SERVER_REC *server, const char *str, const char *target) str_is_utf8 = g_utf8_validate(str, len, NULL); translit = settings_get_bool("recode_transliterate"); - + if (server != NULL) tagtarget = server->tag == NULL ? NULL : g_strdup_printf("%s/%s", server->tag, target); if (tagtarget != NULL) from = iconfig_get_str("conversions", tagtarget, NULL); g_free(tagtarget); + if (target != NULL && from == NULL) from = iconfig_get_str("conversions", target, NULL); + if (from == NULL) + from = iconfig_get_str("conversions", server->tag, NULL); + term_is_utf8 = recode_get_charset(&to); if (translit && !is_translit(to)) to = translit_to = g_strconcat(to, "//TRANSLIT", NULL); if (from) - recoded = g_convert(str, len, to, from, NULL, NULL, NULL); + recoded = g_convert_with_fallback(str, len, to, from, NULL, NULL, NULL); if (!recoded) { if (term_is_utf8) { @@ -114,7 +118,7 @@ char *recode_in(const SERVER_REC *server, const char *str, const char *target) from = "UTF-8"; if (from) - recoded = g_convert(str, len, to, from, NULL, NULL, NULL); + recoded = g_convert_with_fallback(str, len, to, from, NULL, NULL, NULL); if (!recoded) recoded = g_strdup(str); @@ -158,6 +162,8 @@ char *recode_out(const SERVER_REC *server, const char *str, const char *target) g_free(tagtarget); if (to == NULL || *to == '\0') to = iconfig_get_str("conversions", target, NULL); + if (to == NULL || *to == '\0') + to = iconfig_get_str("conversions", server->tag, NULL); if (to == NULL || *to == '\0') /* default outgoing charset if set */ to = settings_get_str("recode_out_default_charset");