From cd17d87e47d522c3c848a49ac63602a0a8a1b635 Mon Sep 17 00:00:00 2001 From: Julien Rioux Date: Mon, 14 Jan 2013 17:26:55 +0100 Subject: [PATCH] Implement plain text export of BibTeX bibliography (fixes #8487). --- src/insets/InsetBibtex.cpp | 48 ++++++++++++++++++++++++++++++++++++++ src/insets/InsetBibtex.h | 2 ++ 2 files changed, 50 insertions(+) diff --git a/src/insets/InsetBibtex.cpp b/src/insets/InsetBibtex.cpp index 04d8d2571b..26f0de41f9 100644 --- a/src/insets/InsetBibtex.cpp +++ b/src/insets/InsetBibtex.cpp @@ -928,6 +928,54 @@ void InsetBibtex::validate(LaTeXFeatures & features) const } +int InsetBibtex::plaintext(odocstream & os, OutputParams const &) const +{ + BiblioInfo bibinfo = buffer().masterBibInfo(); + bibinfo.makeCitationLabels(buffer()); + vector const & cites = bibinfo.citedEntries(); + CiteEngineType const engine_type = buffer().params().citeEngineType(); + bool const numbers = (engine_type == ENGINE_TYPE_NUMERICAL); + + docstring refoutput; + docstring const reflabel = buffer().B_("References"); + + refoutput += reflabel + "\n\n"; + + // Now we loop over the entries + vector::const_iterator vit = cites.begin(); + vector::const_iterator const ven = cites.end(); + for (; vit != ven; ++vit) { + BiblioInfo::const_iterator const biit = bibinfo.find(*vit); + if (biit == bibinfo.end()) + continue; + BibTeXInfo const & entry = biit->second; + docstring citekey; + if (numbers) + citekey = entry.citeNumber(); + else { + docstring const auth = entry.getAbbreviatedAuthor(buffer(), false); + // we do it this way so as to access the xref, if necessary + // note that this also gives us the modifier + docstring const year = bibinfo.getYear(*vit, buffer(), true); + if (!auth.empty() && !year.empty()) + citekey = auth + ' ' + year; + } + if (citekey.empty()) { + citekey = entry.label(); + if (citekey.empty()) + citekey = entry.key(); + } + refoutput += "[" + citekey + "] "; + // FIXME Right now, we are calling BibInfo::getInfo on the key, + // which will give us all the cross-referenced info. But for every + // entry, so there's a lot of repitition. This should be fixed. + refoutput += bibinfo.getInfo(entry.key(), buffer(), false) + "\n\n"; + } + os << refoutput; + return refoutput.size(); +} + + // FIXME // docstring InsetBibtex::entriesAsXHTML(vector const & entries) // And then here just: entriesAsXHTML(buffer().masterBibInfo().citedEntries()) diff --git a/src/insets/InsetBibtex.h b/src/insets/InsetBibtex.h index 3b8510152d..6883191ed6 100644 --- a/src/insets/InsetBibtex.h +++ b/src/insets/InsetBibtex.h @@ -52,6 +52,8 @@ public: /// void latex(otexstream &, OutputParams const &) const; /// + int plaintext(odocstream &, OutputParams const &) const; + /// void collectBibKeys(InsetIterator const &) const; /// void validate(LaTeXFeatures &) const; -- 2.39.5