X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=80cafeb3595bf1a60b005084f43bf5c2bf295ac2;hb=1e519d1115f41f71c253cb9e2fbb7803e9a583a9;hp=bb7c64cda2927fd2a3b72910746bffc02e055ada;hpb=c16ccdb5fd25a14c096ef9dfa68975c77377bf41;p=lyx.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index bb7c64cda2..80cafeb359 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -524,6 +524,12 @@ docstring const BibTeXInfo::getAuthorList(Buffer const * buf, // in this case, we didn't find a "(", // so we don't have author (year) return docstring(); + if (full) { + // Natbib syntax is "Jones et al.(1990)Jones, Baker, and Williams" + docstring const fullauthors = trim(rsplit(remainder, ')')); + if (!fullauthors.empty()) + return fullauthors; + } return authors; } @@ -541,16 +547,16 @@ docstring const BibTeXInfo::getAuthorList(Buffer const * buf, // These are defined in the styles string const etal = - buf ? buf->params().documentClass().getCiteMacro(engine_type, "_etal") + buf ? buf->params().documentClass().getCiteMacro(engine_type, "B_etal") : " et al."; string const namesep = - buf ? buf->params().documentClass().getCiteMacro(engine_type, "_namesep") + buf ? buf->params().documentClass().getCiteMacro(engine_type, "B_namesep") : ", "; string const lastnamesep = - buf ? buf->params().documentClass().getCiteMacro(engine_type, "_lastnamesep") + buf ? buf->params().documentClass().getCiteMacro(engine_type, "B_lastnamesep") : ", and "; string const pairnamesep = - buf ? buf->params().documentClass().getCiteMacro(engine_type, "_pairnamesep") + buf ? buf->params().documentClass().getCiteMacro(engine_type, "B_pairnamesep") : " and "; string firstnameform = buf ? buf->params().documentClass().getCiteMacro(engine_type, "!firstnameform") @@ -811,13 +817,20 @@ docstring BibTeXInfo::expandFormat(docstring const & format, fmt = from_utf8(val) + fmt.substr(1); counter += 1; continue; - } else if (key[0] == '_') { - // a translatable bit + } else if (prefixIs(key, "B_")) { + // a translatable bit (to the Buffer language) string const val = buf.params().documentClass().getCiteMacro(engine_type, key); docstring const trans = translateIfPossible(from_utf8(val), buf.params().language->code()); ret << trans; + } else if (key[0] == '_') { + // a translatable bit (to the GUI language) + string const val = + buf.params().documentClass().getCiteMacro(engine_type, key); + docstring const trans = + translateIfPossible(from_utf8(val)); + ret << trans; } else { docstring const val = getValueForKey(key, buf, ci, xrefs, max_keysize); @@ -1261,10 +1274,8 @@ docstring const BiblioInfo::getYear(docstring const & key, bool use_modifier) co if (xrefs.empty()) // no luck return docstring(); - vector::const_iterator it = xrefs.begin(); - vector::const_iterator en = xrefs.end(); - for (; it != en; ++it) { - BiblioInfo::const_iterator const xrefit = find(*it); + for (docstring const & xref : xrefs) { + BiblioInfo::const_iterator const xrefit = find(xref); if (xrefit == end()) continue; BibTeXInfo const & xref_data = xrefit->second; @@ -1298,14 +1309,10 @@ docstring const BiblioInfo::getInfo(docstring const & key, BibTeXInfo const & data = it->second; BibTeXInfoList xrefptrs; vector const xrefs = getXRefs(data); - if (!xrefs.empty()) { - vector::const_iterator it = xrefs.begin(); - vector::const_iterator en = xrefs.end(); - for (; it != en; ++it) { - BiblioInfo::const_iterator const xrefit = find(*it); - if (xrefit != end()) - xrefptrs.push_back(&(xrefit->second)); - } + for (docstring const & xref : getXRefs(data)) { + BiblioInfo::const_iterator const xrefit = find(xref); + if (xrefit != end()) + xrefptrs.push_back(&(xrefit->second)); } return data.getInfo(xrefptrs, buf, ci); } @@ -1337,15 +1344,10 @@ docstring const BiblioInfo::getLabel(vector keys, vector xrefptrs; if (it != end()) { data = it->second; - vector const xrefs = getXRefs(data); - if (!xrefs.empty()) { - vector::const_iterator it = xrefs.begin(); - vector::const_iterator en = xrefs.end(); - for (; it != en; ++it) { - BiblioInfo::const_iterator const xrefit = find(*it); - if (xrefit != end()) - xrefptrs.push_back(&(xrefit->second)); - } + for (docstring const & xref : getXRefs(data)) { + BiblioInfo::const_iterator const xrefit = find(xref); + if (xrefit != end()) + xrefptrs.push_back(&(xrefit->second)); } } ret = data.getLabel(xrefptrs, buf, ret, ci, key + 1 != ken, i == 1);