summaryrefslogtreecommitdiffstats
path: root/third_party/rust/cssparser/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/cssparser/README.md')
-rw-r--r--third_party/rust/cssparser/README.md57
1 files changed, 57 insertions, 0 deletions
diff --git a/third_party/rust/cssparser/README.md b/third_party/rust/cssparser/README.md
new file mode 100644
index 0000000000..0f0e2daf0a
--- /dev/null
+++ b/third_party/rust/cssparser/README.md
@@ -0,0 +1,57 @@
+rust-cssparser
+==============
+
+[![Build Status](https://travis-ci.com/servo/rust-cssparser.svg)](https://travis-ci.com/servo/rust-cssparser)
+
+[Documentation](https://docs.rs/cssparser/)
+
+Rust implementation of
+[CSS Syntax Module Level 3](https://drafts.csswg.org/css-syntax/)
+
+
+Overview
+--------
+
+Parsing CSS involves a series of steps:
+
+* When parsing from bytes,
+ (e.g. reading a file or fetching an URL from the network,)
+ detect the character encoding
+ (based on a `Content-Type` HTTP header, an `@charset` rule, a BOM, etc.)
+ and decode to Unicode text.
+
+ rust-cssparser does not do this yet and just assumes UTF-8.
+
+ This step is skipped when parsing from Unicode, e.g. in an HTML `<style>` element.
+
+* Tokenization, a.k.a. lexing.
+ The input, a stream of Unicode text, is transformed into a stream of *tokens*.
+ Tokenization never fails, although the output may contain *error tokens*.
+
+* This flat stream of tokens is then transformed into a tree of *component values*,
+ which are either *preserved tokens*,
+ or blocks/functions (`{ … }`, `[ … ]`, `( … )`, `foo( … )`)
+ that contain more component values.
+
+ rust-cssparser does this at the same time as tokenization:
+ raw tokens are never materialized, you only get component values.
+
+* Component values can then be parsed into generic rules or declarations.
+ The header and body of rules as well as the value of declarations
+ are still just lists of component values at this point.
+ See [the `Token` enum](src/tokenizer.rs) for the data structure.
+
+* The last step of a full CSS parser is
+ parsing the remaining component values
+ into [Selectors](https://drafts.csswg.org/selectors/),
+ specific CSS properties, etc.
+
+ By design, rust-cssparser does not do this last step
+ which depends a lot on what you want to do:
+ which properties you want to support, what you want to do with selectors, etc.
+
+ It does however provide some helper functions to parse [CSS colors](src/color.rs)
+ and [An+B](src/nth.rs) (the argument to `:nth-child()` and related selectors.
+
+ See [Servo’s `style` crate](https://github.com/mozilla/servo/tree/master/components/style)
+ for an example of a parser based on rust-cssparser.