anchor.diff:      def('attributeValue', ref('attributeValueDouble')
         .or(ref('attributeValueSingle'))
         .pick(1));
  -    def('attributeValueDouble', char('"')
  -      .seq(char('"').neg().star().flatten().map(_decodeXml))
  -      .seq(char('"')));
  -    def('attributeValueSingle', char("'")
  -      .seq(char("'").neg().star().flatten().map(_decodeXml))
  -      .seq(char("'")));
  +    def('attributeValueDouble', char(DOUBLE_QUOTE)
  +      .seq(any().starLazy(char(DOUBLE_QUOTE)).flatten().map(_decodeXml))
  +      .seq(char(DOUBLE_QUOTE)));
  +    def('attributeValueSingle', char(SINGLE_QUOTE)
  +      .seq(any().starLazy(char(SINGLE_QUOTE)).flatten().map(_decodeXml))
  +      .seq(char(SINGLE_QUOTE)));
       def('attributes', ref('whitespace')
         .seq(ref('attribute'))
         .pick(1)
         .star());
  -    def('comment', string('<!--')
  -      .seq(string('-->').neg().star().flatten())
  -      .seq(string('-->'))
  +    def('comment', string(OPEN_COMMENT)
  +      .seq(any().starLazy(string(CLOSE_COMMENT)).flatten())
  +      .seq(string(CLOSE_COMMENT))
         .pick(1));
  -    def('cdata', string('<![CDATA[')
  -      .seq(string(']]>').neg().star().flatten())
  -      .seq(string(']]>'))
  +    def('cdata', string(OPEN_CDATA)
  +      .seq(any().starLazy(string(CLOSE_CDATA)).flatten())
  +      .seq(string(CLOSE_CDATA))
         .pick(1));
       def('content', ref('characterData')
         .or(ref('element'))
  
positive.code:         .separatedBy(ref('whitespace'))
          .flatten())
        .seq(ref('whitespace').optional())
        .seq(char('>'))
        .pick(2));
      def('document', ref('processing').optional()
        .seq(ref('misc'))
  
negative.code:       .or(ref('comment'))
        .or(ref('cdata'))
        .star());
      def('doctype', string(OPEN_DOCTYPE)
        .seq(ref('whitespace'))
        .seq(ref('nameToken')
          .or(ref('attributeValue'))
  