commit 6434b666bf68afc3965396351cde86db080daa4f
Author: Thibaut Cuvelier <[email protected]>
Date:   Fri Jul 31 00:55:00 2020 +0200

    DocBook: don't output abstract if it would have no content.
    
    Restore a change from e709a662 (reverted by d75ff993) that was mixed into 
another commit.
    
    Also, add a TODO for InsetIndex.
---
 src/insets/InsetIndex.cpp |    1 +
 src/output_docbook.cpp    |   31 ++++++++++++++++++++-----------
 2 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/src/insets/InsetIndex.cpp b/src/insets/InsetIndex.cpp
index 83b3be1..987c138 100644
--- a/src/insets/InsetIndex.cpp
+++ b/src/insets/InsetIndex.cpp
@@ -199,6 +199,7 @@ void InsetIndex::docbook(XMLStream & xs, OutputParams const 
& runparams) const
                                                                        
"Complete entry: \"") + latexString + from_utf8("\"");
                LYXERR0(error);
                xs << XMLStream::ESCAPE_NONE << (from_utf8("<!-- Output Error: 
") + error + from_utf8(" -->\n"));
+               // TODO: implement @ using the sortas attribute (on primary, 
secondary, tertiary).
        }
 
        // Handle several indices.
diff --git a/src/output_docbook.cpp b/src/output_docbook.cpp
index 33d9910..c5519de 100644
--- a/src/output_docbook.cpp
+++ b/src/output_docbook.cpp
@@ -39,6 +39,7 @@
 #include <stack>
 #include <iostream>
 #include <algorithm>
+#include <sstream>
 
 using namespace std;
 using namespace lyx::support;
@@ -863,17 +864,25 @@ void outputDocBookInfo(
        generateDocBookParagraphWithoutSectioning(text, buf, xs, runparams, 
paragraphs, bpitInfo, epitInfo);
 
        if (hasAbstract) {
-               string tag = 
paragraphs[bpitAbstract].layout().docbookforceabstracttag();
-               if (tag == "NONE")
-                       tag = "abstract";
-
-               xs << xml::StartTag(tag);
-               xs << xml::CR();
-               xs.startDivision(false);
-               generateDocBookParagraphWithoutSectioning(text, buf, xs, 
runparams, paragraphs, bpitAbstract, epitAbstract);
-               xs.endDivision();
-               xs << xml::EndTag(tag);
-               xs << xml::CR();
+               // Sometimes, there are many paragraphs that should go into the 
abstract, but none generates actual content.
+               // Thus, first generate to a temporary stream, then only create 
the <abstract> tag if these paragraphs
+               // generate some content.
+               odocstringstream os2;
+               XMLStream xs2(os2);
+               generateDocBookParagraphWithoutSectioning(text, buf, xs2, 
runparams, paragraphs, bpitAbstract, epitAbstract);
+
+               // Actually output the abstract if there is something to do.
+               if (!os2.str().empty()) {
+                       string tag = 
paragraphs[bpitAbstract].layout().docbookforceabstracttag();
+                       if (tag == "NONE")
+                               tag = "abstract";
+
+                       xs << xml::StartTag(tag);
+                       xs << xml::CR();
+                       xs << XMLStream::ESCAPE_NONE << os2.str();
+                       xs << xml::EndTag(tag);
+                       xs << xml::CR();
+               }
        }
 
        // End the <info> tag if it was started.
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to