From 840f2baf9185ca50d3ea94b0eea668cd56647d65 Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Fri, 3 Dec 2010 20:08:04 +0000 Subject: [PATCH] Simplify some of the bibliography update code. There is really no reason to be passing the BiblioInfo structure around this way. (That's an old holdover.) That lets us get rid of the non-const masterBibInfo() again. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36697 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Buffer.cpp | 33 +++++++++++++++++++++------------ src/Buffer.h | 10 +++++++--- src/insets/Inset.h | 4 ++-- src/insets/InsetBibitem.cpp | 7 +++---- src/insets/InsetBibitem.h | 2 +- src/insets/InsetBibtex.cpp | 15 +++++++++------ src/insets/InsetBibtex.h | 4 ++-- src/insets/InsetInclude.cpp | 5 ++--- src/insets/InsetInclude.h | 2 +- 9 files changed, 48 insertions(+), 34 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 505dcddf95..3884c0c057 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1809,15 +1809,6 @@ BiblioInfo const & Buffer::masterBibInfo() const } -BiblioInfo & Buffer::masterBibInfo() -{ - Buffer * tmp = const_cast(masterBuffer()); - if (tmp != this) - return tmp->masterBibInfo(); - return d->bibinfo_; -} - - bool Buffer::isBibInfoCacheValid() const { // use the master's cache @@ -1866,15 +1857,33 @@ void Buffer::reloadBibInfoCache() const return; d->bibinfo_.clear(); - fillWithBibKeys(d->bibinfo_); + collectBibKeys(); d->bibinfo_cache_valid_ = true; } -void Buffer::fillWithBibKeys(BiblioInfo & keys) const +void Buffer::collectBibKeys() const { for (InsetIterator it = inset_iterator_begin(inset()); it; ++it) - it->fillWithBibKeys(keys, it); + it->collectBibKeys(it); +} + + +void Buffer::addBiblioInfo(BiblioInfo const & bi) const +{ + Buffer const * tmp = masterBuffer(); + BiblioInfo & masterbi = (tmp == this) ? + d->bibinfo_ : tmp->d->bibinfo_; + masterbi.mergeBiblioInfo(bi); +} + + +void Buffer::addBibTeXInfo(docstring const & key, BibTeXInfo const & bi) const +{ + Buffer const * tmp = masterBuffer(); + BiblioInfo & masterbi = (tmp == this) ? + d->bibinfo_ : tmp->d->bibinfo_; + masterbi[key] = bi; } diff --git a/src/Buffer.h b/src/Buffer.h index 4d30212611..a13f0c5db0 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -28,6 +28,7 @@ namespace lyx { class BiblioInfo; +class BibTeXInfo; class BufferParams; class DispatchResult; class DocIterator; @@ -454,9 +455,12 @@ public: /// \return the bibliography information for this buffer's master, /// or just for it, if it isn't a child. BiblioInfo const & masterBibInfo() const; - BiblioInfo & masterBibInfo(); - /// - void fillWithBibKeys(BiblioInfo & keys) const; + /// collect bibliography info from the various insets in this buffer. + void collectBibKeys() const; + /// add some BiblioInfo to our cache + void addBiblioInfo(BiblioInfo const & bi) const; + /// add a single piece of bibliography info to our cache + void addBibTeXInfo(docstring const & key, BibTeXInfo const & bi) const; /// void getLabelList(std::vector &) const; diff --git a/src/insets/Inset.h b/src/insets/Inset.h index 85a1360c2c..965fa6279a 100644 --- a/src/insets/Inset.h +++ b/src/insets/Inset.h @@ -489,8 +489,8 @@ public: /// Add an entry to the TocList /// pit is the ParConstIterator of the paragraph containing the inset virtual void addToToc(DocIterator const &) {} - /// Fill keys with BibTeX information - virtual void fillWithBibKeys(BiblioInfo &, InsetIterator const &) const {} + /// Collect BibTeX information + virtual void collectBibKeys(InsetIterator const &) const {} /// Update the counters of this inset and of its contents. /// The boolean indicates whether we are preparing for output, e.g., /// of XHTML. diff --git a/src/insets/InsetBibitem.cpp b/src/insets/InsetBibitem.cpp index 5da4751038..0fbc516240 100644 --- a/src/insets/InsetBibitem.cpp +++ b/src/insets/InsetBibitem.cpp @@ -308,7 +308,7 @@ docstring bibitemWidest(Buffer const & buffer, OutputParams const & runparams) } -void InsetBibitem::fillWithBibKeys(BiblioInfo & keys, InsetIterator const & it) const +void InsetBibitem::collectBibKeys(InsetIterator const & it) const { docstring const key = getParam("key"); BibTeXInfo keyvalmap(false); @@ -316,7 +316,7 @@ void InsetBibitem::fillWithBibKeys(BiblioInfo & keys, InsetIterator const & it) DocIterator doc_it(it); doc_it.forwardPos(); keyvalmap[from_ascii("ref")] = doc_it.paragraph().asString(); - keys[key] = keyvalmap; + buffer().addBibTeXInfo(key, keyvalmap); } @@ -335,12 +335,11 @@ void InsetBibitem::updateBuffer(ParIterator const & it, UpdateType utype) autolabel_ = from_ascii("??"); } if (!buffer().isBibInfoCacheValid()) { - BiblioInfo bi = buffer().masterBibInfo(); docstring const key = getParam("key"); BibTeXInfo keyvalmap(false); keyvalmap.label(bibLabel()); keyvalmap[from_ascii("ref")] = it.paragraph().asString(); - bi[key] = keyvalmap; + buffer().addBibTeXInfo(key, keyvalmap); } } diff --git a/src/insets/InsetBibitem.h b/src/insets/InsetBibitem.h index 9231b3cb9b..c28f66aa52 100644 --- a/src/insets/InsetBibitem.h +++ b/src/insets/InsetBibitem.h @@ -59,7 +59,7 @@ public: /// docstring xhtml(XHTMLStream &, OutputParams const &) const; /// - void fillWithBibKeys(BiblioInfo &, InsetIterator const &) const; + void collectBibKeys(InsetIterator const &) const; /// update the counter of this inset void updateBuffer(ParIterator const &, UpdateType); ///@} diff --git a/src/insets/InsetBibtex.cpp b/src/insets/InsetBibtex.cpp index daff111998..dc022f1e24 100644 --- a/src/insets/InsetBibtex.cpp +++ b/src/insets/InsetBibtex.cpp @@ -238,8 +238,7 @@ void InsetBibtex::updateBuffer(ParIterator const &, UpdateType) { if (buffer().isBibInfoCacheValid()) return; - BiblioInfo & bi = buffer().masterBibInfo(); - fillWithBibKeys(bi); + parseBibTeXFiles(); } @@ -678,14 +677,13 @@ namespace { } -void InsetBibtex::fillWithBibKeys(BiblioInfo & keylist, - InsetIterator const & /*di*/) const +void InsetBibtex::collectBibKeys(InsetIterator const & /*di*/) const { - fillWithBibKeys(keylist); + parseBibTeXFiles(); } -void InsetBibtex::fillWithBibKeys(BiblioInfo & keylist) const +void InsetBibtex::parseBibTeXFiles() const { // This bibtex parser is a first step to parse bibtex files // more precisely. @@ -705,6 +703,9 @@ void InsetBibtex::fillWithBibKeys(BiblioInfo & keylist) const // We don't restrict keys to ASCII in LyX, since our own // InsetBibitem can generate non-ASCII keys, and nonstandard // 8bit clean bibtex forks exist. + + BiblioInfo keylist; + support::FileNameList const files = getBibFiles(); support::FileNameList::const_iterator it = files.begin(); support::FileNameList::const_iterator en = files.end(); @@ -870,6 +871,8 @@ void InsetBibtex::fillWithBibKeys(BiblioInfo & keylist) const } //< else (citation entry) } //< searching '@' } //< for loop over files + + buffer().addBiblioInfo(keylist); } diff --git a/src/insets/InsetBibtex.h b/src/insets/InsetBibtex.h index ec6ed3a707..ea0cecfc14 100644 --- a/src/insets/InsetBibtex.h +++ b/src/insets/InsetBibtex.h @@ -54,7 +54,7 @@ public: /// void updateBuffer(ParIterator const &, UpdateType); /// - void fillWithBibKeys(BiblioInfo &, InsetIterator const &) const; + void collectBibKeys(InsetIterator const &) const; /// void validate(LaTeXFeatures &) const; /// @@ -81,7 +81,7 @@ private: /// void editDatabases() const; /// - void fillWithBibKeys(BiblioInfo &) const; + void parseBibTeXFiles() const; /// \name Private functions inherited from Inset class //@{ diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp index 9464012614..b852f4b259 100644 --- a/src/insets/InsetInclude.cpp +++ b/src/insets/InsetInclude.cpp @@ -844,13 +844,12 @@ void InsetInclude::validate(LaTeXFeatures & features) const } -void InsetInclude::fillWithBibKeys(BiblioInfo & keys, - InsetIterator const & /*di*/) const +void InsetInclude::collectBibKeys(InsetIterator const & /*di*/) const { Buffer * child = loadIfNeeded(); if (!child) return; - child->fillWithBibKeys(keys); + child->collectBibKeys(); } diff --git a/src/insets/InsetInclude.h b/src/insets/InsetInclude.h index 7860ac6510..565cf0ac77 100644 --- a/src/insets/InsetInclude.h +++ b/src/insets/InsetInclude.h @@ -83,7 +83,7 @@ public: * \param keys the list of bibkeys in the child buffer. * \param it not used here */ - void fillWithBibKeys(BiblioInfo & keys, InsetIterator const & it) const; + void collectBibKeys(InsetIterator const &) const; /// bool hasSettings() const { return true; } /// -- 2.39.2