aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/Converter.h
diff options
context:
space:
mode:
authornyamatongwe <unknown>2006-06-24 07:04:42 +0000
committernyamatongwe <unknown>2006-06-24 07:04:42 +0000
commit5f62118b5f1f8f957b6d1b2772aef65c9a8784b4 (patch)
treeb879d02171ad3a323f55c107ccd6575908a26306 /gtk/Converter.h
parent3b5eacd985dd0560ee5c27b8ac2fc38b872c1f07 (diff)
downloadscintilla-mirror-5f62118b5f1f8f957b6d1b2772aef65c9a8784b4.tar.gz
If opening a converter in transliterations mode fails, try opening without
transliterations.
Diffstat (limited to 'gtk/Converter.h')
-rw-r--r--gtk/Converter.h31
1 files changed, 21 insertions, 10 deletions
diff --git a/gtk/Converter.h b/gtk/Converter.h
index 7dc2e6875..d3038a2f2 100644
--- a/gtk/Converter.h
+++ b/gtk/Converter.h
@@ -23,6 +23,16 @@ size_t iconv_adaptor(size_t(*f_iconv)(ConverterHandle, T, size_t *, char **, siz
*/
class Converter {
ConverterHandle iconvh;
+ void OpenHandle(const char *fullDestination, const char *charSetSource) {
+#if GTK_MAJOR_VERSION >= 2
+ iconvh = g_iconv_open(fullDestination, charSetSource);
+#else
+ iconvh = iconv_open(fullDestination, charSetSource);
+#endif
+ }
+ bool Succeeded() const {
+ return iconvh != iconvhBad;
+ }
public:
Converter() {
iconvh = iconvhBad;
@@ -35,25 +45,26 @@ public:
Close();
}
operator bool() const {
- return iconvh != iconvhBad;
+ return Succeeded();
}
void Open(const char *charSetDestination, const char *charSetSource, bool transliterations=true) {
Close();
if (*charSetSource) {
- char fullDest[200];
- strcpy(fullDest, charSetDestination);
+ // Try allowing approximate transliterations
if (transliterations) {
+ char fullDest[200];
+ strcpy(fullDest, charSetDestination);
strcat(fullDest, "//TRANSLIT");
+ OpenHandle(fullDest, charSetSource);
+ }
+ if (!Succeeded()) {
+ // Transliterations failed so try basic name
+ OpenHandle(charSetDestination, charSetSource);
}
-#if GTK_MAJOR_VERSION >= 2
- iconvh = g_iconv_open(fullDest, charSetSource);
-#else
- iconvh = iconv_open(fullDest, charSetSource);
-#endif
}
}
void Close() {
- if (iconvh != iconvhBad) {
+ if (Succeeded()) {
#if GTK_MAJOR_VERSION >= 2
g_iconv_close(iconvh);
#else
@@ -63,7 +74,7 @@ public:
}
}
size_t Convert(char** src, size_t *srcleft, char **dst, size_t *dstleft) const {
- if (iconvh == iconvhBad) {
+ if (!Succeeded()) {
return (size_t)(-1);
} else {
#if GTK_MAJOR_VERSION >= 2