anchor.diff:            '>': TagType.partial,
             '!': TagType.comment};
     
  -  //TODO clean up EOF handling.
  +
  +  // If open delimiter, or change delimiter token then return a tag.
  +  // If EOF or any another token then return null.
     Tag _readTag() {
  +    
  +    var t = _peek();
  +    if (t == null ||
  +        (t.type != TokenType.changeDelimiter &&
  +         t.type != TokenType.openDelimiter)) {
  +      return null;
  +    
  +    } else if (t.type == TokenType.changeDelimiter) {      
  +      _read();
  +      // Remember the current delimiters.
  +      _currentDelimiters = t.value;
  +      
  +      // Change delimiter tags are already parsed by the scanner.
  +      // So just create a tag and return it.
  +      return new Tag(TagType.changeDelimiter, t.value, t.start, t.end);
  +    }
  +    
  +    // Start parsing a typical tag.
       
       var open = _expect(TokenType.openDelimiter);
       
  
positive.code:         node = new PartialNode(tag.name, tag.start, tag.end, partialIndent);
          break;
              
        // Return null for close section.
        case TagType.closeSection:
        case TagType.comment:
          node = null;
          break;
  
  
negative.code:   }
    
    Node _createNodeFromTag(Tag tag, {String partialIndent: ''}) {
      // Handle EOF case.
      if (tag == null) return null;
      
      Node node = null;
      switch (tag.type) {
        
  