| Index: pkg/csslib/lib/src/validate.dart
|
| diff --git a/utils/css/validate.dart b/pkg/csslib/lib/src/validate.dart
|
| similarity index 83%
|
| copy from utils/css/validate.dart
|
| copy to pkg/csslib/lib/src/validate.dart
|
| index 9babe3d3c0911ab077ba6e69e438a30785ed6159..d2301d79d070b1cf5ada0a36fe475d83c5dc883e 100644
|
| --- a/utils/css/validate.dart
|
| +++ b/pkg/csslib/lib/src/validate.dart
|
| @@ -1,7 +1,29 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| +library csslib.src.validate;
|
| +
|
| +import 'package:csslib/parser.dart';
|
| +import 'package:csslib/visitor.dart';
|
| +import 'package:source_maps/span.dart' show Span;
|
| +
|
| +/** Can be thrown on any Css runtime problem includes source location. */
|
| +class CssSelectorException implements Exception {
|
| + final String _message;
|
| + final Span _span;
|
| +
|
| + CssSelectorException(this._message, [this._span]);
|
| +
|
| + String toString() {
|
| + var msg = _span == null ? _message : _span.getLocationMessage(_message);
|
| + return 'CssSelectorException: $msg';
|
| + }
|
| +}
|
| +
|
| +List<String> classes = [];
|
| +List<String> ids = [];
|
| +
|
| class Validate {
|
| static int _classNameCheck(var selector, int matches) {
|
| if (selector.isCombinatorDescendant() ||
|
| @@ -9,10 +31,10 @@ class Validate {
|
| if (matches < 0) {
|
| String tooMany = selector.simpleSelector.toString();
|
| throw new CssSelectorException(
|
| - 'Can not mix Id selector with class selector(s). Id ' +
|
| + 'Can not mix Id selector with class selector(s). Id '
|
| 'selector must be singleton too many starting at $tooMany');
|
| }
|
| -
|
| +
|
| return matches + 1;
|
| } else {
|
| String error = selector.toString();
|
| @@ -38,7 +60,7 @@ class Validate {
|
|
|
| // Validate the @{css expression} only .class and #elementId are valid inside
|
| // of @{...}.
|
| - static template(List<ASTNode> selectors, CssWorld cssWorld) {
|
| + static template(List<Selector> selectors) {
|
| var errorSelector; // signal which selector didn't match.
|
| bool found = false; // signal if a selector is matched.
|
| int matches = 0; // < 0 IdSelectors, > 0 ClassSelector
|
| @@ -56,13 +78,13 @@ class Validate {
|
| if (!simpleSelector.name.startsWith('_')) {
|
| // TODO(terry): For now iterate through all classes look for faster
|
| // mechanism hash map, etc.
|
| - for (final className in cssWorld.classes) {
|
| + for (final className in classes) {
|
| if (selector.simpleSelector.name == className) {
|
| matches = _classNameCheck(selector, matches);
|
| found = true; // .class found.
|
| break;
|
| }
|
| - for (final className2 in cssWorld.classes) {
|
| + for (final className2 in classes) {
|
| print(className2);
|
| }
|
| }
|
| @@ -78,7 +100,7 @@ class Validate {
|
| // Any element id starting with an underscore is a private element id
|
| // that doesn't have to match the world of known elemtn ids.
|
| if (!simpleSelector.name.startsWith('_')) {
|
| - for (final id in cssWorld.ids) {
|
| + for (final id in ids) {
|
| if (simpleSelector.name == id) {
|
| matches = _elementIdCheck(selector, matches);
|
| found = true; // #id found.
|
| @@ -105,7 +127,7 @@ class Validate {
|
| }
|
|
|
| // Every selector must match.
|
| - var selector = selectors[0];
|
| + Selector selector = selectors[0];
|
| assert((matches >= 0 ? matches : -matches) ==
|
| selector.simpleSelectorSequences.length);
|
| }
|
|
|