commit 67da1431def33a5f22ec703f4ff0988f332c8b4b Author: Juergen Spitzmueller <sp...@lyx.org> Date: Mon Sep 19 19:09:42 2016 +0200
Improve info display for biblatex databases, part III When resolving biblatex's xdata references, consider that xdata fields can contain a comma-separated list of keys, not just a single key like crossref. --- src/BiblioInfo.cpp | 24 +++++++++++++++--------- 1 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index b74984a..7653db0 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -799,15 +799,21 @@ vector<docstring> const BiblioInfo::getXRefs(BibTeXInfo const & data, bool const if (!nested && !data["crossref"].empty()) result.push_back(data["crossref"]); // Biblatex's xdata field. Infinitely nestable. - docstring const xdatakey = data["xdata"]; - if (!xdatakey.empty()) { - result.push_back(xdatakey); - BiblioInfo::const_iterator it = find(xdatakey); - if (it != end()) { - BibTeXInfo const & xdata = it->second; - vector<docstring> const nxdata = getXRefs(xdata, true); - if (!nxdata.empty()) - result.insert(result.end(), nxdata.begin(), nxdata.end()); + // XData field can consist of a comma-separated list of keys + vector<docstring> const xdatakeys = getVectorFromString(data["xdata"]); + if (!xdatakeys.empty()) { + vector<docstring>::const_iterator xit = xdatakeys.begin(); + vector<docstring>::const_iterator xen = xdatakeys.end(); + for (; xit != xen; ++xit) { + docstring const xdatakey = *xit; + result.push_back(xdatakey); + BiblioInfo::const_iterator it = find(xdatakey); + if (it != end()) { + BibTeXInfo const & xdata = it->second; + vector<docstring> const nxdata = getXRefs(xdata, true); + if (!nxdata.empty()) + result.insert(result.end(), nxdata.begin(), nxdata.end()); + } } } return result;