[html5lib] implement querySelector/querySelectorAll

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/pkg/csslib@35941 260f80e4-7a28-3924-810f-c04153c831b5
8 files changed
tree: c05f1febe468da3833a456abf355e32396363734
  1. bin/
  2. example/
  3. lib/
  4. test/
  5. LICENSE
  6. pubspec.yaml
  7. README.md
README.md

csslib in Pure Dart

This is a pure Dart [CSS parser][cssparse]. Since it's 100% Dart you can use it safely from a script or server side app.

Installation

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

dependencies:
  csslib: any

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

pub install

Usage

Parsing CSS is easy!

import 'package:csslib/parser.dart' show parse;
import 'package:csslib/css.dart';

main() {
  var stylesheet = parse(
      '.foo { color: red; left: 20px; top: 20px; width: 100px; height:200px }');
  print(stylesheet.toString());
}

You can pass a String or list of bytes to parse.

Updating

You can upgrade the library with:

pub update

Disclaimer: the APIs are not finished. Updating may break your code. If that happens, you can check the commit log, to figure out what the change was.

If you want to avoid breakage, you can also put the version constraint in your pubspec.yaml in place of the word any.

Running Tests

All tests (both canary and suite) should be passing. Canary are quick test verifies that basic CSS is working. The suite tests are a comprehensive set of ~11,000 tests.

export DART_SDK=path/to/dart/sdk

# Make sure dependencies are installed
pub install

# Run command both canary and the suite tests
test/run.sh

Run only the canary test:

 test/run.sh canary

Run only the suite tests:

 test/run.sh suite