X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=dac2097bb93baeec34705bf3eb44350450b72622;hb=0c05432284f144bcb6c278a60d54d9bc777829e0;hp=07c0b67f9aa2712e6fcdab44c7e5efbc88439d8a;hpb=75bfed55079cab6b73fbea6ce4ae3f10d1af3b91;p=lyx.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index 07c0b67f9a..dac2097bb9 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -236,6 +236,8 @@ docstring constructName(docstring const & name, string const scheme) static regex const reg2("(.*)(\\{%suffix%\\[\\[)([^\\]]+)(\\]\\]\\})(.*)"); static regex const reg3("(.*)(\\{%prefix%\\[\\[)([^\\]]+)(\\]\\]\\})(.*)"); smatch sub; + // Changing the first parameter of regex_match() may corrupt the + // second one. In this case we use the temporary string tmp. if (regex_match(scheme, sub, reg1)) { res = sub.str(1); if (!prename.empty()) @@ -243,16 +245,16 @@ docstring constructName(docstring const & name, string const scheme) res += sub.str(5); } if (regex_match(res, sub, reg2)) { - res = sub.str(1); + string tmp = sub.str(1); if (!suffix.empty()) - res += sub.str(3); - res += sub.str(5); + tmp += sub.str(3); + res = tmp + sub.str(5); } if (regex_match(res, sub, reg3)) { - res = sub.str(1); + string tmp = sub.str(1); if (!prefix.empty()) - res += sub.str(3); - res += sub.str(5); + tmp += sub.str(3); + res = tmp + sub.str(5); } docstring result = from_ascii(res); result = subst(result, from_ascii("%prename%"), prename); @@ -476,7 +478,7 @@ docstring processRichtext(docstring const & str, bool richtext) return ret; } -} // anon namespace +} // namespace ////////////////////////////////////////////////////////////////////// @@ -539,16 +541,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") @@ -756,7 +758,7 @@ docstring parseOptions(docstring const & format, string & optkey, } -} // anon namespace +} // namespace /* FIXME Bug #9131 revealed an oddity in how we are generating citation information @@ -809,13 +811,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); @@ -1148,7 +1157,7 @@ public: } }; -} // namespace anon +} // namespace vector const BiblioInfo::getXRefs(BibTeXInfo const & data, bool const nested) const @@ -1259,10 +1268,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; @@ -1296,14 +1303,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); } @@ -1335,15 +1338,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); @@ -1409,7 +1407,7 @@ bool lSorter(BibTeXInfo const * lhs, BibTeXInfo const * rhs) || (lauth == rauth && lyear == ryear && ltitl < rtitl); } -} +} // namespace void BiblioInfo::collectCitedEntries(Buffer const & buf)