html_to_markdown_rs/
lib.rs

1//! # html-to-markdown
2//!
3//! A modern, high-performance library for converting HTML to Markdown.
4//! Built with html5ever for fast, memory-efficient HTML parsing.
5
6pub mod converter;
7pub mod error;
8pub mod hocr;
9pub mod options;
10pub mod sanitizer;
11pub mod text;
12pub mod wrapper;
13
14pub use error::{ConversionError, Result};
15pub use options::{
16    CodeBlockStyle, ConversionOptions, HeadingStyle, HighlightStyle, ListIndentType, NewlineStyle, ParsingOptions,
17    PreprocessingOptions, PreprocessingPreset, WhitespaceMode,
18};
19
20/// Convert HTML to Markdown.
21///
22/// This function takes HTML input and converts it to Markdown using the provided options.
23/// If no options are provided, default options will be used.
24///
25/// # Arguments
26///
27/// * `html` - The HTML string to convert
28/// * `options` - Optional conversion options
29///
30/// # Example
31///
32/// ```
33/// use html_to_markdown::{convert, ConversionOptions};
34///
35/// let html = "<h1>Hello World</h1>";
36/// let markdown = convert(html, None).unwrap();
37/// assert!(markdown.contains("Hello World"));
38/// ```
39pub fn convert(html: &str, options: Option<ConversionOptions>) -> Result<String> {
40    let options = options.unwrap_or_default();
41
42    let normalized_html = html.replace("\r\n", "\n").replace('\r', "\n");
43
44    let clean_html = if options.preprocessing.enabled {
45        sanitizer::sanitize(&normalized_html, &options.preprocessing)?
46    } else {
47        normalized_html
48    };
49
50    let markdown = converter::convert_html(&clean_html, &options)?;
51
52    if options.wrap {
53        Ok(wrapper::wrap_markdown(&markdown, &options))
54    } else {
55        Ok(markdown)
56    }
57}