X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=b920c00cd7afb049cc5a67ef00388e4214b0732d;hb=d6f1915684328c6e3fe61c6eef8846b5cabec334;hp=198a4a11ff543232b2cffedb93899e05a5fafb9d;hpb=7f461f4392a19cf488dec005d2f12cfea83655d9;p=lyx.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index 198a4a11ff..b920c00cd7 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -24,7 +24,7 @@ #include "insets/InsetBibtex.h" #include "insets/InsetInclude.h" -#include "support/assert.h" +#include "support/lassert.h" #include "support/docstream.h" #include "support/gettext.h" #include "support/lstrings.h" @@ -34,8 +34,8 @@ using namespace std; using namespace lyx::support; -namespace lyx { +namespace lyx { ////////////////////////////////////////////////////////////////////// // @@ -43,16 +43,11 @@ namespace lyx { // ////////////////////////////////////////////////////////////////////// -BibTeXInfo::BibTeXInfo(bool ib) - : is_bibtex_(ib) -{} - - 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; @@ -75,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(); @@ -287,9 +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().citeEngine(); - if (engine == biblio::ENGINE_BASIC || - 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); @@ -307,44 +301,43 @@ vector const BiblioInfo::getNumericalStrings( if (author.empty() || year.empty()) return vector(); - vector const & styles = - biblio::getCiteStyles(buf.params().citeEngine()); + 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 biblio::CITEP: + case CITE: + case CITEP: str = from_ascii("[#ID]"); break; - case biblio::NOCITE: + case NOCITE: str = _("Add to bibliography only."); break; - case biblio::CITET: + 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; } @@ -367,49 +360,48 @@ vector const BiblioInfo::getAuthorYearStrings( if (author.empty() || year.empty()) return vector(); - vector const & styles = - getCiteStyles(buf.params().citeEngine()); + 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::NOCITE: + case NOCITE: str = _("Add to bibliography only."); break; - case biblio::CITET: + 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; } @@ -419,24 +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(); - LASSERT(tmp, /**/); - if (tmp != buf) { - this->fillWithBibKeys(tmp); - return; - } - - for (InsetIterator it = inset_iterator_begin(buf->inset()); it; ++it) - it->fillWithBibKeys(*this, it); +void BiblioInfo::mergeBiblioInfo(BiblioInfo const & info) +{ + bimap_.insert(info.begin(), info.end()); } -namespace biblio { - ////////////////////////////////////////////////////////////////////// // // CitationStyle @@ -447,18 +427,18 @@ namespace { char const * const citeCommands[] = { - "cite", "nocite", "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, NOCITE, 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 }; @@ -475,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; @@ -498,31 +478,31 @@ 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; @@ -543,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