summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2005-11-19 18:13:18 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2005-11-19 18:13:18 +0000
commit342141fcb20cffcc7c2f49e7e478ba81af467df3 (patch)
tree880ce26a8d730bc26fa11976f05f5d22f6110b91
parent5178a643bb565a987544bdb4d70c344000ecf201 (diff)
downloadirssi-342141fcb20cffcc7c2f49e7e478ba81af467df3.zip
If transliterations don't work in the system (eg. Solaris), don't allow
recode_transliterate setting to be enabled. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4082 dbcabf3a-b0e7-0310-adc4-f8d773084564
-rw-r--r--src/core/recode.c21
-rw-r--r--src/fe-common/core/fe-recode.c11
-rw-r--r--src/fe-common/core/module-formats.c1
-rw-r--r--src/fe-common/core/module-formats.h1
4 files changed, 25 insertions, 9 deletions
diff --git a/src/core/recode.c b/src/core/recode.c
index 1dd79ca7..75a1c127 100644
--- a/src/core/recode.c
+++ b/src/core/recode.c
@@ -37,19 +37,31 @@ static gboolean recode_get_charset(const char **charset)
}
#endif
+static gboolean is_translit(const char *charset)
+{
+ char *pos;
+ pos = stristr(charset, "//translit");
+ return (pos != NULL);
+}
+
gboolean is_valid_charset(const char *charset)
{
#ifdef HAVE_GLIB2
const char *from="UTF-8";
const char *str="irssi";
- char *recoded;
+ char *recoded, *to = NULL;
gboolean valid;
if (!charset || *charset == '\0')
return FALSE;
+
+ if (settings_get_bool("recode_transliterate") && !is_translit(charset))
+ charset = to = g_strconcat(charset, "//TRANSLIT", NULL);
+
recoded = g_convert(str, strlen(str), charset, from, NULL, NULL, NULL);
valid = (recoded != NULL);
g_free(recoded);
+ g_free(to);
return valid;
#else
if (!charset || *charset =='\0')
@@ -58,13 +70,6 @@ gboolean is_valid_charset(const char *charset)
#endif
}
-static gboolean is_translit(const char *charset)
-{
- char *pos;
- pos = stristr(charset, "//translit");
- return (pos != NULL);
-}
-
char *recode_in(const SERVER_REC *server, const char *str, const char *target)
{
#ifdef HAVE_GLIB2
diff --git a/src/fe-common/core/fe-recode.c b/src/fe-common/core/fe-recode.c
index b6d89e96..988c3762 100644
--- a/src/fe-common/core/fe-recode.c
+++ b/src/fe-common/core/fe-recode.c
@@ -155,7 +155,16 @@ static void read_settings(void)
char *old_term_charset = g_strdup(term_charset);
char *old_recode_fallback = g_strdup(recode_fallback);
char *old_recode_out_default = g_strdup(recode_out_default);
-
+
+ if (settings_get_bool("recode_transliterate")) {
+ /* check if transliterations are supported in this system */
+ if (!is_valid_charset("ASCII")) {
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ TXT_CONVERSION_NO_TRANSLITS);
+ settings_set_bool("recode_transliterate", FALSE);
+ }
+ }
+
if (recode_fallback)
g_free(recode_fallback);
recode_fallback = g_strdup(settings_get_str("recode_fallback"));
diff --git a/src/fe-common/core/module-formats.c b/src/fe-common/core/module-formats.c
index 66fb9f91..d9bfc48b 100644
--- a/src/fe-common/core/module-formats.c
+++ b/src/fe-common/core/module-formats.c
@@ -255,6 +255,7 @@ FORMAT_REC fecommon_core_formats[] = {
{ "conversion_added", "Added {hilight $0}/{hilight $1} to conversion database", 2, { FORMAT_STRING, FORMAT_STRING } },
{ "conversion_removed", "Removed {hilight $0} from conversion database", 1, { FORMAT_STRING } },
{ "conversion_not_found", "{hilight $0} not found in conversion database", 1, { FORMAT_STRING } },
+ { "conversion_no_translits", "Transliterations not supported in this system", 0 },
{ "recode_header", "%#Target Character set", 0 },
{ "recode_line", "%#%|$[!30]0 $1", 2, { FORMAT_STRING, FORMAT_STRING } },
diff --git a/src/fe-common/core/module-formats.h b/src/fe-common/core/module-formats.h
index 55ea9df0..8f481aca 100644
--- a/src/fe-common/core/module-formats.h
+++ b/src/fe-common/core/module-formats.h
@@ -221,6 +221,7 @@ enum {
TXT_CONVERSION_ADDED,
TXT_CONVERSION_REMOVED,
TXT_CONVERSION_NOT_FOUND,
+ TXT_CONVERSION_NO_TRANSLITS,
TXT_RECODE_HEADER,
TXT_RECODE_LINE,