umya_spreadsheet/structs/
from_marker.rs1use 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 FromMarker {
11 col: usize,
12 col_off: usize,
13 row: usize,
14 row_off: usize,
15}
16
17impl FromMarker {
18 #[inline]
19 pub fn get_col(&self) -> &usize {
20 &self.col
21 }
22
23 #[inline]
24 pub fn set_col(&mut self, value: usize) -> &mut FromMarker {
25 self.col = value;
26 self
27 }
28
29 #[inline]
30 pub fn get_col_off(&self) -> &usize {
31 &self.col_off
32 }
33
34 #[inline]
35 pub fn set_col_off(&mut self, value: usize) -> &mut FromMarker {
36 self.col_off = value;
37 self
38 }
39
40 #[inline]
41 pub fn get_row(&self) -> &usize {
42 &self.row
43 }
44
45 #[inline]
46 pub fn set_row(&mut self, value: usize) -> &mut FromMarker {
47 self.row = value;
48 self
49 }
50
51 #[inline]
52 pub fn get_row_off(&self) -> &usize {
53 &self.row_off
54 }
55
56 #[inline]
57 pub fn set_row_off(&mut self, value: usize) -> &mut FromMarker {
58 self.row_off = value;
59 self
60 }
61
62 #[inline]
63 pub(crate) fn _adjustment_insert_row(&mut self, num_rows: &usize) {
64 self.row += num_rows;
65 }
66
67 #[inline]
68 pub(crate) fn _adjustment_insert_column(&mut self, num_cols: &usize) {
69 self.col += num_cols;
70 }
71
72 #[inline]
73 pub(crate) fn _adjustment_remove_row(&mut self, num_rows: &usize) {
74 self.row = if &self.row > num_rows {
75 self.row - num_rows
76 } else {
77 1
78 };
79 }
80
81 #[inline]
82 pub(crate) fn _adjustment_remove_column(&mut self, num_cols: &usize) {
83 self.col = if &self.col > num_cols {
84 self.col - num_cols
85 } else {
86 1
87 };
88 }
89
90 pub(crate) fn set_attributes<R: std::io::BufRead>(
91 &mut self,
92 reader: &mut Reader<R>,
93 _e: &BytesStart,
94 ) {
95 let mut string_value: String = String::new();
96 xml_read_loop!(
97 reader,
98 Event::Text(e) => string_value = e.unescape().unwrap().to_string(),
99 Event::End(ref e) => match e.name().into_inner() {
100 b"xdr:col" => {
101 self.col = string_value.parse::<usize>().unwrap();
102 }
103 b"xdr:colOff" => {
104 self.col_off = string_value.parse::<usize>().unwrap();
105 }
106 b"xdr:row" => {
107 self.row = string_value.parse::<usize>().unwrap();
108 }
109 b"xdr:rowOff" => {
110 self.row_off = string_value.parse::<usize>().unwrap();
111 }
112 b"from" => return,
113 _ => (),
114 },
115 Event::Eof => panic!("Error: Could not find {} end element", "from")
116 );
117 }
118
119 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
120 write_start_tag(writer, "from", vec![], false);
122
123 write_start_tag(writer, "xdr:col", vec![], false);
125 write_text_node(writer, &self.col.to_string());
126 write_end_tag(writer, "xdr:col");
127
128 write_start_tag(writer, "xdr:colOff", vec![], false);
130 write_text_node(writer, &self.col_off.to_string());
131 write_end_tag(writer, "xdr:colOff");
132
133 write_start_tag(writer, "xdr:row", vec![], false);
135 write_text_node(writer, &self.row.to_string());
136 write_end_tag(writer, "xdr:row");
137
138 write_start_tag(writer, "xdr:rowOff", vec![], false);
140 write_text_node(writer, &self.row_off.to_string());
141 write_end_tag(writer, "xdr:rowOff");
142
143 write_end_tag(writer, "from");
144 }
145}