/* -o, --output: Base name for output files. */
static const char *output_base = "render";
-/* --dump: Print table dump to stdout? */
-static bool dump;
-
static const char *parse_options (int argc, char **argv);
static void usage (void) NO_RETURN;
-static struct pivot_table *read_table (struct lexer *);
+static void read_table (struct lexer *);
static void output_msg (const struct msg *, void *);
int
if (lex_match (lexer, T_STOP))
break;
- struct pivot_table *pt = read_table (lexer);
- if (dump)
- pivot_table_dump (pt, 0);
- pivot_table_submit (pt);
+ read_table (lexer);
}
lex_destroy (lexer);
register_driver (&options, "%s.pdf", output_base);
#endif
+ string_map_insert (&options, "box", "unicode");
register_driver (&options, "%s.txt", output_base);
+
+ string_map_insert (&options, "box", "ascii");
+ register_driver (&options, "%s-ascii.txt", output_base);
+
register_driver (&options, "%s.csv", output_base);
register_driver (&options, "%s.odt", output_base);
register_driver (&options, "%s.spv", output_base);
OPT_EMPHASIS,
OPT_BOX,
OPT_TABLE_LOOK,
- OPT_DUMP,
OPT_HELP
};
static const struct option options[] =
{"box", required_argument, NULL, OPT_BOX},
{"output", required_argument, NULL, 'o'},
{"table-look", required_argument, NULL, OPT_TABLE_LOOK},
- {"dump", no_argument, NULL, OPT_DUMP},
{"help", no_argument, NULL, OPT_HELP},
{NULL, 0, NULL, 0},
};
}
break;
- case OPT_DUMP:
- dump = true;
- break;
-
case OPT_HELP:
usage ();
}
}
-static struct pivot_table *
+static void
read_table (struct lexer *lexer)
{
+ bool displayed = false;
+
struct pivot_table *pt = pivot_table_create ("Default Title");
while (lex_match (lexer, T_SLASH))
{
assert (!pivot_table_is_shared (pt));
+ displayed = false;
if (lex_match_id (lexer, "ROW"))
read_dimension (lexer, pt, PIVOT_AXIS_ROW,
{
pivot_table_submit (pivot_table_ref (pt));
pt = pivot_table_unshare (pt);
+ displayed = true;
}
else
{
}
}
+ if (!displayed)
+ pivot_table_submit (pt);
+ else
+ pivot_table_unshare (pt);
+
force_match (lexer, T_ENDCMD);
- return pt;
}
static void
╰──┴──┴──╯
])
AT_CLEANUP
+
+AT_SETUP([pivot table title and caption])
+AT_DATA([pivot.txt], [[
+/col "a"("a1", "a2")
+/row "b"("b1", "b2")
+/cell[all, all]
+/title "Title + Caption" /caption "Title + Caption" /display
+/title "Title Only" /caption "(Not Shown)" /show title=yes caption=no /display
+/title "(Not Shown)" /caption "Caption Only" /show title=no caption=yes /display
+/title "(Not Shown)" /caption "(Not Shown)" /show title=no caption=no
+]])
+AT_CHECK([pivot-table-test --table-look $srcdir/output/look.stt pivot.txt --box unicode], [0], [dnl
+Title + Caption
+╭──┬──┬──╮
+│ │a1│a2│
+├──┼──┼──┤
+│b1│ 0│ 1│
+│b2│ 2│ 3│
+╰──┴──┴──╯
+Title + Caption
+
+Title Only
+╭──┬──┬──╮
+│ │a1│a2│
+├──┼──┼──┤
+│b1│ 0│ 1│
+│b2│ 2│ 3│
+╰──┴──┴──╯
+
+╭──┬──┬──╮
+│ │a1│a2│
+├──┼──┼──┤
+│b1│ 0│ 1│
+│b2│ 2│ 3│
+╰──┴──┴──╯
+Caption Only
+
+╭──┬──┬──╮
+│ │a1│a2│
+├──┼──┼──┤
+│b1│ 0│ 1│
+│b2│ 2│ 3│
+╰──┴──┴──╯
+])
+AT_CLEANUP
+
+AT_SETUP([pivot table with no dimensions])
+AT_DATA([pivot.txt], [[
+/title "No Dimensions"
+]])
+AT_CHECK([pivot-table-test --table-look $srcdir/output/look.stt pivot.txt --box unicode], [0], [dnl
+No Dimensions
+╭╮
+╰╯
+])
+AT_CLEANUP
+
+AT_SETUP([pivot table with empty dimensions])
+AT_DATA([pivot.txt], [[
+/col "a"()
+/look empty=show
+/title "One Empty Dimension" /display
+/title "Two Empty Dimensions" /row "b"*() /display
+/title "Three Dimensions, Two Empty" /row "c"("c1", "c2")
+]])
+AT_CHECK([pivot-table-test --table-look $srcdir/output/look.stt pivot.txt --box unicode], [0], [dnl
+One Empty Dimension
+
+Two Empty Dimensions
+
+Three Dimensions, Two Empty
+])
+AT_CLEANUP
+
+AT_SETUP([pivot table with empty groups])
+AT_DATA([pivot.txt], [[
+/col "a"("a1", "a2"(), "a3")
+/row "b"("b1"(), "b2", "b3")
+/cell[all,all]
+/look empty=show
+/display
+]])
+AT_CHECK([pivot-table-test --table-look $srcdir/output/look.stt pivot.txt --box unicode], [0], [dnl
+Default Title
+╭──┬──┬──╮
+│ │a1│a3│
+├──┼──┼──┤
+│b2│ 0│ 1│
+│b3│ 2│ 3│
+╰──┴──┴──╯
+])
+AT_CLEANUP
+
+AT_SETUP([pivot table - category and dimension borders])
+AT_DATA([pivot.txt], [[
+/col "a"("a1", "ag1"("a2", "a3"))
+/col "b"("bg1"("b1", "b2"), "b3")
+/row "c"("c1", "cg1"("c2", "c3"))
+/row "d"("dg1"("d1", "d2"), "d3")
+/cell[all, all, all, all]
+/border "*" (none)
+/border "dim-row-horz" (solid "blue")
+ "cat-row-horz" (dashed "red")
+ "dim-row-vert" (solid "blue")
+ "cat-row-vert" (dashed "red")
+ "dim-col-horz" (solid "blue")
+ "cat-col-horz" (dashed "red")
+ "dim-col-vert" (solid "blue")
+ "cat-col-vert" (dashed "red")
+/title "Category and Dimension Borders"
+]])
+AT_CHECK([pivot-table-test --table-look $srcdir/output/look.stt pivot.txt --box unicode], [0], [dnl
+Category and Dimension Borders
+ bg1 │
+ ╶╌╌╌╌╌╌╌╌┬╌╌╌╌╌╌╌╌┤
+ b1 │ b2 │ b3
+ ╶──┬─────┼──┬─────┼──┬─────
+ │ ag1 │ │ ag1 │ │ ag1
+ ├╌╌┬╌╌┤ ├╌╌┬╌╌┤ ├╌╌┬╌╌
+ a1│a2┊a3│a1│a2┊a3│a1│a2┊a3
+dg1┊d1│c1 0│ 1┊ 2│ 3│ 4┊ 5│ 6│ 7┊ 8
+ ┊ ├───┬─────┼──┼──┼──┼──┼──┼──┼──┼──
+ ┊ │cg1┊c2 9│10┊11│12│13┊14│15│16┊17
+ ┊ │ ├╌╌╌╌╌┼╌╌+╌╌┼╌╌┼╌╌+╌╌┼╌╌┼╌╌+╌╌
+ ┊ │ ┊c3 18│19┊20│21│22┊23│24│25┊26
+ ├──┼───┴─────┼──┼──┼──┼──┼──┼──┼──┼──
+ ┊d2│c1 27│28┊29│30│31┊32│33│34┊35
+ ┊ ├───┬─────┼──┼──┼──┼──┼──┼──┼──┼──
+ ┊ │cg1┊c2 36│37┊38│39│40┊41│42│43┊44
+ ┊ │ ├╌╌╌╌╌┼╌╌+╌╌┼╌╌┼╌╌+╌╌┼╌╌┼╌╌+╌╌
+ ┊ │ ┊c3 45│46┊47│48│49┊50│51│52┊53
+───┴──┼───┴─────┼──┼──┼──┼──┼──┼──┼──┼──
+d3 │c1 54│55┊56│57│58┊59│60│61┊62
+ ├───┬─────┼──┼──┼──┼──┼──┼──┼──┼──
+ │cg1┊c2 63│64┊65│66│67┊68│69│70┊71
+ │ ├╌╌╌╌╌┼╌╌+╌╌┼╌╌┼╌╌+╌╌┼╌╌┼╌╌+╌╌
+ │ ┊c3 72│73┊74│75│76┊77│78│79┊80
+])
+AT_CLEANUP