umya_spreadsheet/structs/drawing/
run.rs1use super::run_properties::RunProperties;
2use crate::reader::driver::*;
3use crate::writer::driver::*;
4use quick_xml::events::{BytesStart, Event};
5use quick_xml::Reader;
6use quick_xml::Writer;
7use std::io::Cursor;
8
9#[derive(Clone, Default, Debug)]
10pub struct Run {
11 text: Box<str>,
12 run_properties: RunProperties,
13}
14
15impl Run {
16 #[inline]
17 pub fn get_text(&self) -> &str {
18 &self.text
19 }
20
21 #[inline]
22 pub fn set_text<S: Into<String>>(&mut self, value: S) {
23 self.text = value.into().into_boxed_str();
24 }
25
26 #[inline]
27 pub fn get_run_properties(&self) -> &RunProperties {
28 &self.run_properties
29 }
30
31 #[inline]
32 pub fn get_run_properties_mut(&mut self) -> &mut RunProperties {
33 &mut self.run_properties
34 }
35
36 #[inline]
37 pub fn set_run_properties(&mut self, value: RunProperties) {
38 self.run_properties = value;
39 }
40
41 pub(crate) fn set_attributes<R: std::io::BufRead>(
42 &mut self,
43 reader: &mut Reader<R>,
44 _e: &BytesStart,
45 ) {
46 xml_read_loop!(
47 reader,
48 Event::Start(ref e) => {
49 if e.name().0 == b"a:rPr" {
50 self.run_properties.set_attributes(reader, e, false);
51 }
52 },
53 Event::Empty(ref e) => {
54 if e.name().0 == b"a:rPr" {
55 self.run_properties.set_attributes(reader, e, true);
56 }
57 },
58 Event::Text(e) => {
59 self.set_text(e.unescape().unwrap());
60 },
61 Event::End(ref e) => {
62 if e.name().0 == b"a:r" {
63 return;
64 }
65 },
66 Event::Eof => panic!("Error: Could not find {} end element", "a:r")
67 );
68 }
69
70 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
71 write_start_tag(writer, "a:r", vec![], false);
73
74 self.run_properties.write_to_rpr(writer);
76
77 write_start_tag(writer, "a:t", vec![], false);
79 write_text_node(writer, &*self.text);
80 write_end_tag(writer, "a:t");
81
82 write_end_tag(writer, "a:r");
83 }
84}