]> git.lyx.org Git - lyx.git/blobdiff - src/BiblioInfo.cpp
Russian layouttranslations reviewed by Yuriy, Dec 13 2017.
[lyx.git] / src / BiblioInfo.cpp
index 07c0b67f9aa2712e6fcdab44c7e5efbc88439d8a..86fd8401b492e85b09e6d5078186ff96b534f87a 100644 (file)
@@ -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
 
 
 //////////////////////////////////////////////////////////////////////
@@ -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
@@ -1148,7 +1150,7 @@ public:
        }
 };
 
-} // namespace anon
+} // namespace
 
 
 vector<docstring> const BiblioInfo::getXRefs(BibTeXInfo const & data, bool const nested) const
@@ -1259,10 +1261,8 @@ docstring const BiblioInfo::getYear(docstring const & key, bool use_modifier) co
                if (xrefs.empty())
                        // no luck
                        return docstring();
-               vector<docstring>::const_iterator it = xrefs.begin();
-               vector<docstring>::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 +1296,10 @@ docstring const BiblioInfo::getInfo(docstring const & key,
        BibTeXInfo const & data = it->second;
        BibTeXInfoList xrefptrs;
        vector<docstring> const xrefs = getXRefs(data);
-       if (!xrefs.empty()) {
-               vector<docstring>::const_iterator it = xrefs.begin();
-               vector<docstring>::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 +1331,10 @@ docstring const BiblioInfo::getLabel(vector<docstring> keys,
                vector<BibTeXInfo const *> xrefptrs;
                if (it != end()) {
                        data = it->second;
-                       vector<docstring> const xrefs = getXRefs(data);
-                       if (!xrefs.empty()) {
-                               vector<docstring>::const_iterator it = xrefs.begin();
-                               vector<docstring>::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 +1400,7 @@ bool lSorter(BibTeXInfo const * lhs, BibTeXInfo const * rhs)
                || (lauth == rauth && lyear == ryear && ltitl < rtitl);
 }
 
-}
+} // namespace
 
 
 void BiblioInfo::collectCitedEntries(Buffer const & buf)