DocBook: simplify precooked bibliography code.

This commit is contained in:
Thibaut Cuvelier 2020-08-18 05:46:40 +02:00
parent 6a4d3dbef7
commit ac46456b28

View File

@ -360,40 +360,28 @@ void closeItemTag(XMLStream & xs, Layout const & lay)
} }
void makeAny(
Text const &,
Buffer const &,
XMLStream &,
OutputParams const &,
ParagraphList::const_iterator);
void makeParagraphBibliography( void makeParagraphBibliography(
Buffer const & buf, Buffer const & buf,
XMLStream & xs, XMLStream & xs,
OutputParams const & runparams, OutputParams const & runparams,
Text const & text, Text const & text,
ParagraphList::const_iterator const & pbegin) ParagraphList::const_iterator const & par)
{ {
auto const begin = text.paragraphs().begin();
auto const end = text.paragraphs().end();
auto pend = pbegin;
++pend;
// Find the paragraph *before* pbegin.
ParagraphList::const_iterator pbegin_before = begin;
if (pbegin != begin) {
ParagraphList::const_iterator pbegin_before_next = begin;
++pbegin_before_next;
while (pbegin_before_next != pbegin) {
++pbegin_before;
++pbegin_before_next;
}
}
ParagraphList::const_iterator par = pbegin;
// If this is the first paragraph in a bibliography, open the bibliography tag. // If this is the first paragraph in a bibliography, open the bibliography tag.
if (pbegin != begin && pbegin_before->layout().latextype != LATEX_BIB_ENVIRONMENT) { auto pbegin_before = text.paragraphs().getParagraphBefore(par);
if (pbegin_before->layout().latextype != LATEX_BIB_ENVIRONMENT) {
xs << xml::StartTag("bibliography"); xs << xml::StartTag("bibliography");
xs << xml::CR(); xs << xml::CR();
} }
// Generate the required paragraphs, but only if they are .
for (; par != pend; ++par) {
// Start the precooked bibliography entry. This is very much like opening a paragraph tag. // Start the precooked bibliography entry. This is very much like opening a paragraph tag.
// Don't forget the citation ID! // Don't forget the citation ID!
docstring attr; docstring attr;
@ -408,15 +396,23 @@ void makeParagraphBibliography(
xs << xml::StartTag(from_utf8("bibliomixed"), attr); xs << xml::StartTag(from_utf8("bibliomixed"), attr);
// Generate the entry. // Generate the entry.
par->simpleDocBookOnePar(buf, xs, runparams, text.outerFont(distance(begin, par)), true, true, 0); auto const begin = text.paragraphs().begin();
par->simpleDocBookOnePar(buf, xs, runparams, text.outerFont(std::distance(begin, par)), true, true, 0);
// End the precooked bibliography entry. // End the precooked bibliography entry.
xs << xml::EndTag("bibliomixed"); xs << xml::EndTag("bibliomixed");
xs << xml::CR(); xs << xml::CR();
}
// If this is the last paragraph in a bibliography, close the bibliography tag. // If this is the last paragraph in a bibliography, close the bibliography tag.
if (par == end || par->layout().latextype != LATEX_BIB_ENVIRONMENT) { auto const end = text.paragraphs().end();
bool endBibliography = par == end;
if (!endBibliography) {
auto nextpar = par;
++nextpar;
endBibliography = par->layout().latextype != LATEX_BIB_ENVIRONMENT;
}
if (endBibliography) {
xs << xml::EndTag("bibliography"); xs << xml::EndTag("bibliography");
xs << xml::CR(); xs << xml::CR();
} }
@ -524,14 +520,6 @@ void makeParagraph(
} }
void makeAny(
Text const &text,
Buffer const &buf,
XMLStream &xs,
OutputParams const &ourparams,
ParagraphList::const_iterator par);
void makeEnvironment( void makeEnvironment(
Buffer const &buf, Buffer const &buf,
XMLStream &xs, XMLStream &xs,