gnome-mud r742 - in trunk: . src



Author: lharris
Date: Wed Feb 18 02:58:32 2009
New Revision: 742
URL: http://svn.gnome.org/viewvc/gnome-mud?rev=742&view=rev

Log:
We now convert user input from the user's local encoding to the encoding specified in the prefs.


Modified:
   trunk/ChangeLog
   trunk/src/mud-telnet-msp.c
   trunk/src/mud-window.c

Modified: trunk/src/mud-telnet-msp.c
==============================================================================
--- trunk/src/mud-telnet-msp.c	(original)
+++ trunk/src/mud-telnet-msp.c	Wed Feb 18 02:58:32 2009
@@ -37,18 +37,18 @@
 static void mud_telnet_msp_command_free(MudMSPCommand *command);
 static gboolean mud_telnet_msp_parser_is_param_char(gchar c);
 static gboolean mud_telnet_msp_parser_switch_on_param_char(gint *state,
-							   gchar *buf,
-							   gint index,
-							   gint len);
+        gchar *buf,
+        gint index,
+        gint len);
 static void mud_telnet_msp_process_command(MudTelnet *telnet,
-					   MudMSPCommand *command);
+        MudMSPCommand *command);
 static void mud_telnet_msp_stop_playing(MudTelnet *telnet, MudMSPTypes type);
 static void mud_telnet_msp_start_playing(MudTelnet *telnet, MudMSPTypes type);
 static gboolean mud_telnet_msp_get_files(MudTelnet *telnet, MudMSPTypes type);
 static gboolean mud_telnet_msp_sound_bus_call (GstBus *bus,
-					       GstMessage *msg, gpointer data);
+        GstMessage *msg, gpointer data);
 static gboolean mud_telnet_msp_music_bus_call (GstBus *bus,
-					       GstMessage *msg, gpointer data);
+        GstMessage *msg, gpointer data);
 
 GString *
 mud_telnet_msp_parse(MudTelnet *telnet, GString *buf, gint *len)
@@ -61,131 +61,131 @@
 
     if(telnet->prev_buffer)
     {
-	g_string_prepend(buf, telnet->prev_buffer->str);
-	g_string_free(telnet->prev_buffer, TRUE);
-	telnet->prev_buffer = NULL;
+        g_string_prepend(buf, telnet->prev_buffer->str);
+        g_string_free(telnet->prev_buffer, TRUE);
+        telnet->prev_buffer = NULL;
     }
 
     while(telnet->msp_parser.lex_pos_start < *len)
     {
-	switch(telnet->msp_parser.state)
-	{
-	case MSP_STATE_TEXT:
-	    if(buf->str[telnet->msp_parser.lex_pos_start] == '!')
-		telnet->msp_parser.state = MSP_STATE_POSSIBLE_COMMAND;
-	    else
-	    {
-		g_string_append_c(telnet->msp_parser.output,
-				  buf->str[telnet->msp_parser.lex_pos_start++]);
-	    }
-	    break;
-
-	case MSP_STATE_POSSIBLE_COMMAND:
-	    if(telnet->msp_parser.lex_pos_start + 1 == *len)
-		continue;
-	    else if(buf->str[telnet->msp_parser.lex_pos_start + 1] != '!')
-	    {
-		g_string_append_c(telnet->msp_parser.output,
-				  buf->str[telnet->msp_parser.lex_pos_start++]);
-		telnet->msp_parser.state = MSP_STATE_TEXT;
-		continue;
-	    }
-
-	    telnet->msp_parser.state = MSP_STATE_COMMAND;
-	    break;
-
-	case MSP_STATE_COMMAND:
-	    if(telnet->msp_parser.lex_pos_start + 8 >= *len)
-	    {
-		telnet->prev_buffer = g_string_new(NULL);
-
-		count = telnet->msp_parser.lex_pos_start;
-
-		while(count != buf->len)
-		    g_string_append_c(telnet->prev_buffer, buf->str[count++]);
-
-		telnet->msp_parser.lex_pos_start += count;
-		continue;
-	    }
-
-	    if(buf->str[telnet->msp_parser.lex_pos_start + 2] == 'S' &&
-	       buf->str[telnet->msp_parser.lex_pos_start + 3] == 'O' &&
-	       buf->str[telnet->msp_parser.lex_pos_start + 4] == 'U' &&
-	       buf->str[telnet->msp_parser.lex_pos_start + 5] == 'N' &&
-	       buf->str[telnet->msp_parser.lex_pos_start + 6] == 'D')
-		telnet->msp_type = MSP_TYPE_SOUND;
-	    else if(buf->str[telnet->msp_parser.lex_pos_start + 2] == 'M' &&
-		    buf->str[telnet->msp_parser.lex_pos_start + 3] == 'U' &&
-		    buf->str[telnet->msp_parser.lex_pos_start + 4] == 'S' &&
-		    buf->str[telnet->msp_parser.lex_pos_start + 5] == 'I' &&
-		    buf->str[telnet->msp_parser.lex_pos_start + 6] == 'C')
-		telnet->msp_type = MSP_TYPE_MUSIC;
-	    else
-	    {
-		/* Not an msp command, bail out. */
-		g_string_append_c(telnet->msp_parser.output,
-				  buf->str[telnet->msp_parser.lex_pos_start++]);
-		g_string_append_c(telnet->msp_parser.output,
-				  buf->str[telnet->msp_parser.lex_pos_start++]);
-
-		telnet->msp_parser.state = MSP_STATE_TEXT;
-		continue;
-	    }
-
-	    // Skip leading (
-	    telnet->msp_parser.lex_pos_start += 8;
-	    telnet->msp_parser.state = MSP_STATE_GET_ARGS;
-	    continue;
-	    break;
-
-	case MSP_STATE_GET_ARGS:
-	    telnet->msp_parser.lex_pos_end = telnet->msp_parser.lex_pos_start;
-
-	    if(telnet->msp_parser.arg_buffer == NULL)
-		telnet->msp_parser.arg_buffer = g_string_new(NULL);
-	    else
-	    {
-		/* This stops some craziness where g_string_append_c
-		   doesn't actually update the gstring. Glib bug? */
-		temp = g_strdup(telnet->msp_parser.arg_buffer->str);
-		g_string_free(telnet->msp_parser.arg_buffer, TRUE);
-		telnet->msp_parser.arg_buffer = g_string_new(temp);
-		g_free(temp);
-	    }
-
-	    while(telnet->msp_parser.lex_pos_end < *len &&
-		  buf->str[telnet->msp_parser.lex_pos_end] != ')')
-		g_string_append_c(telnet->msp_parser.arg_buffer,
-				  buf->str[telnet->msp_parser.lex_pos_end++]);
-
-	    if(telnet->msp_parser.lex_pos_end >= *len &&
-	       buf->str[telnet->msp_parser.lex_pos_end - 1] != ')')
-	    {
-		telnet->msp_parser.lex_pos_start =
-		    telnet->msp_parser.lex_pos_end;
-		continue;
-	    }
-
-	    telnet->msp_parser.state = MSP_STATE_PARSE_ARGS;
-
-	    break;
-
-	case MSP_STATE_PARSE_ARGS:
-	    mud_telnet_msp_parser_args(telnet);
-
-	    g_string_free(telnet->msp_parser.arg_buffer, TRUE);
-	    telnet->msp_parser.arg_buffer = NULL;
-	    telnet->msp_parser.lex_pos_start =
-		telnet->msp_parser.lex_pos_end + 2;
-	    telnet->msp_parser.state = MSP_STATE_TEXT;
-	    break;
-	}
+        switch(telnet->msp_parser.state)
+        {
+            case MSP_STATE_TEXT:
+                if(buf->str[telnet->msp_parser.lex_pos_start] == '!')
+                    telnet->msp_parser.state = MSP_STATE_POSSIBLE_COMMAND;
+                else
+                {
+                    g_string_append_c(telnet->msp_parser.output,
+                            buf->str[telnet->msp_parser.lex_pos_start++]);
+                }
+                break;
+
+            case MSP_STATE_POSSIBLE_COMMAND:
+                if(telnet->msp_parser.lex_pos_start + 1 == *len)
+                    continue;
+                else if(buf->str[telnet->msp_parser.lex_pos_start + 1] != '!')
+                {
+                    g_string_append_c(telnet->msp_parser.output,
+                            buf->str[telnet->msp_parser.lex_pos_start++]);
+                    telnet->msp_parser.state = MSP_STATE_TEXT;
+                    continue;
+                }
+
+                telnet->msp_parser.state = MSP_STATE_COMMAND;
+                break;
+
+            case MSP_STATE_COMMAND:
+                if(telnet->msp_parser.lex_pos_start + 8 >= *len)
+                {
+                    telnet->prev_buffer = g_string_new(NULL);
+
+                    count = telnet->msp_parser.lex_pos_start;
+
+                    while(count != buf->len)
+                        g_string_append_c(telnet->prev_buffer, buf->str[count++]);
+
+                    telnet->msp_parser.lex_pos_start += count;
+                    continue;
+                }
+
+                if(buf->str[telnet->msp_parser.lex_pos_start + 2] == 'S' &&
+                        buf->str[telnet->msp_parser.lex_pos_start + 3] == 'O' &&
+                        buf->str[telnet->msp_parser.lex_pos_start + 4] == 'U' &&
+                        buf->str[telnet->msp_parser.lex_pos_start + 5] == 'N' &&
+                        buf->str[telnet->msp_parser.lex_pos_start + 6] == 'D')
+                    telnet->msp_type = MSP_TYPE_SOUND;
+                else if(buf->str[telnet->msp_parser.lex_pos_start + 2] == 'M' &&
+                        buf->str[telnet->msp_parser.lex_pos_start + 3] == 'U' &&
+                        buf->str[telnet->msp_parser.lex_pos_start + 4] == 'S' &&
+                        buf->str[telnet->msp_parser.lex_pos_start + 5] == 'I' &&
+                        buf->str[telnet->msp_parser.lex_pos_start + 6] == 'C')
+                    telnet->msp_type = MSP_TYPE_MUSIC;
+                else
+                {
+                    /* Not an msp command, bail out. */
+                    g_string_append_c(telnet->msp_parser.output,
+                            buf->str[telnet->msp_parser.lex_pos_start++]);
+                    g_string_append_c(telnet->msp_parser.output,
+                            buf->str[telnet->msp_parser.lex_pos_start++]);
+
+                    telnet->msp_parser.state = MSP_STATE_TEXT;
+                    continue;
+                }
+
+                // Skip leading (
+                telnet->msp_parser.lex_pos_start += 8;
+                telnet->msp_parser.state = MSP_STATE_GET_ARGS;
+                continue;
+                break;
+
+            case MSP_STATE_GET_ARGS:
+                telnet->msp_parser.lex_pos_end = telnet->msp_parser.lex_pos_start;
+
+                if(telnet->msp_parser.arg_buffer == NULL)
+                    telnet->msp_parser.arg_buffer = g_string_new(NULL);
+                else
+                {
+                    /* This stops some craziness where g_string_append_c
+                       doesn't actually update the gstring. Glib bug? */
+                    temp = g_strdup(telnet->msp_parser.arg_buffer->str);
+                    g_string_free(telnet->msp_parser.arg_buffer, TRUE);
+                    telnet->msp_parser.arg_buffer = g_string_new(temp);
+                    g_free(temp);
+                }
+
+                while(telnet->msp_parser.lex_pos_end < *len &&
+                        buf->str[telnet->msp_parser.lex_pos_end] != ')')
+                    g_string_append_c(telnet->msp_parser.arg_buffer,
+                            buf->str[telnet->msp_parser.lex_pos_end++]);
+
+                if(telnet->msp_parser.lex_pos_end >= *len &&
+                        buf->str[telnet->msp_parser.lex_pos_end - 1] != ')')
+                {
+                    telnet->msp_parser.lex_pos_start =
+                        telnet->msp_parser.lex_pos_end;
+                    continue;
+                }
+
+                telnet->msp_parser.state = MSP_STATE_PARSE_ARGS;
+
+                break;
+
+            case MSP_STATE_PARSE_ARGS:
+                mud_telnet_msp_parser_args(telnet);
+
+                g_string_free(telnet->msp_parser.arg_buffer, TRUE);
+                telnet->msp_parser.arg_buffer = NULL;
+                telnet->msp_parser.lex_pos_start =
+                    telnet->msp_parser.lex_pos_end + 2;
+                telnet->msp_parser.state = MSP_STATE_TEXT;
+                break;
+        }
     }
 
     if(telnet->msp_parser.state == MSP_STATE_TEXT)
     {
-	ret = g_string_new(g_strdup(telnet->msp_parser.output->str));
-	*len = telnet->msp_parser.output->len;
+        ret = g_string_new(g_strdup(telnet->msp_parser.output->str));
+        *len = telnet->msp_parser.output->len;
     }
 
     g_string_free(buf, TRUE);
@@ -554,7 +554,6 @@
 	    if(telnet->base_url)
 		g_free(telnet->base_url);
 
-
 	    telnet->base_url = g_strdup(command->U);
 	}
 	else

Modified: trunk/src/mud-window.c
==============================================================================
--- trunk/src/mud-window.c	(original)
+++ trunk/src/mud-window.c	Wed Feb 18 02:58:32 2009
@@ -273,26 +273,46 @@
 static gboolean
 mud_window_textview_keypress(GtkWidget *widget, GdkEventKey *event, MudWindow *window)
 {
-    gchar *text;
+    gchar *text, *buf;
+    const gchar *local_codeset;
     GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->priv->textview));
     GtkTextIter start, end;
     MudParseBase *base;
+    gsize bytes_read, bytes_written;
+    GError *error = NULL;
+    MudProfile *profile;
 
     if ((event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) &&
             (event->state & gtk_accelerator_get_default_mod_mask()) == 0)
     {
         gtk_text_buffer_get_bounds(buffer, &start, &end);
 
-        text = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
-
-        if (g_str_equal(text, ""))
-            text = g_strdup(" ");
-
         if (window->priv->current_view)
         {
+            text = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+
+            if (g_str_equal(text, ""))
+                text = g_strdup(" ");
+
+            buf = text;
+
+            g_get_charset(&local_codeset);
+            profile = mud_connection_view_get_current_profile(
+                    MUD_CONNECTION_VIEW(window->priv->current_view));
+
+            text = g_convert(text, -1,
+                    profile->preferences->Encoding,
+                    local_codeset, 
+                    &bytes_read, &bytes_written, &error);
+
+            g_free(buf);
+
             base = mud_connection_view_get_parsebase(MUD_CONNECTION_VIEW(window->priv->current_view));
+
             if(mud_parse_base_do_aliases(base, text))
                 mud_connection_view_send(MUD_CONNECTION_VIEW(window->priv->current_view), text);
+
+            g_free(text);
         }
 
         if (gconf_client_get_bool(window->priv->gconf_client,
@@ -301,8 +321,6 @@
         else
             gtk_text_buffer_select_range(buffer, &start, &end);
 
-        g_free(text);
-
         return TRUE;
     }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]