From 2c96828f753444ab5b24b95a84d383dbc573d7ff Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Wed, 19 Sep 2012 16:44:15 +0300 Subject: [PATCH] test: add print-compiled-keymap tool This just prints the compiled keymap string for to the given command line arguments. This often useful when developing. Signed-off-by: Ran Benita --- Makefile.am | 4 +- test/.gitignore | 1 + test/print-compiled-keymap.c | 106 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 test/print-compiled-keymap.c diff --git a/Makefile.am b/Makefile.am index b3452e2..8ee8aeb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -135,11 +135,13 @@ test_keyseq_LDADD = $(TESTS_LDADD) test_log_LDADD = $(TESTS_LDADD) test_interactive_LDADD = $(TESTS_LDADD) test_rmlvo_to_kccgst_LDADD = $(TESTS_LDADD) +test_print_compiled_keymap_LDADD = $(TESTS_LDADD) check_PROGRAMS = \ $(TESTS) \ test/interactive \ - test/rmlvo-to-kccgst + test/rmlvo-to-kccgst \ + test/print-compiled-keymap EXTRA_DIST = \ test/data \ diff --git a/test/.gitignore b/test/.gitignore index f6e3133..4d2f4aa 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -11,3 +11,4 @@ keyseq log interactive rmlvo-to-kccgst +print-compiled-keymap diff --git a/test/print-compiled-keymap.c b/test/print-compiled-keymap.c new file mode 100644 index 0000000..34be4d4 --- /dev/null +++ b/test/print-compiled-keymap.c @@ -0,0 +1,106 @@ +/* + * Copyright © 2012 Ran Benita + * + * 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 (including the next + * paragraph) 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 OR COPYRIGHT HOLDERS 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. + */ + +#include + +#include "test.h" + +int +main(int argc, char *argv[]) +{ + int ret = EXIT_FAILURE; + int opt; + struct xkb_context *ctx; + struct xkb_keymap *keymap; + const char *rules = NULL; + const char *model = NULL; + const char *layout = NULL; + const char *variant = NULL; + const char *options = NULL; + const char *keymap_path = NULL; + char *dump; + + while ((opt = getopt(argc, argv, "r:m:l:v:o:k:h")) != -1) { + switch (opt) { + case 'r': + rules = optarg; + break; + case 'm': + model = optarg; + break; + case 'l': + layout = optarg; + break; + case 'v': + variant = optarg; + break; + case 'o': + options = optarg; + break; + case 'k': + keymap_path = optarg; + break; + case 'h': + case '?': + fprintf(stderr, "Usage: %s [-r ] [-m ] " + "[-l ] [-v ] [-o ]\n", + argv[0]); + fprintf(stderr, " or: %s -k \n", + argv[0]); + exit(EXIT_FAILURE); + } + } + + ctx = test_get_context(); + if (!ctx) { + fprintf(stderr, "Couldn't create xkb context\n"); + goto err_out; + } + + if (keymap_path) + keymap = test_compile_file(ctx, keymap_path); + else + keymap = test_compile_rules(ctx, rules, model, layout, variant, + options); + if (!keymap) { + fprintf(stderr, "Couldn't create xkb keymap\n"); + goto err_ctx; + } + + dump = xkb_map_get_as_string(keymap); + if (!dump) { + fprintf(stderr, "Couldn't get the keymap string\n"); + goto err_map; + } + + fputs(dump, stdout); + + ret = EXIT_SUCCESS; + free(dump); +err_map: + xkb_map_unref(keymap); +err_ctx: + xkb_context_unref(ctx); +err_out: + return ret; +} -- 2.7.4