]> git.lyx.org Git - lyx.git/blobdiff - src/BiblioInfo.cpp
de.po: update
[lyx.git] / src / BiblioInfo.cpp
index 1e2a1be769bf2048db9ce85fa78a47108ef67e8a..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
 
 
 //////////////////////////////////////////////////////////////////////
@@ -503,8 +505,8 @@ docstring const BibTeXInfo::getAuthorOrEditorList(Buffer const * buf,
 }
 
 
-docstring const BibTeXInfo::getAuthorList(Buffer const * buf, 
-               docstring const & author, bool const full, bool const forceshort, 
+docstring const BibTeXInfo::getAuthorList(Buffer const * buf,
+               docstring const & author, bool const full, bool const forceshort,
                bool const allnames, bool const beginning) const
 {
        // Maxnames treshold depend on engine
@@ -756,11 +758,11 @@ docstring parseOptions(docstring const & format, string & optkey,
 }
 
 
-} // anon namespace
+} // namespace
 
 /* FIXME
 Bug #9131 revealed an oddity in how we are generating citation information
-when more than one key is given. We end up building a longer and longer format 
+when more than one key is given. We end up building a longer and longer format
 string as we go, which we then have to re-parse, over and over and over again,
 rather than generating the information for the individual keys and then putting
 all of that together. We do that to deal with the way separators work, from what
@@ -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);
@@ -1367,21 +1358,21 @@ bool BiblioInfo::isBibtex(docstring const & key) const
 }
 
 
-vector<docstring> const BiblioInfo::getCiteStrings(
+BiblioInfo::CiteStringMap const BiblioInfo::getCiteStrings(
        vector<docstring> const & keys, vector<CitationStyle> const & styles,
        Buffer const & buf, CiteItem const & ci) const
 {
        if (empty())
-               return vector<docstring>();
+               return vector<pair<docstring,docstring>>();
 
        string style;
-       vector<docstring> vec(styles.size());
-       for (size_t i = 0; i != vec.size(); ++i) {
+       CiteStringMap csm(styles.size());
+       for (size_t i = 0; i != csm.size(); ++i) {
                style = styles[i].name;
-               vec[i] = getLabel(keys, buf, style, ci);
+               csm[i] = make_pair(from_ascii(style), getLabel(keys, buf, style, ci));
        }
 
-       return vec;
+       return csm;
 }
 
 
@@ -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)