aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2017-05-31 16:02:36 +0200
committerDaniel P. Berrange <berrange@redhat.com>2017-08-02 15:31:37 +0100
commit0d6d25f4da94c1d1dad3a0b97cb78be068397898 (patch)
treee66c613f27e5d6e5fe148d1f4ba41ef3ad2ded50
parent199ddce53eb5e1db1b9d4e3b3a38c551ed16388d (diff)
downloadkeycodemapdb-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/.gitignore1
-rw-r--r--tests/Makefile30
-rwxr-xr-xtests/javascript53
-rwxr-xr-xtools/keymap-gen35
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(),