9e5b240923
deleted files that duplicate those in the Dart repository (LICENSE, pubspec.yaml, codereview.settings, .gitignore) Otherwise, just changed pkg.status and pubspec R=terry@google.com Review URL: https://codereview.chromium.org//23168002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26155 260f80e4-7a28-3924-810f-c04153c831b5
91 lines
2.7 KiB
Dart
91 lines
2.7 KiB
Dart
// 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
|
|
|
|
import 'package:csslib/parser.dart' as css;
|
|
import 'package:csslib/visitor.dart';
|
|
|
|
/**
|
|
* Spin-up CSS parser in checked mode to detect any problematic CSS. Normally,
|
|
* CSS will allow any property/value pairs regardless of validity; all of our
|
|
* tests (by default) will ensure that the CSS is really valid.
|
|
*/
|
|
StyleSheet parseCss(String cssInput, {List errors, List opts}) =>
|
|
css.parse(cssInput, errors: errors, options: opts == null ?
|
|
['--no-colors', '--checked', '--warnings_as_errors', 'memory'] : opts);
|
|
|
|
// Pretty printer for CSS.
|
|
var emitCss = new CssPrinter();
|
|
String prettyPrint(StyleSheet ss) =>
|
|
(emitCss..visitTree(ss, pretty: true)).toString();
|
|
|
|
main() {
|
|
var errors = [];
|
|
|
|
// Parse a simple stylesheet.
|
|
print('1. Good CSS, parsed CSS emitted:');
|
|
print(' =============================');
|
|
var stylesheet = parseCss(
|
|
'@import "support/at-charset-019.css"; div { color: red; }'
|
|
'button[type] { background-color: red; }'
|
|
'.foo { '
|
|
'color: red; left: 20px; top: 20px; width: 100px; height:200px'
|
|
'}'
|
|
'#div {'
|
|
'color : #00F578; border-color: #878787;'
|
|
'}', errors: errors);
|
|
|
|
if (!errors.isEmpty) {
|
|
print("Got ${errors.length} errors.\n");
|
|
for (var error in errors) {
|
|
print(error);
|
|
}
|
|
} else {
|
|
print(prettyPrint(stylesheet));
|
|
}
|
|
|
|
// Parse a stylesheet with errors
|
|
print('2. Catch severe syntax errors:');
|
|
print(' ===========================');
|
|
var stylesheetError = parseCss(
|
|
'.foo #%^&*asdf{ '
|
|
'color: red; left: 20px; top: 20px; width: 100px; height:200px'
|
|
'}', errors: errors);
|
|
|
|
if (!errors.isEmpty) {
|
|
print("Got ${errors.length} errors.\n");
|
|
for (var error in errors) {
|
|
print(error);
|
|
}
|
|
} else {
|
|
print(stylesheetError.toString());
|
|
}
|
|
|
|
// Parse a stylesheet that warns (checks) problematic CSS.
|
|
print('3. Detect CSS problem with checking on:');
|
|
print(' ===================================');
|
|
stylesheetError = parseCss( '# div1 { color: red; }', errors: errors);
|
|
|
|
if (!errors.isEmpty) {
|
|
print("Detected ${errors.length} problem in checked mode.\n");
|
|
for (var error in errors) {
|
|
print(error);
|
|
}
|
|
} else {
|
|
print(stylesheetError.toString());
|
|
}
|
|
|
|
// Parse a CSS selector.
|
|
print('4. Parse a selector only:');
|
|
print(' ======================');
|
|
var selectorAst = css.selector('#div .foo', errors: errors);
|
|
if (!errors.isEmpty) {
|
|
print("Got ${errors.length} errors.\n");
|
|
for (var error in errors) {
|
|
print(error);
|
|
}
|
|
} else {
|
|
print(prettyPrint(selectorAst));
|
|
}
|
|
|
|
}
|