anchor.diff:      var sofar = targettext.split('').getRange(0, _currentposition + 1);
       return 100 - (_errors.toDouble() / sofar.length.toDouble() * 100).round();
     }
  -  void handleKeyEvent(Event e) {
  +  void handleKeyEvent(Event e) {  
       KeyEvent k = new KeyEvent.wrap(e);
       var tinput = querySelector('#tarea');
       switch (k.keyCode) {
         case KeyCode.SHIFT:
           break;
  -      case KeyCode.BACKSPACE:
  +         case KeyCode.BACKSPACE:
           if (this.currentposition > 0) {
             this.currentposbackward();
             break;
  
positive.code:   var input = querySelector('#tarea');
    input.onKeyUp.listen((e) {
      if (tr.currentposition < target.length) {
        tr.handleKeyEvent(e);
      }
    });
  
negative.code:         break;
        default:
          var te = querySelector('#test');
          var typed = tinput.value.split('')[_currentposition];
          if (typed != charAtPosition()) {
            
          
          te.text = 'Error: ' + charAtPosition() + '!=' + typed;
          }
          this.currentposforward();
      }
    }
  