scrape_core/lib.rs
1//! # scrape-core
2//!
3//! High-performance HTML parsing library with CSS selector support.
4//!
5//! This crate provides the core functionality for parsing HTML documents
6//! and querying them using CSS selectors. It is designed to be fast,
7//! memory-efficient, and spec-compliant.
8//!
9//! ## Quick Start
10//!
11//! ```rust
12//! use scrape_core::{Html5everParser, Parser, Soup, SoupConfig};
13//!
14//! // Parse HTML using Soup (high-level API)
15//! let html = "<html><body><div class=\"product\">Hello</div></body></html>";
16//! let soup = Soup::parse(html);
17//!
18//! // Find elements using CSS selectors
19//! if let Ok(Some(div)) = soup.find("div.product") {
20//! assert_eq!(div.text(), "Hello");
21//! }
22//!
23//! // Or use the parser directly (low-level API)
24//! let parser = Html5everParser;
25//! let document = parser.parse(html).unwrap();
26//! assert!(document.root().is_some());
27//! ```
28//!
29//! ## Features
30//!
31//! - **Fast parsing**: Built on `html5ever` for spec-compliant HTML5 parsing
32//! - **CSS selectors**: Full CSS selector support via the `selectors` crate
33//! - **Memory efficient**: Arena-based allocation for DOM nodes
34//! - **SIMD acceleration**: Optional SIMD support for faster byte scanning
35//!
36//! ## CSS Selector Support
37//!
38//! The query engine supports most CSS3 selectors:
39//!
40//! ```rust
41//! use scrape_core::Soup;
42//!
43//! let html = r#"
44//! <div class="container">
45//! <ul id="list">
46//! <li class="item active">One</li>
47//! <li class="item">Two</li>
48//! <li class="item">Three</li>
49//! </ul>
50//! </div>
51//! "#;
52//! let soup = Soup::parse(html);
53//!
54//! // Type selector
55//! let divs = soup.find_all("div").unwrap();
56//!
57//! // Class selector
58//! let items = soup.find_all(".item").unwrap();
59//!
60//! // ID selector
61//! let list = soup.find("#list").unwrap();
62//!
63//! // Compound selector
64//! let active = soup.find("li.item.active").unwrap();
65//!
66//! // Descendant combinator
67//! let nested = soup.find_all("div li").unwrap();
68//!
69//! // Child combinator
70//! let direct = soup.find_all("ul > li").unwrap();
71//!
72//! // Attribute selectors
73//! let with_id = soup.find_all("[id]").unwrap();
74//! ```
75
76#![warn(missing_docs)]
77#![warn(clippy::all)]
78#![warn(clippy::pedantic)]
79
80mod dom;
81mod error;
82mod parser;
83pub mod query;
84#[cfg(feature = "simd")]
85pub mod simd;
86mod soup;
87mod tag;
88
89// Error types
90// DOM types
91pub use dom::{AncestorsIter, ChildrenIter, DescendantsIter, Document, Node, NodeId, NodeKind};
92pub use error::{Error, Result};
93// Parser types
94pub use parser::{Html5everParser, ParseConfig, ParseError, ParseResult, Parser};
95// Query types
96pub use query::{Filter, QueryError, QueryResult};
97// High-level API
98pub use soup::{Soup, SoupConfig};
99pub use tag::Tag;