Skip to main content

extend_docx/
lib.rs

1//! Native and WebAssembly-compatible Word document parsing, modeling, and serialization.
2
3pub mod doc;
4pub mod emf;
5pub mod model;
6pub mod package;
7pub mod parse;
8pub mod serialize;
9pub mod source_graph;
10pub mod structured;
11pub mod table_grid;
12mod wmf;
13pub mod xml;
14mod xml_index;
15pub mod zip;
16
17pub use doc::{is_doc_format, parse_doc};
18pub use model::*;
19pub use package::*;
20pub use parse::build_doc_model;
21pub use source_graph::{document_source_graph, DocumentSourceGraph};
22pub use structured::{
23    extract_document_blocks, extract_document_blocks_with_options, BlockDetails, BlockType,
24    DocumentBlock, DocumentWord, ExtractDocumentBlocksOptions, ParagraphDetails, ParagraphInline,
25    SourceRef, StructuredDocument, TableCellDetails,
26};
27
28pub fn parse_document_blocks(bytes: &[u8]) -> Result<StructuredDocument, String> {
29    parse_document_blocks_with_options(bytes, ExtractDocumentBlocksOptions::default())
30}
31
32pub fn parse_document_blocks_with_options(
33    bytes: &[u8],
34    options: ExtractDocumentBlocksOptions,
35) -> Result<StructuredDocument, String> {
36    let package = parse_document_bytes(bytes)?;
37    Ok(extract_document_blocks_with_options(
38        &build_doc_model(&package),
39        options,
40    ))
41}
42pub use serialize::{
43    can_preserve_image_paint_source, model_to_document_xml, serialize_doc_model, serialize_docx,
44    try_serialize_doc_model, validate_image_paint_bounds,
45};
46pub use zip::{create_minimal_docx_package, package_to_bytes, parse_docx};
47
48/// Parses either a DOCX (OOXML zip) or a legacy Word 97-2003 binary `.doc`
49/// file, detected by magic bytes, into the same in-memory package shape.
50pub fn parse_document_bytes(bytes: &[u8]) -> Result<OoxmlPackage, String> {
51    if is_doc_format(bytes) {
52        parse_doc(bytes)
53    } else {
54        parse_docx(bytes)
55    }
56}