commit | 65cb4b20f5303a59fce41987c3ef58ef06133e93 | [log] [tgz] |
---|---|---|
author | John Messerly <jmesserly@google.com> | Mon Jul 06 11:32:11 2015 -0700 |
committer | John Messerly <jmesserly@google.com> | Mon Jul 06 11:32:11 2015 -0700 |
tree | 03b384f0ce05a016317b5594613b0933edaaedb4 | |
parent | 75bb047920d838217404845019ee6180be189d0f [diff] |
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.
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.)
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
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.
./test/run.sh