+
+static void
+output_set_title__ (struct output_engine *e, char **dst, const char *src)
+{
+ free (*dst);
+ *dst = src ? xstrdup (src) : NULL;
+
+ char *page_title
+ = (e->title && e->subtitle ? xasprintf ("%s\n%s", e->title, e->subtitle)
+ : e->title ? xstrdup (e->title)
+ : e->subtitle ? xstrdup (e->subtitle)
+ : xzalloc (1));
+ text_item_submit (text_item_create_nocopy (TEXT_ITEM_PAGE_TITLE,
+ page_title));
+}
+
+void
+output_set_title (const char *title)
+{
+ struct output_engine *e = engine_stack_top ();
+
+ output_set_title__ (e, &e->title, title);
+}
+
+void
+output_set_subtitle (const char *subtitle)
+{
+ struct output_engine *e = engine_stack_top ();
+
+ output_set_title__ (e, &e->subtitle, subtitle);
+}