X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=1464e7088e0aa636835871f7c1f7d64e5e33f93e;hb=48d9d01a826eb9f1c1e7c62edb664ec97f6a6e8d;hp=cefee85ba9ae154b2390d103ed895f2c9166bf2a;hpb=196d9caeb0b9f74d02750f774de1ca63a483803f;p=features.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index cefee85ba9..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,14 +15,15 @@ #include #include "BiblioInfo.h" + #include "Buffer.h" #include "BufferParams.h" #include "Citation.h" #include "Encoding.h" #include "Language.h" -#include "xml.h" #include "TextClass.h" #include "TocBackend.h" +#include "xml.h" #include "support/convert.h" #include "support/debug.h" @@ -31,10 +32,10 @@ #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; @@ -276,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; @@ -382,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; @@ -410,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("{")); } @@ -1401,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)) {