anchor.diff:  
     int get position => _position;
   
  -  String readNextLine() {
  +  String readNextLine() => _peekOrReadNextLine(true);
  +
  +  String peekNextLine() => _peekOrReadNextLine(false);
  +
  +  String readToEnd() {
  +    if(_position == null) {
  +      return null;
  +    }
  +    final value = source.substring(position, source.length);
  +    _position = null;
  +    return value;
  +  }
  +
  +  String _peekOrReadNextLine(bool updatePosition) {
       if(_position == null) {
         return null;
       }
  
positive.code:     final value = isWinNL ? source.substring(_position, nextLF-1) :
        source.substring(_position, nextLF);
  
      _position = nextLF + 1;
  
      return value;
    }
  
    String readToEnd() {
      if(_position == null) {
        return null;
      }
      final value = source.substring(position, source.length);
      _position = null;
      return value;
    }
  }
  
negative.code:     if(nextLF < 0) {
        // no more new lines, return what's left and set postion = null
        final value = source.substring(position, source.length);
        if(updatePosition) {
          _position = null;
        }
        return value;
      }
  
  