if (axis->dimensions[i]->n_leaves == 0)
return NULL;
- return xcalloc (axis->n_dimensions, sizeof *indexes);
+ size_t size = axis->n_dimensions * sizeof *indexes;
+ return xzalloc (MAX (size, 1));
}
for (size_t i = 0; i < axis->n_dimensions; i++)
e.g. N_("Descriptive Statistics"). The un-translated text string is used as
the pivot table's subtype.
- Operations commonly performed on the new pivot_table:
-
- - If empty rows or columns should not be displayed, set ->omit_empty to
- true.
-
- - Set the format to use for "count" values with pivot_table_set_weight_var()
- or pivot_table_set_weight_format().
-
This function is a shortcut for pivot_table_create__() for the most common
case. Use pivot_table_create__() directly if the title should be some kind
of value other than an ordinary text string, or if the subtype should be
-different from the title.
+ different from the title.
See the large comment at the top of pivot-table.h for general advice on
creating pivot tables. */
}
/* Creates and returns a new pivot table with the given TITLE, and takes
- ownership of TITLE. The new pivot table's subtype is SUBTYPE, which
- should be an untranslated English string that describes the contents of
- the table at a high level without being specific about the variables or
- other context involved.
+ ownership of TITLE. The new pivot table's subtype is SUBTYPE, which should
+ be an untranslated English string that describes the contents of the table
+ at a high level without being specific about the variables or other context
+ involved.
- Operations commonly performed on the new pivot_table:
-
- - If empty rows or columns should not be displayed, set ->omit_empty to
- true.
-
- - Set the format to use for "count" values with pivot_table_set_weight_var()
- or pivot_table_set_weight_format().
+ TITLE and SUBTYPE may be NULL, but in that case the client must add them
+ later because they are both mandatory for a pivot table.
See the large comment at the top of pivot-table.h for general advice on
creating pivot tables. */
{
struct pivot_table *table = xzalloc (sizeof *table);
table->ref_cnt = 1;
+ table->show_title = true;
table->show_caption = true;
table->weight_format = (struct fmt_spec) { FMT_F, 40, 0 };
table->title = title;
pivot_value_destroy (table->subtype);
pivot_value_destroy (table->corner_text);
pivot_value_destroy (table->caption);
+ free (table->notes);
for (size_t i = 0; i < table->n_dimensions; i++)
pivot_dimension_destroy (table->dimensions[i]);
struct pivot_value *value)
{
assert (n == table->n_dimensions);
+ for (size_t i = 0; i < n; i++)
+ assert (dindexes[i] < table->dimensions[i]->n_leaves);
if (value->type == PIVOT_VALUE_NUMERIC && !value->numeric.format.w)
{
pivot_axis_assign_label_depth (table, PIVOT_AXIS_LAYER, false);
}
\f
-/* Footnotes. */
-
-\f
-\f
static void
indent (int indentation)
{
pivot_value_dump (d->root->name);
fputs (" =", stdout);
- struct pivot_value **names = xnmalloc (layer_axis->label_depth,
- sizeof *names);
+ struct pivot_value **names = xnmalloc (d->n_leaves, sizeof *names);
size_t n_names = 0;
for (const struct pivot_category *c
= d->presentation_leaves[layer_indexes[i]];
/* Appends a text representation of the body of VALUE to OUT. SHOW_VALUES and
SHOW_VARIABLES control whether variable and value labels are included.
- The "body" omits subscripts and superscripts and footnotes. */
+ The "body" omits subscripts and superscripts and footnotes.
+
+ Returns true if OUT is a number (or a number plus a value label), false
+ otherwise. */
bool
pivot_value_format_body (const struct pivot_value *value,
enum settings_value_show show_values,
/* Appends a text representation of VALUE to OUT. SHOW_VALUES and
SHOW_VARIABLES control whether variable and value labels are included.
- Subscripts and superscripts and footnotes are included. */
+ Subscripts and footnotes are included. */
void
pivot_value_format (const struct pivot_value *value,
enum settings_value_show show_values,
ds_put_format (out, "%c%s", i ? ',' : '_', value->subscripts[i]);
}
- if (value->superscript)
- ds_put_format (out, "^%s", value->superscript);
-
for (size_t i = 0; i < value->n_footnotes; i++)
{
ds_put_byte (out, '^');
free (value->subscripts[i]);
free (value->subscripts);
- free (value->superscript);
-
switch (value->type)
{
case PIVOT_VALUE_NUMERIC: