X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=7005519ac3f8978a535e8f4c258a2b7402b71e06;hb=bf25e8568db22625feb3affbf3e31df804dae916;hp=ab073ae600a85db78efcead957f67a7a6ba01bd9;hpb=e648202e7e35b41851407de449ec454c9b38e68b;p=lyx.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index ab073ae600..7005519ac3 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -488,8 +488,8 @@ docstring processRichtext(docstring const & str, bool richtext) ////////////////////////////////////////////////////////////////////// BibTeXInfo::BibTeXInfo(docstring const & key, docstring const & type) - : is_bibtex_(true), bib_key_(key), num_bib_key_(0), entry_type_(type), info_(), - modifier_(0) + : is_bibtex_(true), bib_key_(key), num_bib_key_(0), entry_type_(type), + info_(), format_(), modifier_(0) {} @@ -691,7 +691,7 @@ void BibTeXInfo::getLocators(docstring & doi, docstring & url, docstring & file) file = "file:///" + filedest; } - if (!url.empty()) + if (!url.empty()) return; // try biblatex specific fields, see its manual @@ -996,12 +996,27 @@ docstring BibTeXInfo::expandFormat(docstring const & format, docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs, - Buffer const & buf, CiteItem const & ci) const + Buffer const & buf, CiteItem const & ci, docstring const & format_in) const { bool const richtext = ci.richtext; - if (!richtext && !info_.empty()) + CiteEngineType const engine_type = buf.params().citeEngineType(); + DocumentClass const & dc = buf.params().documentClass(); + docstring const & format = format_in.empty()? + from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_))) + : format_in; + + if (format != format_) { + // clear caches since format changed + info_.clear(); + info_richtext_.clear(); + format_ = format; + } + + if (!richtext && !info_.empty()) { + info_ = convertLaTeXCommands(processRichtext(info_, false)); return info_; + } if (richtext && !info_richtext_.empty()) return info_richtext_; @@ -1011,10 +1026,6 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs, return info_; } - CiteEngineType const engine_type = buf.params().citeEngineType(); - DocumentClass const & dc = buf.params().documentClass(); - docstring const & format = - from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_))); int counter = 0; info_ = expandFormat(format, xrefs, counter, buf, ci, false, false); @@ -1342,7 +1353,7 @@ void BiblioInfo::getLocators(docstring const & key, docstring & doi, docstring & { BiblioInfo::const_iterator it = find(key); if (it == end()) - return; + return; BibTeXInfo const & data = it->second; data.getLocators(doi,url,file); } @@ -1388,7 +1399,7 @@ docstring const BiblioInfo::getYear(docstring const & key, Buffer const & buf, b docstring const BiblioInfo::getInfo(docstring const & key, - Buffer const & buf, CiteItem const & ci) const + Buffer const & buf, CiteItem const & ci, docstring const & format) const { BiblioInfo::const_iterator it = find(key); if (it == end()) @@ -1400,7 +1411,7 @@ docstring const BiblioInfo::getInfo(docstring const & key, if (xrefit != end()) xrefptrs.push_back(&(xrefit->second)); } - return data.getInfo(xrefptrs, buf, ci); + return data.getInfo(xrefptrs, buf, ci, format); }