diff options
| author | Grace Yoder <70408179+gyoder@users.noreply.github.com> | 2025-07-07 12:44:51 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-07 12:44:51 -0600 |
| commit | 262a2e23d89d35f78d8972f5b560c7e5ee7225ee (patch) | |
| tree | e8eedd8f47c8ed2a20a34b3017f9d992eefef403 /htmlua-parser/src/helpers.rs | |
| parent | 3d50b12df4bd1e81248256893bd9a83498a0dae9 (diff) | |
| parent | 6c3f257942d2b1d88aa471f52d5b0241492730ae (diff) | |
Merge branch 'main' into syntect
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)) + } +} |
