render: Make struct render_params a little smaller.
[pspp] / src / output / table.c
index b1707a84d875dfb633f87c8736ad70eb507fa0ca..c27d208f72b09b4fcf5aa435b3738035618d5388 100644 (file)
@@ -67,10 +67,10 @@ table_is_shared (const struct table *table)
   return table->ref_cnt > 1;
 }
 \f
-struct area_style *
-area_style_clone (struct pool *pool, const struct area_style *old)
+struct table_area_style *
+table_area_style_clone (struct pool *pool, const struct table_area_style *old)
 {
-  struct area_style *new = pool_malloc (pool, sizeof *new);
+  struct table_area_style *new = pool_malloc (pool, sizeof *new);
   *new = *old;
   if (new->font_style.typeface)
     new->font_style.typeface = pool_strdup (pool, new->font_style.typeface);
@@ -78,7 +78,7 @@ area_style_clone (struct pool *pool, const struct area_style *old)
 }
 
 void
-area_style_free (struct area_style *style)
+table_area_style_free (struct table_area_style *style)
 {
   if (style)
     {
@@ -176,9 +176,9 @@ struct table *
 table_from_string (const char *text)
 {
   struct table *t = table_create (1, 1, 0, 0, 0, 0);
-  t->styles[0] = xmalloc (sizeof *t->styles[0]);
-  *t->styles[0] = (struct area_style) {
-    AREA_STYLE_INITIALIZER__,
+  t->styles[0] = pool_alloc (t->container, sizeof *t->styles[0]);
+  *t->styles[0] = (struct table_area_style) {
+    TABLE_AREA_STYLE_INITIALIZER__,
     .cell_style.halign = TABLE_HALIGN_LEFT,
     .cell_style.valign = TABLE_VALIGN_TOP
   };
@@ -250,15 +250,15 @@ font_style_uninit (struct font_style *font)
 }
 
 void
-area_style_copy (struct pool *container,
-                 struct area_style *dst, const struct area_style *src)
+table_area_style_copy (struct pool *container, struct table_area_style *dst,
+                       const struct table_area_style *src)
 {
   font_style_copy (container, &dst->font_style, &src->font_style);
   dst->cell_style = src->cell_style;
 }
 
 void
-area_style_uninit (struct area_style *area)
+table_area_style_uninit (struct table_area_style *area)
 {
   if (area)
     font_style_uninit (&area->font_style);
@@ -580,14 +580,11 @@ add_joined_cell (struct table *table, int x1, int y1, int x2, int y2,
              x1, y1, x2, y2);
 
   struct table_cell *cell = pool_alloc (table->container, sizeof *cell);
-  cell->d[TABLE_HORZ][0] = x1;
-  cell->d[TABLE_VERT][0] = y1;
-  cell->d[TABLE_HORZ][1] = ++x2;
-  cell->d[TABLE_VERT][1] = ++y2;
-  cell->options = opt;
-  cell->footnotes = NULL;
-  cell->n_footnotes = 0;
-  cell->style = NULL;
+  *cell = (struct table_cell) {
+    .d = { [TABLE_HORZ] = { x1, ++x2 },
+           [TABLE_VERT] = { y1, ++y2 } },
+    .options = opt,
+  };
 
   void **cc = &table->cc[x1 + y1 * table_nc (table)];
   unsigned short *ct = &table->ct[x1 + y1 * table_nc (table)];
@@ -639,6 +636,29 @@ get_joined_cell (struct table *table, int x, int y)
   return cell;
 }
 
+/* Sets the subscripts for column X, row Y in TABLE. */
+void
+table_add_subscripts (struct table *table, int x, int y,
+                      char **subscripts, size_t n_subscripts)
+{
+  struct table_cell *cell = get_joined_cell (table, x, y);
+
+  cell->n_subscripts = n_subscripts;
+  cell->subscripts = pool_nalloc (table->container, n_subscripts,
+                                  sizeof *cell->subscripts);
+  for (size_t i = 0; i < n_subscripts; i++)
+    cell->subscripts[i] = pool_strdup (table->container, subscripts[i]);
+}
+
+/* Sets the superscript for column X, row Y in TABLE. */
+void
+table_add_superscript (struct table *table, int x, int y,
+                       const char *superscript)
+{
+  get_joined_cell (table, x, y)->superscript
+    = pool_strdup (table->container, superscript);
+}
+
 /* Create a footnote in TABLE with MARKER (e.g. "a") as its marker and CONTENT
    as its content.  The footnote will be styled as STYLE, which is mandatory.
    IDX must uniquely identify the footnote within TABLE.
@@ -647,7 +667,7 @@ get_joined_cell (struct table *table, int x, int y)
    footnote later, so it is important for the caller to remember it. */
 struct footnote *
 table_create_footnote (struct table *table, size_t idx, const char *content,
-                       const char *marker, struct area_style *style)
+                       const char *marker, struct table_area_style *style)
 {
   assert (style);
 
@@ -681,7 +701,7 @@ table_add_footnote (struct table *table, int x, int y,
    TABLE->container or have a lifetime that will outlive TABLE. */
 void
 table_add_style (struct table *table, int x, int y,
-                 const struct area_style *style)
+                 const struct table_area_style *style)
 {
   get_joined_cell (table, x, y)->style = style;
 }
@@ -738,7 +758,7 @@ table_get_cell (const struct table *t, int x, int y, struct table_cell *cell)
   unsigned short opt = t->ct[index];
   const void *cc = t->cc[index];
 
-  const struct area_style *style
+  const struct table_area_style *style
     = t->styles[(opt & TAB_STYLE_MASK) >> TAB_STYLE_SHIFT];
   if (opt & TAB_JOIN)
     {