The comment preceding getValueForField() reflected an earlier implmentation.

There is now no reason not to use operator[] here, which is more natural.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@27635 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2008-11-19 04:16:12 +00:00
parent 900355d27f
commit 69e95a3ed9
3 changed files with 31 additions and 27 deletions

View File

@ -54,7 +54,7 @@ bool BibTeXInfo::hasField(docstring const & field) const
} }
docstring const & BibTeXInfo::getValueForField(docstring const & field) const docstring const & BibTeXInfo::operator[](docstring const & field) const
{ {
BibTeXInfo::const_iterator it = find(field); BibTeXInfo::const_iterator it = find(field);
if (it != end()) if (it != end())
@ -64,9 +64,9 @@ docstring const & BibTeXInfo::getValueForField(docstring const & field) const
} }
docstring const & BibTeXInfo::getValueForField(string const & field) const docstring const & BibTeXInfo::operator[](string const & field) const
{ {
return getValueForField(from_ascii(field)); return operator[](from_ascii(field));
} }
@ -98,7 +98,7 @@ docstring familyName(docstring const & name)
docstring const BibTeXInfo::getAbbreviatedAuthor() const docstring const BibTeXInfo::getAbbreviatedAuthor() const
{ {
if (!is_bibtex_) { if (!is_bibtex_) {
docstring const opt = trim(getValueForField("label")); docstring const opt = trim(operator[]("label"));
if (opt.empty()) if (opt.empty())
return docstring(); return docstring();
@ -107,9 +107,9 @@ docstring const BibTeXInfo::getAbbreviatedAuthor() const
return authors; return authors;
} }
docstring author = getValueForField("author"); docstring author = operator[]("author");
if (author.empty()) { if (author.empty()) {
author = getValueForField("editor"); author = operator[]("editor");
if (author.empty()) if (author.empty())
return bib_key_; return bib_key_;
} }
@ -133,7 +133,7 @@ docstring const BibTeXInfo::getAbbreviatedAuthor() const
docstring const BibTeXInfo::getYear() const docstring const BibTeXInfo::getYear() const
{ {
if (!is_bibtex_) { if (!is_bibtex_) {
docstring const opt = trim(getValueForField("label")); docstring const opt = trim(operator[]("label"));
if (opt.empty()) if (opt.empty())
return docstring(); return docstring();
@ -144,7 +144,7 @@ docstring const BibTeXInfo::getYear() const
return year; return year;
} }
docstring year = getValueForField("year"); docstring year = operator[]("year");
if (year.empty()) if (year.empty())
year = _("No year"); year = _("No year");
return year; return year;
@ -163,31 +163,31 @@ docstring const BibTeXInfo::getInfo() const
// field to customize the output based upon entry type. // field to customize the output based upon entry type.
// Search for all possible "required" fields // Search for all possible "required" fields
docstring author = getValueForField("author"); docstring author = operator[]("author");
if (author.empty()) if (author.empty())
author = getValueForField("editor"); author = operator[]("editor");
docstring year = getValueForField("year"); docstring year = operator[]("year");
docstring title = getValueForField("title"); docstring title = operator[]("title");
docstring docLoc = getValueForField("pages"); docstring docLoc = operator[]("pages");
if (docLoc.empty()) { if (docLoc.empty()) {
docLoc = getValueForField("chapter"); docLoc = operator[]("chapter");
if (!docLoc.empty()) if (!docLoc.empty())
docLoc = from_ascii("Ch. ") + docLoc; docLoc = from_ascii("Ch. ") + docLoc;
} else { } else {
docLoc = from_ascii("pp. ") + docLoc; docLoc = from_ascii("pp. ") + docLoc;
} }
docstring media = getValueForField("journal"); docstring media = operator[]("journal");
if (media.empty()) { if (media.empty()) {
media = getValueForField("publisher"); media = operator[]("publisher");
if (media.empty()) { if (media.empty()) {
media = getValueForField("school"); media = operator[]("school");
if (media.empty()) if (media.empty())
media = getValueForField("institution"); media = operator[]("institution");
} }
} }
docstring volume = getValueForField("volume"); docstring volume = operator[]("volume");
odocstringstream result; odocstringstream result;
if (!author.empty()) if (!author.empty())

View File

@ -38,6 +38,9 @@ std::string citationStyleToString(CitationStyle const &);
/// Class to represent information about a BibTeX or /// Class to represent information about a BibTeX or
/// bibliography entry. /// bibliography entry.
/// This class basically wraps a std::map, and many of its
/// methods simply delegate to the corresponding methods of
/// std::map.
class BibTeXInfo { class BibTeXInfo {
public: public:
/// The keys are BibTeX fields (e.g., author, title, etc), /// The keys are BibTeX fields (e.g., author, title, etc),
@ -50,12 +53,6 @@ public:
BibTeXInfo(bool ib) : is_bibtex_(ib) {} BibTeXInfo(bool ib) : is_bibtex_(ib) {}
/// constructor that sets the entryType /// constructor that sets the entryType
BibTeXInfo(docstring const & key, docstring const & type); BibTeXInfo(docstring const & key, docstring const & type);
/// Search for the given field and return the associated info.
/// The point of this is that BibTeXInfo::operator[] has no const
/// form.
docstring const & getValueForField(docstring const & field) const;
///
docstring const & getValueForField(std::string const & field) const;
/// ///
bool hasField(docstring const & field) const; bool hasField(docstring const & field) const;
/// \return the short form of an authorlist /// \return the short form of an authorlist
@ -70,9 +67,16 @@ public:
const_iterator find(docstring const & f) const { return bimap_.find(f); } const_iterator find(docstring const & f) const { return bimap_.find(f); }
/// ///
const_iterator end() const { return bimap_.end(); } const_iterator end() const { return bimap_.end(); }
/// /// \return value for field f
/// note that this will create an empty field if it does not exist
docstring & operator[](docstring const & f) docstring & operator[](docstring const & f)
{ return bimap_[f]; } { return bimap_[f]; }
/// \return value for field f
/// this one, since it is const, will simply return docstring() if
/// we don't have the field and will NOT create an empty field
docstring const & operator[](docstring const & field) const;
///
docstring const & operator[](std::string const & field) const;
/// ///
docstring const & allData() const { return all_data_; } docstring const & allData() const { return all_data_; }
/// ///

View File

@ -702,7 +702,7 @@ vector<docstring> GuiCitation::searchKeys(BiblioInfo const & bi,
else if (field.empty()) else if (field.empty())
data = to_utf8(*it) + ' ' + to_utf8(kvm.allData()); data = to_utf8(*it) + ' ' + to_utf8(kvm.allData());
else if (kvm.hasField(field)) else if (kvm.hasField(field))
data = to_utf8(kvm.getValueForField(field)); data = to_utf8(kvm[field]);
if (data.empty()) if (data.empty())
continue; continue;