Index: packages/csslib/example/call_parser.dart |
diff --git a/packages/csslib/example/call_parser.dart b/packages/csslib/example/call_parser.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7179a170f83697017689de04253dfa474588416d |
--- /dev/null |
+++ b/packages/csslib/example/call_parser.dart |
@@ -0,0 +1,96 @@ |
+// 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'; |
+ |
+const _default = const css.PreprocessorOptions( |
+ useColors: false, |
+ checked: true, |
+ warningsAsErrors: true, |
+ inputFile: 'memory'); |
+ |
+/** |
+ * 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, css.PreprocessorOptions opts}) { |
+ return css.parse(cssInput, |
+ errors: errors, options: opts == null ? _default : 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)); |
+ } |
+} |