- if ( rank.n_group_vars > 0 )
- {
- struct string varlist;
- int g;
-
- ds_init_empty (&varlist);
- for ( g = 0 ; g < rank.n_group_vars ; ++g )
- {
- ds_put_cstr (&varlist, var_get_name (rank.group_vars[g]));
-
- if ( g < rank.n_group_vars - 1)
- ds_put_cstr (&varlist, " ");
- }
-
- if ( rank.rs[i].rfunc == NORMAL ||
- rank.rs[i].rfunc == PROPORTION )
- tab_output_text_format (0,
- _("%s into %s(%s of %s using %s BY %s)"),
- var_get_name (rank.vars[v]),
- rank.rs[i].dest_names[v],
- function_name[rank.rs[i].rfunc],
- var_get_name (rank.vars[v]),
- fraction_name (&rank),
- ds_cstr (&varlist));
-
- else
- tab_output_text_format (0,
- _("%s into %s(%s of %s BY %s)"),
- var_get_name (rank.vars[v]),
- rank.rs[i].dest_names[v],
- function_name[rank.rs[i].rfunc],
- var_get_name (rank.vars[v]),
- ds_cstr (&varlist));
- ds_destroy (&varlist);
- }
- else
- {
- if ( rank.rs[i].rfunc == NORMAL ||
- rank.rs[i].rfunc == PROPORTION )
- tab_output_text_format (0,
- _("%s into %s(%s of %s using %s)"),
- var_get_name (rank.vars[v]),
- rank.rs[i].dest_names[v],
- function_name[rank.rs[i].rfunc],
- var_get_name (rank.vars[v]),
- fraction_name (&rank));
-
- else
- tab_output_text_format (0,
- _("%s into %s(%s of %s)"),
- var_get_name (rank.vars[v]),
- rank.rs[i].dest_names[v],
- function_name[rank.rs[i].rfunc],
- var_get_name (rank.vars[v]));
- }
+ int row_idx = pivot_category_create_leaf (
+ variables->root, pivot_value_new_variable (rank.vars[v]));
+
+ struct string group_vars = DS_EMPTY_INITIALIZER;
+ for (int g = 0 ; g < rank.n_group_vars ; ++g)
+ {
+ if (g)
+ ds_put_byte (&group_vars, ' ');
+ ds_put_cstr (&group_vars, var_get_name (rank.group_vars[g]));
+ }
+
+ enum rank_func rfunc = rank.rs[i].rfunc;
+ bool has_fraction = rfunc == NORMAL || rfunc == PROPORTION;
+ const char *entries[] =
+ {
+ rank.rs[i].dest_names[v],
+ function_name[rank.rs[i].rfunc],
+ has_fraction ? fraction_name (&rank) : NULL,
+ rank.n_group_vars ? ds_cstr (&group_vars) : NULL,
+ };
+ for (size_t j = 0; j < sizeof entries / sizeof *entries; j++)
+ {
+ const char *entry = entries[j];
+ if (entry)
+ pivot_table_put2 (table, j, row_idx,
+ pivot_value_new_user_text (entry, -1));
+ }
+ ds_destroy (&group_vars);