anchor.diff:      }
     ];
     static final Pattern rawHtmlTest67 = new RegExp(r'^/?([a-zA-Z]+)( |>|$)');  // TODO \t
  +  Parser get rawHtmlParagraphStopTest => new Parser((String s, Position pos) {
  +    // Simple test
  +    ParseResult testRes = (skipNonindentChars < char('<')).record.run(s, pos);
  +    if (!testRes.isSuccess) {
  +      return testRes;
  +    }
  +
  +    var content = testRes.value;
  +    ParseResult lineRes = anyLine.run(s, testRes.position);
  +    assert(lineRes.isSuccess);
  +    Map<String, Pattern> passedTest = rawHtmlTests.firstWhere((element) {
  +      return lineRes.value.contains(element['start']);
  +    }, orElse: () => null);
  +    if (passedTest != null) {
  +      return success(true).run(s, pos);
  +    }
  +
  +    Match match = rawHtmlTest67.matchAsPrefix(lineRes.value);
  +    if (match != null && _allowedTags.contains(match.group(1).toLowerCase())) {
  +      return success(true).run(s, pos);
  +    }
  +
  +    return fail.run(s, pos);
  +  });
  +
     Parser get rawHtml => new Parser((String s, Position pos) {
       // Simple test
       ParseResult testRes = (skipNonindentChars < char('<')).record.run(s, pos);
  
positive.code:       | listMarkerTest(4)
        | atxHeader
        | openFence
        | rawHtml
        | (skipNonindentChars > (
          char('>')
          | (oneOf('+-*') > whitespaceChar)
  
negative.code:       "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form",
        "frame", "frameset", "h1", "head", "header", "hr", "html", "legend", "li",
        "link", "main", "menu", "menuitem", "meta", "nav", "noframes", "ol",
        "optgroup", "option", "p", "param", "section", "source", "title",
        "summary", "table", "tbody", "td", "tfoot", "th", "thead", "title", "tr",
        "track", "ul"]
    );
  