X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Foutput%2Frender-test.c;h=0e07f87dc16f6ef8e3ce9ebf97196ca37c525127;hb=7c2b97b0c7172f4d6eb0b3022c56c0b61cb5f60f;hp=2a874d1c917c7f3948db1cf35811c7e0e0799473;hpb=395cd4395449dbdff7c9ba0d56ba14529063d350;p=pspp diff --git a/tests/output/render-test.c b/tests/output/render-test.c index 2a874d1c91..0e07f87dc1 100644 --- a/tests/output/render-test.c +++ b/tests/output/render-test.c @@ -22,12 +22,14 @@ #include #include +#include "data/file-handle-def.h" #include "libpspp/assertion.h" #include "libpspp/compiler.h" +#include "libpspp/i18n.h" #include "libpspp/string-map.h" #include "output/ascii.h" #include "output/driver.h" -#include "output/tab.h" +#include "output/table.h" #include "output/table-item.h" #include "gl/error.h" @@ -35,11 +37,9 @@ #include "gl/xalloc.h" #include "gl/xvasprintf.h" -/* --transpose: Transpose the table before outputting? */ -static int transpose; - /* --emphasis: ASCII driver emphasis option. */ -static char *emphasis; +static bool bold; +static bool underline; /* --box: ASCII driver box option. */ static char *box; @@ -77,6 +77,7 @@ main (int argc, char **argv) FILE *input; set_program_name (argv[0]); + i18n_init (); output_engine_push (); input_file_name = parse_options (argc, argv); @@ -113,9 +114,7 @@ main (int argc, char **argv) } table = tables[n_tables - 1]; - if (transpose) - table = table_transpose (table); - table_item_submit (table_item_create (table, NULL, NULL)); + table_item_submit (table_item_create (table, NULL, NULL, NULL)); free (tables); } else @@ -125,6 +124,7 @@ main (int argc, char **argv) fclose (input); output_engine_pop (); + fh_done (); return 0; } @@ -143,8 +143,8 @@ configure_drivers (int width, int length, int min_break) if (min_break >= 0) string_map_insert_nocopy (&options, xstrdup ("min-hbreak"), xasprintf ("%d", min_break)); - if (emphasis != NULL) - string_map_insert (&options, "emphasis", emphasis); + if (bold || underline) + string_map_insert (&options, "emphasis", "true"); if (box != NULL) string_map_insert (&options, "box", box); @@ -249,7 +249,6 @@ parse_options (int argc, char **argv) {"width", required_argument, NULL, OPT_WIDTH}, {"length", required_argument, NULL, OPT_LENGTH}, {"min-break", required_argument, NULL, OPT_MIN_BREAK}, - {"transpose", no_argument, &transpose, 1}, {"emphasis", required_argument, NULL, OPT_EMPHASIS}, {"box", required_argument, NULL, OPT_BOX}, {"draw-mode", no_argument, &draw_mode, 1}, @@ -281,7 +280,23 @@ parse_options (int argc, char **argv) break; case OPT_EMPHASIS: - emphasis = optarg; + if (!strcmp (optarg, "bold")) + { + bold = true; + underline = false; + } + else if (!strcmp (optarg, "underline")) + { + bold = false; + underline = true; + } + else if (!strcmp (optarg, "none")) + { + bold = underline = false; + } + else + error (1, 0, "argument to --emphasis must be \"bold\" or " + "\"underline\" or \"none\""); break; case OPT_BOX: @@ -333,7 +348,7 @@ replace_newlines (char *p) { char *q; - for (q = p; *p != '\0'; ) + for (q = p; *p != '\0';) if (*p == '\\' && p[1] == 'n') { *q++ = '\n'; @@ -347,7 +362,7 @@ replace_newlines (char *p) static struct table * read_table (FILE *stream) { - struct tab_table *tab; + struct table *tab; char buffer[1024]; int input[6]; int n_input = 0; @@ -368,13 +383,11 @@ read_table (FILE *stream) ht = n_input >= 5 ? input[4] : 0; hb = n_input >= 6 ? input[5] : 0; - tab = tab_create (nc, nr); - tab_headers (tab, hl, hr, ht, hb); + tab = table_create (nc, nr, hl, hr, ht, hb); for (r = 0; r < nr; r++) for (c = 0; c < nc; c++) - if (tab_cell_is_empty (tab, c, r)) + if (table_cell_is_empty (tab, c, r)) { - unsigned int opt; char *new_line; char *text; int rs, cs; @@ -400,44 +413,49 @@ read_table (FILE *stream) cs = 1; } - opt = 0; +#define S(H) { TABLE_AREA_STYLE_INITIALIZER__, .cell_style.halign = H } + static const struct table_area_style left_style + = S (TABLE_HALIGN_LEFT); + static const struct table_area_style right_style + = S (TABLE_HALIGN_RIGHT); + static const struct table_area_style center_style + = S (TABLE_HALIGN_CENTER); + + const struct table_area_style *style = &right_style; while (*text && strchr ("<>^,@()|", *text)) switch (*text++) { case '<': - tab_vline (tab, TAL_1, c, r, r + rs - 1); + table_vline (tab, TABLE_STROKE_SOLID, c, r, r + rs - 1); break; case '>': - tab_vline (tab, TAL_1, c + cs, r, r + rs - 1); + table_vline (tab, TABLE_STROKE_SOLID, c + cs, r, r + rs - 1); break; case '^': - tab_hline (tab, TAL_1, c, c + cs - 1, r); + table_hline (tab, TABLE_STROKE_SOLID, c, c + cs - 1, r); break; case ',': - tab_hline (tab, TAL_1, c, c + cs - 1, r + rs); + table_hline (tab, TABLE_STROKE_SOLID, c, c + cs - 1, r + rs); break; case '@': - tab_box (tab, TAL_1, TAL_1, -1, -1, c, r, - c + cs - 1, r + rs - 1); + table_box (tab, TABLE_STROKE_SOLID, TABLE_STROKE_SOLID, + -1, -1, c, r, c + cs - 1, r + rs - 1); break; case '(': - opt &= ~TAB_ALIGNMENT; - opt |= TAB_LEFT; + style = &left_style; break; case ')': - opt &= ~TAB_ALIGNMENT; - opt |= TAB_RIGHT; + style = &right_style; break; case '|': - opt &= ~TAB_ALIGNMENT; - opt |= TAB_CENTER; + style = ¢er_style; break; default: @@ -452,19 +470,23 @@ read_table (FILE *stream) for (i = 0; (content = strsep (&pos, "#")) != NULL; i++) if (!i) - tab_joint_text (tab, c, r, c + cs - 1, r + rs - 1, opt, - content); + { + table_joint_text (tab, c, r, c + cs - 1, r + rs - 1, 0, + content); + table_add_style (tab, c, r, style); + } else { char marker[2] = { 'a' + n_footnotes, '\0' }; - struct footnote *f = tab_create_footnote ( - tab, n_footnotes, content, marker); - tab_add_footnote (tab, c, r, f); + struct footnote *f = table_create_footnote ( + tab, n_footnotes, content, marker, + table_area_style_clone (tab->container, &left_style)); + table_add_footnote (tab, c, r, f); n_footnotes++; } } - return &tab->table; + return tab; } static void @@ -485,7 +507,8 @@ draw (FILE *stream) continue; if (sscanf (buffer, "%d %d %d %[^\n]", &x, &y, &emph, text) == 4) - ascii_test_write (ascii_driver, text, x, y, emph ? TAB_EMPH : 0); + ascii_test_write (ascii_driver, text, x, y, emph ? bold : false, + emph ? underline : false); else if (sscanf (buffer, "set-length %d %d", &y, &length) == 2) ascii_test_set_length (ascii_driver, y, length); else