gnome-mud r742 - in trunk: . src
- From: lharris svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-mud r742 - in trunk: . src
- Date: Wed, 18 Feb 2009 02:58:33 +0000 (UTC)
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]