Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 9 additions & 12 deletions src/helper/number_format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,30 +161,27 @@ fn split_format(sections: Vec<&str>, value: f64) -> (String, String, String) {

// Process color matching
if let Some(captures) = color_re.captures(section).ok().flatten() {
let items: Vec<&str> = captures
.iter()
.filter_map(|cap| cap.map(|c| c.as_str()))
.collect();
let mut items = captures.iter().filter_map(|cap| cap.map(|c| c.as_str()));

if let Some(first_item) = items.first() {
colors[idx].clone_from(first_item);
if let Some(first_item) = items.next() {
colors[idx].clone_from(&first_item);
}

converted_section = color_re.replace_all(section, "").to_string();
}

// Process conditional matching
if let Some(captures) = cond_re.captures(section).ok().flatten() {
let items: Vec<&str> = captures
let mut items = captures
.iter()
.filter_map(|cap| cap.map(|c| c.as_str()))
.collect();
.skip(1);

if let Some(v) = items.get(1) {
condops[idx].clone_from(v);
if let Some(v) = items.next() {
condops[idx].clone_from(&v);
}
if let Some(v) = items.get(2) {
condvals[idx].clone_from(v);
if let Some(v) = items.next() {
condvals[idx].clone_from(&v);
}

converted_section = cond_re.replace_all(section, "").to_string();
Expand Down
2 changes: 1 addition & 1 deletion src/helper/number_format/date_formater.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ pub(crate) fn format_as_date(value: f64, format: &str) -> Cow<'_, str> {
});

// Only process the non-quoted blocks for date format characters
let blocks: Vec<&str> = format.split('"').collect();
let blocks = format.split('"');
let mut converted_blocks: Vec<String> = Vec::new();
let mut i = 0;
for block in blocks {
Expand Down
36 changes: 16 additions & 20 deletions src/helper/number_format/number_formater.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,18 @@ pub(crate) fn format_as_number(value: f64, format: &str) -> Cow<'_, str> {
if !attached_affixes {
let re = compile_regex!(r"\$[^0-9]*");
if re.find(&format).ok().flatten().is_some() {
let item: Vec<&str> = re
.captures(&format)
.ok()
.flatten()
.unwrap()
.iter()
.map(|ite| ite.unwrap().as_str())
.collect();
value = format!("{}{}", item.first().unwrap(), value);
value = format!(
"{}{}",
re.captures(&format)
.ok()
.flatten()
.unwrap()
.iter()
.map(|ite| ite.unwrap().as_str())
.next()
.unwrap(),
value
);
}
}

Expand Down Expand Up @@ -222,7 +225,7 @@ pub(crate) fn group_thousands(value: &str) -> String {
}

#[allow(dead_code)]
fn merge_complex_number_format_masks(numbers: &[String], masks: &[String]) -> Vec<String> {
fn merge_complex_number_format_masks(numbers: &[&str], masks: &[String]) -> Vec<String> {
let mut decimal_count = numbers[1].len();
let mut post_decimal_masks: Vec<&str> = Vec::new();

Expand Down Expand Up @@ -287,16 +290,8 @@ fn complex_number_format_mask(number: f64, mask: &str, split_on_point: bool) ->

if split_on_point && mask.contains('.') && number.to_string().contains('.') {
let number_str = number.to_string();
let numbers_as: Vec<&str> = number_str.split('.').collect();
let mut numbers: Vec<String> = Vec::new();
for n in numbers_as {
numbers.push(n.to_string());
}
let masks_as: Vec<&str> = mask.split('.').collect();
let mut masks: Vec<String> = Vec::new();
for mask in masks_as {
masks.push(mask.to_string());
}
let numbers: Vec<&str> = number_str.split('.').collect();
let mut masks: Vec<String> = mask.split('.').map(String::from).collect();
if masks.len() > 2 {
masks = merge_complex_number_format_masks(&numbers, &masks);
}
Expand Down Expand Up @@ -344,6 +339,7 @@ mod tests {
#[test]
fn format_as_number_wraps_parenthesized_sections() {
assert_eq!(format_as_number(1234.0, "(#,##0)"), "(1,234)");
}

#[test]
fn format_as_number_rounds_half_away_from_zero() {
Expand Down
72 changes: 36 additions & 36 deletions src/structs/chart.rs
Original file line number Diff line number Diff line change
Expand Up @@ -339,43 +339,43 @@ impl Chart {

match chart_type {
ChartType::LineChart => {
self.new_chart_line_chart(area_chart_series_list);
self.new_chart_line_chart(&area_chart_series_list);
}
ChartType::Line3DChart => {
self.new_chart_line_3d_chart(area_chart_series_list);
self.new_chart_line_3d_chart(&area_chart_series_list);
}
ChartType::PieChart => {
self.new_chart_pie_chart(area_chart_series_list);
self.new_chart_pie_chart(&area_chart_series_list);
}
ChartType::Pie3DChart => {
self.new_chart_pie_3d_chart(area_chart_series_list);
self.new_chart_pie_3d_chart(&area_chart_series_list);
}
ChartType::DoughnutChart => {
self.new_chart_doughnut_chart(area_chart_series_list);
self.new_chart_doughnut_chart(&area_chart_series_list);
}
ChartType::AreaChart => {
self.new_chart_area_chart(area_chart_series_list);
self.new_chart_area_chart(&area_chart_series_list);
}
ChartType::Area3DChart => {
self.new_chart_area_3d_chart(area_chart_series_list);
self.new_chart_area_3d_chart(&area_chart_series_list);
}
ChartType::BarChart => {
self.new_chart_bar_chart(area_chart_series_list);
self.new_chart_bar_chart(&area_chart_series_list);
}
ChartType::Bar3DChart => {
self.new_chart_bar_3d_chart(area_chart_series_list);
self.new_chart_bar_3d_chart(&area_chart_series_list);
}
ChartType::OfPieChart => {
self.new_chart_of_pie_chart(area_chart_series_list);
self.new_chart_of_pie_chart(&area_chart_series_list);
}
ChartType::BubbleChart => {
self.new_chart_bubble_chart(area_chart_series_list);
self.new_chart_bubble_chart(&area_chart_series_list);
}
ChartType::RadarChart => {
self.new_chart_radar_chart(area_chart_series_list);
self.new_chart_radar_chart(&area_chart_series_list);
}
ChartType::ScatterChart => {
self.new_chart_scatter_chart(area_chart_series_list);
self.new_chart_scatter_chart(&area_chart_series_list);
}
}

Expand Down Expand Up @@ -418,17 +418,17 @@ impl Chart {
}

#[inline]
fn convert_series(area_chart_series_list: Vec<&str>, smooth: bool) -> AreaChartSeriesList {
fn convert_series(area_chart_series_list: &[&str], smooth: bool) -> AreaChartSeriesList {
let mut acsl_obj = AreaChartSeriesList::default();
area_chart_series_list
.into_iter()
.iter()
.enumerate()
.for_each(|(idx, area_chart_series)| {
let mut values = Values::default();
values
.number_reference_mut()
.formula_mut()
.set_address_str(area_chart_series);
.set_address_str(*area_chart_series);
values
.number_reference_mut()
.numbering_cache_mut()
Expand All @@ -451,7 +451,7 @@ impl Chart {
acsl_obj
}

pub(crate) fn new_chart_line_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_line_chart(&mut self, area_chart_series_list: &[&str]) {
let acsl_obj = Self::convert_series(area_chart_series_list, true);

let mut axis_id1 = AxisId::default();
Expand Down Expand Up @@ -585,7 +585,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_line_3d_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_line_3d_chart(&mut self, area_chart_series_list: &[&str]) {
let mut rotate_x = RotateX::default();
let mut rotate_y = RotateY::default();
let mut right_angle_axes = RightAngleAxes::default();
Expand Down Expand Up @@ -737,7 +737,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_pie_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_pie_chart(&mut self, area_chart_series_list: &[&str]) {
let acsl_obj = Self::convert_series(area_chart_series_list, true);

let mut show_leader_lines = ShowLeaderLines::default();
Expand Down Expand Up @@ -830,7 +830,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_pie_3d_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_pie_3d_chart(&mut self, area_chart_series_list: &[&str]) {
let mut rotate_x = RotateX::default();
let mut rotate_y = RotateY::default();
let mut right_angle_axes = RightAngleAxes::default();
Expand Down Expand Up @@ -940,7 +940,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_doughnut_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_doughnut_chart(&mut self, area_chart_series_list: &[&str]) {
let mut acsl_obj = AreaChartSeriesList::default();
let mut acs_object = AreaChartSeries::default();
let mut idx = 0;
Expand All @@ -950,7 +950,7 @@ impl Chart {
let mut string_reference = StringReference::default();
string_reference
.formula_mut()
.set_address_str(area_chart_series);
.set_address_str(*area_chart_series);

let mut category_axis_data = CategoryAxisData::default();
category_axis_data.set_string_reference(string_reference);
Expand All @@ -962,7 +962,7 @@ impl Chart {
values
.number_reference_mut()
.formula_mut()
.set_address_str(area_chart_series);
.set_address_str(*area_chart_series);
values
.number_reference_mut()
.numbering_cache_mut()
Expand Down Expand Up @@ -1051,7 +1051,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_area_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_area_chart(&mut self, area_chart_series_list: &[&str]) {
let acsl_obj = Self::convert_series(area_chart_series_list, true);

let mut axis_id1 = AxisId::default();
Expand Down Expand Up @@ -1179,7 +1179,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_area_3d_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_area_3d_chart(&mut self, area_chart_series_list: &[&str]) {
let mut rotate_x = RotateX::default();
let mut rotate_y = RotateY::default();
let mut right_angle_axes = RightAngleAxes::default();
Expand Down Expand Up @@ -1326,7 +1326,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_bar_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_bar_chart(&mut self, area_chart_series_list: &[&str]) {
let acsl_obj = Self::convert_series(area_chart_series_list, false);

let mut axis_id1 = AxisId::default();
Expand Down Expand Up @@ -1459,7 +1459,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_bar_3d_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_bar_3d_chart(&mut self, area_chart_series_list: &[&str]) {
let mut rotate_x = RotateX::default();
let mut rotate_y = RotateY::default();
let mut right_angle_axes = RightAngleAxes::default();
Expand Down Expand Up @@ -1609,7 +1609,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_of_pie_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_of_pie_chart(&mut self, area_chart_series_list: &[&str]) {
let acsl_obj = Self::convert_series(area_chart_series_list, false);

let mut show_leader_lines = ShowLeaderLines::default();
Expand Down Expand Up @@ -1695,7 +1695,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_bubble_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_bubble_chart(&mut self, area_chart_series_list: &[&str]) {
let mut acsl_obj = AreaChartSeriesList::default();
let mut acs_object = AreaChartSeries::default();
let mut idx = 0;
Expand All @@ -1706,7 +1706,7 @@ impl Chart {
x_values
.number_reference_mut()
.formula_mut()
.set_address_str(area_chart_series);
.set_address_str(*area_chart_series);
x_values
.number_reference_mut()
.numbering_cache_mut()
Expand All @@ -1720,7 +1720,7 @@ impl Chart {
y_values
.number_reference_mut()
.formula_mut()
.set_address_str(area_chart_series);
.set_address_str(*area_chart_series);
y_values
.number_reference_mut()
.numbering_cache_mut()
Expand All @@ -1734,7 +1734,7 @@ impl Chart {
bubble_size
.number_reference_mut()
.formula_mut()
.set_address_str(area_chart_series);
.set_address_str(*area_chart_series);
bubble_size
.number_reference_mut()
.numbering_cache_mut()
Expand Down Expand Up @@ -1920,7 +1920,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_radar_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_radar_chart(&mut self, area_chart_series_list: &[&str]) {
let acsl_obj = Self::convert_series(area_chart_series_list, true);

let mut axis_id1 = AxisId::default();
Expand Down Expand Up @@ -2052,7 +2052,7 @@ impl Chart {
self.two_cell_anchor.set_graphic_frame(graphic_frame);
}

pub(crate) fn new_chart_scatter_chart(&mut self, area_chart_series_list: Vec<&str>) {
pub(crate) fn new_chart_scatter_chart(&mut self, area_chart_series_list: &[&str]) {
let mut acsl_obj = AreaChartSeriesList::default();
let mut acs_object = AreaChartSeries::default();
let mut idx = 0;
Expand All @@ -2063,7 +2063,7 @@ impl Chart {
x_values
.number_reference_mut()
.formula_mut()
.set_address_str(area_chart_series);
.set_address_str(*area_chart_series);
x_values
.number_reference_mut()
.numbering_cache_mut()
Expand All @@ -2077,7 +2077,7 @@ impl Chart {
y_values
.number_reference_mut()
.formula_mut()
.set_address_str(area_chart_series);
.set_address_str(*area_chart_series);
y_values
.number_reference_mut()
.numbering_cache_mut()
Expand Down
12 changes: 6 additions & 6 deletions src/structs/data_bar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,18 +158,18 @@ mod tests {
let obj = read_data_bar(
r#"<dataBar showValue="1" minLength="10" maxLength="90"><cfvo type="num" val="0"></cfvo><cfvo type="num" val="1400"></cfvo><color rgb="FF1E2761"></color></dataBar>"#,
);
assert_eq!(obj.get_cfvo_collection().len(), 2);
assert_eq!(obj.get_color_collection().len(), 1);
assert_eq!(obj.get_color_collection()[0].get_argb_str(), "FF1E2761");
assert_eq!(obj.cfvo_collection().len(), 2);
assert_eq!(obj.color_collection().len(), 1);
assert_eq!(obj.color_collection()[0].argb_str(), "FF1E2761");
}

#[test]
fn read_child_elements_self_closing() {
let obj = read_data_bar(
r#"<dataBar><cfvo type="min"/><cfvo type="max"/><color rgb="FF638EC6"/></dataBar>"#,
);
assert_eq!(obj.get_cfvo_collection().len(), 2);
assert_eq!(obj.get_color_collection().len(), 1);
assert_eq!(obj.get_color_collection()[0].get_argb_str(), "FF638EC6");
assert_eq!(obj.cfvo_collection().len(), 2);
assert_eq!(obj.color_collection().len(), 1);
assert_eq!(obj.color_collection()[0].argb_str(), "FF638EC6");
}
}
Loading
Loading