X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Ftests%2Fbiblio.cpp;h=4ba1d40a341fe2754000b12cdbf6122c4da5e2df;hb=394fc5cf15372eee1dbb80828a86c7b97abadeac;hp=e17c0c24a55dc08e037a3c754518c99e3c0533a7;hpb=9abb7db46800e554f57e865a3e768602ffd9d6f1;p=lyx.git diff --git a/src/frontends/tests/biblio.cpp b/src/frontends/tests/biblio.cpp index e17c0c24a5..4ba1d40a34 100644 --- a/src/frontends/tests/biblio.cpp +++ b/src/frontends/tests/biblio.cpp @@ -3,28 +3,34 @@ #include #include -#include +#include "support/regex.h" using namespace std; // Escape special chars. // All characters are literals except: '.|*?+(){}[]^$\' // These characters are literals when preceded by a "\", which is done here -// This function is unfortunately copied from ../frontend_helpers.cpp, so we should -// try to make sure to keep the two in sync. +// This function is unfortunately copied from ../qt4/GuiCitation.cpp, so we +// should try to make sure to keep the two in sync. string const escape_special_chars(string const & expr) { // Search for all chars '.|*?+(){}[^$]\' - // Note that '[' and '\' must be escaped. - // This is a limitation of boost::regex, but all other chars in BREs - // are assumed literal. - boost::regex reg("[].|*?+(){}^$\\[\\\\]"); - - // $& is a perl-like expression that expands to all of the current match - // The '$' must be prefixed with the escape character '\' for - // boost to treat it as a literal. - // Thus, to prefix a matched expression with '\', we use: - return boost::regex_replace(expr, reg, "\\\\$&"); + // Note that '[', ']', and '\' must be escaped. + lyx::regex reg("[.|*?+(){}^$\\[\\]\\\\]"); + + // $& is a ECMAScript format expression that expands to all + // of the current match +#if defined(LYX_USE_CXX11) && defined(LYX_USE_STD_REGEX) + // To prefix a matched expression with a single literal backslash, we + // need to escape it for the C++ compiler and use: + return lyx::regex_replace(expr, reg, "\\$&"); +#else + // A backslash in the format string starts an escape sequence in boost. + // Thus, to prefix a matched expression with a single literal backslash, + // we need to give two backslashes to the regex engine, and escape both + // for the C++ compiler and use: + return lyx::regex_replace(expr, reg, "\\\\$&"); +#endif } @@ -37,10 +43,9 @@ typedef map InfoMap; class RegexMatch : public unary_function { public: - // re and icase are used to construct an instance of boost::RegEx. - // if icase is true, then matching is insensitive to case - RegexMatch(InfoMap const & m, string const & re, bool icase) - : map_(m), regex_(re, icase) {} + // re is used to construct an instance of lyx::regex. + RegexMatch(InfoMap const & m, string const & re) + : map_(m), regex_(re) {} bool operator()(string const & key) const { // the data searched is the key + its associated BibTeX/biblio @@ -52,11 +57,11 @@ public: // Attempts to find a match for the current RE // somewhere in data. - return boost::regex_search(data, regex_); + return lyx::regex_search(data, regex_); } private: InfoMap const map_; - mutable boost::regex regex_; + mutable lyx::regex regex_; }; @@ -75,12 +80,12 @@ void test_RegexMatch() im["hello"] = "hei"; try { - RegexMatch rm(im, "h.*o", false); + RegexMatch rm(im, "h.*o"); cout << rm("hello") << endl; cout << rm("hei") << endl; } - catch (boost::regex_error & regerr) { + catch (lyx::regex_error & regerr) { cout << regerr.what() << endl; } }