]> git.lyx.org Git - features.git/commitdiff
Implement plain text export of BibTeX bibliography (fixes #8487).
authorJulien Rioux <jrioux@lyx.org>
Mon, 14 Jan 2013 16:26:55 +0000 (17:26 +0100)
committerJulien Rioux <jrioux@lyx.org>
Tue, 15 Jan 2013 13:13:38 +0000 (14:13 +0100)
src/insets/InsetBibtex.cpp
src/insets/InsetBibtex.h

index 04d8d2571ba7bab5644aab8e026eced64359f735..26f0de41f90b7920febfe564bf6821a982fb7cf4 100644 (file)
@@ -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<docstring> 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<docstring>::const_iterator vit = cites.begin();
+       vector<docstring>::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<docstring> const & entries)
 // And then here just: entriesAsXHTML(buffer().masterBibInfo().citedEntries())
index 3b8510152dae8c11d4f99e23a1172f76f06740bc..6883191ed6817878a050b00069c699b83a28f227 100644 (file)
@@ -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;