X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FBiblioInfo.h;h=5d485c9435fb6184ed691b495552b229e08976bc;hb=bf56e2c8e1afa857cd5e313c19948040e41b8227;hp=1bd428c626bb732dbe1fcfe00d13e216e4f1c966;hpb=2e23f1719e165b0ee37cfd67ae82d4645641cb67;p=lyx.git diff --git a/src/BiblioInfo.h b/src/BiblioInfo.h index 1bd428c626..5d485c9435 100644 --- a/src/BiblioInfo.h +++ b/src/BiblioInfo.h @@ -19,9 +19,9 @@ #include "Citation.h" -#include #include #include +#include namespace lyx { @@ -45,6 +45,8 @@ public: /// and the values are the associated field values. typedef std::map::const_iterator const_iterator; /// + typedef std::vector const BibTeXInfoList; + /// BibTeXInfo() : is_bibtex_(true), modifier_(0) {} /// argument sets isBibTeX_, so should be false only if it's coming /// from a bibliography environment @@ -52,22 +54,21 @@ public: /// constructor that sets the entryType BibTeXInfo(docstring const & key, docstring const & type); /// \return the short form of an authorlist, used for sorting - docstring const getAbbreviatedAuthor(bool jurabib_style = false) const; - /// \return the short form of an authorlist, translated to the - /// buffer language. - docstring const getAbbreviatedAuthor(Buffer const & buf, bool jurabib_style = false) const; + /// this will be translated to the UI language if buf is null + /// otherwise, it will be translated to the buffer language. + docstring const getAbbreviatedAuthor( + Buffer const * buf = 0, bool jurabib_style = false) const; /// docstring const getYear() const; - /// - docstring const getXRef() const; /// \return formatted BibTeX data suitable for framing. - /// \param pointer to crossref information - docstring const & getInfo(BibTeXInfo const * const xref, + /// \param vector of pointers to crossref/xdata information + docstring const & getInfo(BibTeXInfoList const xrefs, Buffer const & buf, bool richtext) const; /// \return formatted BibTeX data for a citation label - docstring const getLabel(BibTeXInfo const * const xref, + docstring const getLabel(BibTeXInfoList const xrefs, Buffer const & buf, docstring const & format, bool richtext, - docstring before, docstring after, docstring dialog, bool next = false) const; + const docstring & before, const docstring & after, + const docstring & dialog, bool next = false) const; /// const_iterator find(docstring const & f) const { return bimap_.find(f); } /// @@ -110,11 +111,11 @@ public: bool isBibTeX() const { return is_bibtex_; } private: /// like operator[], except, if the field is empty, it will attempt - /// to get the data from xref BibTeXInfo object, which would normally - /// be the one referenced in the crossref field. + /// 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, docstring const & before, docstring const & after, docstring const & dialog, - BibTeXInfo const * const xref, size_t maxsize = 4096) const; + BibTeXInfoList const xrefs, size_t maxsize = 4096) const; /// replace %keys% in a format string with their values /// called from getInfo() /// format strings may contain: @@ -132,7 +133,7 @@ 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, - BibTeXInfo const * const xref, int & counter, + BibTeXInfoList const xrefs, int & counter, Buffer const & buf, docstring before = docstring(), docstring after = docstring(), docstring dialog = docstring(), bool next = false) const; @@ -165,8 +166,13 @@ private: /// from BibTeX or from bibliography environments. class BiblioInfo { public: + /// + typedef std::vector BibTeXInfoList; /// bibliography key --> data for that key typedef std::map::const_iterator const_iterator; + /// Get a vector with all external data (crossref, xdata) + std::vector const getXRefs(BibTeXInfo const & data, + bool const nested = false) const; /// \return a sorted vector of bibliography keys std::vector const getKeys() const; /// \return a sorted vector of present BibTeX fields @@ -178,15 +184,19 @@ public: /// \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). - /// Note that this will get the year from the crossref if it's - /// not present in the record itself. + /// If no legacy year field is present, check for date (common in + /// biblatex) and extract the year from there. + /// Note further that this will get the year from the crossref or xdata + /// if it's not present in the record itself. docstring const getYear(docstring const & key, bool use_modifier = false) 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). - /// Note that this will get the year from the crossref if it's - /// not present in the record itself. + /// If no legacy year field is present, check for date (common in + /// biblatex) and extract the year from there. + /// Note further that this will get the year from the crossref or xdata + /// if it's not present in the record itself. /// If no year is found, \return "No year" translated to the buffer /// language. docstring const getYear(docstring const & key, Buffer const & buf, @@ -195,17 +205,16 @@ public: docstring const getCiteNumber(docstring const & key) const; /// \return formatted BibTeX data associated with a given key. /// Empty if no info exists. - /// Note that this will retrieve data from the crossref as needed. + /// Note that this will retrieve data from the crossref or xdata as needed. /// If \param richtext is true, then it will output any richtext tags /// marked in the citation format and escape < and > elsewhere. docstring const getInfo(docstring const & key, Buffer const & buf, bool richtext = false) const; /// \return formatted BibTeX data for citation labels. /// Citation labels can have more than one key. - docstring const getLabel(std::vector const & keys, - Buffer const & buf, std::string const & style, bool richtext = false, - docstring const & before = docstring(), - docstring const & after = docstring(), + docstring const getLabel(std::vector keys, + Buffer const & buf, std::string const & style, bool for_xhtml, + size_t max_size, docstring const & before, docstring const & after, docstring const & dialog = docstring()) const; /// Is this a reference from a bibtex database /// or from a bibliography environment? @@ -214,12 +223,9 @@ public: /// list of keys, using either numerical or author-year style depending /// upon the active engine. std::vector const getCiteStrings(std::vector const & keys, - std::vector const & styles, Buffer const & buf, bool richtext = false, - docstring const & before = docstring(), - docstring const & after = docstring(), - docstring const & dialog = docstring()) const; - /// Collects the cited entries from buf. - void collectCitedEntries(Buffer const & buf); + std::vector const & styles, Buffer const & buf, + docstring const & before, docstring const & after, docstring const & dialog, + size_t max_size) const; /// A list of BibTeX keys cited in the current document, sorted by /// the last name of the author. /// Make sure you have called collectCitedEntries() before you try to @@ -247,6 +253,8 @@ public: /// void addEntryType(docstring const & f) { entry_types_.insert(f); } private: + /// Collects the cited entries from buf. + void collectCitedEntries(Buffer const & buf); /// std::set field_names_; ///