diff options
author | Pierre Ossman <ossman@cendio.se> | 2017-05-31 16:02:36 +0200 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2017-08-02 15:31:37 +0100 |
commit | 0d6d25f4da94c1d1dad3a0b97cb78be068397898 (patch) | |
tree | e66c613f27e5d6e5fe148d1f4ba41ef3ad2ded50 | |
parent | 199ddce53eb5e1db1b9d4e3b3a38c551ed16388d (diff) | |
download | keycodemapdb-0d6d25f4da94c1d1dad3a0b97cb78be068397898.zip keycodemapdb-0d6d25f4da94c1d1dad3a0b97cb78be068397898.tar.gz keycodemapdb-0d6d25f4da94c1d1dad3a0b97cb78be068397898.tar.bz2 |
Add support for JavaScript output
Signed-off-by: Pierre Ossman <ossman@cendio.se>
-rw-r--r-- | tests/.gitignore | 1 | ||||
-rw-r--r-- | tests/Makefile | 30 | ||||
-rwxr-xr-x | tests/javascript | 53 | ||||
-rwxr-xr-x | tools/keymap-gen | 35 |
4 files changed, 118 insertions, 1 deletions
diff --git a/tests/.gitignore b/tests/.gitignore index 88e7c03..0562305 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -8,3 +8,4 @@ osx.* osx_name.* stdc stdc++ +node_modules/ diff --git a/tests/Makefile b/tests/Makefile index ccb3686..b7e2d3f 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,4 +1,4 @@ -TESTS := stdc stdc++ python2 python3 +TESTS := stdc stdc++ python2 python3 javascript check: $(TESTS) @set -e; for fn in $(TESTS); do \ @@ -78,7 +78,35 @@ osx.py: $(SOURCES) osx_name.py: $(SOURCES) $(GEN) --lang python2 name-table $(DATA) osx > $@ +javascript: node_modules/babel-core \ + node_modules/babel-plugin-transform-es2015-modules-commonjs \ + osx2win32.js osx2win32_name.js \ + osx2xkb.js osx2xkb_name.js \ + html2win32.js html2win32_name.js \ + osx.js osx_name.js +node_modules/babel-core: + npm install babel-core +node_modules/babel-plugin-transform-es2015-modules-commonjs: + npm install babel-plugin-transform-es2015-modules-commonjs +osx2win32.js: $(SOURCES) + $(GEN) --lang js code-map $(DATA) osx win32 > $@ +osx2win32_name.js: $(SOURCES) + $(GEN) --lang js name-map $(DATA) osx win32 > $@ +osx2xkb.js: $(SOURCES) + $(GEN) --lang js code-map $(DATA) osx xkb > $@ +osx2xkb_name.js: $(SOURCES) + $(GEN) --lang js name-map $(DATA) osx xkb > $@ +html2win32.js: $(SOURCES) + $(GEN) --lang js code-map $(DATA) html win32 > $@ +html2win32_name.js: $(SOURCES) + $(GEN) --lang js name-map $(DATA) html win32 > $@ +osx.js: $(SOURCES) + $(GEN) --lang js code-table $(DATA) osx > $@ +osx_name.js: $(SOURCES) + $(GEN) --lang js name-table $(DATA) osx > $@ + clean: + rm -rf node_modules rm -f osx2win32.* rm -f osx2win32_name.* rm -f osx2xkb.* diff --git a/tests/javascript b/tests/javascript new file mode 100755 index 0000000..5179db2 --- /dev/null +++ b/tests/javascript @@ -0,0 +1,53 @@ +#!/usr/bin/env node +/* + * Keycode Map Generator JavaScript Tests + * + * Copyright 2017 Pierre Ossman for Cendio AB + * + * This file is dual license under the terms of the GPLv2 or later + * and 3-clause BSD licenses. + */ + +"use strict"; + +var assert = require('assert'); +var babel = require('babel-core'); +var fs = require('fs'); + +function include(fn) { + var options = { + plugins: ["transform-es2015-modules-commonjs"] + }; + + var code = babel.transformFileSync(fn, options).code; + fs.writeFileSync("." + fn + "_nodejs.js", code); + var imp = require("./." + fn + "_nodejs.js"); + fs.unlinkSync("./." + fn + "_nodejs.js"); + + return imp +} + +var code_map_osx_to_win32 = include("osx2win32.js").default; +var name_map_osx_to_win32 = include("osx2win32_name.js").default; + +var code_map_osx_to_xkb = include("osx2xkb.js").default; +var name_map_osx_to_xkb = include("osx2xkb_name.js").default; + +var code_map_html_to_win32 = include("html2win32.js").default; +var name_map_html_to_win32 = include("html2win32_name.js").default; + +var code_table_osx = include("osx.js").default; +var name_table_osx = include("osx_name.js").default; + +assert.equal(code_map_osx_to_win32[0x1d], 0x30); +assert.equal(name_map_osx_to_win32[0x1d], "VK_0"); + +assert.equal(code_map_osx_to_xkb[0x1d], "AE10"); +assert.equal(name_map_osx_to_xkb[0x1d], "AE10"); + +assert.equal(code_map_html_to_win32["ControlLeft"], 0x11); +assert.equal(name_map_html_to_win32["ControlLeft"], "VK_CONTROL"); + +assert.equal(code_table_osx[0x1d], 0x3b); +assert.equal(name_table_osx[0x1d], "Control"); + diff --git a/tools/keymap-gen b/tools/keymap-gen index b59ba50..ae33f4d 100755 --- a/tools/keymap-gen +++ b/tools/keymap-gen @@ -636,6 +636,40 @@ class PerlLanguageGenerator(LanguageSrcGenerator): def _array_entry_name(self, index, value, comment): self._array_entry_code(index, value, comment) +class JavaScriptLanguageGenerator(LanguageSrcGenerator): + + def _boilerplate(self, lines): + print("/*") + for line in lines: + print(" * %s" % line) + print("*/") + + def _array_start_code(self, varname, length, fromtype, totype): + print("export default {") + + def _array_start_name(self, varname, length, fromtype): + print("export default {") + + def _array_end(self): + print("};") + + def _array_entry_code(self, index, value, comment): + if value is None: + return + if type(index) == int: + if type(value) == int: + print(" 0x%x: 0x%x, /* %s */" % (index, value, comment)) + else: + print(" 0x%x: \"%s\", /* %s */" % (index, value, comment)) + else: + if type(value) == int: + print(" \"%s\": 0x%x, /* %s */" % (index, value, comment)) + else: + print(" \"%s\": \"%s\", /* %s */" % (index, value, comment)) + + def _array_entry_name(self, index, value, comment): + self._array_entry_code(index, value, comment) + class PodLanguageGenerator(LanguageDocGenerator): def _boilerplate(self, lines): @@ -683,6 +717,7 @@ SRC_GENERATORS = { "python2": PythonLanguageGenerator(), "python3": PythonLanguageGenerator(), "perl": PerlLanguageGenerator(), + "js": JavaScriptLanguageGenerator(), } DOC_GENERATORS = { "pod": PodLanguageGenerator(), |