Use Unicode keysym range as fallback

Not all Unicode codepoints have an equivalent named Keysym. But
there is a range in the Keysym namespace that can be used to map
any codepoint to.
This commit is contained in:
Pierre Ossman 2016-10-14 08:39:28 +02:00
parent 4dc8953658
commit 115eedf69c
4 changed files with 18 additions and 9 deletions

View File

@ -10,7 +10,13 @@ var keysyms = (function(){
function lookup(k) { return k ? {keysym: k, keyname: keynames ? keynames[k] : k} : undefined; }
return {
fromUnicode : function(u) { return lookup(codepoints[u]); },
fromUnicode : function(u) {
var keysym = codepoints[u];
if (keysym === undefined) {
keysym = 0x01000000 | u;
}
return lookup(keysym);
},
lookup : lookup
};
})();

View File

@ -184,10 +184,7 @@ var KeyboardUtil = {};
codepoint = evt.keyCode;
}
if (codepoint) {
var res = keysyms.fromUnicode(substituteCodepoint(codepoint));
if (res) {
return res;
}
return keysyms.fromUnicode(substituteCodepoint(codepoint));
}
// we could check evt.key here.
// Legal values are defined in http://www.w3.org/TR/DOM-Level-3-Events/#key-values-list,

View File

@ -38,9 +38,9 @@ describe('Helpers', function() {
it('should map characters which aren\'t in Latin1 *or* Windows-1252 to keysyms', function() {
expect(keysyms.fromUnicode('ŵ'.charCodeAt())).to.have.property('keysym', 0x1000175);
});
it('should return undefined for unknown codepoints', function() {
expect(keysyms.fromUnicode('\n'.charCodeAt())).to.be.undefined;
expect(keysyms.fromUnicode('\u1F686'.charCodeAt())).to.be.undefined;
it('should map unknown codepoints to the Unicode range', function() {
expect(keysyms.fromUnicode('\n'.charCodeAt())).to.have.property('keysym', 0x100000a);
expect(keysyms.fromUnicode('\u{1F686}'.charCodeAt())).to.have.property('keysym', 0x101f686);
});
});

View File

@ -87,7 +87,13 @@ var out = "// This file describes mappings from Unicode codepoints to the keysym
"\n" +
" function lookup(k) { return k ? {keysym: k, keyname: keynames ? keynames[k] : k} : undefined; }\n" +
" return {\n" +
" fromUnicode : function(u) { return lookup(codepoints[u]); },\n" +
" fromUnicode : function(u) {\n" +
" var keysym = codepoints[u];\n" +
" if (keysym === undefined) {\n" +
" keysym = 0x01000000 | u;\n" +
" }\n" +
" return lookup(keysym);\n" +
" },\n" +
" lookup : lookup\n" +
" };\n" +
"})();\n";