///|
/// Convert an HTML string to CommonMark Markdown.
///
/// Mirrors `htmltomarkdown.ConvertString` of the Go library
/// JohannesKaufmann/html-to-markdown v2 (base + commonmark plugins).
///
/// # Example
/// ```mbt check
/// test {
///   inspect(
///     @html2md.convert("

Title

Some bold text.

"), /// content=( /// #|# Title /// #| /// #|Some **bold** text. /// ), /// ) /// } /// ``` pub fn convert( html : String, domain? : String = "", heading_style? : HeadingStyle = Atx, em_delimiter? : String = "*", strong_delimiter? : String = "**", horizontal_rule? : String = "* * *", bullet_list_marker? : String = "-", code_block_fence? : String = "```", escape_mode? : EscapeMode = Smart, link_empty_href_behavior? : LinkBehavior = Render, link_empty_content_behavior? : LinkBehavior = Render, list_end_comment? : Bool = true, ) -> String raise ConvertError { let doc = @parser.parse(html, sanitize=false) catch { err => raise ParseFailed("\{to_repr(err)}") } convert_dom( doc.root, domain~, heading_style~, em_delimiter~, strong_delimiter~, horizontal_rule~, bullet_list_marker~, code_block_fence~, escape_mode~, link_empty_href_behavior~, link_empty_content_behavior~, list_end_comment~, ) } ///| /// Convert an already parsed DOM tree (from `bobzhang/html_parser`) to /// CommonMark Markdown. /// /// Note: the tree is normalized **in place** during conversion (nodes may be /// removed, merged or renamed). Pass a `clone_node(deep=true)` copy if the /// tree must stay untouched. pub fn convert_dom( doc : @dom.Node, domain? : String = "", heading_style? : HeadingStyle = Atx, em_delimiter? : String = "*", strong_delimiter? : String = "**", horizontal_rule? : String = "* * *", bullet_list_marker? : String = "-", code_block_fence? : String = "```", escape_mode? : EscapeMode = Smart, link_empty_href_behavior? : LinkBehavior = Render, link_empty_content_behavior? : LinkBehavior = Render, list_end_comment? : Bool = true, ) -> String raise ConvertError { let options = Options::build( domain~, heading_style~, em_delimiter~, strong_delimiter~, horizontal_rule~, bullet_list_marker~, code_block_fence~, escape_mode~, link_empty_href_behavior~, link_empty_content_behavior~, list_end_comment~, ) run_pipeline(doc, options) }