omit_empty: table_properties.general_properties.hide_empty_rows,
row_label_position: table_properties.general_properties.row_label_position,
heading_widths: enum_map! {
- HeadingRegion::ColumnHeadings => table_properties.general_properties.minimum_column_width..=table_properties.general_properties.maximum_column_width,
- HeadingRegion::RowHeadings => table_properties.general_properties.minimum_row_width..=table_properties.general_properties.maximum_row_width,
+ HeadingRegion::Columns => table_properties.general_properties.minimum_column_width..=table_properties.general_properties.maximum_column_width,
+ HeadingRegion::Rows => table_properties.general_properties.minimum_row_width..=table_properties.general_properties.maximum_row_width,
}.map(|_k, r|(*r.start()).try_into().unwrap_or_default()..=(*r.end()).try_into().unwrap_or_default()),
footnote_marker_type: table_properties.footnote_properties.marker_type,
footnote_marker_position: table_properties.footnote_properties.marker_position,
Border::InnerFrame(BoxBorder::Top) => table_properties.border_properties.top_inner_frame,
Border::InnerFrame(BoxBorder::Right) => table_properties.border_properties.right_inner_frame,
Border::InnerFrame(BoxBorder::Bottom) => table_properties.border_properties.bottom_inner_frame,
- Border::Dimensions(RowColBorder::ColHorz) => table_properties.border_properties.horizontal_dimension_border_columns,
- Border::Dimensions(RowColBorder::ColVert) => table_properties.border_properties.vertical_dimension_border_columns,
- Border::Dimensions(RowColBorder::RowHorz) => table_properties.border_properties.horizontal_dimension_border_rows,
- Border::Dimensions(RowColBorder::RowVert) => table_properties.border_properties.vertical_dimension_border_rows,
- Border::Categories(RowColBorder::ColHorz) => table_properties.border_properties.horizontal_category_border_columns,
- Border::Categories(RowColBorder::ColVert) => table_properties.border_properties.vertical_category_border_columns,
- Border::Categories(RowColBorder::RowHorz) => table_properties.border_properties.horizontal_category_border_rows,
- Border::Categories(RowColBorder::RowVert) => table_properties.border_properties.vertical_category_border_rows,
+ Border::Dimension(RowColBorder(HeadingRegion::Columns, Axis2::X)) => table_properties.border_properties.horizontal_dimension_border_columns,
+ Border::Dimension(RowColBorder(HeadingRegion::Columns, Axis2::Y)) => table_properties.border_properties.vertical_category_border_columns,
+ Border::Dimension(RowColBorder(HeadingRegion::Rows, Axis2::X)) => table_properties.border_properties.horizontal_dimension_border_rows,
+ Border::Dimension(RowColBorder(HeadingRegion::Rows, Axis2::Y)) => table_properties.border_properties.vertical_category_border_rows,
+ Border::Category(RowColBorder(HeadingRegion::Columns, Axis2::X)) => table_properties.border_properties.horizontal_category_border_columns,
+ Border::Category(RowColBorder(HeadingRegion::Columns, Axis2::Y)) => table_properties.border_properties.vertical_category_border_columns,
+ Border::Category(RowColBorder(HeadingRegion::Rows, Axis2::X)) => table_properties.border_properties.horizontal_category_border_rows,
+ Border::Category(RowColBorder(HeadingRegion::Rows, Axis2::Y)) => table_properties.border_properties.vertical_category_border_rows,
Border::DataLeft => table_properties.border_properties.data_area_left,
Border::DataTop => table_properties.border_properties.data_area_top,
},
Title,
OuterFrame(BoxBorder),
InnerFrame(BoxBorder),
- Dimensions(RowColBorder),
- Categories(RowColBorder),
+ Dimension(RowColBorder),
+ Category(RowColBorder),
DataLeft,
DataTop,
}
pub fn default_stroke(self) -> Stroke {
match self {
Self::InnerFrame(_) | Self::DataLeft | Self::DataTop => Stroke::Thick,
- Self::Dimensions(side) if side != RowColBorder::RowVert => Stroke::Solid,
- Self::Categories(RowColBorder::ColHorz | RowColBorder::ColVert) => Stroke::Solid,
+ Self::Dimension(
+ RowColBorder(HeadingRegion::Columns, _) | RowColBorder(_, Axis2::X),
+ )
+ | Self::Category(RowColBorder(HeadingRegion::Columns, _)) => Stroke::Solid,
_ => Stroke::None,
}
}
| Self::InnerFrame(_)
| Self::DataLeft
| Self::DataTop
- | Self::Categories(_) => self,
- Self::Dimensions(row_col_border) => Self::Categories(row_col_border),
+ | Self::Category(_) => self,
+ Self::Dimension(row_col_border) => Self::Category(row_col_border),
}
}
}
/// Borders between rows and columns.
#[derive(Copy, Clone, Debug, Enum, PartialEq, Eq)]
-pub enum RowColBorder {
- RowHorz,
- RowVert,
- ColHorz,
- ColVert,
-}
+pub struct RowColBorder(
+ /// Row or column headings.
+ HeadingRegion,
+ /// Horizontal ([Axis2::X]) or vertical ([Axis2::Y]) borders.
+ Axis2,
+);
/// Sizing for rows or columns of a rendered table.
///
omit_empty: true,
row_label_position: LabelPosition::default(),
heading_widths: EnumMap::from_fn(|region| match region {
- HeadingRegion::RowHeadings => 36..=72,
- HeadingRegion::ColumnHeadings => 36..=120,
+ HeadingRegion::Rows => 36..=72,
+ HeadingRegion::Columns => 36..=120,
}),
footnote_marker_type: FootnoteMarkerType::default(),
footnote_marker_position: FootnoteMarkerPosition::default(),
/// ```
#[derive(Copy, Clone, Debug, PartialEq, Eq, Enum)]
pub enum HeadingRegion {
- RowHeadings,
- ColumnHeadings,
+ Rows,
+ Columns,
}
#[derive(Clone, Debug)]
use smallvec::SmallVec;
use crate::output::{
- pivot::{Group, LabelPosition, Leaf},
+ pivot::{Group, HeadingRegion, LabelPosition, Leaf},
table::{CellInner, Table},
};
column_headings.render(
&mut body,
row_headings.height(),
- RowColBorder::ColHorz,
- RowColBorder::ColVert,
+ HeadingRegion::Columns,
self.rotate_outer_row_labels,
false,
);
row_headings.render(
&mut body,
column_headings.height(),
- RowColBorder::RowVert,
- RowColBorder::RowHorz,
+ HeadingRegion::Rows,
false,
self.rotate_inner_column_labels,
);
h: Axis2,
h_ofs: usize,
v_ofs: usize,
- col_horz: RowColBorder,
- col_vert: RowColBorder,
+ region: HeadingRegion,
rotate_inner_labels: bool,
rotate_outer_labels: bool,
inner: bool,
// |aaaa1#aaaa2#aaaa3|aaaa1#aaaa2#aaaa3|aaaa1#aaaa2#aaaa3|
// +-----+-----+-----+-----+-----+-----+-----+-----+-----+
// ```
+ let row_col = RowColBorder(region, v);
let border = if row == self.height - 1 && inner {
- Border::Categories(col_vert)
+ Border::Category(row_col)
} else {
- Border::Dimensions(col_vert)
+ Border::Dimension(row_col)
};
for x in [x1, x2] {
if !vrules[x] {
// +-----+-----+-----+-----+-----+-----+-----+-----+-----+
// ```
if row > 0 {
- table.draw_line(Border::Categories(col_horz), (h, y1), h_ofs..table.n[h]);
+ table.draw_line(
+ Border::Category(RowColBorder(region, h)),
+ (h, y1),
+ h_ofs..table.n[h],
+ );
}
}
}
&self,
table: &mut Table,
h_ofs: usize,
- col_horz: RowColBorder,
- col_vert: RowColBorder,
+ region: HeadingRegion,
rotate_inner_labels: bool,
rotate_outer_labels: bool,
) {
h,
h_ofs,
v_ofs,
- col_horz,
- col_vert,
+ region,
rotate_inner_labels,
rotate_outer_labels,
inner,
// |aaaa1|aaaa2|aaaa3|aaaa1|aaaa2|aaaa3|aaaa1|aaaa2|aaaa3| _|
// +-----+-----+-----+-----+-----+-----+-----+-----+-----+
// ```
- table.draw_line(Border::Dimensions(col_horz), (h, v_ofs), h_ofs..table.n[h]);
+ table.draw_line(
+ Border::Dimension(RowColBorder(region, h)),
+ (h, v_ofs),
+ h_ofs..table.n[h],
+ );
}
}
}
LabelPosition::Corner
},
heading_widths: enum_map! {
- HeadingRegion::ColumnHeadings => look.v2_styles.min_column_width..=look.v2_styles.max_column_width,
- HeadingRegion::RowHeadings => look.v2_styles.min_row_width..=look.v2_styles.max_row_width,
+ HeadingRegion::Columns => look.v2_styles.min_column_width..=look.v2_styles.max_column_width,
+ HeadingRegion::Rows => look.v2_styles.min_row_width..=look.v2_styles.max_row_width,
}.map(|_k, range| pt_to_px(*range.start())..=pt_to_px(*range.end())),
footnote_marker_type: if (flags & 4) != 0 {
FootnoteMarkerType::Numeric
Border::InnerFrame(BoxBorder::Top) => look.v2_styles.top_inner_frame,
Border::InnerFrame(BoxBorder::Right) => look.v2_styles.right_inner_frame,
Border::InnerFrame(BoxBorder::Bottom) => look.v2_styles.bottom_inner_frame,
- Border::Dimensions(RowColBorder::ColHorz) => look.pv_separator_style.horizontal_dimension_columns,
- Border::Dimensions(RowColBorder::ColVert) => look.pv_separator_style.vertical_dimension_columns,
- Border::Dimensions(RowColBorder::RowHorz) => look.pv_separator_style.vertical_dimension_rows,
- Border::Dimensions(RowColBorder::RowVert) => look.pv_separator_style.vertical_dimension_rows,
- Border::Categories(RowColBorder::ColHorz) => look.pv_separator_style.horizontal_category_columns,
- Border::Categories(RowColBorder::ColVert) => look.pv_separator_style.vertical_category_columns,
- Border::Categories(RowColBorder::RowHorz) => look.pv_separator_style.vertical_category_rows,
- Border::Categories(RowColBorder::RowVert) => look.pv_separator_style.vertical_category_rows,
+ Border::Dimension(RowColBorder(region, direction)) => {
+ match (region, direction) {
+ (HeadingRegion::Columns, Axis2::X) => look.pv_separator_style.horizontal_dimension_columns,
+ (HeadingRegion::Columns, Axis2::Y) => look.pv_separator_style.vertical_dimension_columns,
+ (HeadingRegion::Rows, Axis2::X) => look.pv_separator_style.horizontal_dimension_rows,
+ (HeadingRegion::Rows, Axis2::Y) => look.pv_separator_style.vertical_dimension_rows,
+ }
+ },
+ Border::Category(RowColBorder(region, direction)) => {
+ match (region, direction) {
+ (HeadingRegion::Columns, Axis2::X) => look.pv_separator_style.horizontal_category_columns,
+ (HeadingRegion::Columns, Axis2::Y) => look.pv_separator_style.vertical_category_columns,
+ (HeadingRegion::Rows, Axis2::X) => look.pv_separator_style.horizontal_category_rows,
+ (HeadingRegion::Rows, Axis2::Y) => look.pv_separator_style.vertical_category_rows,
+ }
+ },
Border::DataLeft => look.v2_styles.data_left,
Border::DataTop => look.v2_styles.data_top
},
/// The heading region that `pos` is part of, if any.
pub fn heading_region(&self, pos: Coord2) -> Option<HeadingRegion> {
if pos.x() < self.h.x() {
- Some(HeadingRegion::RowHeadings)
+ Some(HeadingRegion::Rows)
} else if pos.y() < self.h.y() {
- Some(HeadingRegion::ColumnHeadings)
+ Some(HeadingRegion::Columns)
} else {
None
}