+ FloatList const & floats = buffer().params().documentClass().floats();
+ Floating const & ftype = floats.getType(params_.type);
+ string const & htmltype = ftype.htmlTag();
+ string const & attr = ftype.htmlAttrib();
+
+ odocstringstream ods;
+ XHTMLStream newxs(ods);
+ newxs << html::StartTag(htmltype, attr);
+ InsetText::XHTMLOptions const opts =
+ InsetText::WriteLabel | InsetText::WriteInnerTag;
+ docstring deferred = InsetText::insetAsXHTML(newxs, rp, opts);
+ newxs << html::EndTag(htmltype);
+
+ if (rp.inFloat == OutputParams::NONFLOAT)
+ // In this case, this float needs to be deferred, but we'll put it
+ // before anything the text itself deferred.
+ deferred = ods.str() + '\n' + deferred;
+ else
+ // In this case, the whole thing is already being deferred, so
+ // we can write to the stream.
+ // Note that things will already have been escaped, so we do not
+ // want to escape them again.
+ xs << XHTMLStream::ESCAPE_NONE << ods.str();
+ return deferred;