docx_reader/reader/
paragraph_property_change.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 ParagraphPropertyChange {
9	fn read<R: Read>(
10		r: &mut EventReader<R>,
11		attrs: &[OwnedAttribute],
12	) -> Result<Self, ReaderError> {
13		let mut pc = ParagraphPropertyChange::new();
14		for attr in attrs {
15			let local_name = &attr.name.local_name;
16			if local_name == "author" {
17				pc = pc.author(&attr.value);
18			} else if local_name == "date" {
19				pc = pc.date(&attr.value);
20			}
21		}
22		loop {
23			let e = r.next();
24			match e {
25				Ok(XmlEvent::StartElement { name, .. }) => {
26					let e = XMLElement::from_str(&name.local_name)
27						.expect("should convert to XMLElement");
28					if let XMLElement::ParagraphProperty = e {
29						if let Ok(p) = ParagraphProperty::read(r, attrs) {
30							pc = pc.property(p);
31						}
32					}
33				}
34				Ok(XmlEvent::EndElement { name, .. }) => {
35					let e = XMLElement::from_str(&name.local_name).unwrap();
36					if e == XMLElement::ParagraphPropertyChange {
37						return Ok(pc);
38					}
39				}
40				Err(_) => return Err(ReaderError::XMLReadError),
41				_ => {}
42			}
43		}
44	}
45}