X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fregex.h;h=125befcf1ae8850c8dd08bf50cd1098fc56d2cb3;hb=892e237fe1c5d7574b08d017070262239465f70b;hp=5a646189f16938e8e4fa8acfc19fbd15876dcdb4;hpb=69036ced3765f40048d62be800c98af3ea2d1b4a;p=lyx.git diff --git a/src/support/regex.h b/src/support/regex.h index 5a646189f1..125befcf1a 100644 --- a/src/support/regex.h +++ b/src/support/regex.h @@ -12,53 +12,82 @@ #ifndef LYX_REGEXP_H #define LYX_REGEXP_H -#include "config.h" - - -#define LYX_REGEX_TO_LYX(X) \ - using X::regex; \ - using X::smatch; \ - using X::regex_replace; \ - using X::basic_regex; \ - using X::regex_error; \ - using X::regex_search; \ - using X::sregex_iterator; \ - using X::match_results; \ - \ - namespace regex_constants \ - { \ - using namespace X::regex_constants; \ - using X::regex_constants::match_flag_type; \ - } \ - - - #if defined(LYX_USE_TR1) && defined(LYX_USE_TR1_REGEX) +# ifdef _MSC_VER +# include +# define match_partial _Match_partial +namespace lyx { + // inheriting 'private' to see which functions are used and if there are + // other ECMAScrip defaults + class regex : private std::tr1::regex + { + public: + regex() {} + regex(const regex& rhs) : std::tr1::regex(rhs) {} + template + regex(T t) : std::tr1::regex(t, std::tr1::regex_constants::grep) {} + template + void assign(T t) { std::tr1::regex::assign(t, std::tr1::regex_constants::grep); } + template + void assign(T t, V v) { std::tr1::regex::assign(t, v); } + const std::tr1::regex& toTr1() const { return *this; } + }; + template + bool regex_match(T t, const regex& r) { return std::tr1::regex_match(t, r.toTr1()); } + template + bool regex_match(T t, V v, const regex& r) { return std::tr1::regex_match(t, v, r.toTr1()); } + template + bool regex_match(T t, V v, H h, const regex& r, U u) { return std::tr1::regex_match(t, v, h, r.toTr1(), u); } + template + std::string regex_replace(T t, const regex& r, V v) { return std::tr1::regex_replace(t, r.toTr1(), v); } + //template + //std::string regex_replace(T t, V v, U u, const regex& r, H h) { return std::tr1::regex_replace(t, v, u, r.toTr1(), h); } + template + bool regex_search(T t, const regex& r) { return std::tr1::regex_search(t, r.toTr1()); } + template + bool regex_search(T t, V v, const regex& r) { return std::tr1::regex_search(t, v, r.toTr1()); } + template + bool regex_search(T t, V v, U u, const regex& r) { return std::tr1::regex_search(t, v, u, r.toTr1()); } -#ifdef _MSC_VER -#include -#define match_partial _Match_partial -#else -#include -// TODO no match_partial in gcc, how to replace? -#define match_partial match_default -#endif - -namespace lyx -{ - LYX_REGEX_TO_LYX(std::tr1); + struct sregex_iterator : std::tr1::sregex_iterator + { + sregex_iterator() {} + template + sregex_iterator(T t, V v, const regex& r) : std::tr1::sregex_iterator(t, v, r.toTr1()) {} + }; } - +# else +# include +// TODO no match_partial in gcc, how to replace? +# define match_partial match_default +# endif +# define LR_NS std::tr1 #else +# include +# define LR_NS boost +namespace lyx { +using LR_NS::regex; +using LR_NS::regex_match; +using LR_NS::sregex_iterator; +} +#endif -#include "boost/regex.hpp" +namespace lyx { +using LR_NS::smatch; +using LR_NS::regex_replace; +using LR_NS::basic_regex; +using LR_NS::regex_error; +using LR_NS::regex_search; +using LR_NS::match_results; -namespace lyx +namespace regex_constants { - LYX_REGEX_TO_LYX(boost); +using namespace LR_NS::regex_constants; +using LR_NS::regex_constants::match_flag_type; } -#endif +} +#undef LR_NS #endif