docx_reader/reader/
table_cell.rs1use std::io::Read;
2use std::str::FromStr;
3use xml::attribute::OwnedAttribute;
4use xml::reader::{EventReader, XmlEvent};
5
6use super::*;
7
8impl ElementReader for TableCell {
9 fn read<R: Read>(r: &mut EventReader<R>, _: &[OwnedAttribute]) -> Result<Self, ReaderError> {
10 let mut cell = TableCell::new();
11 loop {
12 let e = r.next();
13
14 match e {
15 Ok(XmlEvent::StartElement {
16 attributes, name, ..
17 }) => {
18 let e = XMLElement::from_str(&name.local_name).unwrap();
19 match e {
20 XMLElement::Paragraph => {
21 let p = Paragraph::read(r, &attributes)?;
22 cell = cell.add_paragraph(p);
23 continue;
24 }
25 XMLElement::StructuredDataTag => {
26 if let Ok(tag) = StructuredDataTag::read(r, &attributes) {
27 cell = cell.add_structured_data_tag(tag);
28 }
29 continue;
30 }
31 XMLElement::TableCellProperty => {
32 if let Ok(p) = TableCellProperty::read(r, &attributes) {
33 cell.property = p;
34 }
35 continue;
36 }
37 XMLElement::Table => {
38 if let Ok(table) = Table::read(r, &attributes) {
39 cell = cell.add_table(table)
40 }
41 }
42 _ => {}
43 }
44 }
45 Ok(XmlEvent::EndElement { name, .. }) => {
46 let e = XMLElement::from_str(&name.local_name).unwrap();
47 if e == XMLElement::TableCell {
48 return Ok(cell);
49 }
50 }
51 Err(_) => return Err(ReaderError::XMLReadError),
52 _ => {}
53 }
54 }
55 }
56}