[LyX/master] DocBook: generalise detection of "special cases" to check all insets of a paragraph.
Thibaut Cuvelier
tcuvelier at lyx.org
Sun Oct 18 05:55:35 UTC 2020
commit 7be70263867587938698db2ab3ed3ff1a4547f58
Author: Thibaut Cuvelier <tcuvelier at lyx.org>
Date: Sun Oct 18 08:22:40 2020 +0200
DocBook: generalise detection of "special cases" to check all insets of a paragraph.
This will catch cases where there are multiple listings in a single paragraph, for instance.
The new code is also less brittle (checks on lyxCode instead of generated LaTeX or names).
---
src/output_docbook.cpp | 45 +++++++++++++++++++++------------------------
1 files changed, 21 insertions(+), 24 deletions(-)
diff --git a/src/output_docbook.cpp b/src/output_docbook.cpp
index 077c304..e402319 100644
--- a/src/output_docbook.cpp
+++ b/src/output_docbook.cpp
@@ -452,30 +452,27 @@ void makeParagraph(
special_case |= nInsets == (size_t) par->size() && std::all_of(par->insetList().begin(), par->insetList().end(), [](InsetList::Element inset) {
return inset.inset && inset.inset->asInsetMath() && inset.inset->asInsetMath()->getType() != hullSimple;
});
-
- // TODO: Could get rid of this with a DocBook equivalent to htmlisblock? Not for all cases, unfortunately... See above for those that have been determined not to be allowable for this potential refactoring.
- if (!special_case && par->size() == 1 && par->getInset(0)) {
- Inset const * firstInset = par->getInset(0);
-
- // Floats cannot be in paragraphs.
- special_case = to_utf8(firstInset->layoutName()).substr(0, 6) == "Float:";
-
- // Bibliographies cannot be in paragraphs.
- if (!special_case && firstInset->asInsetCommand())
- special_case = firstInset->asInsetCommand()->params().getCmdName() == "bibtex";
-
- // ERTs are in comments, not paragraphs.
- if (!special_case && firstInset->lyxCode() == lyx::ERT_CODE)
- special_case = true;
-
- // Listings should not get into their own paragraph.
- if (!special_case && firstInset->lyxCode() == lyx::LISTINGS_CODE)
- special_case = true;
-
- // Boxes cannot get into their own paragraph.
- if (!special_case && firstInset->lyxCode() == lyx::BOX_CODE)
- special_case = true;
- }
+ // Floats cannot be in paragraphs.
+ special_case |= nInsets == (size_t) par->size() && std::all_of(par->insetList().begin(), par->insetList().end(), [](InsetList::Element inset) {
+ return inset.inset->lyxCode() == FLOAT_CODE;
+ });
+ // Bibliographies cannot be in paragraphs. Bibitems should still be handled as paragraphs, though
+ // (see makeParagraphBibliography).
+ special_case |= nInsets == (size_t) par->size() && std::all_of(par->insetList().begin(), par->insetList().end(), [](InsetList::Element inset) {
+ return inset.inset->lyxCode() == BIBTEX_CODE;
+ });
+ // ERTs are in comments, not paragraphs.
+ special_case |= nInsets == (size_t) par->size() && std::all_of(par->insetList().begin(), par->insetList().end(), [](InsetList::Element inset) {
+ return inset.inset->lyxCode() == ERT_CODE;
+ });
+ // Listings should not get into their own paragraph.
+ special_case |= nInsets == (size_t) par->size() && std::all_of(par->insetList().begin(), par->insetList().end(), [](InsetList::Element inset) {
+ return inset.inset->lyxCode() == LISTINGS_CODE;
+ });
+ // Boxes cannot get into their own paragraph.
+ special_case |= nInsets == (size_t) par->size() && std::all_of(par->insetList().begin(), par->insetList().end(), [](InsetList::Element inset) {
+ return inset.inset->lyxCode() == BOX_CODE;
+ });
bool const open_par = runparams.docbook_make_pars
&& !runparams.docbook_in_par
More information about the lyx-cvs
mailing list