aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-12-07 17:25:53 +0100
committerMattias Andrée <maandree@operamail.com>2014-12-07 17:28:22 +0100
commit84a98ab7c282d0c58c6424f5755f8bc901ae4de8 (patch)
tree923bead446991f2496a350d570c441518a56217a
parentmds-kbdc: compile-layout: support " in < > (diff)
downloadmds-84a98ab7c282d0c58c6424f5755f8bc901ae4de8.tar.gz
mds-84a98ab7c282d0c58c6424f5755f8bc901ae4de8.tar.bz2
mds-84a98ab7c282d0c58c6424f5755f8bc901ae4de8.tar.xz
mds-kbdc: compile-keyboard: ,:s in < > are not special when inside quotes
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rw-r--r--src/mds-kbdc/compile-layout.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mds-kbdc/compile-layout.c b/src/mds-kbdc/compile-layout.c
index ea10b05..3f96aba 100644
--- a/src/mds-kbdc/compile-layout.c
+++ b/src/mds-kbdc/compile-layout.c
@@ -943,6 +943,7 @@ static char32_t* parse_keys(mds_kbdc_tree_t* restrict tree, const char* restrict
buf[buf_ptr++] = (char)(((1ULL << 31) ^ VAL##ULL) & 255); \
} \
while (0)
+ /* Actually, UTF-8 does not suppot beyond plane 16 nowadays, but we ignore that. */
mds_kbdc_tree_t* old_last_value_statement = last_value_statement;
const char* restrict raw_ = raw++;
@@ -953,7 +954,7 @@ static char32_t* parse_keys(mds_kbdc_tree_t* restrict tree, const char* restrict
char* restrict old_buf = NULL;
size_t rc_ptr = 0, rc_size = 0, n;
size_t buf_ptr = 0, buf_size = 0;
- int escape = 0;
+ int escape = 0, quote = 0;
char c;
int saved_errno;
@@ -979,8 +980,15 @@ static char32_t* parse_keys(mds_kbdc_tree_t* restrict tree, const char* restrict
STORE;
escape = 1;
}
- else if (c == ',') SPECIAL(1);
- else if (c == '"') SPECIAL(2);
+ else if ((c == ',') && !quote)
+ /* Sequence in key-combination. */
+ SPECIAL(1);
+ else if (c == '"')
+ {
+ /* String in key-combination. */
+ quote ^= 1;
+ SPECIAL(2);
+ }
else
{
/* Buffer UTF-8 text for convertion to UTF-32. */