summaryrefslogtreecommitdiff
path: root/src/xkbcomp/rules.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/xkbcomp/rules.c')
-rw-r--r--src/xkbcomp/rules.c61
1 files changed, 27 insertions, 34 deletions
diff --git a/src/xkbcomp/rules.c b/src/xkbcomp/rules.c
index a31aad7..58e7c8a 100644
--- a/src/xkbcomp/rules.c
+++ b/src/xkbcomp/rules.c
@@ -348,7 +348,6 @@ static darray_sval
split_comma_separated_string(const char *s)
{
darray_sval arr = darray_new();
- struct sval val = { NULL, 0 };
/*
* Make sure the array returned by this function always includes at
@@ -356,12 +355,13 @@ split_comma_separated_string(const char *s)
*/
if (!s) {
+ struct sval val = { NULL, 0 };
darray_append(arr, val);
return arr;
}
while (true) {
- val.start = s; val.len = 0;
+ struct sval val = { s, 0 };
while (*s != '\0' && *s != ',') { s++; val.len++; }
darray_append(arr, strip_spaces(val));
if (*s == '\0') break;
@@ -431,10 +431,9 @@ matcher_group_add_element(struct matcher *m, struct sval element)
static void
matcher_mapping_start_new(struct matcher *m)
{
- unsigned int i;
- for (i = 0; i < _MLVO_NUM_ENTRIES; i++)
+ for (unsigned i = 0; i < _MLVO_NUM_ENTRIES; i++)
m->mapping.mlvo_at_pos[i] = -1;
- for (i = 0; i < _KCCGST_NUM_ENTRIES; i++)
+ for (unsigned i = 0; i < _KCCGST_NUM_ENTRIES; i++)
m->mapping.kccgst_at_pos[i] = -1;
m->mapping.layout_idx = m->mapping.variant_idx = XKB_LAYOUT_INVALID;
m->mapping.num_mlvo = m->mapping.num_kccgst = 0;
@@ -464,8 +463,6 @@ matcher_mapping_set_mlvo(struct matcher *m, struct sval ident)
{
enum rules_mlvo mlvo;
struct sval mlvo_sval;
- xkb_layout_index_t idx;
- int consumed;
for (mlvo = 0; mlvo < _MLVO_NUM_ENTRIES; mlvo++) {
mlvo_sval = rules_mlvo_svals[mlvo];
@@ -495,8 +492,9 @@ matcher_mapping_set_mlvo(struct matcher *m, struct sval ident)
/* If there are leftovers still, it must be an index. */
if (mlvo_sval.len < ident.len) {
- consumed = extract_layout_index(ident.start + mlvo_sval.len,
- ident.len - mlvo_sval.len, &idx);
+ xkb_layout_index_t idx;
+ int consumed = extract_layout_index(ident.start + mlvo_sval.len,
+ ident.len - mlvo_sval.len, &idx);
if ((int) (ident.len - mlvo_sval.len) != consumed) {
matcher_error(m,
"invalid mapping:\" %.*s\" may only be followed by a valid group index; "
@@ -721,14 +719,8 @@ static bool
append_expanded_kccgst_value(struct matcher *m, darray_char *to,
struct sval value)
{
- unsigned int i;
- size_t original_size = darray_size(*to);
+ const size_t original_size = darray_size(*to);
const char *s = value.start;
- xkb_layout_index_t idx;
- int consumed;
- enum rules_mlvo mlv;
- struct sval expanded;
- char pfx, sfx;
/*
* Appending bar to foo -> foo (not an error if this happens)
@@ -746,7 +738,12 @@ append_expanded_kccgst_value(struct matcher *m, darray_char *to,
* Some ugly hand-lexing here, but going through the scanner is more
* trouble than it's worth, and the format is ugly on its own merit.
*/
- for (i = 0; i < value.len; ) {
+ for (unsigned i = 0; i < value.len; ) {
+ enum rules_mlvo mlv;
+ xkb_layout_index_t idx;
+ char pfx, sfx;
+ struct sval expanded;
+
/* Check if that's a start of an expansion. */
if (s[i] != '%') {
/* Just a normal character. */
@@ -777,6 +774,8 @@ append_expanded_kccgst_value(struct matcher *m, darray_char *to,
idx = XKB_LAYOUT_INVALID;
if (i < value.len) {
if (s[i] == '[') {
+ int consumed;
+
if (mlv != MLVO_LAYOUT && mlv != MLVO_VARIANT) {
matcher_error1(m,
"invalid index in %%-expansion; "
@@ -858,37 +857,31 @@ matcher_rule_verify(struct matcher *m)
static void
matcher_rule_apply_if_matches(struct matcher *m)
{
- unsigned int i;
- enum rules_mlvo mlvo;
- enum rules_kccgst kccgst;
- struct sval value, *option;
- enum mlvo_match_type match_type;
- bool matched = false;
- xkb_layout_index_t idx;
-
- for (i = 0; i < m->mapping.num_mlvo; i++) {
- mlvo = m->mapping.mlvo_at_pos[i];
- value = m->rule.mlvo_value_at_pos[i];
- match_type = m->rule.match_type_at_pos[i];
+ for (unsigned i = 0; i < m->mapping.num_mlvo; i++) {
+ enum rules_mlvo mlvo = m->mapping.mlvo_at_pos[i];
+ struct sval value = m->rule.mlvo_value_at_pos[i];
+ enum mlvo_match_type match_type = m->rule.match_type_at_pos[i];
+ bool matched = false;
if (mlvo == MLVO_MODEL) {
matched = match_value(m, value, m->rmlvo.model, match_type);
}
else if (mlvo == MLVO_LAYOUT) {
- idx = m->mapping.layout_idx;
+ xkb_layout_index_t idx = m->mapping.layout_idx;
idx = (idx == XKB_LAYOUT_INVALID ? 0 : idx);
matched = match_value(m, value,
darray_item(m->rmlvo.layouts, idx),
match_type);
}
else if (mlvo == MLVO_VARIANT) {
- idx = m->mapping.layout_idx;
+ xkb_layout_index_t idx = m->mapping.layout_idx;
idx = (idx == XKB_LAYOUT_INVALID ? 0 : idx);
matched = match_value(m, value,
darray_item(m->rmlvo.variants, idx),
match_type);
}
else if (mlvo == MLVO_OPTION) {
+ struct sval *option;
darray_foreach(option, m->rmlvo.options) {
matched = match_value(m, value, *option, match_type);
if (matched)
@@ -900,9 +893,9 @@ matcher_rule_apply_if_matches(struct matcher *m)
return;
}
- for (i = 0; i < m->mapping.num_kccgst; i++) {
- kccgst = m->mapping.kccgst_at_pos[i];
- value = m->rule.kccgst_value_at_pos[i];
+ for (unsigned i = 0; i < m->mapping.num_kccgst; i++) {
+ enum rules_kccgst kccgst = m->mapping.kccgst_at_pos[i];
+ struct sval value = m->rule.kccgst_value_at_pos[i];
append_expanded_kccgst_value(m, &m->kccgst[kccgst], value);
}