#include "output/spv/spv-legacy-data.h"
#include "output/spv/spv-output.h"
#include "output/spv/spv-select.h"
+#include "output/spv/spv-table-look.h"
#include "output/spv/spv.h"
#include "output/table-item.h"
#include "output/text-item.h"
/* -f, --force: Keep output file even on error. */
static bool force;
+/* --table-look: TableLook to replace table style for conversion. */
+static struct pivot_table_look *table_look;
+
/* Number of warnings issued. */
static size_t n_warnings;
{
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))
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 (table_look)
+ spv_item_set_table_look (spv_get_root (spv), table_look);
+
output_engine_push ();
output_set_filename (argv[1]);
string_map_replace (&output_options, "output-file", argv[2]);
}
}
+static const struct pivot_table *
+get_first_table (const struct spv_reader *spv)
+{
+ struct spv_item **items;
+ size_t n_items;
+ spv_select (spv, criteria, n_criteria, &items, &n_items);
+
+ for (size_t i = 0; i < n_items; i++)
+ if (spv_item_is_table (items[i]))
+ {
+ free (items);
+ return spv_item_get_table (items[i]);
+ }
+
+ free (items);
+ return NULL;
+}
+
+static void
+run_get_table_look (int argc UNUSED, char **argv)
+{
+ struct pivot_table_look *look;
+ if (strcmp (argv[1], "-"))
+ {
+ struct spv_reader *spv;
+ char *err = spv_open (argv[1], &spv);
+ if (err)
+ error (1, 0, "%s", err);
+
+ const struct pivot_table *table = get_first_table (spv);
+ if (!table)
+ error (1, 0, "%s: no tables found", argv[1]);
+
+ look = pivot_table_look_ref (pivot_table_get_look (table));
+
+ spv_close (spv);
+ }
+ else
+ look = pivot_table_look_ref (pivot_table_look_builtin_default ());
+
+ char *err = spv_table_look_write (argv[2], look);
+ if (err)
+ error (1, 0, "%s", err);
+
+ pivot_table_look_unref (look);
+}
+
+static void
+run_convert_table_look (int argc UNUSED, char **argv)
+{
+ struct pivot_table_look *look;
+ char *err = spv_table_look_read (argv[1], &look);
+ if (err)
+ error (1, 0, "%s", err);
+
+ err = spv_table_look_write (argv[2], look);
+ if (err)
+ error (1, 0, "%s", err);
+
+ pivot_table_look_unref (look);
+ free (look);
+}
+
static void
run_dump (int argc UNUSED, char **argv)
{
{ "detect", 1, 1, run_detect },
{ "dir", 1, 1, run_directory },
{ "convert", 2, 2, run_convert },
+ { "get-table-look", 2, 2, run_get_table_look },
+ { "convert-table-look", 2, 2, run_convert_table_look },
/* Undocumented commands. */
{ "dump", 1, 1, run_dump },
c->run (argc, argv);
+ pivot_table_look_unref (table_look);
i18n_done ();
return n_warnings ? EXIT_FAILURE : EXIT_SUCCESS;
}
}
+static void
+parse_nth_commands (char *arg)
+{
+ struct spv_criteria *c = get_criteria ();
+ size_t allocated_commands = c->n_commands;
+
+ for (char *token = strtok (arg, ","); token; token = strtok (NULL, ","))
+ {
+ if (c->n_commands >= allocated_commands)
+ c->commands = x2nrealloc (c->commands, &allocated_commands,
+ sizeof *c->commands);
+
+ c->commands[c->n_commands++] = atoi (token);
+ }
+}
+
static void
parse_members (const char *arg)
{
string_array_parse (&cm->members, ss_cstr (arg), ss_cstr (","));
}
+static void
+parse_table_look (const char *arg)
+{
+ pivot_table_look_unref (table_look);
+
+ char *error_s = spv_table_look_read (arg, &table_look);
+ if (error_s)
+ error (1, 0, "%s", error_s);
+}
+
static void
parse_options (int argc, char *argv[])
{
OPT_SHOW_HIDDEN,
OPT_SELECT,
OPT_COMMANDS,
+ OPT_NTH_COMMANDS,
OPT_SUBTYPES,
OPT_LABELS,
OPT_INSTANCES,
OPT_OR,
OPT_SORT,
OPT_RAW,
+ OPT_TABLE_LOOK,
};
static const struct option long_options[] =
{
{ "show-hidden", no_argument, NULL, OPT_SHOW_HIDDEN },
{ "select", required_argument, NULL, OPT_SELECT },
{ "commands", required_argument, NULL, OPT_COMMANDS },
+ { "nth-commands", required_argument, NULL, OPT_NTH_COMMANDS },
{ "subtypes", required_argument, NULL, OPT_SUBTYPES },
{ "labels", required_argument, NULL, OPT_LABELS },
{ "instances", required_argument, NULL, OPT_INSTANCES },
/* "convert" command options. */
{ "force", no_argument, NULL, 'f' },
+ { "table-look", required_argument, NULL, OPT_TABLE_LOOK },
/* "dump-light-table" command options. */
{ "sort", no_argument, NULL, OPT_SORT },
parse_commands (optarg);
break;
+ case OPT_NTH_COMMANDS:
+ parse_nth_commands (optarg);
+ break;
+
case OPT_SUBTYPES:
parse_subtypes (optarg);
break;
raw = true;
break;
+ case OPT_TABLE_LOOK:
+ parse_table_look (optarg);
+ break;
+
case 'f':
force = true;
break;
detect FILE Detect whether FILE is an SPV file.\n\
dir FILE List tables and other items in FILE.\n\
convert SOURCE DEST Convert .spv SOURCE to DEST.\n\
+ get-table-look SOURCE DEST Copies first selected TableLook into DEST\n\
+ convert-table-look SOURCE DEST Copies .tlo or .stt SOURCE into DEST\n\
\n\
Input selection options for \"dir\" and \"convert\":\n\
--select=CLASS... include only some kinds of objects\n\
--select=help print known object classes\n\
--commands=COMMAND... include only specified COMMANDs\n\
+ --nth-commands=N... include only the Nth instance of selected commands\n\
--subtypes=SUBTYPE... include only specified SUBTYPEs of output\n\
--labels=LABEL... include only output objects with the given LABELs\n\
--instances=INSTANCE... include only the given object INSTANCEs\n\
-O format=FORMAT set destination format to FORMAT\n\
-O OPTION=VALUE set output option\n\
-f, --force keep output file even given errors\n\
+ --table-look=FILE override tables' style with TableLook from FILE\n\
Other options:\n\
--help display this help and exit\n\
--version output version information and exit\n",