umya_spreadsheet/structs/drawing/
supplemental_font.rs

1// a:font
2use crate::reader::driver::*;
3use crate::structs::StringValue;
4use crate::writer::driver::*;
5use quick_xml::events::{BytesStart, Event};
6use quick_xml::Reader;
7use quick_xml::Writer;
8use std::io::Cursor;
9
10#[derive(Clone, Default, Debug)]
11pub struct SupplementalFont {
12    script: StringValue,
13    typeface: StringValue,
14}
15
16impl SupplementalFont {
17    #[inline]
18    pub fn get_script(&self) -> &str {
19        self.script.get_value_str()
20    }
21
22    #[inline]
23    pub fn set_script<S: Into<String>>(&mut self, value: S) -> &mut Self {
24        self.script.set_value(value);
25        self
26    }
27
28    #[inline]
29    pub fn get_typeface(&self) -> &str {
30        self.typeface.get_value_str()
31    }
32
33    #[inline]
34    pub fn set_typeface<S: Into<String>>(&mut self, value: S) -> &mut Self {
35        self.typeface.set_value(value);
36        self
37    }
38
39    #[inline]
40    pub(crate) fn set_attributes<R: std::io::BufRead>(
41        &mut self,
42        reader: &mut Reader<R>,
43        e: &BytesStart,
44        empty_flag: bool,
45    ) {
46        set_string_from_xml!(self, e, script, "script");
47        set_string_from_xml!(self, e, typeface, "typeface");
48
49        if empty_flag {
50            return;
51        }
52
53        xml_read_loop!(
54            reader,
55            Event::End(ref e) => {
56                if e.name().into_inner() == b"a:font" {
57                    return;
58                }
59            },
60            Event::Eof => panic!("Error: Could not find {} end element", "a:font")
61        );
62    }
63
64    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
65        // a:font
66        write_start_tag(
67            writer,
68            "a:font",
69            vec![
70                ("script", self.script.get_value_str()),
71                ("typeface", self.typeface.get_value_str()),
72            ],
73            true,
74        );
75    }
76}