docstring Paragraph::simpleLyXHTMLOnePar(Buffer const & buf,
XHTMLStream & xs,
OutputParams const & runparams,
- Font const & outerfont,
+ Font const & outerfont,
+ bool start_paragraph, bool close_paragraph,
pos_type initial) const
{
docstring retval;
Layout const & style = *d->layout_;
- xs.startParagraph(allowEmpty());
+ if (start_paragraph)
+ xs.startParagraph(allowEmpty());
FontInfo font_old =
style.labeltype == LABEL_MANUAL ? style.labelfont : style.font;
if (!runparams.for_toc || inset->isInToc()) {
OutputParams np = runparams;
np.local_font = &font;
- if (!inset->getLayout().htmlisblock())
+ // If the paragraph has size 1, then we are in the "special
+ // case" where we do not output the containing paragraph info
+ if (!inset->getLayout().htmlisblock() && size() != 1)
np.html_in_par = true;
retval += inset->xhtml(xs, np);
}
font_old = font.fontInfo();
}
+ // FIXME XHTML
+ // I'm worried about what happens if a branch, say, is itself
+ // wrapped in some font stuff. I think that will not work.
xs.closeFontTags();
- xs.endParagraph();
+ if (close_paragraph)
+ xs.endParagraph();
+
return retval;
}
if (!lay.counter.empty())
buf.masterBuffer()->params().
documentClass().counters().step(lay.counter, OutputUpdate);
+
// FIXME We should see if there's a label to be output and
// do something with it.
if (par != pbegin)
xs << html::CR();
- // If we are already in a paragraph, and this is the first one, then we
- // do not want to open the paragraph tag.
- // we also do not want to open it if the current layout does not permit
- // multiple paragraphs.
- bool const opened = runparams.html_make_pars &&
- (par != pbegin || !runparams.html_in_par);
- bool const make_parid = !runparams.for_toc && runparams.html_make_pars;
-
- if (opened)
- openParTag(xs, lay, par->params(),
- make_parid ? par->magicLabel() : "");
-
- docstring const deferred =
- par->simpleLyXHTMLOnePar(buf, xs, runparams, text.outerFont(distance(begin, par)));
+ // We want to open the paragraph tag if:
+ // (i) the current layout permits multiple paragraphs
+ // (ii) we are either not already inside a paragraph (HTMLIsBlock) OR
+ // we are, but this is not the first paragraph
+ // But we do not want to open the paragraph tag if this paragraph contains
+ // only one item, and that item is "inline", i.e., not HTMLIsBlock (such
+ // as a branch). That is the "special case" we handle first.
+ Inset const * specinset = par->size() == 1 ? par->getInset(0) : 0;
+ bool const special_case =
+ specinset && !specinset->getLayout().htmlisblock();
+
+ bool const opened = runparams.html_make_pars
+ && (!runparams.html_in_par || par != pbegin)
+ && !special_case;
// We want to issue the closing tag if either:
// (i) We opened it, and either html_in_par is false,
bool const needclose =
(opened && (!runparams.html_in_par || nextpar != pend))
|| (!opened && runparams.html_in_par && par == pbegin && nextpar != pend);
- if (needclose) {
- closeTag(xs, lay);
- xs << html::CR();
+
+ if (opened) {
+ // We do not issue the paragraph id if we are doing
+ // this for the TOC (or some similar purpose)
+ openParTag(xs, lay, par->params(),
+ runparams.for_toc ? "" : par->magicLabel());
}
+
+ docstring const deferred = par->simpleLyXHTMLOnePar(buf, xs,
+ runparams, text.outerFont(distance(begin, par)),
+ opened, needclose);
+
if (!deferred.empty()) {
xs << XHTMLStream::ESCAPE_NONE << deferred << html::CR();
}
+ if (needclose) {
+ closeTag(xs, lay);
+ xs << html::CR();
+ }
}
return pend;
}
openItemTag(xs, style, par->params());
par->simpleLyXHTMLOnePar(buf, xs, runparams,
- text.outerFont(distance(begin, par)), sep);
+ text.outerFont(distance(begin, par)), true, true, sep);
++par;
// We may not want to close the tag yet, in particular: