HandleIncludeCompatMap(IncludeStmt *stmt, struct xkb_keymap *keymap,
CompatInfo *info)
{
- enum merge_mode newMerge;
+ enum merge_mode merge = MERGE_DEFAULT;
XkbFile *rtrn;
- CompatInfo included;
+ CompatInfo included, next_incl;
- if (!ProcessIncludeFile(keymap->ctx, stmt, FILE_TYPE_COMPAT, &rtrn,
- &newMerge)) {
- info->errorCount += 10;
- return false;
- }
-
- InitCompatInfo(&included, keymap, rtrn->id);
- included.dflt = info->dflt;
- included.dflt.merge = newMerge;
- included.ledDflt.merge = newMerge;
- included.act = info->act;
- HandleCompatMapFile(rtrn, keymap, MERGE_OVERRIDE, &included);
+ InitCompatInfo(&included, keymap, info->file_id);
if (stmt->stmt) {
free(included.name);
included.name = stmt->stmt;
stmt->stmt = NULL;
}
- if (info->act)
- included.act = NULL;
- FreeXKBFile(rtrn);
-
- if (stmt->next && included.errorCount < 1) {
- IncludeStmt *next;
- unsigned op;
- CompatInfo next_incl;
-
- for (next = stmt->next; next; next = next->next) {
- if (!ProcessIncludeFile(keymap->ctx, next, FILE_TYPE_COMPAT,
- &rtrn, &op)) {
- info->errorCount += 10;
- return false;
- }
- InitCompatInfo(&next_incl, keymap, rtrn->id);
- next_incl.file_id = rtrn->id;
- next_incl.dflt = info->dflt;
- next_incl.dflt.file_id = rtrn->id;
- next_incl.dflt.merge = op;
- next_incl.ledDflt.file_id = rtrn->id;
- next_incl.ledDflt.merge = op;
- next_incl.act = info->act;
- HandleCompatMapFile(rtrn, keymap, MERGE_OVERRIDE, &next_incl);
- MergeIncludedCompatMaps(&included, &next_incl, op);
- if (info->act != NULL)
- next_incl.act = NULL;
- ClearCompatInfo(&next_incl, keymap);
- FreeXKBFile(rtrn);
+ for (; stmt; stmt = stmt->next) {
+ if (!ProcessIncludeFile(keymap->ctx, stmt, FILE_TYPE_COMPAT,
+ &rtrn, &merge)) {
+ info->errorCount += 10;
+ ClearCompatInfo(&included, keymap);
+ return false;
}
+
+ InitCompatInfo(&next_incl, keymap, rtrn->id);
+ next_incl.file_id = rtrn->id;
+ next_incl.dflt = info->dflt;
+ next_incl.dflt.file_id = rtrn->id;
+ next_incl.dflt.merge = merge;
+ next_incl.ledDflt.file_id = rtrn->id;
+ next_incl.ledDflt.merge = merge;
+ next_incl.act = info->act;
+
+ HandleCompatMapFile(rtrn, keymap, MERGE_OVERRIDE, &next_incl);
+
+ MergeIncludedCompatMaps(&included, &next_incl, merge);
+ if (info->act)
+ next_incl.act = NULL;
+
+ ClearCompatInfo(&next_incl, keymap);
+ FreeXKBFile(rtrn);
}
- MergeIncludedCompatMaps(info, &included, newMerge);
+ MergeIncludedCompatMaps(info, &included, merge);
ClearCompatInfo(&included, keymap);
return (info->errorCount == 0);
HandleIncludeKeycodes(IncludeStmt *stmt, struct xkb_keymap *keymap,
KeyNamesInfo *info)
{
- enum merge_mode newMerge;
+ enum merge_mode merge = MERGE_DEFAULT;
XkbFile *rtrn;
- KeyNamesInfo included;
+ KeyNamesInfo included, next_incl;
/* XXX: What's that? */
if (stmt->file && strcmp(stmt->file, "computed") == 0) {
return (info->errorCount == 0);
}
- if (!ProcessIncludeFile(keymap->ctx, stmt, FILE_TYPE_KEYCODES, &rtrn,
- &newMerge)) {
- info->errorCount += 10;
- return false;
- }
-
- InitKeyNamesInfo(&included, rtrn->id);
- HandleKeycodesFile(rtrn, keymap, MERGE_OVERRIDE, &included);
+ InitKeyNamesInfo(&included, info->file_id);
if (stmt->stmt) {
free(included.name);
included.name = stmt->stmt;
stmt->stmt = NULL;
}
- FreeXKBFile(rtrn);
- if (stmt->next && included.errorCount < 1) {
- IncludeStmt *next;
- unsigned op;
- KeyNamesInfo next_incl;
+ for (; stmt; stmt = stmt->next) {
+ if (!ProcessIncludeFile(keymap->ctx, stmt, FILE_TYPE_KEYCODES,
+ &rtrn, &merge)) {
+ info->errorCount += 10;
+ ClearKeyNamesInfo(&included);
+ return false;
+ }
- for (next = stmt->next; next != NULL; next = next->next) {
- if (!ProcessIncludeFile(keymap->ctx, next, FILE_TYPE_KEYCODES,
- &rtrn, &op)) {
- info->errorCount += 10;
- ClearKeyNamesInfo(&included);
- return false;
- }
+ InitKeyNamesInfo(&next_incl, rtrn->id);
- InitKeyNamesInfo(&next_incl, rtrn->id);
- HandleKeycodesFile(rtrn, keymap, MERGE_OVERRIDE, &next_incl);
- MergeIncludedKeycodes(&included, keymap, &next_incl, op);
- ClearKeyNamesInfo(&next_incl);
- FreeXKBFile(rtrn);
- }
+ HandleKeycodesFile(rtrn, keymap, MERGE_OVERRIDE, &next_incl);
+
+ MergeIncludedKeycodes(&included, keymap, &next_incl, merge);
+
+ ClearKeyNamesInfo(&next_incl);
+ FreeXKBFile(rtrn);
}
- MergeIncludedKeycodes(info, keymap, &included, newMerge);
+ MergeIncludedKeycodes(info, keymap, &included, merge);
ClearKeyNamesInfo(&included);
return (info->errorCount == 0);
HandleIncludeKeyTypes(IncludeStmt *stmt, struct xkb_keymap *keymap,
KeyTypesInfo *info)
{
- enum merge_mode newMerge;
+ enum merge_mode merge = MERGE_DEFAULT;
XkbFile *rtrn;
- KeyTypesInfo included;
+ KeyTypesInfo included, next_incl;
- if (!ProcessIncludeFile(keymap->ctx, stmt, FILE_TYPE_TYPES, &rtrn,
- &newMerge)) {
- info->errorCount += 10;
- return false;
- }
-
- InitKeyTypesInfo(&included, keymap, info, rtrn->id);
- included.dflt.defs.merge = newMerge;
-
- HandleKeyTypesFile(rtrn, keymap, newMerge, &included);
+ InitKeyTypesInfo(&included, keymap, info, info->file_id);
if (stmt->stmt) {
free(included.name);
included.name = stmt->stmt;
stmt->stmt = NULL;
}
- FreeXKBFile(rtrn);
-
- if ((stmt->next != NULL) && (included.errorCount < 1)) {
- IncludeStmt *next;
- unsigned op;
- KeyTypesInfo next_incl;
-
- for (next = stmt->next; next; next = next->next) {
- if (!ProcessIncludeFile(keymap->ctx, next, FILE_TYPE_TYPES,
- &rtrn, &op)) {
- info->errorCount += 10;
- FreeKeyTypesInfo(&included);
- return false;
- }
- InitKeyTypesInfo(&next_incl, keymap, &included, rtrn->id);
- next_incl.dflt.defs.merge = op;
- HandleKeyTypesFile(rtrn, keymap, op, &next_incl);
- MergeIncludedKeyTypes(&included, &next_incl, op, keymap);
- FreeKeyTypesInfo(&next_incl);
- FreeXKBFile(rtrn);
+ for (; stmt; stmt = stmt->next) {
+ if (!ProcessIncludeFile(keymap->ctx, stmt, FILE_TYPE_TYPES,
+ &rtrn, &merge)) {
+ info->errorCount += 10;
+ FreeKeyTypesInfo(&included);
+ return false;
}
+
+ InitKeyTypesInfo(&next_incl, keymap, &included, rtrn->id);
+ next_incl.dflt.defs.merge = merge;
+
+ HandleKeyTypesFile(rtrn, keymap, merge, &next_incl);
+
+ MergeIncludedKeyTypes(&included, &next_incl, merge, keymap);
+
+ FreeKeyTypesInfo(&next_incl);
+ FreeXKBFile(rtrn);
}
- MergeIncludedKeyTypes(info, &included, newMerge, keymap);
+ MergeIncludedKeyTypes(info, &included, merge, keymap);
FreeKeyTypesInfo(&included);
return (info->errorCount == 0);
HandleIncludeSymbols(IncludeStmt *stmt, struct xkb_keymap *keymap,
SymbolsInfo *info)
{
- enum merge_mode newMerge;
+ enum merge_mode merge = MERGE_DEFAULT;
XkbFile *rtrn;
- SymbolsInfo included;
+ SymbolsInfo included, next_incl;
- if (!ProcessIncludeFile(keymap->ctx, stmt, FILE_TYPE_SYMBOLS, &rtrn,
- &newMerge)) {
- info->errorCount += 10;
- return false;
- }
-
- InitSymbolsInfo(&included, keymap, rtrn->id);
- included.merge = included.dflt.merge = MERGE_OVERRIDE;
- if (stmt->modifier)
- included.explicit_group = atoi(stmt->modifier) - 1;
- else
- included.explicit_group = info->explicit_group;
- HandleSymbolsFile(rtrn, keymap, MERGE_OVERRIDE, &included);
+ InitSymbolsInfo(&included, keymap, info->file_id);
if (stmt->stmt) {
free(included.name);
included.name = stmt->stmt;
stmt->stmt = NULL;
}
- FreeXKBFile(rtrn);
- if (stmt->next && included.errorCount < 1) {
- IncludeStmt *next;
- unsigned op;
- SymbolsInfo next_incl;
+ for (; stmt; stmt = stmt->next) {
+ if (!ProcessIncludeFile(keymap->ctx, stmt, FILE_TYPE_SYMBOLS,
+ &rtrn, &merge)) {
+ info->errorCount += 10;
+ FreeSymbolsInfo(&included);
+ return false;
+ }
- for (next = stmt->next; next; next = next->next) {
- if (!ProcessIncludeFile(keymap->ctx, next, FILE_TYPE_SYMBOLS,
- &rtrn, &op)) {
- info->errorCount += 10;
- FreeSymbolsInfo(&included);
- return false;
- }
+ InitSymbolsInfo(&next_incl, keymap, rtrn->id);
+ next_incl.merge = next_incl.dflt.merge = MERGE_OVERRIDE;
+ if (stmt->modifier)
+ next_incl.explicit_group = atoi(stmt->modifier) - 1;
+ else
+ next_incl.explicit_group = info->explicit_group;
- InitSymbolsInfo(&next_incl, keymap, rtrn->id);
- next_incl.merge = next_incl.dflt.merge = MERGE_OVERRIDE;
- if (next->modifier)
- next_incl.explicit_group = atoi(next->modifier) - 1;
- else
- next_incl.explicit_group = info->explicit_group;
- HandleSymbolsFile(rtrn, keymap, MERGE_OVERRIDE, &next_incl);
- MergeIncludedSymbols(&included, &next_incl, op, keymap);
- FreeSymbolsInfo(&next_incl);
- FreeXKBFile(rtrn);
- }
- }
- else if (stmt->next) {
- info->errorCount += included.errorCount;
+ HandleSymbolsFile(rtrn, keymap, MERGE_OVERRIDE, &next_incl);
+
+ MergeIncludedSymbols(&included, &next_incl, merge, keymap);
+
+ FreeSymbolsInfo(&next_incl);
+ FreeXKBFile(rtrn);
}
- MergeIncludedSymbols(info, &included, newMerge, keymap);
+ MergeIncludedSymbols(info, &included, merge, keymap);
FreeSymbolsInfo(&included);
return (info->errorCount == 0);