#include <iostream>
#include <map>
-#include <boost/regex.hpp>
+#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
+#ifdef 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
}
class RegexMatch : public unary_function<string, bool>
{
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
// 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_;
};
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;
}
}