Properly resolve crossref'ed data in BiblioInfo

This needs to take the mappings into account as well, not just
plain fields.
This commit is contained in:
Juergen Spitzmueller 2024-02-24 15:26:41 +01:00
parent 1f48af5f55
commit 5b11066a37

View File

@ -1137,15 +1137,6 @@ docstring BibTeXInfo::getValueForKey(string const & oldkey, Buffer const & buf,
}
docstring ret = operator[](key);
if (ret.empty() && !xrefs.empty()) {
// xr is a (reference to a) BibTeXInfo const *
for (auto const & xr : xrefs) {
if (xr && !(*xr)[key].empty()) {
ret = (*xr)[key];
break;
}
}
}
if (ret.empty()) {
// some special keys
// FIXME: dialog, textbefore and textafter have nothing to do with this
@ -1283,6 +1274,21 @@ docstring BibTeXInfo::getValueForKey(string const & oldkey, Buffer const & buf,
ret = getYear();
}
// If we have no result, check in the cross-ref'ed entries
if (ret.empty() && !xrefs.empty()) {
// xr is a (reference to a) BibTeXInfo const *
for (auto const & xr : xrefs) {
if (!xr)
continue;
// use empty BibTeXInfoList to avoid loops
BibTeXInfoList xr_dummy;
ret = xr->getValueForKey(oldkey, buf, ci, xr_dummy, maxsize);
if (!ret.empty())
// success!
break;
}
}
if (cleanit)
ret = xml::cleanAttr(ret);