anchor.diff:        "track", "ul"]
     );
   
  -  /*
     static Parser spaceOrNL = oneOf(" \t\n");
   
     static Parser htmlAttributeName = (oneOf(_alpha + "_:") > oneOf(_alphanum + "_.:-").many).record;
  -  static Parser htmlAttiributeValue = (spaceOrNL.many + char('=') + spaceOrNL.many +
  -    (htmlUnquotedAttributeValue | htmlSingleQuotedAttributeValue | htmlDoubleQuotedAttributeValue)).list.record;
  +  static Parser htmlAttributeValue = (spaceOrNL.many + char('=') + spaceOrNL.many +
  +      (htmlUnquotedAttributeValue | htmlSingleQuotedAttributeValue | htmlDoubleQuotedAttributeValue)).list.record;
     static Parser htmlUnquotedAttributeValue = noneOf(" \t\n\"'=<>`").many1;
     static Parser htmlSingleQuotedAttributeValue = (char("'") > noneOf("'").many) < char("'");
     static Parser htmlDoubleQuotedAttributeValue = (char('"') > noneOf('"').many) < char('"');
  -
  -  static Parser get htmlAttribute => (spaceOrNL.many1 + htmlAttributeName + htmlAttiributeValue.maybe).list.record;
  -  static Parser htmlBlockTag(Parser p) => new Parser((String s, Position pos) {
  -    ParseResult res = p.run(s, pos);
  -    if (!res.isSuccess) {
  -      return res;
  -    }
  -
  -    if (_allowedTags.contains(res.value.join().toLowerCase())) {
  -      return res.copy(value: s.substring(pos.offset, res.position.offset));
  -    }
  -    return fail.run(s, pos);
  -  });
  -  Parser get htmlBlockOpenTag => htmlBlockTag((char("<") > alphanum.many1));
  -  Parser get htmlInlineOpenTag => (((((char("<") > ((letter + alphanum.many).list)) <
  -    htmlAttribute.many) < spaceOrNL.many) < char('/').maybe) < char('>')).record;
  -  Parser get htmlBlockCloseTag => htmlBlockTag((string("</") > alphanum.many1));
  -  Parser get htmlInlineCloseTag => (((string("</") > ((letter + alphanum.many).list)) < spaceOrNL.many) < char('>')).record;
  +  static Parser get htmlAttribute => (spaceOrNL.many1 + htmlAttributeName + htmlAttributeValue.maybe).list.record;
  +  Parser get htmlOpenTag => (((((char("<") > ((letter + alphanum.many).list)) <
  +      htmlAttribute.many) < spaceOrNL.many) < char('/').maybe) < char('>')).record;
  +  Parser get htmlCloseTag => (((string("</") > ((letter + alphanum.many).list)) < spaceOrNL.many) < char('>')).record;
     Parser _htmlCompleteComment = (string('<!--').notFollowedBy(char('>') | string('->')) > anyChar.manyUntil(string('--'))).record;
     Parser get htmlCompleteComment => new Parser((String s, Position pos) {
       ParseResult res = _htmlCompleteComment.run(s, pos);
  
positive.code:   Parser get htmlCompletePI => (string('<?') > anyChar.manyUntil(string('?>'))).record;
    Parser get htmlDeclaration => (string('<!') + upper.many1 + spaceOrNL.many1 + anyChar.manyUntil(char('>'))).list.record;
    Parser get htmlCompleteCDATA => (string('<![CDATA[') > anyChar.manyUntil(string(']]>'))).record;
    */
  
    //
    // Links aux parsers
  
negative.code:       return success(true).run(s, pos);
      }
  
      Match match = rawHtmlTest6.matchAsPrefix(lineRes.value);
      if (match != null && _allowedTags.contains(match.group(1).toLowerCase())) {
        return success(true).run(s, pos);
      }
  