1pub mod chart;
4pub mod doc;
5pub mod emf;
6pub mod model;
7pub mod package;
8pub mod parse;
9pub mod revisions;
10pub mod review;
11pub mod serialize;
12pub mod source_graph;
13pub mod structured;
14pub mod table_grid;
15mod wmf;
16pub mod xml;
17mod xml_index;
18pub mod zip;
19
20pub use chart::{extract_chart_data, ChartCategory, ChartData, ChartPoint, ChartSeries};
21pub use doc::{is_doc_format, parse_doc};
22pub use model::*;
23pub use package::*;
24pub use parse::{build_doc_model, build_doc_model_with_options};
25pub use rust_office_art::ParseOptions;
26pub use review::{extract_document_review, DocumentReview, DocumentComment, CommentTarget};
27pub use revisions::{
28 DocumentRevision, ReviewedDocument, RevisionKind, RevisionProperties, RevisionScope,
29 WordProperty,
30};
31pub use source_graph::{document_source_graph, DocumentSourceGraph};
32pub use structured::{
33 extract_document_blocks, extract_document_blocks_with_options,
34 extract_document_blocks_with_revisions, BlockDetails, BlockType, DocumentBlock, DocumentWord,
35 ExtractDocumentBlocksOptions, ParagraphDetails, ParagraphInline, SourceRef, StructuredDocument,
36 TableCellDetails,
37};
38
39pub fn parse_document_blocks(bytes: &[u8]) -> Result<StructuredDocument, String> {
40 parse_document_blocks_with_options(bytes, ExtractDocumentBlocksOptions::default())
41}
42
43pub fn parse_document_blocks_with_options(
44 bytes: &[u8],
45 options: ExtractDocumentBlocksOptions,
46) -> Result<StructuredDocument, String> {
47 let package = parse_document_bytes(bytes)?;
48 Ok(extract_document_blocks_with_options(
49 &build_doc_model_with_options(
50 &package,
51 &ParseOptions {
52 include_3d_models: options.include_3d_models,
53 },
54 ),
55 options,
56 ))
57}
58
59pub fn parse_document_blocks_with_revisions(
61 bytes: &[u8],
62 options: ExtractDocumentBlocksOptions,
63) -> Result<ReviewedDocument, String> {
64 let package = parse_document_bytes(bytes)?;
65 Ok(extract_document_blocks_with_revisions(
66 &build_doc_model_with_options(
67 &package,
68 &ParseOptions {
69 include_3d_models: options.include_3d_models,
70 },
71 ),
72 options,
73 ))
74}
75
76pub use serialize::{
77 can_preserve_image_paint_source, model_to_document_xml, serialize_doc_model, serialize_docx,
78 try_serialize_doc_model, validate_image_paint_bounds,
79};
80pub use zip::{create_minimal_docx_package, package_to_bytes, parse_docx};
81
82pub fn parse_document_bytes(bytes: &[u8]) -> Result<OoxmlPackage, String> {
85 if is_doc_format(bytes) {
86 parse_doc(bytes)
87 } else {
88 parse_docx(bytes)
89 }
90}