- struct text_item *text_item = to_text_item (item);
- if (text_item->markup) /* XXX */
- return false;
-
- enum text_item_type type = text_item_get_type (text_item);
- if (type != TEXT_ITEM_SYNTAX && type != TEXT_ITEM_LOG)
- return false;
-
- if (!ds_is_empty (&e->deferred_text) && e->deferred_type != type)
- flush_deferred_text (e);
-
- e->deferred_type = type;
-
- if (!ds_is_empty (&e->deferred_text))
- ds_put_byte (&e->deferred_text, '\n');
-
- const char *text = text_item_get_text (text_item);
- ds_put_cstr (&e->deferred_text, text);
- output_item_unref (item);
-
+ struct text_item *text = to_text_item (output_item);
+ if (!e->deferred_text)
+ e->deferred_text = text_item_unshare (text);
+ else if (text_item_append (e->deferred_text, text))
+ text_item_unref (text);
+ else
+ {
+ flush_deferred_text (e);
+ e->deferred_text = text_item_unshare (text);
+ }