]> git.lyx.org Git - lyx.git/commitdiff
DocBook: simplify precooked bibliography code.
authorThibaut Cuvelier <tcuvelier@lyx.org>
Tue, 18 Aug 2020 03:46:40 +0000 (05:46 +0200)
committerThibaut Cuvelier <tcuvelier@lyx.org>
Sat, 19 Sep 2020 18:43:38 +0000 (20:43 +0200)
src/output_docbook.cpp

index 04818907c2061dc679563df69cbd959dc09a8bc8..3f6a69287bb6e7039a50dc4470590159fd3675ec 100644 (file)
@@ -360,63 +360,59 @@ void closeItemTag(XMLStream & xs, Layout const & lay)
 }
 
 
+void makeAny(
+               Text const &,
+               Buffer const &,
+               XMLStream &,
+               OutputParams const &,
+               ParagraphList::const_iterator);
+
+
 void makeParagraphBibliography(
                Buffer const & buf,
                XMLStream & xs,
                OutputParams const & runparams,
                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 (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::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.
-               // Don't forget the citation ID!
-               docstring attr;
-               for (auto i = 0; i < par->size(); ++i) {
-                       Inset const *ip = par->getInset(0);
-                       if (ip != nullptr && ip->lyxCode() == BIBITEM_CODE) {
-                               const auto * bibitem = dynamic_cast<const InsetBibitem*>(par->getInset(i));
-                               attr = from_utf8("xml:id='") + bibitem->getParam("key") + from_utf8("'");
-                               break;
-                       }
+       // Start the precooked bibliography entry. This is very much like opening a paragraph tag.
+       // Don't forget the citation ID!
+       docstring attr;
+       for (auto i = 0; i < par->size(); ++i) {
+               Inset const *ip = par->getInset(0);
+               if (ip != nullptr && ip->lyxCode() == BIBITEM_CODE) {
+                       const auto * bibitem = dynamic_cast<const InsetBibitem*>(par->getInset(i));
+                       attr = from_utf8("xml:id='") + bibitem->getParam("key") + from_utf8("'");
+                       break;
                }
-               xs << xml::StartTag(from_utf8("bibliomixed"), attr);
+       }
+       xs << xml::StartTag(from_utf8("bibliomixed"), attr);
 
-               // Generate the entry.
-               par->simpleDocBookOnePar(buf, xs, runparams, text.outerFont(distance(begin, par)), true, true, 0);
+       // Generate the entry.
+       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.
-               xs << xml::EndTag("bibliomixed");
-               xs << xml::CR();
-       }
+       // End the precooked bibliography entry.
+       xs << xml::EndTag("bibliomixed");
+       xs << xml::CR();
 
        // 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::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(
                Buffer const &buf,
                XMLStream &xs,