+ // we will always want to output all our paragraphs when we are
+ // called this way.
+ OutputParams runparams = rp;
+ runparams.par_begin = 0;
+ runparams.par_end = text().paragraphs().size();
+
+ if (undefined()) {
+ xhtmlParagraphs(text_, buffer(), xs, runparams);
+ return docstring();
+ }
+
+ InsetLayout const & il = getLayout();
+ if (opts & WriteOuterTag)
+ xs << html::StartTag(il.htmltag(), il.htmlattr());
+ if ((opts & WriteLabel) && !il.counter().empty()) {
+ BufferParams const & bp = buffer().masterBuffer()->params();
+ Counters & cntrs = bp.documentClass().counters();
+ cntrs.step(il.counter(), OutputUpdate);
+ // FIXME: translate to paragraph language
+ if (!il.htmllabel().empty()) {
+ docstring const lbl =
+ cntrs.counterLabel(from_utf8(il.htmllabel()), bp.language->code());
+ // FIXME is this check necessary?
+ if (!lbl.empty()) {
+ xs << html::StartTag(il.htmllabeltag(), il.htmllabelattr());
+ xs << lbl;
+ xs << html::EndTag(il.htmllabeltag());
+ }
+ }
+ }
+
+ if (opts & WriteInnerTag)
+ xs << html::StartTag(il.htmlinnertag(), il.htmlinnerattr());
+ OutputParams ours = runparams;
+ if (!il.isMultiPar() || opts == JustText)
+ ours.html_make_pars = false;
+ xhtmlParagraphs(text_, buffer(), xs, ours);
+ if (opts & WriteInnerTag)
+ xs << html::EndTag(il.htmlinnertag());
+ if (opts & WriteOuterTag)
+ xs << html::EndTag(il.htmltag());
+ return docstring();