pub use docparser_core as core;
pub use docparser_core::emit;
pub use docparser_core::engine::DocumentEngine;
pub use docparser_core::error::{DocError, ErrorCode, Result};
pub use docparser_core::model::{
Block, BlockKind, DocMeta, Document, Image, Page, Rect, TableData,
};
pub use docparser_core::plugin::{
BackendKind, FormatPlugin, ParseCapability, ProcessCapability, RawDoc, RawImage, RawPage,
RawTextItem,
};
pub use docparser_core::policy::{BackendPolicy, Profile};
pub use docparser_core::registry::{Registry, RegistryError};
#[cfg(feature = "pdf")]
pub use docparser_pdf as pdf;
#[cfg(any(
feature = "office",
feature = "docx",
feature = "xlsx",
feature = "pptx"
))]
pub use docparser_office as office;
#[cfg(feature = "epub")]
pub use docparser_epub as epub;
pub fn engine() -> DocumentEngine {
let mut reg = Registry::new();
docparser_core::plugins::text::register_defaults(&mut reg);
#[cfg(feature = "epub")]
docparser_epub::register_defaults(&mut reg);
#[cfg(feature = "pdf")]
docparser_pdf::register_defaults(&mut reg);
#[cfg(any(
feature = "office",
feature = "docx",
feature = "xlsx",
feature = "pptx"
))]
docparser_office::register_defaults(&mut reg);
DocumentEngine::new(reg)
}
pub fn engine_with(policy: BackendPolicy) -> DocumentEngine {
engine().with_policy(policy)
}
pub fn parse(path: &str) -> Result<Document> {
engine().parse(path)
}
pub fn parse_markdown(path: &str) -> Result<String> {
engine().parse(path).map(|d| emit::to_markdown(&d))
}
pub fn parse_text(path: &str) -> Result<String> {
engine().parse(path).map(|d| emit::to_text(&d))
}
pub fn parse_json(path: &str) -> Result<String> {
let doc = engine().parse(path)?;
serde_json::to_string(&doc).map_err(|e| DocError::corrupt(format!("序列化 IR 失败: {e}")))
}