#css-parser #css #tokenizer #parser

azul-simplecss

一个非常简单的CSS 2.1分词器

2个版本

使用旧的Rust 2015

0.1.1 2019年7月7日
0.1.0 2019年7月7日

#29 in #css-parser

Download history 28/week @ 2024-03-11 35/week @ 2024-03-18 60/week @ 2024-03-25 63/week @ 2024-04-01 21/week @ 2024-04-08 27/week @ 2024-04-15 35/week @ 2024-04-22 40/week @ 2024-04-29 27/week @ 2024-05-06 54/week @ 2024-05-13 42/week @ 2024-05-20 69/week @ 2024-05-27 29/week @ 2024-06-03 23/week @ 2024-06-10 30/week @ 2024-06-17 43/week @ 2024-06-24

128 每月下载量
用于 6 个crate(通过 azul-css-parser

MPL-2.0 许可证

30KB
552

azul-simplecss

https://github.com/RazrFalcon/simplecss 的分支(因为缺乏维护者)。在原始解析器的基础上添加了 @rules 和更好的解析。

----aa

一个非常简单的CSS 2.1数据格式无堆分配的流式解析器/分词器。

由于它非常简单,所以我们从限制开始

限制

  • @规则 不受支持。

    @import@media 等。会导致解析错误。

  • 标识符令牌必须是ASCII字符。

    CSS 类似于 #аттр { имя:значение } 会导致解析错误。

  • 属性值不会被解析。

    在CSS类似 * { width: 5px } 中,您将得到具有 5px 值作为字符串的 width 属性。

  • 属性选择器规则不会被解析。

    [foo~="warning"] 将解析为 Token::AttributeSelector("foo~=\"warning\"")

  • 没有数据验证。

    • 伪类令牌可以包含任何文本,语言伪类可以包含任何文本或甚至没有。
    • 声明可以包含任何类型的名称和值。
  • 所有注释都将被忽略。

    它们没有自己的 Token 项目。

  • CDO/CDC 注释不受支持。

  • 解析器区分大小写。所有关键字都应该小写。

  • 不支持 Unicode 转义,例如 \26

  • 没有规范定义的错误处理。

    如果出现问题,您将收到错误。解析器不会恢复无效的输入。 详细信息

使用场景

simplecss 可以用于解析非常简单或预定义的 CSS。

它体积小,无依赖,且运行速度快。

示例

简单

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

复杂

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")

无运行时依赖