06f8f2d16b
BUG= https://code.google.com/p/dart/issues/detail?id=18508 * tests from https://github.com/w3c/web-platform-tests/tree/master/selectors-api, kept as close to original as I could. * src/query_selector.dart is most interesting file. It implements enough of selectors to pass the basic web platform tests. Ironically, it was the easiest part of this CL... * many fixes to csslib. Almost all of the selector tests were skipped (https://github.com/dart-lang/csslib-test-suite/blob/master/suite/selectors3/selectors3_test.dart) and there was a lot of things broken: unicode, escaping, incorrectly treating ident-tokens as units, probably more that I am forgetting :). Fixed as much as I could without doing major surgery. * a bunch of fixes to the htm5lib DOM to bring it closer in alignment with dom.spec.whatwg.org and dart:html. The driving force was to minimize the changes needed on the W3C tests. Note: haven't updated things that depend on html5lib like Polymer yet. R=sigmund@google.com Review URL: https://codereview.chromium.org//268623002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35941 260f80e4-7a28-3924-810f-c04153c831b5
html5lib in Pure 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.
Installation
Add this to your pubspec.yaml (or create it):
dependencies:
html5lib: any
Then run the Pub Package Manager (comes with the Dart SDK):
pub install
Usage
Parsing HTML is easy!
import 'package:html5lib/parser.dart' show parse;
import 'package:html5lib/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
# From Dart SVN checkout
./tools/build.py -m release
./tools/test.py -m release html5lib
./tools/test.py -m release -r drt html5lib