commit b941d9397467221046280ec327f00dacb0eafae0
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Tue Sep 20 11:34:17 2016 +0200

    Amend 2c4673af58f6
    
    Also consider xrefs in crossref'ed entries.
---
 src/BiblioInfo.cpp |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp
index 7653db0..243f78c 100644
--- a/src/BiblioInfo.cpp
+++ b/src/BiblioInfo.cpp
@@ -796,8 +796,18 @@ vector<docstring> const BiblioInfo::getXRefs(BibTeXInfo 
const & data, bool const
        if (!data.isBibTeX())
                return result;
        // Legacy crossref field. This is not nestable.
-       if (!nested && !data["crossref"].empty())
-               result.push_back(data["crossref"]);
+       if (!nested && !data["crossref"].empty()) {
+               docstring const xrefkey = data["crossref"];
+               result.push_back(xrefkey);
+               // However, check for nested xdatas
+               BiblioInfo::const_iterator it = find(xrefkey);
+               if (it != end()) {
+                       BibTeXInfo const & xref = it->second;
+                       vector<docstring> const nxdata = getXRefs(xref, true);
+                       if (!nxdata.empty())
+                               result.insert(result.end(), nxdata.begin(), 
nxdata.end());
+               }
+       }
        // Biblatex's xdata field. Infinitely nestable.
        // XData field can consist of a comma-separated list of keys
        vector<docstring> const xdatakeys = getVectorFromString(data["xdata"]);

Reply via email to