X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_xhtml.cpp;h=7d9a69bd6ae6369627f7b734968f0f7069b4dab1;hb=3b6fec38357949da2675dd4524282f1c790eff6e;hp=3f8c0a43b1c7e484ec4fb241dea12616abfba9dd;hpb=ebcaa5b1db605a3420c23a2e6b28a3b06ed4e180;p=lyx.git diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp index 3f8c0a43b1..7d9a69bd6a 100644 --- a/src/output_xhtml.cpp +++ b/src/output_xhtml.cpp @@ -34,7 +34,7 @@ #include "support/lstrings.h" #include "support/textutils.h" -#include +#include // Uncomment to activate debugging code. // #define XHTML_DEBUG @@ -590,6 +590,8 @@ void xhtmlParagraphs(Text const & text, ParagraphList::const_iterator const pend = (epit == (int) paragraphs.size()) ? paragraphs.end() : paragraphs.iterator_at(epit); + std::stack headerLevels; + while (bpit < epit) { ParagraphList::const_iterator par = paragraphs.iterator_at(bpit); if (par->params().startOfAppendix()) { @@ -607,6 +609,27 @@ void xhtmlParagraphs(Text const & text, ParagraphList::const_iterator const lastpar = par; ParagraphList::const_iterator send; + // Think about adding
and/or
s. + if (style.category() == from_utf8("Sectioning")) { + // Need to close a previous section if it has the same level or a higher one (close
if opening a + //

after a

,

,

,

, or
). More examples: + // - current: h2; back: h1; do not close any
+ // - current: h1; back: h2; close two
(first the

, then the

, so a new

can come) + // The level (h1, h2, etc.) corresponds to style.toclevel. + while (! headerLevels.empty() && style.toclevel <= headerLevels.top()) { + headerLevels.pop(); + xs << xml::EndTag("section"); + xs << xml::CR(); + } + + // Open the new one. + headerLevels.push(style.toclevel); + if (style.toclevel > 1) { //

is the document title. + xs << xml::StartTag("section"); + xs << xml::CR(); + } + } + switch (style.latextype) { case LATEX_COMMAND: { // The files with which we are working never have more than @@ -643,6 +666,13 @@ void xhtmlParagraphs(Text const & text, } bpit += distance(lastpar, par); } + + // If need be, close
s, but only at the end of the document (otherwise, dealt with at the beginning + // of the loop). + while (! headerLevels.empty() && headerLevels.top() > 1) { + headerLevels.pop(); + xs << xml::EndTag("section") << xml::CR(); + } }