[][src]Crate azul_simplecss

A very simple streaming parser/tokenizer for CSS 2.1 data format without heap allocations.

Since it's very simple we will start with limitations:

Limitations

  • At-rules are not supported.

    @import, @media, etc. will lead to a parsing error.

  • The ident token must be ASCII only.

    CSS like #аттр { имя:значение } will lead to a parsing error.

  • Property values are not parsed.

    In CSS like * { width: 5px } you will get width property with 5px values as a string.

  • Attribute selector rule is not parsed.

    [foo~="warning"] will be parsed as Token::AttributeSelector("foo~=\"warning\"").

  • There are no data validation.

    • Pseudo-class tokens can contain any text, language pseudo-class can contain any text or even none.
    • Declarations can contain any kind of names and values.
  • All comments will be ignored.

    They didn't have it's own Token item.

  • CDO/CDC comments are not supported.

  • Parser is case sensitive. All keywords should be lowercase.

  • Unicode escape, like \26, is not supported.

  • No spec-defined error handling.

    If something will go wrong you will get an error. Parser will not recover an invalid input. Details.

Where to use

simplecss can be useful for parsing a very simple or predefined CSS.

It's tiny, dependency free and pretty fast.

Examples

Simple

* { color : red }
| | |           ||
| | |           |+- Token::EndOfStream
| | |           +- Token::BlockEnd
| | +- Token::Declaration("color", "red")
| +- Token::BlockStart
+- Token::UniversalSelector

Complex

div#x:first-letter em[id] + .hh1 { color : red }
|  | |            || |    | |    | |           ||
|  | |            || |    | |    | |           |+- Token::EndOfStream
|  | |            || |    | |    | |           +- Token::BlockEnd
|  | |            || |    | |    | +- Token::Declaration("color", "red")
|  | |            || |    | |    +- Token::BlockStart
|  | |            || |    | +- Token::ClassSelector("hh1")
|  | |            || |    +- Token::Combinator(Combinator::Plus)
|  | |            || +- Token::AttributeSelector("id")
|  | |            |+- Token::TypeSelector("em")
|  | |            +- Token::Combinator(Combinator::Space)
|  | +- Token::PseudoClass("first-letter")
|  +- Token::IdSelector("x")
+- Token::TypeSelector("div")

Structs

ErrorPos

Position of an error.

Tokenizer

CSS tokenizer.

Enums

Combinator

CSS combinator.

Error

List of all supported errors.

Token

CSS token.