anchor.diff:  
     void processRequest(Event e) {
       if (!isCell(e)) return;
  -    if (handleRequest(e)) return;
  +    if (_handleRequest(e)) return;
       if (nextHandler == null) return;
   
       nextHandler.processRequest(e);
     }
   
  -  bool handleRequest(Event e) => false;
  +  // Subclasses handle requests as needed
  +  bool _handleRequest(Event e) => false;
   
     bool isCell(Event e) {
       var input = e.target;
  
positive.code:   number.nextHandler = date;
    date.nextHandler = text;
  
    var subscription =
      container.
      onChange.
      listen(number.processRequest);
  
    var c = new StreamController();
    container.onChange.listen(c.add);
    container.onClick.listen(c.add);
  
    c.stream.listen(number.processRequest);
  
  
  
    query('#no-numbers').onChange.listen((e){
      var el = e.target;
      if (el.checked) {
        subscription.cancel();
        subscription = container.
          onChange.
          listen(date.processRequest);
      }
      else {
        subscription.cancel();
        subscription = container.
          onChange.
          listen(number.processRequest);
      }
    });
  
negative.code: }
  
  class NumberFormatter extends CellFormatter {
    bool _handleRequest(Event e) {
      var input = e.target;
      RegExp exp = new RegExp(r"^\s*[\d\.]+\s*$");
      if (!exp.hasMatch(input.value)) return false;
  