# This file is auto-generated by alef — DO NOT EDIT. # alef:hash:526c92c34b7201230da79912b4ec8eb9ecc5c6683951a43cd0234a619377accd # To regenerate: alef generate # To verify freshness: alef verify --exit-code defmodule HtmlToMarkdown do @moduledoc "High-level API for html_to_markdown" @doc "Convert HTML to Markdown, Djot, or plain text." @spec convert(String.t()) :: {:ok, map()} | {:error, atom, String.t()} def convert(html) do HtmlToMarkdown.Native.convert(html, nil) end @doc "Convert HTML to Markdown, Djot, or plain text." @spec convert(String.t(), String.t() | nil) :: {:ok, map()} | {:error, atom, String.t()} def convert(html, options) when is_map(options) do {visitor, clean_opts} = Map.pop(options, :visitor) if is_map(visitor) do {:ok, _} = HtmlToMarkdown.Native.convert_with_visitor( html, if(map_size(clean_opts) == 0, do: nil, else: Jason.encode!(clean_opts)), visitor ) do_visitor_receive_loop(visitor) else HtmlToMarkdown.Native.convert(html, if(map_size(clean_opts) == 0, do: nil, else: Jason.encode!(clean_opts))) end end def convert(html, nil) do HtmlToMarkdown.Native.convert(html, nil) end @doc false defp do_visitor_receive_loop(visitor) do receive do {:visitor_callback, ref_id, callback_name, args} -> result = case Map.get(visitor, callback_name) do nil -> "Continue" fun -> apply_visitor_callback(fun, args) end HtmlToMarkdown.Native.visitor_reply(ref_id, result) do_visitor_receive_loop(visitor) {:ok, result} -> {:ok, result} {:error, reason} -> {:error, reason} after 30_000 -> {:error, "visitor callback timeout after 30s"} end end @doc false defp apply_visitor_callback(fun, args) do # `args` arrives as a native Erlang/Elixir map built on the Rust side (struct params as # native maps, primitives as native terms) — no JSON envelope to decode. result = fun.(args) case result do "Continue" -> "Continue" :continue -> "Continue" "Skip" -> "Skip" :skip -> "Skip" "PreserveHtml" -> "PreserveHtml" :preserve_html -> "PreserveHtml" {:custom, value} -> to_string(value) binary when is_binary(binary) -> binary _ -> "Continue" end end end