From 7be70263867587938698db2ab3ed3ff1a4547f58 Mon Sep 17 00:00:00 2001 From: Thibaut Cuvelier Date: Sun, 18 Oct 2020 08:22:40 +0200 Subject: [PATCH] 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 file changed, 21 insertions(+), 24 deletions(-) diff --git a/src/output_docbook.cpp b/src/output_docbook.cpp index 077c304874..e40231938b 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 -- 2.39.5