| 6730 | // new normalized keymap, and then updates the old object to reflect |
| 6731 | // this. |
| 6732 | function normalizeKeyMap(keymap) { |
| 6733 | var copy = {}; |
| 6734 | for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { |
| 6735 | var value = keymap[keyname]; |
| 6736 | if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } |
| 6737 | if (value == "...") { delete keymap[keyname]; continue } |
| 6738 | |
| 6739 | var keys = map(keyname.split(" "), normalizeKeyName); |
| 6740 | for (var i = 0; i < keys.length; i++) { |
| 6741 | var val = (void 0), name = (void 0); |
| 6742 | if (i == keys.length - 1) { |
| 6743 | name = keys.join(" "); |
| 6744 | val = value; |
| 6745 | } else { |
| 6746 | name = keys.slice(0, i + 1).join(" "); |
| 6747 | val = "..."; |
| 6748 | } |
| 6749 | var prev = copy[name]; |
| 6750 | if (!prev) { copy[name] = val; } |
| 6751 | else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } |
| 6752 | } |
| 6753 | delete keymap[keyname]; |
| 6754 | } } |
| 6755 | for (var prop in copy) { keymap[prop] = copy[prop]; } |
| 6756 | return keymap |
| 6757 | } |
| 6758 | |
| 6759 | function lookupKey(key, map, handle, context) { |
| 6760 | map = getKeyMap(map); |