whole_func_string: function(data, hashId, key) {
          // If we pressed any command key but no other key, then ignore the input.
          // Otherwise "shift-" is added to the buffer, and later on "shift-g"
          // which results in "shift-shift-g" which doesn't make senese.
          if (hashId != 0 && (key == "" || String.fromCharCode(0))) {
              return null;
          }
  
          // Compute the current value of the keyboard input buffer.
          var r = this.$composeBuffer(data, hashId, key);
          var buffer = r.bufferToUse;
          var symbolicName = r.symbolicName;
  
          r = this.$find(data, buffer, symbolicName, hashId, key);
          if (DEBUG) {
              console.log("KeyboardStateMapper#match", buffer, symbolicName, r);
          }
  
          return r;
      }
func_code_string: function(data, hashId, key) {
          // If we pressed any command key but no other key, then ignore the input.
          // Otherwise "shift-" is added to the buffer, and later on "shift-g"
          // which results in "shift-shift-g" which doesn't make senese.
          if (hashId != 0 && (key == "" || String.fromCharCode(0))) {
              return null;
          }
  
          // Compute the current value of the keyboard input buffer.
          var r = this.$composeBuffer(data, hashId, key);
          var buffer = r.bufferToUse;
          var symbolicName = r.symbolicName;
  
          r = this.$find(data, buffer, symbolicName, hashId, key);
          if (DEBUG) {
              console.log("KeyboardStateMapper#match", buffer, symbolicName, r);
          }
  
          return r;
      }
func_documentation_string: This function is called by keyBinding.