anchor.diff:       _lenient = lenient,
        _itr = source.runes.iterator {
       
  -    var delims = _parseDelimiterString(delimiters);
  -    _openDelimiter = delims[0];
  -    _openDelimiterInner = delims[1];
  -    _closeDelimiterInner = delims[2];
  -    _closeDelimiter = delims[3];
  -    
       if (source == '') {
         _c = _EOF;
       } else {
         _itr.moveNext();
         _c = _itr.current;
  +    }
  +    
  +    if (delimiters == null) {
  +      _openDelimiter = _openDelimiterInner = _OPEN_MUSTACHE;
  +      _closeDelimiter = _closeDelimiterInner = _CLOSE_MUSTACHE;
  +    
  +    } else if (delimiters.length == 3) {
  +      _openDelimiter = delimiters.codeUnits[0];
  +      _closeDelimiter = delimiters.codeUnits[2];
  +    
  +    } else if (delimiters.length == 5) {
  +      _openDelimiter = delimiters.codeUnits[0];
  +      _openDelimiterInner = delimiters.codeUnits[1];
  +      _closeDelimiterInner = delimiters.codeUnits[3];
  +      _closeDelimiter = delimiters.codeUnits[4];
  +    
  +    } else {
  +      throw new TemplateException(
  +              'Invalid delimiter string $delimiters', null, null, null);   
       }
     }
   
  
positive.code:     if (delimiterInner != null) _expect(delimiterInner);
       _expect(delimiter);
      
       var value = _delimiterString(
           _openDelimiter,
           _openDelimiterInner,
           _closeDelimiterInner,
           _closeDelimiter);
            
       _append(TokenType.changeDelimiter, value, start, _offset);
    }
  
negative.code:     return new TemplateException(message, _templateName, _source, _offset);
    }
  
  }
  
  const int _EOF = -1;
  