docx_reader/reader/
font_scheme.rs

1use std::io::Read;
2use std::str::FromStr;
3use xml::attribute::OwnedAttribute;
4use xml::reader::{EventReader, XmlEvent};
5
6use crate::reader::*;
7
8impl ElementReader for FontScheme {
9	fn read<R: Read>(
10		r: &mut EventReader<R>,
11		_attrs: &[OwnedAttribute],
12	) -> Result<Self, ReaderError> {
13		let mut fs = FontScheme::new();
14		loop {
15			let e = r.next();
16			match e {
17				Ok(XmlEvent::StartElement {
18					attributes, name, ..
19				}) => {
20					match name.prefix.as_deref() {
21						Some("a") => {
22							let e = AXMLElement::from_str(&name.local_name).unwrap();
23							match e {
24								AXMLElement::MajorFont => {
25									if let Ok(f) = FontGroup::read(r, &attributes) {
26										fs.major_font = f;
27									}
28								}
29								AXMLElement::MinorFont => {
30									if let Ok(f) = FontGroup::read(r, &attributes) {
31										fs.minor_font = f;
32									}
33								}
34								_ => {}
35							}
36						}
37						_ => {}
38					};
39				}
40				Ok(XmlEvent::EndElement { name, .. }) => {
41					let e = AXMLElement::from_str(&name.local_name).unwrap();
42					match e {
43						AXMLElement::FontScheme => {
44							return Ok(fs);
45						}
46						_ => {}
47					}
48				}
49				Err(_) => return Err(ReaderError::XMLReadError),
50				_ => {}
51			}
52		}
53	}
54}