table-item: Change title from table_item_text to table_cell.
[pspp] / src / output / odt.c
index 256fd197dae1ae00807e4dd3b3e0fcb1c375fed9..97109cef4276a4bbd830c2fd9b4a6a79f1aa9016 100644 (file)
 
 #define _xml(X) (CHAR_CAST (const xmlChar *, X))
 
+/* This file uses TABLE_HORZ and TABLE_VERT enough to warrant abbreviating. */
+#define H TABLE_HORZ
+#define V TABLE_VERT
+
 struct odt_driver
 {
   struct output_driver driver;
@@ -438,6 +442,22 @@ write_table_item_text (struct odt_driver *odt,
   xmlTextWriterEndElement (odt->content_wtr);
 }
 
+static void
+write_table_item_cell (struct odt_driver *odt,
+                       const struct table_cell *cell)
+{
+  if (!cell)
+    return;
+
+  xmlTextWriterStartElement (odt->content_wtr, _xml("text:h"));
+  xmlTextWriterWriteFormatAttribute (odt->content_wtr,
+                                     _xml("text:outline-level"), "%d", 2);
+  xmlTextWriterWriteString (odt->content_wtr, _xml (cell->text));
+  for (size_t i = 0; i < cell->n_footnotes; i++)
+    write_footnote (odt, cell->footnotes[i]);
+  xmlTextWriterEndElement (odt->content_wtr);
+}
+
 static void
 write_table_item_layers (struct odt_driver *odt,
                          const struct table_item_layers *layers)
@@ -465,7 +485,7 @@ write_table (struct odt_driver *odt, const struct table_item *item)
   int r, c;
 
   /* Write a heading for the table */
-  write_table_item_text (odt, table_item_get_title (item));
+  write_table_item_cell (odt, table_item_get_title (item));
   write_table_item_layers (odt, table_item_get_layers (item));
 
   /* Start table */
@@ -476,29 +496,29 @@ write_table (struct odt_driver *odt, const struct table_item *item)
 
   /* Start column definitions */
   xmlTextWriterStartElement (odt->content_wtr, _xml("table:table-column"));
-  xmlTextWriterWriteFormatAttribute (odt->content_wtr, _xml("table:number-columns-repeated"), "%d", table_nc (tab));
+  xmlTextWriterWriteFormatAttribute (odt->content_wtr, _xml("table:number-columns-repeated"), "%d", tab->n[H]);
   xmlTextWriterEndElement (odt->content_wtr);
 
 
   /* Deal with row headers */
-  if (table_ht (tab) > 0)
+  if (tab->h[V][0] > 0)
     xmlTextWriterStartElement (odt->content_wtr, _xml("table:table-header-rows"));
 
 
   /* Write all the rows */
-  for (r = 0 ; r < table_nr (tab); ++r)
+  for (r = 0 ; r < tab->n[V]; ++r)
     {
       /* Start row definition */
       xmlTextWriterStartElement (odt->content_wtr, _xml("table:table-row"));
 
       /* Write all the columns */
-      for (c = 0 ; c < table_nc (tab) ; ++c)
+      for (c = 0 ; c < tab->n[H] ; ++c)
        {
           struct table_cell cell;
 
           table_get_cell (tab, c, r, &cell);
 
-          if (c == cell.d[TABLE_HORZ][0] && r == cell.d[TABLE_VERT][0])
+          if (c == cell.d[H][0] && r == cell.d[V][0])
             {
               int colspan = table_cell_colspan (&cell);
               int rowspan = table_cell_rowspan (&cell);
@@ -518,7 +538,7 @@ write_table (struct odt_driver *odt, const struct table_item *item)
 
               xmlTextWriterStartElement (odt->content_wtr, _xml("text:p"));
 
-              if (r < table_ht (tab) || c < table_hl (tab))
+              if (r < tab->h[V][0] || c < tab->h[H][0])
                 xmlTextWriterWriteAttribute (odt->content_wtr, _xml("text:style-name"), _xml("Table_20_Heading"));
               else
                 xmlTextWriterWriteAttribute (odt->content_wtr, _xml("text:style-name"), _xml("Table_20_Contents"));
@@ -548,7 +568,8 @@ write_table (struct odt_driver *odt, const struct table_item *item)
 
       xmlTextWriterEndElement (odt->content_wtr); /* row */
 
-      if (table_ht (tab) > 0 && r == table_ht (tab) - 1)
+      int ht = tab->h[V][0];
+      if (ht > 0 && r == ht - 1)
        xmlTextWriterEndElement (odt->content_wtr); /* table-header-rows */
     }