pagesift_html/lib.rs
1//! 面向正文提取的 HTML 解析器。
2//!
3//! - 零拷贝:文本和属性值直接引用源字符串,只有含字符引用的部分才解码到一块共享缓冲区;
4//! - 紧凑的树:节点放在一个 `Vec` 里,用 u32 下标互相引用,标签是枚举;
5//! - HTML5 树构建规则里影响文本结构的部分都实现了(隐式标签、自动闭合、作用域、表格、
6//! 外部内容、raw text),见 `builder` 模块的说明;
7//! - CSS 选择器([`Selector`])和 HTML 序列化([`NodeRef::html`])。
8//!
9//! ```
10//! let doc = pagesift_html::Html::parse("<p>Fish & chips<p>Peas");
11//! let paragraphs: Vec<String> = doc
12//! .root()
13//! .descendants()
14//! .filter(|n| n.tag() == Some(pagesift_html::Tag::P))
15//! .map(|n| n.text())
16//! .collect();
17//! assert_eq!(paragraphs, ["Fish & chips", "Peas"]);
18//! ```
19
20#![forbid(unsafe_code)]
21
22mod builder;
23mod dom;
24mod entities;
25mod entity;
26mod select;
27mod serialize;
28mod tag;
29
30pub use dom::{Ancestors, Children, Descendants, Element, Html, NodeId, NodeRef};
31pub use select::{Select, Selector, SelectorError};
32pub use tag::Tag;