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