3 个版本
0.5.2 | 2023 年 9 月 28 日 |
---|---|
0.5.1 | 2023 年 9 月 3 日 |
0.5.0 | 2023 年 8 月 19 日 |
0.4.0 |
|
0.1.0 |
|
#742 在 网页编程 中
每月 137 次下载
550KB
17K SLoC
html5tokenizer
符合规范的 HTML 解析 需要标记化和树构建。虽然这个crate实现了一个符合规范的HTML标记化器,但它没有实现任何树构建。相反,它只提供了一个 NaiveParser
,可以使用如下方式
use std::fmt::Write;
use html5tokenizer::{NaiveParser, Token};
let html = "<title >hello world</title>";
let mut new_html = String::new();
for token in NaiveParser::new(html).flatten() {
match token {
Token::StartTag(tag) => {
write!(new_html, "<{}>", tag.name).unwrap();
}
Token::Char(c) => {
write!(new_html, "{c}").unwrap();
}
Token::EndTag(tag) => {
write!(new_html, "</{}>", tag.name).unwrap();
}
Token::EndOfFile => {},
_ => panic!("unexpected input"),
}
}
assert_eq!(new_html, "<title>hello world</title>");
这个库可以提供源代码片段。例如,请参阅 examples/spans.rs
,它产生以下输出
note:
┌─ file.html:1:2
│
1 │ <img src=example.jpg alt="some description">
│ ^^^ ^^^ ^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^ attr value
│ │ │ │ │
│ │ │ │ attr name
│ │ │ attr value
│ │ attr name
│ tag name
限制
-
此crate尚未实现树构建
(这是符合规范HTML解析所必需的)。 -
此crate尚未实现 字符编码检测。
合规性与测试
该标记化器通过了 html5lib标记化器测试套件。该库尚未进行模糊测试。
致谢
html5tokenizer是从 html5gum 0.2.1 分支出来的,由 Markus Unterwaditzer 创建,他为实现了所有 80 (!) 标记化器状态而应受到极大的赞誉。
- 添加了代码片段支持。
- API 已经过修订。
有关详细信息,请参阅 变更日志。
许可证
在 MIT 许可证下发布,请参阅 LICENSE 文件。