]> git.lyx.org Git - features.git/commitdiff
Fix indentation of paragraphs after an environment.
authorEnrico Forestieri <forenr@lyx.org>
Tue, 27 May 2014 23:07:47 +0000 (01:07 +0200)
committerEnrico Forestieri <forenr@lyx.org>
Tue, 27 May 2014 23:07:47 +0000 (01:07 +0200)
When deciding whether a paragraph should be indented or not, LyX
only takes into account default layouts. This is wrong, because
an environment could be nested into another one and thus a following
paragraph would not be "default". With this patch all paragraphs
after an environment are correctly indented, independently of
whether their layouts are "default" or not.
The latex output (which was modeled following the previous wrong
assumption) is also correspondingly adapted.

src/TextMetrics.cpp
src/output_latex.cpp

index de414ea44a5840bdbe6b121b8672bf70d463a68a..e67d071221e8d6babbb2bcebb89cc53589996544 100644 (file)
@@ -1898,7 +1898,9 @@ int TextMetrics::leftMargin(int max_width,
                                l_margin = leftMargin(max_width, newpar);
                                // Remove the parindent that has been added
                                // if the paragraph was empty.
-                               if (pars[newpar].empty()) {
+                               if (pars[newpar].empty() &&
+                                   buffer.params().paragraph_separation ==
+                                   BufferParams::ParagraphIndentSeparation) {
                                        docstring pi = pars[newpar].layout().parindent;
                                        l_margin -= theFontMetrics(
                                                buffer.params().getFont()).signedWidth(pi);
@@ -1916,10 +1918,16 @@ int TextMetrics::leftMargin(int max_width,
 
        // This happens after sections or environments in standard classes.
        // We have to check the previous layout at same depth.
-       if (tclass.isDefaultLayout(par.layout()) && pit > 0
-           && pars[pit - 1].getDepth() >= par.getDepth()) {
+       if (buffer.params().paragraph_separation ==
+                       BufferParams::ParagraphSkipSeparation)
+               parindent.erase();
+       else if (pit > 0 && pars[pit - 1].getDepth() >= par.getDepth()) {
                pit_type prev = text_->depthHook(pit, par.getDepth());
-               if (pars[prev < pit ? prev : pit - 1].layout().nextnoindent)
+               if (par.layout() == pars[prev].layout()) {
+                       if (prev != pit - 1
+                           && pars[pit - 1].layout().nextnoindent)
+                               parindent.erase();
+               } else if (pars[prev].layout().nextnoindent)
                        parindent.erase();
        }
 
index c862733b718eb8617b057aa68b43268c2337c1d7..735b898eb9871d0017202a8a7e24f2637d070061 100644 (file)
@@ -202,9 +202,7 @@ static TeXEnvironmentData prepareEnvironment(Buffer const & buf,
 }
 
 
-static void finishEnvironment(Buffer const & buf, Text const & text,
-                             pit_type nextpit, otexstream & os,
-                             OutputParams const & runparams,
+static void finishEnvironment(otexstream & os, OutputParams const & runparams,
                              TeXEnvironmentData const & data)
 {
        if (open_encoding_ == CJK && data.cjk_nested) {
@@ -236,11 +234,7 @@ static void finishEnvironment(Buffer const & buf, Text const & text,
        }
 
        // Check whether we should output a blank line after the environment
-       DocumentClass const & tclass = buf.params().documentClass();
-       ParagraphList const & pars = text.paragraphs();
-       bool next_style_is_default = (nextpit >= runparams.par_end) ? false
-               : tclass.isDefaultLayout(pars.constIterator(nextpit)->layout());
-       if (!data.style->nextnoindent && next_style_is_default)
+       if (!data.style->nextnoindent)
                os << '\n';
 }
 
@@ -306,7 +300,7 @@ void TeXEnvironment(Buffer const & buf, Text const & text,
                        prepareEnvironment(buf, text, par, os, runparams);
                // Recursive call to TeXEnvironment!
                TeXEnvironment(buf, text, runparams, pit, os);
-               finishEnvironment(buf, text, pit + 1, os, runparams, data);
+               finishEnvironment(os, runparams, data);
        }
 
        if (pit != runparams.par_end)
@@ -1195,7 +1189,7 @@ void latexParagraphs(Buffer const & buf,
                        prepareEnvironment(buf, text, par, os, runparams);
                // pit can be changed in TeXEnvironment.
                TeXEnvironment(buf, text, runparams, pit, os);
-               finishEnvironment(buf, text, pit + 1, os, runparams, data);
+               finishEnvironment(os, runparams, data);
        }
 
        if (pit == runparams.par_end) {