X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=b920c00cd7afb049cc5a67ef00388e4214b0732d;hb=d6f1915684328c6e3fe61c6eef8846b5cabec334;hp=8f9aab0905571d91583a637db6d886263a5162a1;hpb=9abb7db46800e554f57e865a3e768602ffd9d6f1;p=lyx.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index 8f9aab0905..b920c00cd7 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -24,6 +24,7 @@ #include "insets/InsetBibtex.h" #include "insets/InsetInclude.h" +#include "support/lassert.h" #include "support/docstream.h" #include "support/gettext.h" #include "support/lstrings.h" @@ -33,8 +34,8 @@ using namespace std; using namespace lyx::support; -namespace lyx { +namespace lyx { ////////////////////////////////////////////////////////////////////// // @@ -42,11 +43,11 @@ namespace lyx { // ////////////////////////////////////////////////////////////////////// -BibTeXInfo::BibTeXInfo() - : isBibTeX(true) +BibTeXInfo::BibTeXInfo(docstring const & key, docstring const & type) + : is_bibtex_(true), bib_key_(key), entry_type_(type) {} - + bool BibTeXInfo::hasField(docstring const & field) const { return count(field) == 1; @@ -69,7 +70,7 @@ docstring const & BibTeXInfo::getValueForField(string const & field) const } -static docstring familyName(docstring const & name) +docstring familyName(docstring const & name) { if (name.empty()) return docstring(); @@ -97,7 +98,7 @@ static docstring familyName(docstring const & name) docstring const BibTeXInfo::getAbbreviatedAuthor() const { - if (!isBibTeX) + if (!is_bibtex_) return docstring(); docstring author = getValueForField("author"); @@ -105,7 +106,7 @@ docstring const BibTeXInfo::getAbbreviatedAuthor() const if (author.empty()) { author = getValueForField("editor"); if (author.empty()) - return bibKey; + return bib_key_; } // OK, we've got some names. Let's format them. @@ -126,7 +127,7 @@ docstring const BibTeXInfo::getAbbreviatedAuthor() const docstring const BibTeXInfo::getYear() const { - if (!isBibTeX) + if (!is_bibtex_) return docstring(); docstring year = getValueForField("year"); @@ -138,7 +139,7 @@ docstring const BibTeXInfo::getYear() const docstring const BibTeXInfo::getInfo() const { - if (!isBibTeX) { + if (!is_bibtex_) { BibTeXInfo::const_iterator it = find(from_ascii("ref")); return it->second; } @@ -227,8 +228,8 @@ vector const BiblioInfo::getKeys() const vector const BiblioInfo::getFields() const { vector bibfields; - set::const_iterator it = fieldNames.begin(); - set::const_iterator end = fieldNames.end(); + set::const_iterator it = field_names_.begin(); + set::const_iterator end = field_names_.end(); for (; it != end; ++it) bibfields.push_back(*it); sort(bibfields.begin(), bibfields.end()); @@ -239,8 +240,8 @@ vector const BiblioInfo::getFields() const vector const BiblioInfo::getEntries() const { vector bibentries; - set::const_iterator it = entryTypes.begin(); - set::const_iterator end = entryTypes.end(); + set::const_iterator it = entry_types_.begin(); + set::const_iterator end = entry_types_.end(); for (; it != end; ++it) bibentries.push_back(*it); sort(bibentries.begin(), bibentries.end()); @@ -281,8 +282,8 @@ docstring const BiblioInfo::getInfo(docstring const & key) const vector const BiblioInfo::getCiteStrings( docstring const & key, Buffer const & buf) const { - biblio::CiteEngine const engine = buf.params().getEngine(); - if (engine == biblio::ENGINE_NATBIB_NUMERICAL) + CiteEngine const engine = buf.params().citeEngine(); + if (engine == ENGINE_BASIC || engine == ENGINE_NATBIB_NUMERICAL) return getNumericalStrings(key, buf); else return getAuthorYearStrings(key, buf); @@ -300,40 +301,43 @@ vector const BiblioInfo::getNumericalStrings( if (author.empty() || year.empty()) return vector(); - vector const & styles = - biblio::getCiteStyles(buf.params().getEngine()); + vector const & styles = citeStyles(buf.params().citeEngine()); vector vec(styles.size()); for (size_t i = 0; i != vec.size(); ++i) { docstring str; switch (styles[i]) { - case biblio::CITE: - case biblio::CITEP: + case CITE: + case CITEP: str = from_ascii("[#ID]"); break; - case biblio::CITET: + case NOCITE: + str = _("Add to bibliography only."); + break; + + case CITET: str = author + " [#ID]"; break; - case biblio::CITEALT: + case CITEALT: str = author + " #ID"; break; - case biblio::CITEALP: + case CITEALP: str = from_ascii("#ID"); break; - case biblio::CITEAUTHOR: + case CITEAUTHOR: str = author; break; - case biblio::CITEYEAR: + case CITEYEAR: str = year; break; - case biblio::CITEYEARPAR: + case CITEYEARPAR: str = '(' + year + ')'; break; } @@ -356,45 +360,48 @@ vector const BiblioInfo::getAuthorYearStrings( if (author.empty() || year.empty()) return vector(); - vector const & styles = - getCiteStyles(buf.params().getEngine()); + vector const & styles = citeStyles(buf.params().citeEngine()); vector vec(styles.size()); - for (vector::size_type i = 0; i != vec.size(); ++i) { + for (size_t i = 0; i != vec.size(); ++i) { docstring str; switch (styles[i]) { - case biblio::CITE: + case CITE: // jurabib only: Author/Annotator // (i.e. the "before" field, 2nd opt arg) str = author + "/<" + _("before") + '>'; break; - case biblio::CITET: + case NOCITE: + str = _("Add to bibliography only."); + break; + + case CITET: str = author + " (" + year + ')'; break; - case biblio::CITEP: + case CITEP: str = '(' + author + ", " + year + ')'; break; - case biblio::CITEALT: + case CITEALT: str = author + ' ' + year ; break; - case biblio::CITEALP: + case CITEALP: str = author + ", " + year ; break; - case biblio::CITEAUTHOR: + case CITEAUTHOR: str = author; break; - case biblio::CITEYEAR: + case CITEYEAR: str = year; break; - case biblio::CITEYEARPAR: + case CITEYEARPAR: str = '(' + year + ')'; break; } @@ -404,27 +411,12 @@ vector const BiblioInfo::getAuthorYearStrings( } -void BiblioInfo::fillWithBibKeys(Buffer const * const buf) -{ - /// if this is a child document and the parent is already loaded - /// use the parent's list instead [ale990412] - Buffer const * const tmp = buf->masterBuffer(); - BOOST_ASSERT(tmp); - if (tmp != buf) { - this->fillWithBibKeys(tmp); - return; - } - - // Pre-load all child documents. - buf->loadChildDocuments(); - - for (InsetIterator it = inset_iterator_begin(buf->inset()); it; ++it) - it->fillWithBibKeys(*buf, *this, it); +void BiblioInfo::mergeBiblioInfo(BiblioInfo const & info) +{ + bimap_.insert(info.begin(), info.end()); } -namespace biblio { - ////////////////////////////////////////////////////////////////////// // // CitationStyle @@ -435,18 +427,18 @@ namespace { char const * const citeCommands[] = { - "cite", "citet", "citep", "citealt", "citealp", "citeauthor", - "citeyear", "citeyearpar" }; + "cite", "citet", "citep", "citealt", "citealp", + "citeauthor", "citeyear", "citeyearpar", "nocite" }; unsigned int const nCiteCommands = sizeof(citeCommands) / sizeof(char *); -CiteStyle const citeStyles[] = { - CITE, CITET, CITEP, CITEALT, CITEALP, -CITEAUTHOR, CITEYEAR, CITEYEARPAR }; +CiteStyle const citeStylesArray[] = { + CITE, CITET, CITEP, CITEALT, CITEALP, + CITEAUTHOR, CITEYEAR, CITEYEARPAR, NOCITE }; unsigned int const nCiteStyles = - sizeof(citeStyles) / sizeof(CiteStyle); + sizeof(citeStylesArray) / sizeof(CiteStyle); CiteStyle const citeStylesFull[] = { CITET, CITEP, CITEALT, CITEALP, CITEAUTHOR }; @@ -463,22 +455,22 @@ unsigned int const nCiteStylesUCase = } // namespace anon -CitationStyle::CitationStyle(string const & command) - : style(CITE), full(false), forceUCase(false) +CitationStyle citationStyleFromString(string const & command) { + CitationStyle s; if (command.empty()) - return; + return s; string cmd = command; if (cmd[0] == 'C') { - forceUCase = true; + s.forceUpperCase = true; cmd[0] = 'c'; } - string::size_type const n = cmd.size() - 1; + size_t const n = cmd.size() - 1; if (cmd != "cite" && cmd[n] == '*') { - full = true; - cmd = cmd.substr(0,n); + s.full = true; + cmd = cmd.substr(0, n); } char const * const * const last = citeCommands + nCiteCommands; @@ -486,38 +478,38 @@ CitationStyle::CitationStyle(string const & command) if (ptr != last) { size_t idx = ptr - citeCommands; - style = citeStyles[idx]; + s.style = citeStylesArray[idx]; } + return s; } -string const CitationStyle::asLatexStr() const +string citationStyleToString(const CitationStyle & s) { - string cite = citeCommands[style]; - if (full) { + string cite = citeCommands[s.style]; + if (s.full) { CiteStyle const * last = citeStylesFull + nCiteStylesFull; - if (find(citeStylesFull, last, style) != last) + if (find(citeStylesFull, last, s.style) != last) cite += '*'; } - if (forceUCase) { + if (s.forceUpperCase) { CiteStyle const * last = citeStylesUCase + nCiteStylesUCase; - if (find(citeStylesUCase, last, style) != last) + if (find(citeStylesUCase, last, s.style) != last) cite[0] = 'C'; } return cite; } - -vector const getCiteStyles(CiteEngine const engine) +vector citeStyles(CiteEngine engine) { unsigned int nStyles = 0; unsigned int start = 0; switch (engine) { case ENGINE_BASIC: - nStyles = 1; + nStyles = 2; start = 0; break; case ENGINE_NATBIB_AUTHORYEAR: @@ -531,17 +523,14 @@ vector const getCiteStyles(CiteEngine const engine) break; } - typedef vector cite_vec; - - cite_vec styles(nStyles); + vector styles(nStyles); size_t i = 0; int j = start; for (; i != styles.size(); ++i, ++j) - styles[i] = citeStyles[j]; + styles[i] = citeStylesArray[j]; return styles; } -} // namespace biblio } // namespace lyx