summaryrefslogtreecommitdiffstats
path: root/src/utils/html_to_md.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-09-06 08:08:55 +0800
committerGitHub <noreply@github.com>2024-09-06 08:08:55 +0800
commit555f4f5d128d018912144b0e7f2b3a50223bf713 (patch)
tree46c72e49bb34817fcee1bece140831c11b1580e0 /src/utils/html_to_md.rs
parent791b6150afd626baabc2d71acc1dc3dcb70ad4d0 (diff)
downloadaichat-555f4f5d128d018912144b0e7f2b3a50223bf713.tar.gz
feat: better html to markdown converter (#840)
Diffstat (limited to 'src/utils/html_to_md.rs')
-rw-r--r--src/utils/html_to_md.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/utils/html_to_md.rs b/src/utils/html_to_md.rs
new file mode 100644
index 0000000..2bc5e54
--- /dev/null
+++ b/src/utils/html_to_md.rs
@@ -0,0 +1,18 @@
+use std::{cell::RefCell, rc::Rc};
+
+use html_to_markdown::{markdown, TagHandler};
+
+pub fn html_to_md(html: &str) -> String {
+ let mut handlers: Vec<TagHandler> = vec![
+ Rc::new(RefCell::new(markdown::ParagraphHandler)),
+ Rc::new(RefCell::new(markdown::HeadingHandler)),
+ Rc::new(RefCell::new(markdown::ListHandler)),
+ Rc::new(RefCell::new(markdown::TableHandler::new())),
+ Rc::new(RefCell::new(markdown::StyledTextHandler)),
+ Rc::new(RefCell::new(markdown::CodeHandler)),
+ Rc::new(RefCell::new(markdown::WebpageChromeRemover)),
+ ];
+
+ html_to_markdown::convert_html_to_markdown(html.as_bytes(), &mut handlers)
+ .unwrap_or_else(|_| html.to_string())
+}