mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
DocBook: clean the special-case code.
This commit is contained in:
parent
ca938c08d9
commit
a8de4d3296
@ -350,15 +350,6 @@ void makeParagraph(
|
||||
size_t nInsets = std::distance(par->insetList().begin(), par->insetList().end());
|
||||
auto parSize = (size_t) par->size();
|
||||
|
||||
// If this LyX code does not produce any output, it can be safely ignored in the following checks: if this thing
|
||||
// is present in the paragraph, it has no impact on the definition of the special case (i.e. whether or not
|
||||
// a <para> tag should be output).
|
||||
auto isLyxCodeToIgnore = [](InsetCode x) { return x == TOC_CODE || x == NOTE_CODE; };
|
||||
|
||||
// TODO: if a paragraph *only* contains floats, listings, bibliographies, etc., should this be considered as a
|
||||
// special case? If so, the code could be largely simplifies (all the calls to all_of, basically) and optimised
|
||||
// at the compilation stage.
|
||||
|
||||
// Plain layouts must be ignored.
|
||||
special_case |= buf.params().documentClass().isPlainLayout(par->layout()) && !runparams.docbook_force_pars;
|
||||
// Equations do not deserve their own paragraph (DocBook allows them outside paragraphs).
|
||||
@ -366,40 +357,28 @@ void makeParagraph(
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [](InsetList::Element inset) {
|
||||
return inset.inset && inset.inset->asInsetMath() && inset.inset->asInsetMath()->getType() != hullSimple;
|
||||
});
|
||||
// Tables do not deserve their own paragraphs (DocBook allows them outside paragraphs).
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [isLyxCodeToIgnore](InsetList::Element inset) {
|
||||
return inset.inset->lyxCode() == TABULAR_CODE || isLyxCodeToIgnore(inset.inset->lyxCode());
|
||||
});
|
||||
// Floats cannot be in paragraphs.
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [isLyxCodeToIgnore](InsetList::Element inset) {
|
||||
return inset.inset->lyxCode() == FLOAT_CODE || isLyxCodeToIgnore(inset.inset->lyxCode());
|
||||
});
|
||||
// Bibliographies cannot be in paragraphs. Bibitems should still be handled as paragraphs, though
|
||||
// (see makeParagraphBibliography).
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [isLyxCodeToIgnore](InsetList::Element inset) {
|
||||
return inset.inset->lyxCode() == BIBTEX_CODE || isLyxCodeToIgnore(inset.inset->lyxCode());
|
||||
});
|
||||
// ERTs are in comments, not paragraphs.
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [isLyxCodeToIgnore](InsetList::Element inset) {
|
||||
return inset.inset->lyxCode() == ERT_CODE || isLyxCodeToIgnore(inset.inset->lyxCode());
|
||||
});
|
||||
// Listings should not get into their own paragraph.
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [isLyxCodeToIgnore](InsetList::Element inset) {
|
||||
return inset.inset->lyxCode() == LISTINGS_CODE || isLyxCodeToIgnore(inset.inset->lyxCode());
|
||||
});
|
||||
// Boxes cannot get into their own paragraph.
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [isLyxCodeToIgnore](InsetList::Element inset) {
|
||||
return inset.inset->lyxCode() == BOX_CODE || isLyxCodeToIgnore(inset.inset->lyxCode());
|
||||
});
|
||||
// Includes should not have a paragraph.
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [isLyxCodeToIgnore](InsetList::Element inset) {
|
||||
return inset.inset->lyxCode() == INCLUDE_CODE || isLyxCodeToIgnore(inset.inset->lyxCode());
|
||||
});
|
||||
// Glossaries should not have a paragraph.
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), [isLyxCodeToIgnore](InsetList::Element inset) {
|
||||
return inset.inset->lyxCode() == NOMENCL_PRINT_CODE || isLyxCodeToIgnore(inset.inset->lyxCode());
|
||||
});
|
||||
|
||||
// Things that should not get into their own paragraph. (Only valid for DocBook.)
|
||||
static std::set<InsetCode> lyxCodeSpecialCases = {
|
||||
TABULAR_CODE,
|
||||
FLOAT_CODE,
|
||||
BIBTEX_CODE, // Bibliographies cannot be in paragraphs. Bibitems should still be handled as paragraphs,
|
||||
// though (see makeParagraphBibliography).
|
||||
ERT_CODE, // ERTs are in comments, not paragraphs.
|
||||
LISTINGS_CODE,
|
||||
BOX_CODE,
|
||||
INCLUDE_CODE,
|
||||
NOMENCL_PRINT_CODE,
|
||||
TOC_CODE, // To be ignored in DocBook, the processor afterwards should deal with ToCs.
|
||||
NOTE_CODE // Notes do not produce any output.
|
||||
};
|
||||
auto isLyxCodeSpecialCase = [](InsetList::Element inset) {
|
||||
return lyxCodeSpecialCases.find(inset.inset->lyxCode()) != lyxCodeSpecialCases.end();
|
||||
};
|
||||
special_case |= nInsets == parSize && std::all_of(par->insetList().begin(), par->insetList().end(), isLyxCodeSpecialCase);
|
||||
|
||||
// Open a paragraph if it is allowed, we are not already within a paragraph, and the insets in the paragraph do
|
||||
// not forbid paragraphs (aka special cases).
|
||||
bool const open_par = runparams.docbook_make_pars
|
||||
&& !runparams.docbook_in_par
|
||||
&& !special_case;
|
||||
|
Loading…
Reference in New Issue
Block a user