From 1d6bffc9049525aad4f06d1dc6f6f4896f3ec321 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 12 Sep 2012 23:29:49 +0300 Subject: [PATCH] symbols: add CopySymbolsToKeymap Like in the other sections. Signed-off-by: Ran Benita --- src/xkbcomp/symbols.c | 84 +++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/xkbcomp/symbols.c b/src/xkbcomp/symbols.c index ff089e7..9cdd911 100644 --- a/src/xkbcomp/symbols.c +++ b/src/xkbcomp/symbols.c @@ -1682,23 +1682,52 @@ CopyModMapDef(SymbolsInfo *info, ModMapEntry *entry) return true; } -/** - * Handle the xkb_symbols section of an xkb file. - * - * @param file The parsed xkb_symbols section of the xkb file. - * @param keymap Handle to the keyboard description to store the symbols in. - * @param merge Merge strategy (e.g. MERGE_OVERRIDE). - */ +static bool +CopySymbolsToKeymap(struct xkb_keymap *keymap, SymbolsInfo *info) +{ + KeyInfo *keyi; + ModMapEntry *mm; + xkb_group_index_t i; + struct xkb_key *key; + + keymap->symbols_section_name = strdup_safe(info->name); + + for (i = 0; i < XKB_NUM_GROUPS; i++) + if (info->groupNames[i] != XKB_ATOM_NONE) + keymap->group_names[i] = info->groupNames[i]; + + darray_foreach(keyi, info->keys) { + PrepareKeyDef(keyi); + if (!CopySymbolsDef(info, keyi)) + info->errorCount++; + } + + if (xkb_get_log_verbosity(keymap->ctx) > 3) { + xkb_foreach_key(key, keymap) { + if (key->name[0] == '\0') + continue; + + if (key->num_groups < 1) + log_info(keymap->ctx, + "No symbols defined for %s\n", + KeyNameText(key->name)); + } + } + + darray_foreach(mm, info->modMaps) + if (!CopyModMapDef(info, mm)) + info->errorCount++; + + /* XXX: If we don't ignore errorCount, things break. */ + return true; +} + bool CompileSymbols(XkbFile *file, struct xkb_keymap *keymap, enum merge_mode merge) { - xkb_group_index_t i; - struct xkb_key *key; SymbolsInfo info; ActionsInfo *actions; - KeyInfo *keyi; - ModMapEntry *mm; actions = NewActionsInfo(); if (!actions) @@ -1715,37 +1744,8 @@ CompileSymbols(XkbFile *file, struct xkb_keymap *keymap, if (info.errorCount != 0) goto err_info; - if (info.name) - keymap->symbols_section_name = strdup(info.name); - - for (i = 0; i < XKB_NUM_GROUPS; i++) - if (info.groupNames[i] != XKB_ATOM_NONE) - keymap->group_names[i] = info.groupNames[i]; - - /* sanitize keys */ - darray_foreach(keyi, info.keys) - PrepareKeyDef(keyi); - - /* copy! */ - darray_foreach(keyi, info.keys) - if (!CopySymbolsDef(&info, keyi)) - info.errorCount++; - - if (xkb_get_log_verbosity(keymap->ctx) > 3) { - xkb_foreach_key(key, keymap) { - if (key->name[0] == '\0') - continue; - - if (key->num_groups < 1) - log_info(info.keymap->ctx, - "No symbols defined for %s\n", - KeyNameText(key->name)); - } - } - - darray_foreach(mm, info.modMaps) - if (!CopyModMapDef(&info, mm)) - info.errorCount++; + if (!CopySymbolsToKeymap(keymap, &info)) + goto err_info; ClearSymbolsInfo(&info); FreeActionsInfo(actions);