support backgrounds for category labesl
authorBen Pfaff <blp@cs.stanford.edu>
Mon, 5 Jan 2026 19:20:40 +0000 (11:20 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Mon, 5 Jan 2026 19:20:40 +0000 (11:20 -0800)
rust/pspp/src/spv/read/legacy_xml.rs
rust/pspp/src/spv/testdata/legacy17.expected
rust/pspp/src/spv/testdata/legacy17.spv

index 0b79aeee6ba246875832e0ef7d7cada3bc8751de..e015329e9dec0906343c1c2a1b6a797ccce3af56 100644 (file)
@@ -1696,6 +1696,7 @@ impl TargetType {
 enum Set {
     SetFormat(SetFormat),
     SetStyle(SetStyle),
+    SetFrameStyle(SetFrameStyle),
     #[serde(other)]
     Other,
 }
@@ -1707,6 +1708,9 @@ impl Set {
             change: match self {
                 Set::SetFormat(set_format) => Change::Format(set_format),
                 Set::SetStyle(set_style) => Change::Style(set_style.style.get(styles)?),
+                Set::SetFrameStyle(set_frame_style) => {
+                    Change::FrameStyle(set_frame_style.style.get(styles)?)
+                }
                 Set::Other => return None,
             },
         })
@@ -1716,6 +1720,7 @@ impl Set {
         match self {
             Set::SetFormat(set_format) => Some(&set_format.target),
             Set::SetStyle(set_style) => Some(&set_style.target),
+            Set::SetFrameStyle(set_frame_style) => Some(&set_frame_style.target),
             Set::Other => None,
         }
     }
@@ -1836,6 +1841,15 @@ impl<'a> DecodedSet<'a> {
                 footnotes,
                 has_cell_footnotes,
             ),
+            Change::FrameStyle(style) => Style::apply_to_value(
+                value,
+                None,
+                None,
+                Some(style),
+                base_style,
+                footnotes,
+                has_cell_footnotes,
+            ),
             Change::Style(style) => {
                 let (fg, bg) = if self.target_type == TargetType::Interval {
                     (None, Some(style))
@@ -1860,6 +1874,7 @@ impl<'a> DecodedSet<'a> {
 enum Change<'a> {
     Format(&'a SetFormat),
     Style(&'a Style),
+    FrameStyle(&'a Style),
 }
 
 #[derive(Deserialize, Debug)]
@@ -1872,6 +1887,16 @@ struct SetStyle {
     style: Ref<Style>,
 }
 
+#[derive(Deserialize, Debug)]
+#[serde(rename_all = "camelCase")]
+struct SetFrameStyle {
+    #[serde(rename = "@target")]
+    target: String,
+
+    #[serde(rename = "@style")]
+    style: Ref<Style>,
+}
+
 #[derive(Deserialize, Debug)]
 #[serde(rename_all = "camelCase")]
 struct SetFormat {
index 3aa1e77162e845909c0e5208d74b32922789afec..721c6b55a29d4a0225d9973c1b3e1f1063fada60 100644 (file)
@@ -2,7 +2,7 @@
 \e[38;2;0;0;0;48;2;255;255;255m╭───────────────┬────────────────────────────┬─────────────────────────┬──────┬────╮\e[0m\e[38;2;0;0;0;48;2;255;255;255m\e[0m
 \e[38;2;0;0;0;48;2;255;255;255m│               │ \e[0m\e[38;2;0;0;0;48;2;255;255;255mUnstandardized Coefficients\e[0m\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255mStandardized Coefficients\e[0m\e[38;2;0;0;0;48;2;255;255;255m│      │    │\e[0m\e[38;2;0;0;0;48;2;255;255;255m\e[0m
 \e[38;2;0;0;0;48;2;255;255;255m│               ├────────────┬───────────────┼─────────────────────────┤      │    │\e[0m\e[38;2;0;0;0;48;2;255;255;255m\e[0m
-\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255mModel\e[0m\e[38;2;0;0;0;48;2;255;255;255m          │      \e[0m\e[38;2;0;0;0;48;2;255;255;255mB\e[0m\e[38;2;0;0;0;48;2;255;255;255m     │   \e[0m\e[38;2;0;0;0;48;2;255;255;255mStd. Error\e[0m\e[38;2;0;0;0;48;2;255;255;255m  │           \e[0m\e[38;2;0;0;0;48;2;255;255;255mBeta\e[0m\e[38;2;0;0;0;48;2;255;255;255m          │   \e[0m\e[38;2;0;0;0;48;2;255;255;255mt\e[0m\e[38;2;0;0;0;48;2;255;255;255m  │\e[0m\e[38;2;0;0;0;48;2;255;255;255mSig.\e[0m\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255m\e[0m
+\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255mModel\e[0m\e[38;2;0;0;0;48;2;255;255;255m          │      \e[0m\e[38;2;0;0;0;48;2;255;255;255mB\e[0m\e[38;2;0;0;0;48;2;255;255;255m     │   \e[0m\e[38;2;0;0;0;48;2;255;255;255mStd. Error\e[0m\e[38;2;0;0;0;48;2;255;255;255m  │           \e[0m\e[38;2;0;0;0;48;2;255;255;255mBeta\e[0m\e[38;2;0;0;0;48;2;255;255;255m          │   \e[0m\e[38;2;0;0;0;48;2;46;184;72;1;3mt\e[0m\e[38;2;0;0;0;48;2;255;255;255m  │\e[0m\e[38;2;0;0;0;48;2;255;255;255mSig.\e[0m\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255m\e[0m
 \e[38;2;0;0;0;48;2;255;255;255m├───────────────┼────────────┼───────────────┼─────────────────────────┼──────┼────┤\e[0m\e[38;2;0;0;0;48;2;255;255;255m\e[0m
 \e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255m1.00\e[0m\e[38;2;0;0;0;48;2;255;255;255m \e[0m\e[38;2;0;0;0;48;2;255;255;255m(Constant)\e[0m\e[38;2;0;0;0;48;2;255;255;255m│      \e[0m\e[38;2;0;0;0;48;2;255;255;255m59.146\e[0m\e[38;2;0;0;0;48;2;255;255;255m│         \e[0m\e[38;2;0;0;0;48;2;255;255;255m18.854\e[0m\e[38;2;0;0;0;48;2;255;255;255m│                         │ \e[0m\e[38;2;0;0;0;48;2;239;51;56;1;3m3.137\e[0m\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255m.016\e[0m\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255m\e[0m
 \e[38;2;0;0;0;48;2;255;255;255m│     \e[0m\e[38;2;0;0;0;48;2;255;255;255mVariable A\e[0m\e[38;2;0;0;0;48;2;255;255;255m│       \e[0m\e[38;2;0;0;0;48;2;255;255;255m-.664\e[0m\e[38;2;0;0;0;48;2;255;255;255m│           \e[0m\e[38;2;0;0;0;48;2;255;255;255m.585\e[0m\e[38;2;0;0;0;48;2;255;255;255m│                    \e[0m\e[38;2;0;0;0;48;2;255;255;255m-.395\e[0m\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255m-1.136\e[0m\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255m.293\e[0m\e[38;2;0;0;0;48;2;255;255;255m│\e[0m\e[38;2;0;0;0;48;2;255;255;255m\e[0m
index b9af58643dfa7948bfefd3e0b9de5f6dc2291e57..e7fc1855bf6b898e9318b1e2ee37b5c896481f6e 100644 (file)
Binary files a/rust/pspp/src/spv/testdata/legacy17.spv and b/rust/pspp/src/spv/testdata/legacy17.spv differ