- switch (item->type)
- {
- case OUTPUT_ITEM_GROUP_OPEN:
- if (e->n_groups >= e->allocated_groups)
- e->groups = x2nrealloc (e->groups, &e->allocated_groups,
- sizeof *e->groups);
- e->groups[e->n_groups] = xstrdup_if_nonnull (item->command_name);
- e->n_groups++;
- break;
-
- case OUTPUT_ITEM_GROUP_CLOSE:
- assert (e->n_groups > 0);
-
- size_t idx = --e->n_groups;
- free (e->groups[idx]);
-
- char *key = xasprintf ("Head%zu", idx);
- free (string_map_find_and_delete (&e->heading_vars, key));
- free (key);
- break;
-
- case OUTPUT_ITEM_TEXT:
- {
- enum text_item_subtype st = item->text.subtype;
- char *key = (st == TEXT_ITEM_TITLE ? xasprintf ("Head%zu", e->n_groups)
- : st == TEXT_ITEM_PAGE_TITLE ? xstrdup ("PageTitle")
- : NULL);
- if (key)
- string_map_replace_nocopy (&e->heading_vars, key,
- text_item_get_plain_text (item));
- }
- break;
-
- case OUTPUT_ITEM_CHART:
- case OUTPUT_ITEM_IMAGE:
- case OUTPUT_ITEM_MESSAGE:
- case OUTPUT_ITEM_PAGE_BREAK:
- case OUTPUT_ITEM_PAGE_SETUP:
- case OUTPUT_ITEM_TABLE:
- break;
- }