use docling_core::DoclingDocument;
use crate::error::ConversionError;
use crate::source::SourceDocument;
macro_rules! cached_regex {
($pat:expr) => {{
static RE: std::sync::OnceLock<regex::Regex> = std::sync::OnceLock::new();
RE.get_or_init(|| regex::Regex::new($pat).unwrap())
}};
}
mod abw;
mod asciidoc;
#[cfg(feature = "web-browser")]
pub(crate) mod browser;
mod cfb;
mod chandra;
mod csv;
mod deepseek;
mod doc;
pub(crate) mod doclang;
mod docling_json;
mod docx;
mod ebcdic;
mod email;
mod epub;
mod html;
pub(crate) mod images;
mod interchange;
mod iwork;
pub(crate) mod jats;
mod latex;
mod lotus;
mod markdown;
mod mhtml;
mod msg;
mod odf;
mod officeart;
mod omml;
mod ooxml;
mod ppt;
mod pptx;
mod quattro;
mod rtf;
mod staroffice5;
pub(crate) mod svg;
pub(crate) mod uspto;
mod uspto_entities;
mod visio;
mod webvtt;
mod wpd;
mod wps;
pub(crate) mod xbrl;
mod xls;
mod xlsx;
mod xlsx_drawings;
pub use abw::AbwBackend;
pub use asciidoc::AsciiDocBackend;
pub use chandra::looks_like_chandra;
#[cfg(feature = "vlm")]
pub(crate) use chandra::parse_chandra_pages as chandra_pages;
pub use csv::CsvBackend;
pub use deepseek::{is_deepseek_markdown, is_unlimited_ocr_markdown, DeepSeekBackend};
#[cfg(feature = "vlm")]
pub(crate) use deepseek::{
normalize_unlimited_ocr as normalize_unlimited, parse_deepseek_text as deepseek_text,
};
pub use doc::DocBackend;
pub use doclang::DoclangBackend;
pub use docling_json::DoclingJsonBackend;
pub use docx::DocxBackend;
pub use ebcdic::EbcdicBackend;
pub use email::EmailBackend;
pub use epub::EpubBackend;
pub(crate) use html::convert_html;
pub use html::HtmlBackend;
pub(crate) use images::{FsImageResolver, MapImageResolver, NoFetch};
pub use interchange::InterchangeBackend;
pub use iwork::IworkBackend;
pub use jats::JatsBackend;
pub use latex::LatexBackend;
pub use lotus::LotusBackend;
pub use markdown::MarkdownBackend;
pub use mhtml::MhtmlBackend;
pub(crate) use odf::convert_odf;
pub use odf::OdfBackend;
pub use ppt::PptBackend;
pub use pptx::PptxBackend;
pub use quattro::QuattroBackend;
pub use rtf::RtfBackend;
pub use staroffice5::StarOffice5Backend;
pub use svg::SvgBackend;
pub use uspto::UsptoBackend;
pub use visio::VisioBackend;
pub use webvtt::WebVttBackend;
pub use wpd::WpdBackend;
pub use wps::WpsBackend;
pub use xbrl::XbrlBackend;
pub use xls::XlsBackend;
pub use xlsx::XlsxBackend;
pub trait DeclarativeBackend {
fn convert(&self, source: &SourceDocument) -> Result<DoclingDocument, ConversionError>;
}
pub(crate) fn maybe_prerender_html(
html: &str,
use_web_browser: bool,
) -> Result<std::borrow::Cow<'_, str>, ConversionError> {
if !use_web_browser {
return Ok(std::borrow::Cow::Borrowed(html));
}
#[cfg(feature = "web-browser")]
{
browser::render_visible_html(html)
.map(std::borrow::Cow::Owned)
.map_err(ConversionError::Browser)
}
#[cfg(not(feature = "web-browser"))]
{
Err(ConversionError::Browser(
"this build has no web-browser support; rebuild with `--features web-browser`".into(),
))
}
}