dump_doc_text/
dump_doc_text.rs1fn main() {
2 let path = std::env::args().nth(1).expect("path");
3 let bytes = std::fs::read(&path).expect("read");
4 let pkg = if path.ends_with(".doc") {
5 extend_docx::parse_document_bytes(&bytes).expect("parse")
6 } else {
7 extend_docx::parse_docx(&bytes).expect("parse_docx")
8 };
9 let model = extend_docx::build_doc_model(&pkg);
10 print!("{}", text(&model));
11}
12fn text(model: &extend_docx::DocModel) -> String {
13 let mut out = String::new();
14 for node in &model.nodes { walk(node, &mut out); }
15 out
16}
17fn walk(node: &extend_docx::DocNode, out: &mut String) {
18 match node {
19 extend_docx::DocNode::Paragraph(p) => {
20 for c in &p.children {
21 if let extend_docx::ParagraphChildNode::Text(r) = c { out.push_str(&r.text); }
22 }
23 out.push('\n');
24 }
25 extend_docx::DocNode::Table(t) => {
26 for row in &t.rows { for cell in &row.cells { for n in &cell.nodes {
27 match n {
28 extend_docx::TableCellContentNode::Paragraph(p) => {
29 for c in &p.children { if let extend_docx::ParagraphChildNode::Text(r) = c { out.push_str(&r.text); } }
30 out.push('\n');
31 }
32 extend_docx::TableCellContentNode::Table(t2) => walk(&extend_docx::DocNode::Table(*t2.clone()), out),
33 }
34 } } }
35 }
36 }
37}