mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
imcontext: Fix a regression in Compose file parsing
We accidentally dropped the handing of # comments. Bring it back. Test included. Fixes: #3664
This commit is contained in:
parent
5d6792137d
commit
f15aa2f3e5
@ -77,28 +77,40 @@ parse_compose_value (GtkComposeData *compose_data,
|
||||
const char *val,
|
||||
const char *line)
|
||||
{
|
||||
char *word;
|
||||
const char *p;
|
||||
gsize len;
|
||||
GString *value;
|
||||
gunichar ch;
|
||||
char *endp;
|
||||
|
||||
len = strlen (val);
|
||||
if (val[0] != '"' || val[len - 1] != '"')
|
||||
if (val[0] != '"')
|
||||
{
|
||||
g_warning ("Need to double-quote the value: %s: %s", val, line);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
word = g_strndup (val + 1, len - 2);
|
||||
|
||||
value = g_string_new ("");
|
||||
|
||||
p = word;
|
||||
p = val + 1;
|
||||
while (*p)
|
||||
{
|
||||
if (*p == '\\')
|
||||
if (*p == '\0')
|
||||
{
|
||||
g_warning ("Missing closing '\"': %s: %s", val, line);
|
||||
goto fail;
|
||||
}
|
||||
else if (*p == '\"')
|
||||
{
|
||||
p++;
|
||||
while (*p && g_ascii_isspace (*p))
|
||||
p++;
|
||||
if (*p != '\0' && *p != '#')
|
||||
{
|
||||
g_warning ("Garbage after closing '\"': %s: %s", val, line);
|
||||
goto fail;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (*p == '\\')
|
||||
{
|
||||
if (p[1] == '"')
|
||||
{
|
||||
@ -148,8 +160,6 @@ parse_compose_value (GtkComposeData *compose_data,
|
||||
|
||||
compose_data->value = g_string_free (value, FALSE);
|
||||
|
||||
g_free (word);
|
||||
|
||||
return TRUE;
|
||||
|
||||
fail:
|
||||
|
4
testsuite/gtk/compose/comments
Normal file
4
testsuite/gtk/compose/comments
Normal file
@ -0,0 +1,4 @@
|
||||
<Multi_key> <a> : "a" # just an a
|
||||
<Multi_key> <b> : "#" # not an a
|
||||
# this line is ignored
|
||||
<Multi_key> <c> : "a" # wild and wilder: "@!$#
|
5
testsuite/gtk/compose/comments.expected
Normal file
5
testsuite/gtk/compose/comments.expected
Normal file
@ -0,0 +1,5 @@
|
||||
# n_seqs: 3
|
||||
# max_seq_len: 2
|
||||
<Uff20> <U61> : "a" # U61
|
||||
<Uff20> <U62> : "#" # U23
|
||||
<Uff20> <U63> : "a" # U61
|
Loading…
Reference in New Issue
Block a user