X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Foutput%2Frender-test.c;h=03e4238e4142762349c1b3112666ae71b9ce0016;hb=1a4052ac93c4dd248f664107e78b52597a839066;hp=a8c912835fa942adf046222c9e0fcc31643cd4a0;hpb=c924d7187269c30657e0ad2d5a989b30aeb85c3f;p=pspp diff --git a/tests/output/render-test.c b/tests/output/render-test.c index a8c912835f..03e4238e41 100644 --- a/tests/output/render-test.c +++ b/tests/output/render-test.c @@ -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; @@ -64,7 +67,7 @@ static const char *output_base = "render"; static const char *parse_options (int argc, char **argv); static void usage (void) NO_RETURN; -static struct table *read_table (FILE *, struct table **tables, size_t n_tables); +static struct table *read_table (FILE *); static void draw (FILE *); int @@ -100,7 +103,7 @@ main (int argc, char **argv) if (n_tables >= allocated_tables) tables = x2nrealloc (tables, &allocated_tables, sizeof *tables); - tables[n_tables] = read_table (input, tables, n_tables); + tables[n_tables] = read_table (input); n_tables++; ch = getc (input); @@ -112,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); @@ -136,15 +140,9 @@ configure_drivers (int width, int length, int min_break) string_map_insert (&options, "output-file", "-"); string_map_insert_nocopy (&options, xstrdup ("width"), xasprintf ("%d", width)); - string_map_insert_nocopy (&options, xstrdup ("length"), - xasprintf ("%d", length)); if (min_break >= 0) - { - string_map_insert_nocopy (&options, xstrdup ("min-hbreak"), - xasprintf ("%d", min_break)); - string_map_insert_nocopy (&options, xstrdup ("min-vbreak"), - xasprintf ("%d", min_break)); - } + string_map_insert_nocopy (&options, xstrdup ("min-hbreak"), + xasprintf ("%d", min_break)); if (emphasis != NULL) string_map_insert (&options, "emphasis", emphasis); if (box != NULL) @@ -206,6 +204,18 @@ configure_drivers (int width, int length, int min_break) } #endif + /* Render to .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 .odt. */ string_map_replace_nocopy (&options, xstrdup ("output-file"), xasprintf ("%s.odt", output_base)); @@ -246,6 +256,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}, @@ -334,7 +345,7 @@ replace_newlines (char *p) } static struct table * -read_table (FILE *stream, struct table **tables, size_t n_tables) +read_table (FILE *stream) { struct tab_table *tab; char buffer[1024]; @@ -364,7 +375,6 @@ read_table (FILE *stream, struct table **tables, size_t n_tables) { unsigned int opt; char *new_line; - unsigned int i; char *text; int rs, cs; @@ -435,33 +445,16 @@ read_table (FILE *stream, struct table **tables, size_t n_tables) replace_newlines (text); - if (sscanf (text, "{%u}", &i) == 1) - { - struct table *table; - - if (i >= n_tables) - error (1, 0, "bad table number %u", i); - table = table_ref (tables[i]); - - text = strchr (text, '}') + 1; - while (*text) - switch (*text++) - { - case 's': - table = table_stomp (table); - break; - - case 't': - table = table_transpose (table); - break; - - default: - error (1, 0, "unexpected subtable modifier \"%c\"", *text); - } - tab_subtable (tab, c, r, c + cs - 1, r + rs - 1, opt, table); - } - 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; @@ -491,4 +484,5 @@ draw (FILE *stream) else error (1, 0, "line %d has invalid format", line); } + ascii_test_flush (ascii_driver); }