X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fregex.h;h=125befcf1ae8850c8dd08bf50cd1098fc56d2cb3;hb=22d52f5f08cba82c85019634420f4204da56ec6b;hp=0826c9724ce6e82743e8bce9a6db0a4e1351fcfb;hpb=615d42d357e782a7d8c10c82e9e2833cc781f328;p=lyx.git diff --git a/src/support/regex.h b/src/support/regex.h index 0826c9724c..125befcf1a 100644 --- a/src/support/regex.h +++ b/src/support/regex.h @@ -12,52 +12,82 @@ #ifndef LYX_REGEXP_H #define LYX_REGEXP_H -#include "checktr1.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; \ - } \ - - - -// TODO: only tested with msvc10 -#if defined(LYX_USE_TR1) && defined(_MSC_VER) - -#ifdef _MSC_VER -#include -#define match_partial _Match_partial // why is match_partial not public? -#else -#include -#endif +#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()); } -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