]> git.lyx.org Git - lyx.git/blobdiff - src/BiblioInfo.h
Routines for calculating numerical labels for BibTeX citations.
[lyx.git] / src / BiblioInfo.h
index 9ebc866ec6df84d2dda218f4ccc39a2fba1a074c..658a4ad02731da25504714e90a3eb009a56827a6 100644 (file)
@@ -63,7 +63,7 @@ public:
        docstring const getXRef() const;
        /// \return formatted BibTeX data suitable for framing.
        /// \param pointer to crossref information
-       docstring const getInfo(BibTeXInfo const * const xref = 0) const;
+       docstring const getInfo(BibTeXInfo const * const xref = 0) const;
        ///
        int count(docstring const & f) const { return bimap_.count(f); }
        ///
@@ -85,21 +85,42 @@ public:
        ///
        void setAllData(docstring const & d) { all_data_ = d; }
        ///
+       void label(docstring const & d) { label_= d; }
+       ///
+       docstring const & label() const { return label_; }
+       ///
+       docstring const & key() const { return bib_key_; }
+       ///
+       docstring citeKey() const { return cite_key_; }
+       ///
+       void setCiteKey(docstring const & k) { cite_key_ = k; }
+       ///
        docstring entryType() const { return entry_type_; }
+       /// 
+       bool isBibTeX() const { return is_bibtex_; }
 private:
-       /// like operator[], except it will also check the given xref
+       /// 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.
        docstring getValueForKey(std::string const & key, 
                        BibTeXInfo const * const xref = 0) const;
        /// true if from BibTeX; false if from bibliography environment
        bool is_bibtex_;
        /// the BibTeX key for this entry
        docstring 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
+       docstring label_;
        /// a single string containing all BibTeX data associated with this key
        docstring all_data_;
        /// the BibTeX entry type (article, book, incollection, ...)
        docstring entry_type_;
        /// a cache for getInfo()
        mutable docstring info_;
+       /// key to use when citing this entry 
+       /// currently used only by XHTML output routines
+       docstring cite_key_;
        /// our map: <field, value>
        std::map <docstring, docstring> bimap_;
 };
@@ -156,6 +177,13 @@ public:
                */
        std::vector<docstring> const
                        getAuthorYearStrings(docstring const & key, Buffer const & buf) const;
+       /// Collects the cited entries from buf.
+       void collectCitedEntries(Buffer const & buf);
+       /// A list of BibTeX keys cited in the current document, sorted by
+       /// the last name of the author.
+       std::vector<docstring> const & citedEntries() const { return cited_entries_; }
+       ///
+       void makeCitationLabels(Buffer const & buf);
        ///
        const_iterator begin() const { return bimap_.begin(); }
        ///
@@ -181,6 +209,10 @@ private:
        std::set<docstring> entry_types_;
        /// our map: keys --> BibTeXInfo
        std::map<docstring, BibTeXInfo> bimap_;
+       /// a possibly sorted list of entries cited in our Buffer.
+       /// do not try to make this a vector<BibTeXInfo *> or anything of
+       /// the sort, because reloads will invalidate those pointers. 
+       std::vector<docstring> cited_entries_;
 };
 
 } // namespace lyx