changeset 3659:5b439da85c3b

[gaim-migrate @ 3788] more i18n work from paco-paco and a fix for colors with high intensity from Alex Converse (alex4) committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Sat, 12 Oct 2002 20:45:00 +0000
parents 50122d258d6d
children a9445dd25786
files src/dialogs.c src/protocols/oscar/oscar.c
diffstat 2 files changed, 40 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/src/dialogs.c	Sat Oct 12 20:23:06 2002 +0000
+++ b/src/dialogs.c	Sat Oct 12 20:45:00 2002 +0000
@@ -3046,9 +3046,9 @@
 	c = gtk_object_get_user_data(GTK_OBJECT(colorsel));
 	/* GTK_IS_EDITABLE(c->entry); huh? */
 
-	text_color.red = text_color.red * 256 / 65535;
-	text_color.green = text_color.green * 256 /65535;
-	text_color.blue = text_color.blue * 256 / 65535;
+	text_color.red = text_color.red / 256;
+	text_color.green = text_color.green / 256;
+	text_color.blue = text_color.blue / 256;
 	
 	c->fgcol = text_color;
 	c->hasfg = 1;
@@ -3073,9 +3073,9 @@
 	c = gtk_object_get_user_data(GTK_OBJECT(colorsel));
 	/* GTK_IS_EDITABLE(c->entry); huh? */
 
-	text_color.red = text_color.red * 256 / 65535;
-	text_color.green = text_color.green * 256 /65535;
-	text_color.blue = text_color.blue * 256 / 65535;
+	text_color.red = text_color.red / 256;
+	text_color.green = text_color.green / 256;
+	text_color.blue = text_color.blue / 256;
 
 	c->bgcol = text_color;
 	c->hasbg = 1;
--- a/src/protocols/oscar/oscar.c	Sat Oct 12 20:23:06 2002 +0000
+++ b/src/protocols/oscar/oscar.c	Sat Oct 12 20:45:00 2002 +0000
@@ -1713,6 +1713,8 @@
 	struct gaim_connection *gc = sess->aux_data;
 	struct oscar_data *od = gc->proto_data;
 	int flags = 0;
+	int convlen;
+	GError *err = NULL;
 
 	if (args->icbmflags & AIM_IMFLAGS_AWAY)
 		flags |= IM_FLAG_AWAY;
@@ -1769,37 +1771,20 @@
 	 * HTML entity.
 	 */
 	if (args->icbmflags & AIM_IMFLAGS_UNICODE) {
-		int i, j;
-		GError *err = NULL;
-
-		tmp = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", &j, &i, &err);
-		if (err)
-		  debug_printf("Unicode IM conversion: %s\n", err->message);
-		if (!tmp) {
-			/* Conversion to HTML entities isn't a bad fallback */
-			debug_printf ("AIM charset conversion failed!\n");
-			for (i = 0, tmp[0] = '\0'; i < args->msglen; i += 2) {
-				unsigned short uni;
-				
-				uni = ((args->msg[i] & 0xff) << 8) | (args->msg[i+1] & 0xff);
-				
-				if ((uni < 128) || ((uni >= 160) && (uni <= 255))) { /* ISO 8859-1 */
-					
-					g_snprintf(tmp+strlen(tmp), BUF_LONG-strlen(tmp), "%c", uni);
-					
-				} else { /* something else, do UNICODE entity */
-					g_snprintf(tmp+strlen(tmp), BUF_LONG-strlen(tmp), "&#%04x;", uni);
-				}
-				
-			}
+		tmp = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", NULL, &convlen, &err);
+		if (err) {
+			debug_printf("Unicode IM conversion: %s\n", err->message);
+			tmp = strdup(_("(There was an error receiving this message)"));
 		}
 	} else if (args->icbmflags & AIM_IMFLAGS_ISO_8859_1) {
 		int i;
-		debug_printf("ISO-8859-1 IM");
-		tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &i, NULL);
+		tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &convlen, &err);
+		if (err) {
+			debug_printf("ISO-8859-1 IM conversion: %s\n", err->message);
+			tmp = strdup(_("(There was an error receiving this message)"));
+		}
 	} else {
 		/* ASCII is valid UTF-8 */
-		debug_printf("ASCII IM\n");
 		tmp = g_strdup(args->msg);
 	}
 
@@ -3289,6 +3274,7 @@
 	struct oscar_data *odata = (struct oscar_data *)gc->proto_data;
 	struct direct_im *dim = find_direct_im(odata, name);
 	int ret = 0;
+	GError *err = NULL;
 
 	if (dim) {
 		if (dim->connected) {  /* If we're not connected yet, send through server */
@@ -3374,23 +3360,35 @@
 		while (message[i]) {
 			/* ISO-8859-1 is 0x00-0xbf in the first byte
 			 * followed by 0xc0-0xc3 in the second */
-			if ((unsigned char)message[i] > 0x80 && ((unsigned char)message[i] > 0xbf || 
-						  ((unsigned char)message[i + 1] < 0xc0 || (unsigned char)message[i + 1] > 0xc3))) {
-				args.flags ^= AIM_IMFLAGS_ISO_8859_1;
-				args.flags |= AIM_IMFLAGS_UNICODE;
-				break;
+			if ((unsigned char)message[i] < 0x80 || 
+			    ((unsigned char)message[i] & 0xc0 == 0x80 &&
+			     (unsigned char)message[i + 1] & 0xfc == 0xc0)) {
+				i++;
+				continue;
 			}
-			i++;
+			args.flags ^= AIM_IMFLAGS_ISO_8859_1;
+			args.flags |= AIM_IMFLAGS_UNICODE;
+			break;
 		}
 		if (args.flags & AIM_IMFLAGS_UNICODE) {
-			args.msg = g_convert(message, len, "UCS-2BE", "UTF-8", NULL, &len, NULL);
+			args.msg = g_convert(message, len, "UCS-2BE", "UTF-8", NULL, &len, &err);
+			if (err) {
+				debug_printf("Error converting a unicode message: %s\n", err->message);
+				debug_printf("This really shouldn't happen!\n");
+				/* We really shouldn't try to send the
+				 * IM now, but I'm not sure what to do */
+			}
 		} else if (args.flags & AIM_IMFLAGS_UNICODE) {
-			args.msg = g_convert(message, len, "ISO-8859-1", "UTF-8", NULL, &len, NULL);
-			if (!args.msg) {
+			args.msg = g_convert(message, len, "ISO-8859-1", "UTF-8", NULL, &len, &err);
+			if (err) {
+				debug_printf("conversion error: %s\n", err->message);
 				debug_printf("Someone tell Ethan his 8859-1 detection is wrong\n");
 				args.flags ^= AIM_IMFLAGS_ISO_8859_1 | AIM_IMFLAGS_UNICODE;
 				len = strlen(message);
-				args.msg = g_convert(message, len, "UCS-2BE", "UTF8", NULL, &len, NULL);
+				args.msg = g_convert(message, len, "UCS-2BE", "UTF8", NULL, &len, &err);
+				if (err) {
+					debug_printf ("Error in unicode fallback: %s\n", err->message);
+				}
 			}
 		} else {
 			args.msg = message;