diff options
| author | gyoder <70408179+gyoder@users.noreply.github.com> | 2025-07-07 11:33:26 -0600 |
|---|---|---|
| committer | gyoder <70408179+gyoder@users.noreply.github.com> | 2025-07-07 11:33:26 -0600 |
| commit | f9b2e74b4525eabb5ea7d1df84b4e570194429b8 (patch) | |
| tree | af854d57755e0874ab26a1d5aabc95b8430fc6d2 /htmlua-parser/src/helpers.rs | |
| parent | 9a0038dacde3bcf1a10de51278d72f0f322c3817 (diff) | |
Fixed document vs fragment parsing
Diffstat (limited to 'htmlua-parser/src/helpers.rs')
| -rw-r--r-- | htmlua-parser/src/helpers.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/htmlua-parser/src/helpers.rs b/htmlua-parser/src/helpers.rs new file mode 100644 index 0000000..90439f7 --- /dev/null +++ b/htmlua-parser/src/helpers.rs @@ -0,0 +1,32 @@ +use std::{fs::File, io::{BufRead, BufReader, Read, Seek, SeekFrom}, path::PathBuf}; + +use anyhow::Result; +use kuchikiki::NodeRef; +use markup5ever::{LocalName, Namespace, QualName}; +use tendril::TendrilSink; + + + + +pub fn read_doc_from_file(path: PathBuf) -> Result<NodeRef> { + + let mut file = File::open(path)?; + let mut reader = BufReader::new(&mut file); + + let mut first_line = String::new(); + reader.read_line(&mut first_line)?; + let first_line_trimmed = first_line.trim(); + + let is_whole_doc = first_line_trimmed.eq_ignore_ascii_case("<!DOCTYPE html>"); + + file.seek(SeekFrom::Start(0))?; + let mut page_string = String::new(); + file.read_to_string(&mut page_string)?; + + if is_whole_doc { + Ok(kuchikiki::parse_html().one(page_string)) + } else { + let ctx_name = QualName::new(None, Namespace::from("http://www.w3.org/1999/xhtml"), LocalName::from("div")); + Ok(kuchikiki::parse_fragment(ctx_name, Vec::new()).one(page_string)) + } +} |
