X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=1464e7088e0aa636835871f7c1f7d64e5e33f93e;hb=fd5adacef25eb40f813dedd961920c353448213a;hp=6d2af6cd4797cbed68c8f785e0ba23dbe84d35eb;hpb=8f3d0fd88fa69d2b8b3f523a02fed88d55cdc22a;p=features.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index 6d2af6cd47..1464e7088e 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; @@ -278,8 +277,14 @@ vector const getAuthors(docstring const & author) // in author names, but can happen (consider cases such as "C \& A Corp."). docstring iname = subst(author, from_ascii("&"), from_ascii("$$amp!")); // Then, we temporarily make all " and " strings to ampersands in order - // to handle them later on a per-char level. - iname = subst(iname, from_ascii(" and "), from_ascii(" & ")); + // to handle them later on a per-char level. Note that arbitrary casing + // ("And", "AND", "aNd", ...) is allowed in bibtex (#10465). + static regex const and_reg("(.* )([aA][nN][dD])( .*)"); + smatch sub; + string res = to_utf8(iname); + while (regex_match(res, sub, and_reg)) + res = sub.str(1) + "&" + sub.str(3); + iname = from_utf8(res); // Now we traverse through the string and replace the "&" by the proper // output in- and outside groups docstring name; @@ -384,8 +389,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 +417,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("{")); } @@ -1045,7 +1050,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 { @@ -1403,7 +1408,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)) {