composetable: Accept short compose sequences

Followup to 8931169e00. That commit did
not do enough work to actually accept sequences
of lenth 1, as pointed by Mike Fabian.
This commit is contained in:
Matthias Clasen
2023-08-28 16:38:47 -04:00
parent f495f9cf7d
commit 8957f9f5a8
2 changed files with 23 additions and 5 deletions

View File

@@ -1331,11 +1331,28 @@ gtk_compose_table_check (const GtkComposeTable *table,
if (!seq_index)
return FALSE;
if (n_compose == 1)
return TRUE;
match = FALSE;
if (n_compose == 1)
{
if (seq_index[2] - seq_index[1] > 0)
{
seq = table->data + seq_index[1];
value = seq[0];
if ((value & (1 << 15)) != 0)
g_string_append (output, &table->char_data[value & ~(1 << 15)]);
else
g_string_append_unichar (output, value);
if (compose_match)
*compose_match = TRUE;
}
return TRUE;
}
for (i = n_compose - 1; i < table->max_seq_len; i++)
{
len = i + 1;

View File

@@ -30,12 +30,13 @@ typedef struct _GtkComposeTableCompact GtkComposeTableCompact;
* The first part of the data contains rows of length max_seq_len + 1,
* where the first element is the item of the sequence, and the
* following elements are offsets to the data for sequences that
* start with the first item of length 2, ..., max_seq_len.
* start with the first item of length 1, ..., max_seq_len.
*
* The second part of the data contains the rest of the sequence
* data. It does not have a fixed stride. For each sequence, we
* put seq[2], ..., seq[len - 1], followed by the encoded value
* for this sequence.
* for this sequence. In particular for a sequence of length 1,
* the offset points directly to the value.
*
* The values are encoded as follows:
*