output: Add support for colors for rules.
[pspp] / src / output / tab.c
index 8d24aab07bb720dd35621135b6133d1a1334728e..23fccd6f9c035d9f29d755f3024c6e412df80eb4 100644 (file)
@@ -105,6 +105,9 @@ tab_create (int nc, int nr)
   t->fmtmap[RC_INTEGER] = ugly[RC_INTEGER];
   t->fmtmap[RC_OTHER] = *settings_get_format ();
 
+  memset (t->styles, 0, sizeof t->styles);
+  memset (t->rule_colors, 0, sizeof t->rule_colors);
+
   t->col_ofs = t->row_ofs = 0;
 
   return t;
@@ -823,14 +826,25 @@ tab_get_cell (const struct table *table, int x, int y,
           cell->n_contents = 0;
         }
     }
+
+  int style_idx = (opt & TAB_STYLE_MASK) >> TAB_STYLE_SHIFT;
+  const struct cell_style *style = t->styles[style_idx];
+  if (style)
+    cell->style = style;
 }
 
 static int
-tab_get_rule (const struct table *table, enum table_axis axis, int x, int y)
+tab_get_rule (const struct table *table, enum table_axis axis, int x, int y,
+              struct cell_color *color)
 {
   const struct tab_table *t = tab_cast (table);
-  return (axis == TABLE_VERT
-          ? t->rh[x + t->cf * y] : t->rv[x + (t->cf + 1) * y]);
+  uint8_t raw = (axis == TABLE_VERT
+                 ? t->rh[x + t->cf * y] : t->rv[x + (t->cf + 1) * y]);
+  struct cell_color *p = t->rule_colors[(raw & TAB_RULE_STYLE_MASK)
+                                        >> TAB_RULE_STYLE_SHIFT];
+  if (p)
+    *color = *p;
+  return (raw & TAB_RULE_TYPE_MASK) >> TAB_RULE_TYPE_SHIFT;
 }
 
 static const struct table_class tab_table_class = {