X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.h;h=8a36183d03088fbbef007ee23ce2e49147805d1f;hb=62af7ee772f16f154225d2d0b65d77f4376b6001;hp=3fc786621c9e4d761f8789aea98650606629ad21;hpb=352a8e115fc9e17d7f912e4d495af032d54e29ad;p=lyx.git diff --git a/src/BiblioInfo.h b/src/BiblioInfo.h index 3fc786621c..8a36183d03 100644 --- a/src/BiblioInfo.h +++ b/src/BiblioInfo.h @@ -49,23 +49,27 @@ public: /// typedef std::vector const BibTeXInfoList; /// - BibTeXInfo() : is_bibtex_(true), modifier_(0) {} + BibTeXInfo() : is_bibtex_(true), num_bib_key_(0), modifier_(0) {} /// argument sets isBibTeX_, so should be false only if it's coming /// from a bibliography environment - BibTeXInfo(bool ib) : is_bibtex_(ib), modifier_(0) {} + BibTeXInfo(bool ib) : is_bibtex_(ib), num_bib_key_(0), modifier_(0) {} /// constructor that sets the entryType BibTeXInfo(docstring const & key, docstring const & type); - /// \return the an authorlist (short form by default), + /// \return an author or editor list (short form by default), /// used for sorting. /// This will be translated to the UI language if buf is null /// otherwise, it will be translated to the buffer language. - docstring const getAuthorList(Buffer const * buf = 0, bool full = false, - bool forceshort = false) const; + docstring const getAuthorOrEditorList(Buffer const * buf = 0, + bool full = false, bool forceshort = false) const; + /// Same for a specific author role (editor, author etc.) + docstring const getAuthorList(Buffer const * buf, docstring const & author, + bool const full = false, bool const forceshort = false, + bool const allnames = false, bool const beginning = true) const; /// docstring const getYear() const; /// \return formatted BibTeX data suitable for framing. /// \param vector of pointers to crossref/xdata information - docstring const & getInfo(BibTeXInfoList const xrefs, + docstring const & getInfo(BibTeXInfoList const & xrefs, Buffer const & buf, CiteItem const & ci) const; /// \return formatted BibTeX data for a citation label docstring const getLabel(BibTeXInfoList const xrefs, @@ -93,6 +97,9 @@ public: void label(docstring const & d) { label_= d; } /// void key(docstring const & d) { bib_key_= d; } + /// Record the number of occurences of the same key + /// (duplicates are allowed with qualified citation lists) + void numKey(int const i) { num_bib_key_ = i; } /// docstring const & label() const { return label_; } /// @@ -116,7 +123,7 @@ private: /// to get the data from xref BibTeXInfo objects, which would normally /// be the one referenced in the crossref or xdata field. docstring getValueForKey(std::string const & key, Buffer const & buf, - CiteItem const & ci, BibTeXInfoList const xrefs, size_t maxsize = 4096) const; + CiteItem const & ci, BibTeXInfoList const & xrefs, size_t maxsize = 4096) const; /// replace %keys% in a format string with their values /// called from getInfo() /// format strings may contain: @@ -134,13 +141,15 @@ private: /// moreover, keys that look like "%_key%" are treated as translatable /// so that things like "pp." and "vol." can be translated. docstring expandFormat(docstring const & fmt, - BibTeXInfoList const xrefs, int & counter, + BibTeXInfoList const & xrefs, int & counter, Buffer const & buf, CiteItem const & ci, bool next = false, bool second = false) const; /// true if from BibTeX; false if from bibliography environment bool is_bibtex_; /// the BibTeX key for this entry docstring bib_key_; + /// Number of occurences of the same key + int num_bib_key_; /// the label that will appear in citations /// this is easily set from bibliography environments, but has /// to be calculated for entries we get from BibTeX @@ -179,8 +188,8 @@ public: std::vector const getFields() const; /// \return a sorted vector of BibTeX entry types in use std::vector const getEntries() const; - /// \return authorlist (abbreviated form by default) - docstring const getAuthorList(docstring const & key, Buffer const & buf) const; + /// \return author or editor list (abbreviated form by default) + docstring const getAuthorOrEditorList(docstring const & key, Buffer const & buf) const; /// \return the year from the bibtex data record for \param key /// if \param use_modifier is true, then we will also append any /// modifier for this entry (e.g., 1998b). @@ -218,10 +227,16 @@ public: /// Is this a reference from a bibtex database /// or from a bibliography environment? bool isBibtex(docstring const & key) const; + /// A vector holding a pair of lyx cite command and the respective + /// output for a given (list of) key(s). + typedef std::vector> CiteStringMap; /// Translates the available citation styles into strings for a given /// list of keys, using either numerical or author-year style depending - /// upon the active engine. - std::vector const getCiteStrings(std::vector const & keys, + /// upon the active engine. The function returns a CiteStringMap with the first + /// element being the lyx cite command, the second being the formatted + /// citation reference. + CiteStringMap const getCiteStrings( + std::vector const & keys, std::vector const & styles, Buffer const & buf, CiteItem const & ci) const; /// A list of BibTeX keys cited in the current document, sorted by