Added proper encoding conversion with fallback

This commit is contained in:
Jesse van den Kieboom 2005-11-06 16:03:55 +00:00
parent 1f0980caab
commit e5ac9c4c95
1 changed files with 91 additions and 9 deletions

View File

@ -1,5 +1,5 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#include "../config.h"
#endif
#include <sys/types.h>
@ -25,16 +25,20 @@ static regex_t url_regexp;
gchar *
gm_fix_decimal_point(gchar *line, int len) {
int i;
struct lconv *l = localeconv();
int i;
struct lconv *l = localeconv();
for (i = 0; i < len; i++) {
if (line[i] == '.') {
line[i] = l->decimal_point[0];
}
}
if (l->decimal_point[0] == '.') {
return line;
}
for (i = 0; i < len; i++) {
if (line[i] == '.') {
line[i] = l->decimal_point[0];
}
}
return line;
return line;
}
gchar *
@ -563,3 +567,81 @@ gm_default_charset() {
return loc;
}
void
gm_notebook_focus_from_label(GtkNotebook *note, gchar *caption) {
int p = gtk_notebook_get_n_pages(note);
int i;
GtkWidget *child;
for (i = 0; i < p; i++) {
child = gtk_notebook_get_nth_page(note, i);
if (!g_strcasecmp(gtk_notebook_get_tab_label_text(note, child),
caption)) {
gtk_notebook_set_current_page(note, i);
break;
}
}
}
void
gm_string_skip_space(gchar **ptr) {
while (**ptr != '\0' && g_unichar_isspace(g_utf8_get_char(*ptr))) {
*ptr = g_utf8_next_char(*ptr);
}
}
void
gm_string_skip_nonspace(gchar **ptr) {
while (**ptr != '\0' && !g_unichar_isspace(g_utf8_get_char(*ptr))) {
*ptr = g_utf8_next_char(*ptr);
}
}
void
gm_string_skip_till(gchar **ptr, gchar const *find) {
gchar const *fptr;
gunichar check;
while (**ptr != '\0') {
check = g_utf8_get_char(*ptr);
for (fptr = find; *fptr; ++fptr) {
// CHECK: find should also be treated as utf8!
if (check == (gunichar)(*fptr)) {
break;
}
}
*ptr = g_utf8_next_char(*ptr);
}
}
gchar *
gm_to_utf8_with_fallback(gchar const *text, gssize len, gchar const *from,
gchar const *fallback) {
gchar *res;
gsize read, written;
GString *str = g_string_new("");
// TODO: use g_iconv instead of g_convert
while ((res = g_convert(text, len, "UTF-8", from, &read, &written, NULL))
== NULL) {
res = g_convert(text, read, "UTF-8", from, NULL, NULL, NULL);
str = g_string_append(str, res);
str = g_string_append(str, fallback);
text = text + read + 1;
if (len != -1)
len = len - read - 1;
}
str = g_string_append(str, res);
g_free(res);
res = str->str;
g_string_free(str, FALSE);
return res;
}