doc: Keep copyright and license comments from showing up in TeX output.
[pspp] / tests / output / render-test.c
index fbc0f208484d973f4170b053abd694d8761fca68..fdfb2d20b6feb0cf664fd8bc7251908cb89789bc 100644 (file)
@@ -56,6 +56,9 @@ static int render_stdout = true;
 /* --pdf: Also render PDF output. */
 static int render_pdf;
 
+/* --csv: Also render CSV output. */
+static int render_csv;
+
 /* ASCII driver, for ASCII driver test mode. */
 static struct output_driver *ascii_driver;
 
@@ -74,6 +77,7 @@ main (int argc, char **argv)
   FILE *input;
 
   set_program_name (argv[0]);
+  output_engine_push ();
   input_file_name = parse_options (argc, argv);
 
   if (!strcmp (input_file_name, "-"))
@@ -111,7 +115,8 @@ main (int argc, char **argv)
       table = tables[n_tables - 1];
       if (transpose)
         table = table_transpose (table);
-      table_item_submit (table_item_create (table, NULL));
+      table_item_submit (table_item_create (table, NULL, NULL));
+      free (tables);
     }
   else
     draw (input);
@@ -119,7 +124,7 @@ main (int argc, char **argv)
   if (input != stdin)
     fclose (input);
 
-  output_close ();
+  output_engine_pop ();
 
   return 0;
 }
@@ -205,6 +210,18 @@ configure_drivers (int width, int length, int min_break)
     }
 #endif
 
+  /* Render to <base>.csv. */
+  if (render_csv)
+    {
+      string_map_clear (&options);
+      string_map_insert_nocopy (&options, xstrdup ("output-file"),
+                                 xasprintf ("%s.csv", output_base));
+      driver = output_driver_create (&options);
+      if (driver == NULL)
+        exit (EXIT_FAILURE);
+      output_driver_register (driver);
+    }
+
   /* Render to <base>.odt. */
   string_map_replace_nocopy (&options, xstrdup ("output-file"),
                              xasprintf ("%s.odt", output_base));
@@ -245,6 +262,7 @@ parse_options (int argc, char **argv)
           {"no-txt", no_argument, &render_txt, 0},
           {"no-stdout", no_argument, &render_stdout, 0},
           {"pdf", no_argument, &render_pdf, 1},
+          {"csv", no_argument, &render_csv, 1},
           {"output", required_argument, NULL, 'o'},
           {"help", no_argument, NULL, OPT_HELP},
           {NULL, 0, NULL, 0},
@@ -457,10 +475,22 @@ read_table (FILE *stream, struct table **tables, size_t n_tables)
                   default:
                     error (1, 0, "unexpected subtable modifier \"%c\"", *text);
                   }
-              tab_subtable (tab, c, r, c + cs - 1, r + rs - 1, opt, table);
+              tab_subtable (tab, c, r, c + cs - 1, r + rs - 1, opt,
+                            table_item_create (table, NULL, NULL));
             }
           else
-            tab_joint_text (tab, c, r, c + cs - 1, r + rs - 1, opt, text);
+            {
+              char *pos = text;
+              char *content;
+              int i;
+
+              for (i = 0; (content = strsep (&pos, "#")) != NULL; i++)
+                if (!i)
+                  tab_joint_text (tab, c, r, c + cs - 1, r + rs - 1, opt,
+                                  content);
+                else
+                  tab_footnote (tab, c, r, "%s", content);
+            }
         }
 
   return &tab->table;