anchor.diff:      return c;
     }
     
  -  String _readWhile(bool test(int charCode), [Function endOfFile]) {
  -    
  +  String _readWhile(bool test(int charCode)) {
       int start = _offset;  
       while (_peek() != _EOF && test(_peek())) {
         _read();
       }
  -
  -    if (_peek() == _EOF && endOfFile != null) endOfFile();
  -    
       int end = _peek() == _EOF ? _source.length : _offset;
       return _source.substring(start, end);
     }
  
positive.code:       _openDelimiterInner = c;
      }
      
      _readWhile((c) => const [_SPACE, _TAB, _NEWLINE, _RETURN].contains(c));
      
      c = _read();
      
  
negative.code:   int _closeDelimiter;
    
    List<Token> scan() {
      
      for (int c = _peek(); c != _EOF; c = _peek()) {
        
        // Scan text tokens.
        if (c != _openDelimiter) {
          _scanText();
          continue;
        }
          
        int start = _offset;
        
        // Read first open delimiter character.
        _read();
        
        // If only a single delimiter character then create a text token.
        if (_openDelimiterInner != null && _peek() != _openDelimiterInner) {
          var value = new String.fromCharCode(_openDelimiter);
          _push(TokenType.text, value, start, _offset);
          continue;
        }
          
        if (_openDelimiterInner != null) _expect(_openDelimiterInner);
        
        // Handle triple mustache.
        if (_openDelimiterInner == _OPEN_MUSTACHE &&
            _openDelimiter == _OPEN_MUSTACHE &&
            _peek() == _OPEN_MUSTACHE) {
          
          _read();
          _push(TokenType.openTripleMustache, '{{{', start, _offset);
          _scanTagContent();
          _scanCloseTripleMustache();
                     
        } else {
        
          // Check to see if this is a change delimiter tag. {{= | | =}}
          // Need to skip whitespace and check for "=".
          int wsStart = _offset;
          var ws = _readWhile(_isWhitespace);
          
          if (_peek() == _EQUAL) {
            _scanChangeDelimiterTag(start);
            
          } else {
            // Scan standard mustache tag.
            var value = new String.fromCharCodes(_openDelimiterInner == null
                ? [_openDelimiter]
                : [_openDelimiter, _openDelimiterInner]);
            
            _push(TokenType.openDelimiter, value, start, wsStart);
            
            if (ws != '') _push(TokenType.whitespace, ws, wsStart, _offset);
            
            _scanTagContent();
            _scanCloseDelimiter();
          }
        }
      }
      return _tokens;
    }
  