+ length = strlen (contents->text);
+ if (contents->n_footnotes)
+ {
+ struct string s;
+ int i;
+
+ ds_init_empty (&s);
+ ds_extend (&s, length + contents->n_footnotes * 4);
+ ds_put_cstr (&s, contents->text);
+ for (i = 0; i < contents->n_footnotes; i++)
+ {
+ char marker[10];
+
+ str_format_26adic (++*footnote_idx, false, marker, sizeof marker);
+ ds_put_format (&s, "[%s]", marker);
+ }
+
+ length = ds_length (&s);
+ text = ds_steal_cstr (&s);
+ }
+ else
+ {
+ if (length == 0)
+ return y;
+ text = contents->text;
+ }