1pub use docparser_core as core;
19
20pub use docparser_core::emit;
21pub use docparser_core::engine::DocumentEngine;
22pub use docparser_core::error::{DocError, ErrorCode, Result};
23pub use docparser_core::model::{
24 Block, BlockKind, DocMeta, Document, Image, Page, Rect, TableData,
25};
26pub use docparser_core::plugin::{
27 BackendKind, FormatPlugin, ParseCapability, ProcessCapability, RawDoc, RawImage, RawPage,
28 RawTextItem,
29};
30pub use docparser_core::policy::{BackendPolicy, Profile};
31pub use docparser_core::registry::{Registry, RegistryError};
32
33#[cfg(feature = "pdf")]
34pub use docparser_pdf as pdf;
35
36#[cfg(any(
37 feature = "office",
38 feature = "docx",
39 feature = "xlsx",
40 feature = "pptx"
41))]
42pub use docparser_office as office;
43
44#[cfg(feature = "epub")]
45pub use docparser_epub as epub;
46
47pub fn engine() -> DocumentEngine {
51 let mut reg = Registry::new();
52 docparser_core::plugins::text::register_defaults(&mut reg);
53 #[cfg(feature = "epub")]
54 docparser_epub::register_defaults(&mut reg);
55 #[cfg(feature = "pdf")]
56 docparser_pdf::register_defaults(&mut reg);
57 #[cfg(any(
58 feature = "office",
59 feature = "docx",
60 feature = "xlsx",
61 feature = "pptx"
62 ))]
63 docparser_office::register_defaults(&mut reg);
64 DocumentEngine::new(reg)
65}
66
67pub fn engine_with(policy: BackendPolicy) -> DocumentEngine {
69 engine().with_policy(policy)
70}
71
72pub fn parse(path: &str) -> Result<Document> {
74 engine().parse(path)
75}
76
77pub fn parse_markdown(path: &str) -> Result<String> {
79 engine().parse(path).map(|d| emit::to_markdown(&d))
80}
81
82pub fn parse_text(path: &str) -> Result<String> {
84 engine().parse(path).map(|d| emit::to_text(&d))
85}
86
87pub fn parse_json(path: &str) -> Result<String> {
89 let doc = engine().parse(path)?;
90 serde_json::to_string(&doc).map_err(|e| DocError::corrupt(format!("序列化 IR 失败: {e}")))
91}