X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=638579a752abe5f9b99e2a020d98d28cdbb34eb3;hb=124e0fc2be2446f7182cba0e5b54961dc1cfab91;hp=149b93b5e0422c13bedca077f6ba910b9076eeee;hpb=b4ca3e4fa4760787a7209064f338993019ef869e;p=lyx.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index 149b93b5e0..638579a752 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -5,7 +5,7 @@ * * \author Angus Leeming * \author Herbert Voß - * \author Richard Heck + * \author Richard Kimberly Heck * \author Julien Rioux * \author Jürgen Spitzmüller * @@ -15,28 +15,27 @@ #include #include "BiblioInfo.h" + #include "Buffer.h" #include "BufferParams.h" -#include "buffer_funcs.h" #include "Citation.h" #include "Encoding.h" -#include "InsetIterator.h" #include "Language.h" -#include "xml.h" -#include "Paragraph.h" #include "TextClass.h" #include "TocBackend.h" +#include "xml.h" #include "support/convert.h" #include "support/debug.h" #include "support/docstream.h" +#include "support/FileName.h" #include "support/gettext.h" #include "support/lassert.h" #include "support/lstrings.h" -#include "support/regex.h" #include "support/textutils.h" #include +#include #include using namespace std; @@ -384,8 +383,8 @@ docstring convertLaTeXCommands(docstring const & str) // {\v a} to \v{a} (see #9340). // FIXME: This is a sort of mini-tex2lyx. // Use the real tex2lyx instead! - static lyx::regex const tma_reg("^\\{\\\\[bcCdfGhHkrtuUv]\\s\\w\\}"); - if (lyx::regex_search(to_utf8(val), tma_reg)) { + static regex const tma_reg("^\\{\\\\[bcCdfGhHkrtuUv]\\s\\w\\}"); + if (regex_search(to_utf8(val), tma_reg)) { val = val.substr(1); val.replace(2, 1, from_ascii("{")); continue; @@ -412,8 +411,8 @@ docstring convertLaTeXCommands(docstring const & str) // look for that and change it, if necessary. // FIXME: This is a sort of mini-tex2lyx. // Use the real tex2lyx instead! - static lyx::regex const reg("^\\\\\\W\\w"); - if (lyx::regex_search(to_utf8(val), reg)) { + static regex const reg("^\\\\\\W\\w"); + if (regex_search(to_utf8(val), reg)) { val.insert(3, from_ascii("}")); val.insert(2, from_ascii("{")); } @@ -488,8 +487,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) {} @@ -1000,6 +999,19 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs, { bool const richtext = ci.richtext; + 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_; @@ -1013,11 +1025,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 = format_in.empty()? - from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_))) - : format_in; int counter = 0; info_ = expandFormat(format, xrefs, counter, buf, ci, false, false); @@ -1037,7 +1044,7 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs, } -docstring const BibTeXInfo::getLabel(BibTeXInfoList const xrefs, +docstring const BibTeXInfo::getLabel(BibTeXInfoList const & xrefs, Buffer const & buf, docstring const & format, CiteItem const & ci, bool next, bool second) const { @@ -1395,7 +1402,7 @@ docstring const BiblioInfo::getInfo(docstring const & key, { BiblioInfo::const_iterator it = find(key); if (it == end()) - return docstring(_("Bibliography entry not found!")); + return _("Bibliography entry not found!"); BibTeXInfo const & data = it->second; BibTeXInfoList xrefptrs; for (docstring const & xref : getXRefs(data)) { @@ -1692,6 +1699,8 @@ docstring authorsToDocBookAuthorGroup(docstring const & authorsString, XMLStream // Output the list of authors. xs << xml::StartTag("authorgroup"); + xs << xml::CR(); + auto it = authors.cbegin(); auto en = authors.cend(); for (size_t i = 0; it != en; ++it, ++i) {