return NULL;
}
-struct xkb_keymap *
-xkb_map_new_from_kccgst(struct xkb_context *ctx,
- const struct xkb_component_names *kccgst,
- enum xkb_map_compile_flags flags)
-{
- XkbFile *file;
- struct xkb_keymap *keymap;
-
- if (!kccgst) {
- log_err(ctx, "No components specified\n");
- return NULL;
- }
-
- if (ISEMPTY(kccgst->keycodes)) {
- log_err(ctx, "Keycodes required to generate XKB keymap\n");
- return NULL;
- }
-
- if (ISEMPTY(kccgst->compat)) {
- log_err(ctx, "Compat map required to generate XKB keymap\n");
- return NULL;
- }
-
- if (ISEMPTY(kccgst->types)) {
- log_err(ctx, "Types required to generate XKB keymap\n");
- return NULL;
- }
-
- if (ISEMPTY(kccgst->symbols)) {
- log_err(ctx, "Symbols required to generate XKB keymap\n");
- return NULL;
- }
-
- file = keymap_file_from_components(ctx, kccgst);
- if (!file) {
- log_err(ctx, "Failed to generate parsed XKB file from components\n");
- return NULL;
- }
-
- keymap = compile_keymap(ctx, file);
- FreeXKBFile(file);
- return keymap;
-}
-
XKB_EXPORT struct xkb_keymap *
xkb_map_new_from_names(struct xkb_context *ctx,
const struct xkb_rule_names *rmlvo_in,
enum xkb_map_compile_flags flags)
{
struct xkb_component_names *kkctgs;
- struct xkb_keymap *keymap;
+ struct xkb_keymap *keymap = NULL;
struct xkb_rule_names rmlvo = *rmlvo_in;
+ XkbFile *file;
if (ISEMPTY(rmlvo.rules))
rmlvo.rules = DEFAULT_XKB_RULES;
return NULL;
}
- keymap = xkb_map_new_from_kccgst(ctx, kkctgs, 0);
+ file = keymap_file_from_components(ctx, kkctgs);
+ if (!file) {
+ log_err(ctx, "Failed to generate parsed XKB file from components\n");
+ goto out;
+ }
+
+ keymap = compile_keymap(ctx, file);
+ FreeXKBFile(file);
+out:
free(kkctgs->keycodes);
free(kkctgs->types);
free(kkctgs->compat);
+++ /dev/null
-/*
- * Copyright 2009 Dan Nicholson
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the names of the authors or their
- * institutions shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization from the authors.
- */
-
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "xkb-priv.h"
-#include "xkbcommon/xkbcommon.h"
-#include "test.h"
-
-static int
-test_names(struct xkb_context *context, const char *keycodes,
- const char *types, const char *compat, const char *symbols)
-{
- int ret = 1;
- struct xkb_keymap *keymap;
- struct xkb_component_names kccgst = {
- .keycodes = strdup(keycodes),
- .types = strdup(types),
- .compat = strdup(compat),
- .symbols = strdup(symbols),
- };
-
- fprintf(stderr, "\nCompiling %s %s %s %s\n", kccgst.keycodes, kccgst.types,
- kccgst.compat, kccgst.symbols);
-
- keymap = xkb_map_new_from_kccgst(context, &kccgst, 0);
- if (!keymap) {
- ret = 0;
- goto err_context;
- }
-
- xkb_map_unref(keymap);
-err_context:
- free(kccgst.keycodes);
- free(kccgst.types);
- free(kccgst.compat);
- free(kccgst.symbols);
- return ret;
-}
-
-int
-main(void)
-{
- struct xkb_context *ctx = test_get_context();
-
- assert(ctx);
-
- assert(test_names(ctx, "evdev+aliases(qwertz)", "complete", "complete", "pc+de"));
- assert(test_names(ctx, "evdev+aliases(qwerty)", "complete", "complete", "pc+us"));
- assert(test_names(ctx, "evdev+aliases(qwertz)", "complete", "complete",
- "pc+de+level3(ralt_switch_for_alts_toggle)+group(alts_toggle)"));
-
- assert(!test_names(ctx, "", "", "", ""));
- assert(!test_names(ctx, "evdev+aliases(qwerty)", "", "", ""));
- assert(!test_names(ctx, "evdev+aliases(qwertz)", "", "", "pc+de"));
- assert(!test_names(ctx, "evdev+aliases(qwertz)", "complete", "", "pc+de"));
- assert(!test_names(ctx, "evdev+aliases(qwertz)", "", "complete", "pc+de"));
- assert(!test_names(ctx, "evdev+aliases(qwertz)", "complete", "complete", ""));
- assert(!test_names(ctx, "badnames", "complete", "pc+us", "pc(pc101)"));
-
- xkb_context_unref(ctx);
-
- return 0;
-}