docx_reader/reader/
table_cell.rs

1use 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}