From a5d94b250b53300a7f438a05dc745ed1668d20ec Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 9 Jan 2026 12:04:13 -0800 Subject: [PATCH] fix display of layer values again --- rust/pspp/src/output/pivot.rs | 14 +++++++-- rust/pspp/src/output/pivot/output.rs | 29 +++++++++++-------- .../pivot/testdata/d2_cl-all_layers.expected | 6 ++-- .../pivot/testdata/d2_cl-layer0.expected | 2 +- .../pivot/testdata/d2_cl-layer1.expected | 2 +- .../pivot/testdata/d2_rl-all_layers.expected | 6 ++-- .../pivot/testdata/d2_rl-layer0.expected | 2 +- .../pivot/testdata/d2_rl-layer1.expected | 2 +- .../pivot/testdata/d3-layer0_0.expected | 2 +- .../pivot/testdata/d3-layer0_1.expected | 2 +- .../pivot/testdata/d3-layer1_2.expected | 2 +- rust/pspp/src/output/pivot/tests.rs | 9 +++++- rust/pspp/src/spv/testdata/legacy5.expected | 2 +- rust/pspp/src/spv/testdata/legacy6.expected | 2 +- rust/pspp/src/spv/testdata/legacy9.expected | 2 +- 15 files changed, 53 insertions(+), 31 deletions(-) diff --git a/rust/pspp/src/output/pivot.rs b/rust/pspp/src/output/pivot.rs index 70f63afd19..c49061eb01 100644 --- a/rust/pspp/src/output/pivot.rs +++ b/rust/pspp/src/output/pivot.rs @@ -631,12 +631,22 @@ pub type GroupVec<'a> = SmallVec<[&'a Group; 4]>; /// A path from the root of a [Dimension] to a [Leaf]. pub struct Path<'a> { /// Groups along the path. - groups: GroupVec<'a>, + /// + /// There will be at least one group along any valid path, because the + /// dimension itself is a group. + pub groups: GroupVec<'a>, /// The leaf. /// /// This is a child of the last [Group]. - leaf: &'a Leaf, + pub leaf: &'a Leaf, +} + +impl<'a> Path<'a> { + /// Breaks the path into a vector of [Group]s and a [Leaf]. + pub fn into_parts(self) -> (GroupVec<'a>, &'a Leaf) { + (self.groups, self.leaf) + } } /// Group indexes visited along a [Path]. diff --git a/rust/pspp/src/output/pivot/output.rs b/rust/pspp/src/output/pivot/output.rs index e6051376ff..8b295a4abf 100644 --- a/rust/pspp/src/output/pivot/output.rs +++ b/rust/pspp/src/output/pivot/output.rs @@ -14,7 +14,11 @@ // You should have received a copy of the GNU General Public License along with // this program. If not, see . -use std::{iter::once, ops::Range, sync::Arc}; +use std::{ + iter::{once, repeat}, + ops::Range, + sync::Arc, +}; use enum_map::{EnumMap, enum_map}; use itertools::Itertools; @@ -304,19 +308,20 @@ impl PivotTable { .map(|index| &self.structure.dimensions[*index]) .zip(layer_indexes) .rev() - .filter(|(dimension, _)| !dimension.is_empty()) + .filter(|(dimension, _)| !dimension.is_empty() && !dimension.hide_all_labels) .map(|(dimension, &layer_index)| { - let value = dimension.nth_leaf(layer_index).unwrap().name.clone(); - if dimension.root.show_label { - // Append `: ` to the name of the dimension, preserving all the styling. - let name = dimension.root.name(); - let text = format!("{}: ", name.display(self).without_suffixes()); - let name = Value::new_user_text(text).with_styling(name.styling.clone()); - - self.create_aux_table(Area::Layers, Axis2::X, [Box::new(name), value]) - } else { - self.create_aux_table(Area::Layers, Axis2::X, [value]) + let mut cells = Vec::with_capacity(4); + let (groups, leaf) = dimension.leaf_path(layer_index).unwrap().into_parts(); + for (group, separator) in groups + .iter() + .zip(once(": ").chain(repeat(" "))) + .filter(|(group, _separator)| group.show_label) + { + cells.push(Box::new(group.name().clone())); + cells.push(Box::new(Value::new_user_text(separator))); } + cells.push(Box::new(leaf.name().clone())); + self.create_aux_table(Area::Layers, Axis2::X, cells) }) .collect() } diff --git a/rust/pspp/src/output/pivot/testdata/d2_cl-all_layers.expected b/rust/pspp/src/output/pivot/testdata/d2_cl-all_layers.expected index 0fac24e5d7..cdb9255969 100644 --- a/rust/pspp/src/output/pivot/testdata/d2_cl-all_layers.expected +++ b/rust/pspp/src/output/pivot/testdata/d2_cl-all_layers.expected @@ -1,5 +1,5 @@ Column (All Layers) -b: b1 +b1 ╭──┬──┬──╮ │a1│a2│a3│ ├──┼──┼──┤ @@ -7,7 +7,7 @@ b: b1 ╰──┴──┴──╯ Column (All Layers) -b: b2 +b2 ╭──┬──┬──╮ │a1│a2│a3│ ├──┼──┼──┤ @@ -15,7 +15,7 @@ b: b2 ╰──┴──┴──╯ Column (All Layers) -b: b3 +b3 ╭──┬──┬──╮ │a1│a2│a3│ ├──┼──┼──┤ diff --git a/rust/pspp/src/output/pivot/testdata/d2_cl-layer0.expected b/rust/pspp/src/output/pivot/testdata/d2_cl-layer0.expected index 8cb69bd2bc..48a28c4991 100644 --- a/rust/pspp/src/output/pivot/testdata/d2_cl-layer0.expected +++ b/rust/pspp/src/output/pivot/testdata/d2_cl-layer0.expected @@ -1,5 +1,5 @@ Column x b1 -b: b1 +b1 ╭──┬──┬──╮ │a1│a2│a3│ ├──┼──┼──┤ diff --git a/rust/pspp/src/output/pivot/testdata/d2_cl-layer1.expected b/rust/pspp/src/output/pivot/testdata/d2_cl-layer1.expected index f6c5080f1a..9e9323c810 100644 --- a/rust/pspp/src/output/pivot/testdata/d2_cl-layer1.expected +++ b/rust/pspp/src/output/pivot/testdata/d2_cl-layer1.expected @@ -1,5 +1,5 @@ Column x b2 -b: b2 +b2 ╭──┬──┬──╮ │a1│a2│a3│ ├──┼──┼──┤ diff --git a/rust/pspp/src/output/pivot/testdata/d2_rl-all_layers.expected b/rust/pspp/src/output/pivot/testdata/d2_rl-all_layers.expected index 72f11c1822..0aa4682594 100644 --- a/rust/pspp/src/output/pivot/testdata/d2_rl-all_layers.expected +++ b/rust/pspp/src/output/pivot/testdata/d2_rl-all_layers.expected @@ -1,5 +1,5 @@ Row (All Layers) -b: b1 +b1 ╭──┬─╮ │a1│0│ │a2│1│ @@ -7,7 +7,7 @@ b: b1 ╰──┴─╯ Row (All Layers) -b: b2 +b2 ╭──┬─╮ │a1│3│ │a2│4│ @@ -15,7 +15,7 @@ b: b2 ╰──┴─╯ Row (All Layers) -b: b3 +b3 ╭──┬─╮ │a1│6│ │a2│7│ diff --git a/rust/pspp/src/output/pivot/testdata/d2_rl-layer0.expected b/rust/pspp/src/output/pivot/testdata/d2_rl-layer0.expected index b516020cc7..1f7667590a 100644 --- a/rust/pspp/src/output/pivot/testdata/d2_rl-layer0.expected +++ b/rust/pspp/src/output/pivot/testdata/d2_rl-layer0.expected @@ -1,5 +1,5 @@ Row x b1 -b: b1 +b1 ╭──┬─╮ │a1│0│ │a2│1│ diff --git a/rust/pspp/src/output/pivot/testdata/d2_rl-layer1.expected b/rust/pspp/src/output/pivot/testdata/d2_rl-layer1.expected index 1ee2079e10..051797d192 100644 --- a/rust/pspp/src/output/pivot/testdata/d2_rl-layer1.expected +++ b/rust/pspp/src/output/pivot/testdata/d2_rl-layer1.expected @@ -1,5 +1,5 @@ Row x b2 -b: b2 +b2 ╭──┬─╮ │a1│3│ │a2│4│ diff --git a/rust/pspp/src/output/pivot/testdata/d3-layer0_0.expected b/rust/pspp/src/output/pivot/testdata/d3-layer0_0.expected index 3db87b5dd9..62cc0e489a 100644 --- a/rust/pspp/src/output/pivot/testdata/d3-layer0_0.expected +++ b/rust/pspp/src/output/pivot/testdata/d3-layer0_0.expected @@ -1,6 +1,6 @@ Column x b1 x a1 b: b1 -a: a1 +a1 ╭──┬──┬──┬──┬──╮ │c1│c2│c3│c4│c5│ ├──┼──┼──┼──┼──┤ diff --git a/rust/pspp/src/output/pivot/testdata/d3-layer0_1.expected b/rust/pspp/src/output/pivot/testdata/d3-layer0_1.expected index e1d4dafc90..ff5428fa00 100644 --- a/rust/pspp/src/output/pivot/testdata/d3-layer0_1.expected +++ b/rust/pspp/src/output/pivot/testdata/d3-layer0_1.expected @@ -1,6 +1,6 @@ Column x b2 x a1 b: b2 -a: a1 +a1 ╭──┬──┬──┬──┬──╮ │c1│c2│c3│c4│c5│ ├──┼──┼──┼──┼──┤ diff --git a/rust/pspp/src/output/pivot/testdata/d3-layer1_2.expected b/rust/pspp/src/output/pivot/testdata/d3-layer1_2.expected index c4248f0a52..0f531918a3 100644 --- a/rust/pspp/src/output/pivot/testdata/d3-layer1_2.expected +++ b/rust/pspp/src/output/pivot/testdata/d3-layer1_2.expected @@ -1,6 +1,6 @@ Column x b3 x a2 b: b3 -a: a2 +a2 ╭──┬──┬──┬──┬──╮ │c1│c2│c3│c4│c5│ ├──┼──┼──┼──┼──┤ diff --git a/rust/pspp/src/output/pivot/tests.rs b/rust/pspp/src/output/pivot/tests.rs index d5a8993203..a7fee6a2f2 100644 --- a/rust/pspp/src/output/pivot/tests.rs +++ b/rust/pspp/src/output/pivot/tests.rs @@ -390,7 +390,14 @@ fn d3() { ); let b = ( Axis3::Z, - Dimension::new(Group::new("b").with("b1").with("b2").with("b3").with("b4")), + Dimension::new( + Group::new("b") + .with("b1") + .with("b2") + .with("b3") + .with("b4") + .with_label_shown(), + ), ); let c = ( Axis3::X, diff --git a/rust/pspp/src/spv/testdata/legacy5.expected b/rust/pspp/src/spv/testdata/legacy5.expected index 8b701e2eca..85a899e431 100644 --- a/rust/pspp/src/spv/testdata/legacy5.expected +++ b/rust/pspp/src/spv/testdata/legacy5.expected @@ -1,5 +1,5 @@ Statistics -Variables: Finished +Finished ╭─────────┬───╮ │N Valid │159│ │ Missing│ 0│ diff --git a/rust/pspp/src/spv/testdata/legacy6.expected b/rust/pspp/src/spv/testdata/legacy6.expected index 9abd155a08..272bfdfcf1 100644 --- a/rust/pspp/src/spv/testdata/legacy6.expected +++ b/rust/pspp/src/spv/testdata/legacy6.expected @@ -1,5 +1,5 @@ Notes -Contents: Weight +Input Weight ────── ────── diff --git a/rust/pspp/src/spv/testdata/legacy9.expected b/rust/pspp/src/spv/testdata/legacy9.expected index dfbcded95d..2312b81add 100644 --- a/rust/pspp/src/spv/testdata/legacy9.expected +++ b/rust/pspp/src/spv/testdata/legacy9.expected @@ -1,5 +1,5 @@ Analysis -Test: Duncan[a,b] +Duncan[a,b] │ Subset SP36 N│ 1 ───────┼─────── -- 2.30.2