summaryrefslogtreecommitdiff
path: root/htmlua-parser/src/helpers.rs
diff options
context:
space:
mode:
authorgyoder <70408179+gyoder@users.noreply.github.com>2025-07-07 11:33:26 -0600
committergyoder <70408179+gyoder@users.noreply.github.com>2025-07-07 11:33:26 -0600
commitf9b2e74b4525eabb5ea7d1df84b4e570194429b8 (patch)
treeaf854d57755e0874ab26a1d5aabc95b8430fc6d2 /htmlua-parser/src/helpers.rs
parent9a0038dacde3bcf1a10de51278d72f0f322c3817 (diff)
Fixed document vs fragment parsing
Diffstat (limited to 'htmlua-parser/src/helpers.rs')
-rw-r--r--htmlua-parser/src/helpers.rs32
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))
+ }
+}