fix parse error with foreignObject end tag

it appears we inherited this from html5lib:
https://github.com/html5lib/html5lib-python/blob/5e3d432998b027cd2d200446f157d13a3461a92b/html5lib/html5parser.py#L2448
You'll notice the node.name.translate(asciiUpper2Lower) immediately below, in the same comparison

Most likely, this is not caught because it's not common to display HTML parse errors, and the actual tree construction is correct.

This fix does match the spec:
https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign
See "Any other end tag, step 2":
> If node's tag name, converted to ASCII lowercase, is not the same as the tag name of the token, then this is a parse error.

We were missing the converted to lowercase step.

R=sigmund@google.com

Review URL: https://codereview.chromium.org//1222713008.
2 files changed
tree: 03b384f0ce05a016317b5594613b0933edaaedb4
  1. lib/
  2. test/
  3. .gitignore
  4. .status
  5. CHANGELOG.md
  6. codereview.settings
  7. LICENSE
  8. pubspec.yaml
  9. README.md
README.md

html5 parser in dart

This is a pure Dart html5 parser. It‘s a port of html5lib from Python. Since it’s 100% Dart you can use it safely from a script or server side app.

Eventually the parse tree API will be compatible with dart:html, so the same code will work on the client and the server.

(Formerly known as html5lib.)

Installation

Add this to your pubspec.yaml (or create it):

dependencies:
  html: any

Then run the Pub Package Manager (comes with the Dart SDK):

pub install

Usage

Parsing HTML is easy!

import 'package:html/parser.dart' show parse;
import 'package:html/dom.dart';

main() {
  var document = parse(
      '<body>Hello world! <a href="www.html5rocks.com">HTML5 rocks!');
  print(document.outerHtml);
}

You can pass a String or list of bytes to parse. There's also parseFragment for parsing a document fragment, and HtmlParser if you want more low level control.

Running Tests

./test/run.sh