[LyX/master] DocBook: don't output abstract if it would have no content.

Thibaut Cuvelier tcuvelier at lyx.org
Thu Jul 30 22:29:57 UTC 2020


commit 6434b666bf68afc3965396351cde86db080daa4f
Author: Thibaut Cuvelier <tcuvelier at lyx.org>
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.


More information about the lyx-cvs mailing list