diff options
Diffstat (limited to 'src/mds-kbdc')
-rw-r--r-- | src/mds-kbdc/compile-layout.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/mds-kbdc/compile-layout.c b/src/mds-kbdc/compile-layout.c index 8e005c0..1e537d5 100644 --- a/src/mds-kbdc/compile-layout.c +++ b/src/mds-kbdc/compile-layout.c @@ -414,7 +414,7 @@ static char32_t* parse_function_call(mds_kbdc_tree_t* restrict tree, const char* int r, saved_errno = 0; /* Find the opening bracket associated with the function call and validate the escape. */ - for (; (c = *bracket); bracket++) + for (; c = *bracket, 1; bracket++) if ((c == '_') || R('0', '9') || R('a', 'z') || R('A', 'Z')); else if (c == '(') break; @@ -422,7 +422,7 @@ static char32_t* parse_function_call(mds_kbdc_tree_t* restrict tree, const char* { *end = bracket; if (tree->processed != PROCESS_LEVEL) - NEW_ERROR(tree, ERROR, "invalid escape");/* TODO test */ + NEW_ERROR(tree, ERROR, "invalid escape"); goto error; } @@ -665,7 +665,7 @@ static char32_t* parse_escape(mds_kbdc_tree_t* restrict tree, const char* restri /* Function call. */ *escape = 100; else - RETURN_ERROR(tree, ERROR, "invalid escape");/* TODO test */ + RETURN_ERROR(tree, ERROR, "invalid escape"); /* Read escape. */ @@ -683,8 +683,10 @@ static char32_t* parse_escape(mds_kbdc_tree_t* restrict tree, const char* restri else if (CR(16, 'A', 'F')) numbuf = 16 * numbuf + (c & 15) + 9; else if (CR(10, '0', '9')) numbuf = 10 * numbuf + (c & 15); else break; + if (c == '.') + raw++; if (have == 0) - RETURN_ERROR(tree, ERROR, "invalid escape");/* TODO test */ + RETURN_ERROR(tree, ERROR, "invalid escape"); /* Evaluate escape. */ @@ -794,7 +796,7 @@ static char32_t* parse_quoted_string(mds_kbdc_tree_t* restrict tree, const char* /* Close or open quote, of it got closed, convert the buffered UTF-8 text to UTF-32. */ if (quote ^= 1) continue; if ((quote == 1) && (raw != raw_ + 1)) - CHAR_ERROR(tree, WARNING, "strings should either be unquoted or unclosed in one large quoted");/* TODO test */ + CHAR_ERROR(tree, WARNING, "strings should either be unquoted or unclosed in one large quoted"); STORE; } else if (c == '\\') @@ -807,9 +809,9 @@ static char32_t* parse_quoted_string(mds_kbdc_tree_t* restrict tree, const char* { /* Only escapes may be used without quotes, if the string contains quotes. */ if (*raw_ == '"') - CHAR_ERROR(tree, ERROR, "only escapes may be outside quotes in quoted strings");/* TODO test */ + CHAR_ERROR(tree, ERROR, "only escapes may be outside quotes in quoted strings"); else - CHAR_ERROR(tree, ERROR, "mixing numericals and escapes is not allowed");/* TODO test */ + CHAR_ERROR(tree, ERROR, "mixing numericals and escapes is not allowed"); tree->processed = PROCESS_LEVEL; } else @@ -822,7 +824,7 @@ static char32_t* parse_quoted_string(mds_kbdc_tree_t* restrict tree, const char* /* Check that no escape is incomplete. */ if (escape && (tree->processed != PROCESS_LEVEL)) { - NEW_ERROR(tree, ERROR, "incomplete escape");/* TODO test */ + NEW_ERROR(tree, ERROR, "incomplete escape"); error->start = escoff; error->end = lineoff + strlen(raw_); tree->processed = PROCESS_LEVEL; @@ -831,7 +833,7 @@ static char32_t* parse_quoted_string(mds_kbdc_tree_t* restrict tree, const char* /* Check that the quote is complete. */ if (quote && (tree->processed != PROCESS_LEVEL)) { - NEW_ERROR(tree, ERROR, "quote is not closed");/* TODO test */ + NEW_ERROR(tree, ERROR, "quote is not closed"); error->start = lineoff; error->end = lineoff + strlen(raw_); tree->processed = PROCESS_LEVEL; @@ -887,9 +889,9 @@ static char32_t* parse_unquoted_string(mds_kbdc_tree_t* restrict tree, const cha while ((c = *raw++)) if (R('0', '9')) buf = 10 * buf + (c & 15); - else if (c == '\\') CHAR_ERROR(tree, ERROR, "mixing numericals and escapes is not allowed");/* TODO test */ - else if (c == '"') CHAR_ERROR(tree, ERROR, "mixing numericals and quotes is not allowed");/* TODO test */ - else CHAR_ERROR(tree, ERROR, "stray ‘%c’", c);/* TODO test */ + else if (c == '\\') CHAR_ERROR(tree, ERROR, "mixing numericals and escapes is not allowed"); + else if (c == '"') CHAR_ERROR(tree, ERROR, "mixing numericals and quotes is not allowed"); + else CHAR_ERROR(tree, ERROR, "stray ‘%c’", c); done: fail_if (rc = malloc(2 * sizeof(char32_t)), rc == NULL); @@ -970,7 +972,7 @@ static char32_t* parse_keys(mds_kbdc_tree_t* restrict tree, const char* restrict int saved_errno; /* Parse the string. */ - while (c = *raw++, *raw) + while (c = *raw++, c && *raw) if (escape && strchr("()[]{}<>\"\\,", c)) { /* Buffer UTF-8 text for convertion to UTF-32. */ @@ -1014,7 +1016,7 @@ static char32_t* parse_keys(mds_kbdc_tree_t* restrict tree, const char* restrict /* Check that no escape is incomplete. */ if (escape && (tree->processed != PROCESS_LEVEL)) { - NEW_ERROR(tree, ERROR, "incomplete escape");/* TODO test */ + NEW_ERROR(tree, ERROR, "incomplete escape"); error->start = lineoff + (size_t)(strrchr(raw_, '\\') - raw_); error->end = lineoff + strlen(raw_); tree->processed = PROCESS_LEVEL; @@ -1023,7 +1025,7 @@ static char32_t* parse_keys(mds_kbdc_tree_t* restrict tree, const char* restrict /* Check that key-combination is complete. */ if ((c != '>') && (tree->processed != PROCESS_LEVEL)) { - NEW_ERROR(tree, ERROR, "key-combination is not closed");/* TODO test */ + NEW_ERROR(tree, ERROR, "key-combination is not closed"); error->start = lineoff; error->end = lineoff + strlen(raw_); tree->processed = PROCESS_LEVEL; |