X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBiblioInfo.cpp;h=420eaa2177c87f9d1d05f92d939565fd60313136;hb=0fd75fefc4aa1816f8d5a72ed0e30f8accdd0bfc;hp=acff8dc9711d3138785aacfc0ac09144cb1515ca;hpb=bc6ee8d2511916403296d24f6b2143529d8d7cab;p=lyx.git diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index acff8dc971..420eaa2177 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -36,7 +36,7 @@ #include "support/lstrings.h" #include "support/textutils.h" -#include "boost/regex.hpp" +#include "support/regex.h" #include @@ -175,8 +175,8 @@ docstring convertLaTeXCommands(docstring const & str) // unicodesymbols has things in the form: \"{u}, // whereas we may see things like: \"u. So we'll // look for that and change it, if necessary. - static boost::regex const reg("^\\\\\\W\\w"); - if (boost::regex_search(to_utf8(val), reg)) { + static lyx::regex const reg("^\\\\\\W\\w"); + if (lyx::regex_search(to_utf8(val), reg)) { val.insert(3, from_ascii("}")); val.insert(2, from_ascii("{")); } @@ -396,22 +396,21 @@ namespace { docstring BibTeXInfo::expandFormat(string const & format, - BibTeXInfo const * const xref, Buffer const & buf, + BibTeXInfo const * const xref, int & counter, Buffer const & buf, bool richtext) const { // incorrect use of macros could put us in an infinite loop - static int max_passes = 1000; + static int max_passes = 5000; docstring ret; // return value string key; bool scanning_key = false; bool scanning_rich = false; - int passes = 0; string fmt = format; // we'll remove characters from the front of fmt as we // deal with them while (fmt.size()) { - if (passes++ > max_passes) { + if (counter++ > max_passes) { LYXERR0("Recursion limit reached while parsing `" << format << "'."); return _("ERROR!"); @@ -466,9 +465,9 @@ docstring BibTeXInfo::expandFormat(string const & format, fmt = newfmt; docstring const val = getValueForKey(optkey, xref); if (!val.empty()) - ret += expandFormat(ifpart, xref, buf, richtext); + ret += expandFormat(ifpart, xref, counter, buf, richtext); else if (!elsepart.empty()) - ret += expandFormat(elsepart, xref, buf, richtext); + ret += expandFormat(elsepart, xref, counter, buf, richtext); // fmt will have been shortened for us already continue; } @@ -492,7 +491,19 @@ docstring BibTeXInfo::expandFormat(string const & format, } else if (scanning_key) key += char(thischar); - else if (richtext || !scanning_rich) + else if (richtext) { + if (scanning_rich) + ret += thischar; + else { + // we need to escape '<' and '>' + if (thischar == '<') + ret += "<"; + else if (thischar == '>') + ret += ">"; + else + ret += thischar; + } + } else if (!scanning_rich /* && !richtext */) ret += thischar; // else the character is discarded, which will happen only if // richtext == false and we are scanning rich text @@ -524,7 +535,8 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfo const * const xref, DocumentClass const & dc = buf.params().documentClass(); string const & format = dc.getCiteFormat(to_utf8(entry_type_)); - info_ = expandFormat(format, xref, buf, richtext); + int counter = 0; + info_ = expandFormat(format, xref, counter, buf, richtext); if (!info_.empty()) info_ = convertLaTeXCommands(info_);