Skip to main content

rust_docx/
lib.rs

1//! Native and WebAssembly-compatible Word document parsing, modeling, and serialization.
2
3pub 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;
25pub use review::{extract_document_review, DocumentReview, DocumentComment, CommentTarget};
26pub use revisions::{
27    DocumentRevision, ReviewedDocument, RevisionKind, RevisionProperties, RevisionScope,
28    WordProperty,
29};
30pub use source_graph::{document_source_graph, DocumentSourceGraph};
31pub use structured::{
32    extract_document_blocks, extract_document_blocks_with_options,
33    extract_document_blocks_with_revisions, BlockDetails, BlockType, DocumentBlock, DocumentWord,
34    ExtractDocumentBlocksOptions, ParagraphDetails, ParagraphInline, SourceRef, StructuredDocument,
35    TableCellDetails,
36};
37
38pub fn parse_document_blocks(bytes: &[u8]) -> Result<StructuredDocument, String> {
39    parse_document_blocks_with_options(bytes, ExtractDocumentBlocksOptions::default())
40}
41
42pub fn parse_document_blocks_with_options(
43    bytes: &[u8],
44    options: ExtractDocumentBlocksOptions,
45) -> Result<StructuredDocument, String> {
46    let package = parse_document_bytes(bytes)?;
47    Ok(extract_document_blocks_with_options(
48        &build_doc_model(&package),
49        options,
50    ))
51}
52
53/// Parse Word bytes and return current blocks together with their tracked revisions.
54pub fn parse_document_blocks_with_revisions(
55    bytes: &[u8],
56    options: ExtractDocumentBlocksOptions,
57) -> Result<ReviewedDocument, String> {
58    let package = parse_document_bytes(bytes)?;
59    Ok(extract_document_blocks_with_revisions(
60        &build_doc_model(&package),
61        options,
62    ))
63}
64
65pub use serialize::{
66    can_preserve_image_paint_source, model_to_document_xml, serialize_doc_model, serialize_docx,
67    try_serialize_doc_model, validate_image_paint_bounds,
68};
69pub use zip::{create_minimal_docx_package, package_to_bytes, parse_docx};
70
71/// Parses either a DOCX (OOXML zip) or a legacy Word 97-2003 binary `.doc`
72/// file, detected by magic bytes, into the same in-memory package shape.
73pub fn parse_document_bytes(bytes: &[u8]) -> Result<OoxmlPackage, String> {
74    if is_doc_format(bytes) {
75        parse_doc(bytes)
76    } else {
77        parse_docx(bytes)
78    }
79}