docx_reader/reader/
text_box_content.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 TextBoxContent {
9	fn read<R: Read>(
10		r: &mut EventReader<R>,
11		_attrs: &[OwnedAttribute],
12	) -> Result<Self, ReaderError> {
13		let mut content = TextBoxContent::new();
14		loop {
15			let e = r.next();
16			match e {
17				Ok(XmlEvent::StartElement {
18					name, attributes, ..
19				}) => {
20					let e = XMLElement::from_str(&name.local_name)
21						.expect("should convert to XMLElement");
22					match e {
23						XMLElement::Paragraph => {
24							let p = Paragraph::read(r, &attributes)?;
25							content = content.add_paragraph(p);
26							continue;
27						}
28						XMLElement::Table => {
29							let t = Table::read(r, &attributes)?;
30							content = content.add_table(t);
31							continue;
32						}
33						_ => {}
34					}
35				}
36				Ok(XmlEvent::EndElement { name, .. }) => {
37					let e = XMLElement::from_str(&name.local_name).unwrap();
38					if e == XMLElement::TxbxContent {
39						return Ok(content);
40					}
41				}
42				Err(_) => return Err(ReaderError::XMLReadError),
43				_ => {}
44			}
45		}
46	}
47}