docx_reader/reader/
table_property.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 TableProperty {
9	fn read<R: Read>(
10		r: &mut EventReader<R>,
11		_attrs: &[OwnedAttribute],
12	) -> Result<Self, ReaderError> {
13		let mut tp = TableProperty::new();
14		tp = tp.set_borders(TableBorders::with_empty());
15		loop {
16			let e = r.next();
17			match e {
18				Ok(XmlEvent::StartElement {
19					attributes, name, ..
20				}) => {
21					let e = XMLElement::from_str(&name.local_name).unwrap();
22					match e {
23						XMLElement::TableBorders => {
24							if let Ok(borders) = TableBorders::read(r, &attributes) {
25								tp = tp.set_borders(borders);
26							}
27						}
28						XMLElement::TableCellMargin => {
29							if let Ok(margins) = TableCellMargins::read(r, &attributes) {
30								tp = tp.set_margins(margins);
31							}
32						}
33						_ => {}
34					}
35				}
36				Ok(XmlEvent::EndElement { name, .. }) => {
37					let e = XMLElement::from_str(&name.local_name).unwrap();
38					if e == XMLElement::TableProperty {
39						return Ok(tp);
40					}
41				}
42				Err(_) => return Err(ReaderError::XMLReadError),
43				_ => {}
44			}
45		}
46	}
47}