mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
DocBook: better condition for abstracts.
This commit is contained in:
parent
6434b666bf
commit
acdead0487
@ -36,6 +36,8 @@
|
||||
#include "support/lstrings.h"
|
||||
#include "support/textutils.h"
|
||||
|
||||
#include "support/regex.h"
|
||||
|
||||
#include <stack>
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
@ -849,8 +851,29 @@ void outputDocBookInfo(
|
||||
pit_type epitInfo;
|
||||
tie(shouldBeInInfo, mustBeInInfo, bpitInfo, epitInfo) = info;
|
||||
|
||||
// The abstract must go in <info>.
|
||||
// Perform an additional check on the abstract. 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.
|
||||
// This check must be performed *before* a decision on whether or not to output <info> is made.
|
||||
bool hasAbstract = hasAbstractBetween(paragraphs, bpitAbstract, epitAbstract);
|
||||
docstring abstract;
|
||||
if (hasAbstract) {
|
||||
odocstringstream os2;
|
||||
XMLStream xs2(os2);
|
||||
generateDocBookParagraphWithoutSectioning(text, buf, xs2, runparams, paragraphs, bpitAbstract, epitAbstract);
|
||||
|
||||
// Actually output the abstract if there is something to do. Don't count line feeds or spaces in this,
|
||||
// even though they must be properly output if there is some abstract.
|
||||
docstring abstractContent = os2.str();
|
||||
static const lyx::regex reg("[ \\r\\n]*");
|
||||
abstractContent = from_utf8(lyx::regex_replace(to_utf8(abstractContent), reg, string("")));
|
||||
|
||||
// Nothing? Then there is no abstract!
|
||||
if (abstractContent.empty())
|
||||
hasAbstract = false;
|
||||
}
|
||||
|
||||
// The abstract must go in <info>.
|
||||
bool needInfo = !mustBeInInfo.empty() || hasAbstract;
|
||||
|
||||
// Start the <info> tag if required.
|
||||
@ -863,26 +886,16 @@ void outputDocBookInfo(
|
||||
// Output the elements that should go in <info>.
|
||||
generateDocBookParagraphWithoutSectioning(text, buf, xs, runparams, paragraphs, bpitInfo, epitInfo);
|
||||
|
||||
if (hasAbstract) {
|
||||
// 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);
|
||||
if (hasAbstract && !abstract.empty()) { // The second test is probably superfluous.
|
||||
string tag = paragraphs[bpitAbstract].layout().docbookforceabstracttag();
|
||||
if (tag == "NONE")
|
||||
tag = "abstract";
|
||||
|
||||
// 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();
|
||||
}
|
||||
xs << xml::StartTag(tag);
|
||||
xs << xml::CR();
|
||||
xs << XMLStream::ESCAPE_NONE << abstract;
|
||||
xs << xml::EndTag(tag);
|
||||
xs << xml::CR();
|
||||
}
|
||||
|
||||
// End the <info> tag if it was started.
|
||||
|
Loading…
Reference in New Issue
Block a user