[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