#include <config.h>
+#include <cairo.h>
#include <getopt.h>
#include <limits.h>
#include <stdlib.h>
#include "libpspp/string-set.h"
#include "output/driver.h"
#include "output/group-item.h"
+#include "output/image-item.h"
#include "output/page-setup-item.h"
#include "output/pivot-table.h"
#include "output/spv/light-binary-parser.h"
static size_t n_warnings;
static void usage (void);
+static void developer_usage (void);
static void parse_options (int argc, char **argv);
static void
{
const char *x = item->xml_member;
const char *b = item->bin_member;
+
+ /* The strings below are not marked for translation because they are only
+ useful to developers. */
char *s = (x && b
- ? xasprintf (_("%s and %s:"), x, b)
+ ? xasprintf ("%s and %s:", x, b)
: xasprintf ("%s:", x ? x : b));
- text_item_submit (text_item_create_nocopy (TEXT_ITEM_TITLE, s));
+ text_item_submit (text_item_create_nocopy (TEXT_ITEM_TITLE, s,
+ xstrdup ("Member Names")));
}
switch (spv_item_get_type (item))
case SPV_ITEM_MODEL:
break;
- case SPV_ITEM_OBJECT:
+ case SPV_ITEM_IMAGE:
+ image_item_submit (image_item_create (cairo_surface_reference (
+ spv_item_get_image (item))));
break;
case SPV_ITEM_TREE:
if (type == SPV_ITEM_TABLE)
{
const struct pivot_table *table = spv_item_get_table (item);
- char *title = pivot_value_to_string (table->title,
- SETTINGS_VALUE_SHOW_DEFAULT,
- SETTINGS_VALUE_SHOW_DEFAULT);
+ char *title = pivot_value_to_string (table->title, table);
if (!label || strcmp (title, label))
printf (" title \"%s\"", title);
free (title);
if (!spv_item_is_visible (item))
printf (" (hidden)");
- if (show_member_names && (item->xml_member || item->bin_member))
+
+ if (show_member_names)
{
- if (item->xml_member && item->bin_member)
- printf (" in %s and %s", item->xml_member, item->bin_member);
- else if (item->xml_member)
- printf (" in %s", item->xml_member);
- else if (item->bin_member)
- printf (" in %s", item->bin_member);
+ const char *members[] = {
+ item->xml_member,
+ item->bin_member,
+ item->png_member,
+ };
+ size_t n = 0;
+
+ for (size_t i = 0; i < sizeof members / sizeof *members; i++)
+ if (members[i])
+ printf (" %s %s", n++ == 0 ? "in" : "and", members[i]);
}
putchar ('\n');
}
group_close_item_submit (group_close_item_create ());
for (size_t i = common; i < new_path.n; i++)
group_open_item_submit (group_open_item_create (
- new_path.nodes[i]->command_id));
+ new_path.nodes[i]->command_id,
+ new_path.nodes[i]->label));
free_path (&old_path);
free_path (&new_path);
if (err)
error (1, 0, "%s", err);
+ if (raw && isatty (STDOUT_FILENO))
+ error (1, 0, "not writing binary data to tty");
+
struct spv_item **items;
size_t n_items;
spv_select (spv, criteria, n_criteria, &items, &n_items);
OPT_SORT,
OPT_RAW,
OPT_TABLE_LOOK,
+ OPT_HELP_DEVELOPER,
};
static const struct option long_options[] =
{
{ "raw", no_argument, NULL, OPT_RAW },
{ "help", no_argument, NULL, 'h' },
+ { "help-developer", no_argument, NULL, OPT_HELP_DEVELOPER },
{ "version", no_argument, NULL, 'v' },
{ NULL, 0, NULL, 0 },
usage ();
exit (EXIT_SUCCESS);
+ case OPT_HELP_DEVELOPER:
+ developer_usage ();
+ exit (EXIT_SUCCESS);
+
default:
exit (EXIT_FAILURE);
}
--table-look=FILE override tables' style with TableLook from FILE\n\
Other options:\n\
--help display this help and exit\n\
+ --help-developer display help for developer commands and exit\n\
--version output version information and exit\n",
program_name, program_name, ds_cstr (&s));
ds_destroy (&s);
}
+
+static void
+developer_usage (void)
+{
+ printf ("\
+The following developer commands are available:\n\
+ dump FILE Dump pivot table structure\n\
+ [--raw | --sort] dump-light-table FILE Dump light tables\n\
+ [--raw] dump-legacy-data FILE Dump legacy table data\n\
+ dump-legacy-table FILE [XPATH]... Dump legacy table XML\n\
+ dump-structure FILE [XPATH]... Dump structure XML\n\
+ is-legacy FILE Exit with status 0 if any legacy table selected\n\
+\n\
+Additional input selection options:\n\
+ --members=MEMBER... include only objects with these Zip member names\n\
+ --errors include only objects that cannot be loaded\n\
+\n\
+Additional options for \"dir\" command:\n\
+ --member-names show Zip member names with objects\n\
+\n\
+Other options:\n\
+ --raw print raw binary data instead of a parsed version\n\
+ --sort sort borders and areas for shorter \"diff\" output\n");
+}