1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Remaining parser function unicode compatible

This commit is contained in:
James Booth 2013-07-14 01:00:11 +01:00
parent e7478d8cb8
commit 7f82dc42f5

View File

@ -297,29 +297,23 @@ parse_args_with_freetext(const char * const inp, int min, int max)
int
count_tokens(char *string)
{
int num_tokens = 0;
// if no quotes, use glib
if (g_strrstr(string, "\"") == NULL) {
gchar **tokens = g_strsplit(string, " ", 0);
num_tokens = g_strv_length(tokens);
g_strfreev(tokens);
// else count tokens including quoted
} else {
int length = strlen(string);
int i = 0;
int length = g_utf8_strlen(string, -1);
gboolean in_quotes = FALSE;
int num_tokens = 0;
int i = 0;
// include first token
num_tokens++;
for (i = 0; i < length; i++) {
if (string[i] == ' ') {
gchar *curr_ch = g_utf8_offset_to_pointer(string, i);
gunichar curr_uni = g_utf8_get_char(curr_ch);
if (curr_uni == ' ') {
if (!in_quotes) {
num_tokens++;
}
} else if (string[i] == '"') {
} else if (curr_uni == '"') {
if (in_quotes) {
in_quotes = FALSE;
} else {
@ -327,7 +321,6 @@ count_tokens(char *string)
}
}
}
}
return num_tokens;
}
@ -335,25 +328,31 @@ count_tokens(char *string)
char *
get_start(char *string, int tokens)
{
GString *result = g_string_new("");
int length = g_utf8_strlen(string, -1);
gboolean in_quotes = FALSE;
char *result_str = NULL;
int num_tokens = 0;
int length = strlen(string);
int i = 0;
gboolean in_quotes = FALSE;
GString *result = g_string_new("");
// include first token
num_tokens++;
for (i = 0; i < length; i++) {
gchar *curr_ch = g_utf8_offset_to_pointer(string, i);
gunichar curr_uni = g_utf8_get_char(curr_ch);
if (num_tokens < tokens) {
g_string_append_c(result, string[i]);
gchar *uni_char = malloc(7);
int len = g_unichar_to_utf8(curr_uni, uni_char);
uni_char[len] = '\0';
g_string_append(result, uni_char);
}
if (string[i] == ' ') {
if (curr_uni == ' ') {
if (!in_quotes) {
num_tokens++;
}
} else if (string[i] == '"') {
} else if (curr_uni == '"') {
if (in_quotes) {
in_quotes = FALSE;
} else {