mirror of
https://github.com/boostorg/regex.git
synced 2026-04-29 02:03:38 +02:00
Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1dc5c26413 | |||
| 8a8ceab94a | |||
| 9db6d59861 | |||
| 252876ff5a | |||
| a6586678a5 | |||
| fed22db5f9 | |||
| 88f29667b7 | |||
| 4e0eadc11b | |||
| 3c6cf87718 | |||
| cdbffe607b | |||
| 23915ade0c | |||
| f4e1ff192f | |||
| 38afecb48b | |||
| 8a31a996b8 | |||
| 40ecdc3f8b | |||
| c7520556f7 | |||
| f5b7d3a4f9 | |||
| 6369c3c5ee | |||
| 5177518fe3 | |||
| 7b2ccc0095 | |||
| 2517588955 | |||
| 231dbc3ebf | |||
| 39f1cc0238 | |||
| 867cc5f0fc | |||
| ac49efa23f | |||
| 35fbb2e5e2 | |||
| 5d990fd751 | |||
| 80a2a12b7a | |||
| e39a99c6f5 | |||
| fa8b79bca9 | |||
| b13fb44ac5 | |||
| 3043906da2 | |||
| 5e11600dfa | |||
| b41d9dc323 |
+39
@@ -102,6 +102,42 @@ matrix:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=03,11 CXXSTD_DIALECT=cxxstd-dialect=gnu
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-7
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=14,1z CXXSTD_DIALECT=cxxstd-dialect=gnu
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-7
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=03,11 CXXSTD_DIALECT=cxxstd-dialect=gnu
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-8
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=14,1z CXXSTD_DIALECT=cxxstd-dialect=gnu
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- g++-8
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
|
||||
- os: linux
|
||||
env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11
|
||||
|
||||
@@ -211,8 +247,11 @@ install:
|
||||
- git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||
- cd boost-root
|
||||
- git submodule update --init tools/build
|
||||
- git submodule update --init tools/boost_install
|
||||
- git submodule update --init libs/headers
|
||||
- git submodule update --init libs/config
|
||||
- git submodule update --init libs/core
|
||||
- git submodule update --init libs/container_hash
|
||||
- git submodule update --init libs/detail
|
||||
- git submodule update --init libs/smart_ptr
|
||||
- git submodule update --init libs/predef
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
Boost Regex Library
|
||||
============================
|
||||
|
||||
The Boost Regex library provides regular expression support for C++, this library is the ancestor to std::regex and still goes beyond
|
||||
and offers some advantages to, the standard version.
|
||||
|
||||
The full documentation is available on [boost.org](http://www.boost.org/doc/libs/release/libs/regex/index.html).
|
||||
|
||||
## Support, bugs and feature requests ##
|
||||
|
||||
Bugs and feature requests can be reported through the [Gitub issue tracker](https://github.com/boostorg/regex/issues)
|
||||
(see [open issues](https://github.com/boostorg/regex/issues) and
|
||||
[closed issues](https://github.com/boostorg/regex/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aclosed)).
|
||||
|
||||
You can submit your changes through a [pull request](https://github.com/boostorg/regex/pulls).
|
||||
|
||||
There is no mailing-list specific to Boost Regex, although you can use the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo.cgi/boost-users) using the tag [regex].
|
||||
|
||||
|
||||
## Development ##
|
||||
|
||||
Clone the whole boost project, which includes the individual Boost projects as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Getting-Started)):
|
||||
|
||||
git clone https://github.com/boostorg/boost
|
||||
cd boost
|
||||
git submodule update --init
|
||||
|
||||
The Boost Regex Library is located in `libs/regex/`.
|
||||
|
||||
### Running tests ###
|
||||
First, make sure you are in `libs/regex/test`.
|
||||
You can either run all the tests listed in `Jamfile.v2` or run a single test:
|
||||
|
||||
../../../b2 <- run all tests
|
||||
../../../b2 regex_regress <- single test
|
||||
|
||||
+11
-3
@@ -23,13 +23,15 @@ environment:
|
||||
- ARGS: --toolset=msvc-14.0 address-model=32
|
||||
- ARGS: --toolset=msvc-12.0 address-model=64
|
||||
- ARGS: --toolset=msvc-14.0 address-model=64
|
||||
- ARGS: --toolset=msvc-14.0 address-model=64 cxxflags=-std:c++latest
|
||||
- ARGS: --toolset=msvc-14.0 address-model=64 cxxstd=latest
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
ARGS: --toolset=msvc-14.1 address-model=64
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
ARGS: --toolset=msvc-14.1 address-model=32
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
ARGS: --toolset=msvc-14.1 address-model=64 cxxflags=-std:c++latest
|
||||
ARGS: --toolset=msvc-14.1 address-model=64 cxxstd=17
|
||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
ARGS: --toolset=msvc-14.1 address-model=64 cxxstd=latest cxxflags=-permissive-
|
||||
- ARGS: --toolset=gcc address-model=64
|
||||
PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH%
|
||||
- ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z
|
||||
@@ -38,15 +40,21 @@ environment:
|
||||
PATH: C:\mingw-w64\i686-5.3.0-posix-dwarf-rt_v4-rev0\mingw32\bin;%PATH%
|
||||
- ARGS: --toolset=gcc address-model=32 linkflags=-Wl,-allow-multiple-definition
|
||||
PATH: C:\MinGW\bin;%PATH%
|
||||
|
||||
- ARGS: --toolset=gcc address-model=32 define=_POSIX_C_SOURCE=200112L threadapi=pthread link=static
|
||||
PATH: C:\cygwin\bin;%PATH%
|
||||
- ARGS: --toolset=gcc address-model=64 define=_POSIX_C_SOURCE=200112L define=__USE_ISOC99 threadapi=pthread link=static
|
||||
PATH: C:\cygwin64\bin;%PATH%
|
||||
|
||||
install:
|
||||
- cd ..
|
||||
- git clone -b %APPVEYOR_REPO_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||
- cd boost-root
|
||||
- git submodule update --init tools/build
|
||||
- git submodule update --init tools/boost_install
|
||||
- git submodule update --init libs/headers
|
||||
- git submodule update --init libs/config
|
||||
- git submodule update --init libs/core
|
||||
- git submodule update --init libs/container_hash
|
||||
- git submodule update --init libs/detail
|
||||
- git submodule update --init libs/smart_ptr
|
||||
- git submodule update --init libs/predef
|
||||
|
||||
+7
-10
@@ -30,6 +30,10 @@ rule path_options ( properties * )
|
||||
#
|
||||
# ICU configuration:
|
||||
#
|
||||
|
||||
local ICU_OPTS ;
|
||||
local ICU_INSTALL_OPTS ;
|
||||
|
||||
if ! $(disable-icu)
|
||||
{
|
||||
|
||||
@@ -44,7 +48,8 @@ if ! $(disable-icu)
|
||||
|
||||
if $(ICU_LINK)
|
||||
{
|
||||
ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <define>BOOST_HAS_ICU=1 <runtime-link>shared ;
|
||||
ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <define>BOOST_HAS_ICU=1 <runtime-link>shared ;
|
||||
ICU_INSTALL_OPTS = <dll-path>$(ICU_PATH)/bin ;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -122,12 +127,4 @@ lib boost_regex : ../src/$(SOURCES) icu_options
|
||||
<toolset>gcc-cygwin:<link>static
|
||||
;
|
||||
|
||||
boost-install boost_regex ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
boost-install boost_regex : $(ICU_INSTALL_OPTS) ;
|
||||
|
||||
@@ -437,7 +437,8 @@ struct BaseRegexConcept
|
||||
ignore_unused_variable_warning(bi);
|
||||
sub_diff_type diff = m_sub.length();
|
||||
ignore_unused_variable_warning(diff);
|
||||
// match_results tests:
|
||||
// match_results tests - some typedefs are not used, however these
|
||||
// guarante that they exist (some compilers may warn on non-usage)
|
||||
typedef typename match_results_type::value_type mr_value_type;
|
||||
typedef typename match_results_type::const_reference mr_const_reference;
|
||||
typedef typename match_results_type::reference mr_reference;
|
||||
@@ -483,7 +484,7 @@ struct BaseRegexConcept
|
||||
mrci = m_cresults.end();
|
||||
ignore_unused_variable_warning(mrci);
|
||||
|
||||
mr_allocator_type at2 = m_cresults.get_allocator();
|
||||
(void) m_cresults.get_allocator();
|
||||
m_results.swap(m_results);
|
||||
global_regex_namespace::swap(m_results, m_results);
|
||||
|
||||
|
||||
@@ -113,6 +113,17 @@
|
||||
#if defined(__MINGW32__)
|
||||
# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
|
||||
#endif
|
||||
/*
|
||||
* Clang fails to export template instances with -fvisibility=hidden, see
|
||||
* https://github.com/boostorg/regex/issues/49
|
||||
*/
|
||||
#ifdef __clang__
|
||||
# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
|
||||
#endif
|
||||
#ifdef __CYGWIN__
|
||||
/* We get multiply defined symbols without this: */
|
||||
# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If there isn't good enough wide character support then there will
|
||||
@@ -201,7 +212,10 @@
|
||||
# define BOOST_REGEX_HAS_OTHER_WCHAR_T
|
||||
# ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable : 4251 4231)
|
||||
# pragma warning(disable : 4251)
|
||||
#if BOOST_MSVC < 1700
|
||||
# pragma warning(disable : 4231)
|
||||
#endif
|
||||
# if BOOST_MSVC < 1600
|
||||
# pragma warning(disable : 4660)
|
||||
# endif
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#define BOOST_REGEX_V4_BASIC_REGEX_HPP
|
||||
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/functional/hash.hpp>
|
||||
#include <boost/container_hash/hash.hpp>
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
@@ -36,10 +36,16 @@
|
||||
namespace boost{
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4251 4231 4800)
|
||||
#pragma warning(disable : 4251)
|
||||
#if BOOST_MSVC < 1700
|
||||
# pragma warning(disable : 4231)
|
||||
#endif
|
||||
#if BOOST_MSVC < 1600
|
||||
#pragma warning(disable : 4660)
|
||||
#endif
|
||||
#if BOOST_MSVC < 1910
|
||||
#pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace BOOST_REGEX_DETAIL_NS{
|
||||
|
||||
@@ -33,7 +33,9 @@
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable: 4800)
|
||||
#if BOOST_MSVC < 1910
|
||||
#pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace boost{
|
||||
|
||||
@@ -35,7 +35,10 @@ namespace BOOST_REGEX_DETAIL_NS{
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4244 4800)
|
||||
#pragma warning(disable:4244)
|
||||
#if BOOST_MSVC < 1910
|
||||
#pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
inline boost::intmax_t umax(mpl::false_ const&)
|
||||
|
||||
@@ -84,7 +84,10 @@ template class BOOST_REGEX_DECL ::boost::BOOST_REGEX_DETAIL_NS::perl_matcher<BOO
|
||||
|
||||
# ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable : 4251 4231)
|
||||
# pragma warning(disable : 4251)
|
||||
#if BOOST_MSVC < 1700
|
||||
# pragma warning(disable : 4231)
|
||||
#endif
|
||||
# if BOOST_MSVC < 1600
|
||||
# pragma warning(disable : 4660)
|
||||
# endif
|
||||
@@ -119,9 +122,17 @@ template class BOOST_REGEX_TEMPLATE_DECL ::boost::BOOST_REGEX_DETAIL_NS::perl_ma
|
||||
|
||||
#elif (defined(__GNUC__) && (__GNUC__ >= 3)) || !defined(BOOST_NO_CXX11_EXTERN_TEMPLATE)
|
||||
|
||||
#ifdef __clang__
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wkeyword-macro"
|
||||
#if defined(__clang__)
|
||||
# pragma clang diagnostic push
|
||||
# if defined(__APPLE_CC__)
|
||||
# if (__clang_major__ > 6)
|
||||
# pragma clang diagnostic ignored "-Wkeyword-macro"
|
||||
# endif
|
||||
# else
|
||||
# if (__clang_major__ > 3) || ((__clang_major__ == 3) && (__clang_minor__ > 5))
|
||||
# pragma clang diagnostic ignored "-Wkeyword-macro"
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
# ifndef BOOST_REGEX_INSTANTIATE
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#ifdef __cplusplus
|
||||
# include <boost/cstdint.hpp>
|
||||
#endif
|
||||
#include <boost/detail/workaround.hpp>
|
||||
|
||||
#ifdef __cplusplus
|
||||
namespace boost{
|
||||
@@ -83,7 +82,7 @@ typedef enum _match_flags
|
||||
|
||||
} match_flags;
|
||||
|
||||
#if defined(__BORLANDC__) || BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
|
||||
#if defined(__BORLANDC__) || (defined(_MSC_VER) && (_MSC_VER <= 1310))
|
||||
typedef unsigned long match_flag_type;
|
||||
#else
|
||||
typedef match_flags match_flag_type;
|
||||
|
||||
@@ -33,7 +33,10 @@
|
||||
namespace boost{
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4251 4231)
|
||||
#pragma warning(disable : 4251)
|
||||
#if BOOST_MSVC < 1700
|
||||
# pragma warning(disable : 4231)
|
||||
#endif
|
||||
# if BOOST_MSVC < 1600
|
||||
# pragma warning(disable : 4660)
|
||||
# endif
|
||||
@@ -569,7 +572,7 @@ private:
|
||||
//
|
||||
static void raise_logic_error()
|
||||
{
|
||||
std::logic_error e("Attempt to access an uninitialzed boost::match_results<> class.");
|
||||
std::logic_error e("Attempt to access an uninitialized boost::match_results<> class.");
|
||||
boost::throw_exception(e);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,9 @@
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable: 4800)
|
||||
#if BOOST_MSVC < 1910
|
||||
#pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace boost{
|
||||
@@ -353,7 +355,10 @@ struct recursion_info
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4251 4231)
|
||||
#pragma warning(disable : 4251)
|
||||
#if BOOST_MSVC < 1700
|
||||
# pragma warning(disable : 4231)
|
||||
#endif
|
||||
# if BOOST_MSVC < 1600
|
||||
# pragma warning(disable : 4660)
|
||||
# endif
|
||||
|
||||
@@ -36,7 +36,9 @@
|
||||
#endif
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable: 4800)
|
||||
#if BOOST_MSVC < 1910
|
||||
#pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace boost{
|
||||
@@ -476,12 +478,14 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary()
|
||||
}
|
||||
else
|
||||
{
|
||||
b = (m_match_flags & match_not_eow) ? true : false;
|
||||
if (m_match_flags & match_not_eow)
|
||||
return false;
|
||||
b = false;
|
||||
}
|
||||
if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
|
||||
{
|
||||
if(m_match_flags & match_not_bow)
|
||||
b ^= true;
|
||||
return false;
|
||||
else
|
||||
b ^= false;
|
||||
}
|
||||
|
||||
@@ -34,7 +34,10 @@
|
||||
#endif
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable: 4800 4706)
|
||||
# pragma warning(disable: 4706)
|
||||
#if BOOST_MSVC < 1910
|
||||
#pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace boost{
|
||||
@@ -64,7 +67,7 @@ struct saved_matched_paren : public saved_state
|
||||
{
|
||||
int index;
|
||||
sub_match<BidiIterator> sub;
|
||||
saved_matched_paren(int i, const sub_match<BidiIterator>& s) : saved_state(1), index(i), sub(s){};
|
||||
saved_matched_paren(int i, const sub_match<BidiIterator>& s) : saved_state(1), index(i), sub(s){}
|
||||
};
|
||||
|
||||
template <class BidiIterator>
|
||||
@@ -72,7 +75,7 @@ struct saved_position : public saved_state
|
||||
{
|
||||
const re_syntax_base* pstate;
|
||||
BidiIterator position;
|
||||
saved_position(const re_syntax_base* ps, BidiIterator pos, int i) : saved_state(i), pstate(ps), position(pos){};
|
||||
saved_position(const re_syntax_base* ps, BidiIterator pos, int i) : saved_state(i), pstate(ps), position(pos){}
|
||||
};
|
||||
|
||||
template <class BidiIterator>
|
||||
@@ -80,7 +83,7 @@ struct saved_assertion : public saved_position<BidiIterator>
|
||||
{
|
||||
bool positive;
|
||||
saved_assertion(bool p, const re_syntax_base* ps, BidiIterator pos)
|
||||
: saved_position<BidiIterator>(ps, pos, saved_type_assertion), positive(p){};
|
||||
: saved_position<BidiIterator>(ps, pos, saved_type_assertion), positive(p){}
|
||||
};
|
||||
|
||||
template <class BidiIterator>
|
||||
@@ -1797,7 +1800,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop(bool r)
|
||||
// Backtracking out of a recursion, we must pop state off the recursion
|
||||
// stack unconditionally to ensure matched pushes and pops:
|
||||
saved_state* pmp = static_cast<saved_state*>(m_backup_state);
|
||||
if (!r)
|
||||
if (!r && !recursion_stack.empty())
|
||||
{
|
||||
*m_presult = recursion_stack.back().results;
|
||||
position = recursion_stack.back().location_of_start;
|
||||
@@ -1834,6 +1837,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_commit(bool b)
|
||||
// If we stop because we just unwound an assertion, put the
|
||||
// commit state back on the stack again:
|
||||
//
|
||||
m_unwound_lookahead = false;
|
||||
saved_state* pmp = m_backup_state;
|
||||
--pmp;
|
||||
if(pmp < m_stack_base)
|
||||
|
||||
@@ -138,12 +138,12 @@ public:
|
||||
|
||||
size_type BOOST_REGEX_CALL size()
|
||||
{
|
||||
return end - start;
|
||||
return size_type(end - start);
|
||||
}
|
||||
|
||||
size_type BOOST_REGEX_CALL capacity()
|
||||
{
|
||||
return last - start;
|
||||
return size_type(last - start);
|
||||
}
|
||||
|
||||
void* BOOST_REGEX_CALL data()const
|
||||
@@ -153,7 +153,7 @@ public:
|
||||
|
||||
size_type BOOST_REGEX_CALL index(void* ptr)
|
||||
{
|
||||
return static_cast<pointer>(ptr) - static_cast<pointer>(data());
|
||||
return size_type(static_cast<pointer>(ptr) - static_cast<pointer>(data()));
|
||||
}
|
||||
|
||||
void BOOST_REGEX_CALL clear()
|
||||
|
||||
@@ -36,7 +36,9 @@ namespace boost{
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable: 4800)
|
||||
#if BOOST_MSVC < 1910
|
||||
#pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace BOOST_REGEX_DETAIL_NS{
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include <boost/regex/v4/error_type.hpp>
|
||||
#endif
|
||||
#include <boost/type_traits/make_unsigned.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
|
||||
#ifdef BOOST_NO_STDC_NAMESPACE
|
||||
namespace std{
|
||||
@@ -240,7 +241,7 @@ inline std::ptrdiff_t global_length<char>(const char* p)
|
||||
template<>
|
||||
inline std::ptrdiff_t global_length<wchar_t>(const wchar_t* p)
|
||||
{
|
||||
return (std::wcslen)(p);
|
||||
return (std::ptrdiff_t)(std::wcslen)(p);
|
||||
}
|
||||
#endif
|
||||
template <class charT>
|
||||
@@ -327,17 +328,17 @@ boost::intmax_t global_toi(const charT*& p1, const charT* p2, int radix, const t
|
||||
}
|
||||
|
||||
template <class charT>
|
||||
inline const charT* get_escape_R_string()
|
||||
inline typename boost::enable_if_c<(sizeof(charT) > 1), const charT*>::type get_escape_R_string()
|
||||
{
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable:4309 4245)
|
||||
#endif
|
||||
static const charT e1[] = { '(', '?', '>', '\\', 'x', '0', 'D', '\\', 'x', '0', 'A', '?',
|
||||
'|', '[', '\\', 'x', '0', 'A', '\\', 'x', '0', 'B', '\\', 'x', '0', 'C', static_cast<unsigned char>('\x85'), '\\', 'x', '{', '2', '0', '2', '8', '}',
|
||||
'\\', 'x', '{', '2', '0', '2', '9', '}', ']', ')', '\0' };
|
||||
static const charT e2[] = { '(', '?', '>', '\\', 'x', '0', 'D', '\\', 'x', '0', 'A', '?',
|
||||
'|', '[', '\\', 'x', '0', 'A', '\\', 'x', '0', 'B', '\\', 'x', '0', 'C', static_cast<unsigned char>('\x85'), ']', ')', '\0' };
|
||||
static const charT e1[] = { '(', '?', '-', 'x', ':', '(', '?', '>', '\x0D', '\x0A', '?',
|
||||
'|', '[', '\x0A', '\x0B', '\x0C', static_cast<charT>(0x85), static_cast<charT>(0x2028),
|
||||
static_cast<charT>(0x2029), ']', ')', ')', '\0' };
|
||||
static const charT e2[] = { '(', '?', '-', 'x', ':', '(', '?', '>', '\x0D', '\x0A', '?',
|
||||
'|', '[', '\x0A', '\x0B', '\x0C', static_cast<charT>(0x85), ']', ')', ')', '\0' };
|
||||
|
||||
charT c = static_cast<charT>(0x2029u);
|
||||
bool b = (static_cast<unsigned>(c) == 0x2029u);
|
||||
@@ -348,15 +349,15 @@ inline const charT* get_escape_R_string()
|
||||
#endif
|
||||
}
|
||||
|
||||
template <>
|
||||
inline const char* get_escape_R_string<char>()
|
||||
template <class charT>
|
||||
inline typename boost::disable_if_c<(sizeof(charT) > 1), const charT*>::type get_escape_R_string()
|
||||
{
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable:4309)
|
||||
#endif
|
||||
static const char e2[] = { '(', '?', '>', '\\', 'x', '0', 'D', '\\', 'x', '0', 'A', '?',
|
||||
'|', '[', '\\', 'x', '0', 'A', '\\', 'x', '0', 'B', '\\', 'x', '0', 'C', '\\', 'x', '8', '5', ']', ')', '\0' };
|
||||
static const charT e2[] = { '(', '?', '-', 'x', ':', '(', '?', '>', '\x0D', '\x0A', '?',
|
||||
'|', '[', '\x0A', '\x0B', '\x0C', '\x85', ']', ')', ')', '\0' };
|
||||
return e2;
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning(pop)
|
||||
|
||||
@@ -198,9 +198,10 @@ namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
|
||||
const char *strSource
|
||||
)
|
||||
{
|
||||
if(std::strlen(strSource)+1 > sizeInBytes)
|
||||
std::size_t lenSourceWithNull = std::strlen(strSource) + 1;
|
||||
if (lenSourceWithNull > sizeInBytes)
|
||||
return 1;
|
||||
std::strcpy(strDestination, strSource);
|
||||
std::memcpy(strDestination, strSource, lenSourceWithNull);
|
||||
return 0;
|
||||
}
|
||||
inline std::size_t strcat_s(
|
||||
@@ -209,9 +210,11 @@ namespace boost{ namespace BOOST_REGEX_DETAIL_NS{
|
||||
const char *strSource
|
||||
)
|
||||
{
|
||||
if(std::strlen(strSource) + std::strlen(strDestination) + 1 > sizeInBytes)
|
||||
std::size_t lenSourceWithNull = std::strlen(strSource) + 1;
|
||||
std::size_t lenDestination = std::strlen(strDestination);
|
||||
if (lenSourceWithNull + lenDestination > sizeInBytes)
|
||||
return 1;
|
||||
std::strcat(strDestination, strSource);
|
||||
std::memcpy(strDestination + lenDestination, strSource, lenSourceWithNull);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ inline u32regex_iterator<const wchar_t*> make_u32regex_iterator(const wchar_t* p
|
||||
return u32regex_iterator<const wchar_t*>(p, p+std::wcslen(p), e, m);
|
||||
}
|
||||
#endif
|
||||
#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
|
||||
#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
|
||||
inline u32regex_iterator<const UChar*> make_u32regex_iterator(const UChar* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default)
|
||||
{
|
||||
return u32regex_iterator<const UChar*>(p, p+u_strlen(p), e, m);
|
||||
|
||||
@@ -267,7 +267,7 @@ inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(cons
|
||||
return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
|
||||
}
|
||||
#endif
|
||||
#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
|
||||
#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
|
||||
inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default)
|
||||
{
|
||||
return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m);
|
||||
@@ -297,7 +297,7 @@ inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(cons
|
||||
return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m);
|
||||
}
|
||||
#endif
|
||||
#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2)
|
||||
#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T)
|
||||
template <std::size_t N>
|
||||
inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default)
|
||||
{
|
||||
|
||||
@@ -51,8 +51,10 @@
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4786)
|
||||
#if BOOST_MSVC < 1910
|
||||
#pragma warning(disable:4800)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace boost{
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/filesystem/fstream.hpp>
|
||||
#include <boost/functional/hash.hpp>
|
||||
#include <boost/container_hash/hash.hpp>
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <iostream>
|
||||
|
||||
+4
-4
@@ -491,8 +491,8 @@ std::size_t RegEx::Position(int i)const
|
||||
{
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
|
||||
return pdata->m[i].matched ? pdata->m[i].first - pdata->pbase : RegEx::npos;
|
||||
#ifndef BOOST_REGEX_NO_FILEITER
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
|
||||
#ifndef BOOST_REGEX_NO_FILEITER
|
||||
return pdata->fm[i].matched ? pdata->fm[i].first - pdata->fbase : RegEx::npos;
|
||||
#endif
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
|
||||
@@ -518,8 +518,8 @@ std::size_t RegEx::Length(int i)const
|
||||
{
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
|
||||
return pdata->m[i].matched ? pdata->m[i].second - pdata->m[i].first : RegEx::npos;
|
||||
#ifndef BOOST_REGEX_NO_FILEITER
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
|
||||
#ifndef BOOST_REGEX_NO_FILEITER
|
||||
return pdata->fm[i].matched ? pdata->fm[i].second - pdata->fm[i].first : RegEx::npos;
|
||||
#endif
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
|
||||
@@ -539,10 +539,10 @@ bool RegEx::Matched(int i)const
|
||||
{
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
|
||||
return pdata->m[i].matched;
|
||||
#ifndef BOOST_REGEX_NO_FILEITER
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
|
||||
#ifndef BOOST_REGEX_NO_FILEITER
|
||||
return pdata->fm[i].matched;
|
||||
#endif
|
||||
#endif
|
||||
case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
|
||||
{
|
||||
std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i);
|
||||
|
||||
+1
-1
@@ -832,7 +832,7 @@ bool iswild(const char* mask, const char* name)
|
||||
++mask;
|
||||
continue;
|
||||
}
|
||||
// fall through:
|
||||
// fall through
|
||||
default:
|
||||
if(BOOST_REGEX_FI_TRANSLATE(*mask) != BOOST_REGEX_FI_TRANSLATE(*name))
|
||||
return false;
|
||||
|
||||
+1
-1
@@ -481,7 +481,7 @@ icu_regex_traits::string_type icu_regex_traits::lookup_collatename(const char_ty
|
||||
bool icu_regex_traits::isctype(char_type c, char_class_type f) const
|
||||
{
|
||||
// check for standard catagories first:
|
||||
char_class_type m = char_class_type(1uLL << u_charType(c));
|
||||
char_class_type m = char_class_type(static_cast<char_class_type>(1) << u_charType(c));
|
||||
if((m & f) != 0)
|
||||
return true;
|
||||
// now check for special cases:
|
||||
|
||||
+3
-1
@@ -28,7 +28,9 @@
|
||||
# include <malloc.h>
|
||||
#endif
|
||||
#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#ifndef NOMINMAX
|
||||
# define NOMINMAX
|
||||
#endif
|
||||
|
||||
@@ -28,7 +28,9 @@
|
||||
#ifndef NOMINMAX
|
||||
# define NOMINMAX
|
||||
#endif
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <windows.h>
|
||||
#include <boost/static_assert.hpp>
|
||||
#endif
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
#include <boost/regex/regex_traits.hpp>
|
||||
#include <boost/regex/pattern_except.hpp>
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#ifndef NOMINMAX
|
||||
# define NOMINMAX
|
||||
#endif
|
||||
|
||||
+6
-1
@@ -19,7 +19,7 @@ project
|
||||
<define>U_USING_ICU_NAMESPACE=0
|
||||
#<toolset>gcc-mw:<link>static
|
||||
#<toolset>gcc-mingw:<link>static
|
||||
<toolset>gcc-cygwin:<link>static
|
||||
#<toolset>gcc-cygwin:<link>static
|
||||
<toolset>sun:<link>static
|
||||
;
|
||||
|
||||
@@ -196,3 +196,8 @@ build-project ../example ;
|
||||
|
||||
# `quick` target (for CI)
|
||||
run quick.cpp ../build//boost_regex ;
|
||||
|
||||
compile test_warnings.cpp
|
||||
: <toolset>msvc:<warnings>all <toolset>msvc:<warnings-as-errors>on
|
||||
<toolset>gcc:<warnings>all <toolset>gcc:<warnings-as-errors>on
|
||||
<toolset>clang:<warnings>all <toolset>clang:<warnings-as-errors>on ;
|
||||
|
||||
@@ -39,7 +39,7 @@ int main()
|
||||
{
|
||||
char buf[256];
|
||||
regerrorA(result, &re, buf, sizeof(buf));
|
||||
printf(buf);
|
||||
puts(buf);
|
||||
return result;
|
||||
}
|
||||
assert(re.re_nsub == 0);
|
||||
@@ -50,7 +50,7 @@ int main()
|
||||
{
|
||||
char buf[256];
|
||||
regerrorA(result, &re, buf, sizeof(buf));
|
||||
printf(buf);
|
||||
puts(buf);
|
||||
regfreeA(&re);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ int main()
|
||||
regerror(result, &re, buf, sizeof(buf));
|
||||
for(i = 0; i < 256; ++i)
|
||||
nbuf[i] = (char)(buf[i]);
|
||||
printf(nbuf);
|
||||
puts(nbuf);
|
||||
return result;
|
||||
}
|
||||
if(re.re_nsub != 0)
|
||||
@@ -66,7 +66,7 @@ int main()
|
||||
regerror(result, &re, buf, sizeof(buf));
|
||||
for(i = 0; i < 256; ++i)
|
||||
nbuf[i] = (char)(buf[i]);
|
||||
printf(nbuf);
|
||||
puts(nbuf);
|
||||
regfree(&re);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -29,9 +29,9 @@
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
|
||||
|
||||
template <int N>
|
||||
int array_size(const char* (&p)[N])
|
||||
size_t array_size(const char* (&p)[N])
|
||||
{
|
||||
for(int i = 0; i < N; ++i)
|
||||
for(size_t i = 0; i < N; ++i)
|
||||
if(p[i] == 0)
|
||||
return i;
|
||||
return N;
|
||||
|
||||
@@ -33,7 +33,34 @@
|
||||
#include <boost/regex/concepts.hpp>
|
||||
#endif
|
||||
|
||||
template <class I>
|
||||
void check_token_iterator(I i)
|
||||
{
|
||||
typedef typename I::value_type value_type;
|
||||
typedef typename value_type::value_type char_type;
|
||||
typedef std::basic_string<char_type> string_type;
|
||||
|
||||
I j;
|
||||
|
||||
std::vector<string_type> v;
|
||||
|
||||
while (i != j)
|
||||
{
|
||||
v.push_back(i->str());
|
||||
++i;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <class I>
|
||||
void check_iterator(I i)
|
||||
{
|
||||
typedef typename I::value_type value_type;
|
||||
|
||||
std::vector <value_type> v(i, I());
|
||||
(void)v;
|
||||
|
||||
}
|
||||
int main()
|
||||
{
|
||||
// VC6 and VC7 can't cope with the iterator architypes,
|
||||
@@ -150,6 +177,64 @@ int main()
|
||||
s1 = boost::u32regex_replace(s1, e1, s1);
|
||||
s2 = boost::u32regex_replace(s2, e1, s2);
|
||||
|
||||
std::vector<int> subs1;
|
||||
int subs2[2] = { 1, 2 };
|
||||
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const char*)(pb), e1, 0, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const char*)(pb), e1, 0));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const char*)(pb), e1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const UChar*)(pb), e1, 0, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const UChar*)(pb), e1, 0));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const UChar*)(pb), e1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const wchar_t*)(pb), e1, 0, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const wchar_t*)(pb), e1, 0));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const wchar_t*)(pb), e1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s1, e1, 0, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s1, e1, 0));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s1, e1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s2, e1, 0, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s2, e1, 0));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s2, e1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(us, e1, 0, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(us, e1, 0));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(us, e1));
|
||||
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const char*)(pb), e1, subs2, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const char*)(pb), e1, subs2));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const UChar*)(pb), e1, subs2, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const UChar*)(pb), e1, subs2));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const wchar_t*)(pb), e1, subs2, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const wchar_t*)(pb), e1, subs2));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s1, e1, subs2, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s1, e1, subs2));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s2, e1, subs2, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s2, e1, subs2));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(us, e1, subs2, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(us, e1, subs2));
|
||||
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const char*)(pb), e1, subs1, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const char*)(pb), e1, subs1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const UChar*)(pb), e1, subs1, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const UChar*)(pb), e1, subs1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const wchar_t*)(pb), e1, subs1, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator((const wchar_t*)(pb), e1, subs1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s1, e1, subs1, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s1, e1, subs1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s2, e1, subs1, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(s2, e1, subs1));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(us, e1, subs1, boost::regex_constants::match_default));
|
||||
check_token_iterator(boost::make_u32regex_token_iterator(us, e1, subs1));
|
||||
|
||||
check_iterator(boost::make_u32regex_iterator((const char*)(pb), e1, boost::regex_constants::match_default));
|
||||
check_iterator(boost::make_u32regex_iterator((const char*)(pb), e1));
|
||||
check_iterator(boost::make_u32regex_iterator((const UChar*)(pb), e1, boost::regex_constants::match_default));
|
||||
check_iterator(boost::make_u32regex_iterator((const UChar*)(pb), e1));
|
||||
check_iterator(boost::make_u32regex_iterator((const wchar_t*)(pb), e1, boost::regex_constants::match_default));
|
||||
check_iterator(boost::make_u32regex_iterator((const wchar_t*)(pb), e1));
|
||||
check_iterator(boost::make_u32regex_iterator(s1, e1, boost::regex_constants::match_default));
|
||||
check_iterator(boost::make_u32regex_iterator(s2, e1));
|
||||
check_iterator(boost::make_u32regex_iterator(us, e1));
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -169,5 +169,48 @@ void test_assertion_escapes()
|
||||
TEST_REGEX_SEARCH_W(L"(?x) abc \\R", perl, L"abc\u2028bar", match_default, make_array(0, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH_W(L"(?x) abc \\R", perl, L"abc\u2029bar", match_default, make_array(0, 4, -2, -2));
|
||||
}
|
||||
// Bug report: https://github.com/boostorg/regex/issues/40
|
||||
TEST_REGEX_SEARCH("\\b", perl, "", match_default, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\b", perl, "", match_not_bow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\b", perl, "", match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\b", perl, "", match_not_bow | match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\b", perl, "-", match_default, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\b", perl, "-", match_not_bow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\b", perl, "-", match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\b", perl, "-", match_not_bow | match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\<", perl, "", match_default, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\<", perl, "", match_not_bow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\<", perl, "", match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\<", perl, "", match_not_bow | match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\<", perl, "-", match_default, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\<", perl, "-", match_not_bow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\<", perl, "-", match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\<", perl, "-", match_not_bow | match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\>", perl, "", match_default, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\>", perl, "", match_not_bow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\>", perl, "", match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\>", perl, "", match_not_bow | match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\>", perl, "-", match_default, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\>", perl, "-", match_not_bow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\>", perl, "-", match_not_eow, make_array(-2, -2));
|
||||
TEST_REGEX_SEARCH("\\>", perl, "-", match_not_bow | match_not_eow, make_array(-2, -2));
|
||||
// Bug report https://github.com/boostorg/regex/issues/57
|
||||
// Line ending \R:
|
||||
TEST_REGEX_SEARCH("\\R", perl | no_escape_in_lists, "foo\nbar", match_default, make_array(3, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH("\\R", perl | no_escape_in_lists, "foo\rbar", match_default, make_array(3, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH("\\R", perl | no_escape_in_lists, "foo\r\nbar", match_default, make_array(3, 5, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?x) abc \\R", perl | no_escape_in_lists, "abc\r\nbar", match_default, make_array(0, 5, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?x) abc \\R", perl | no_escape_in_lists, "abc\012bar", match_default, make_array(0, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?x) abc \\R", perl | no_escape_in_lists, "abc\013bar", match_default, make_array(0, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?x) abc \\R", perl | no_escape_in_lists, "abc\013bar", match_default, make_array(0, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH("(?x) abc \\R", perl | no_escape_in_lists, "abc\205bar", match_default, make_array(0, 4, -2, -2));
|
||||
// see if \u works:
|
||||
if(*w == 0x2028u)
|
||||
{
|
||||
TEST_REGEX_SEARCH_W(L"\\R", perl | no_escape_in_lists, L"foo\u2028bar", match_default, make_array(3, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH_W(L"\\R", perl | no_escape_in_lists, L"foo\u2029bar", match_default, make_array(3, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH_W(L"(?x) abc \\R", perl | no_escape_in_lists, L"abc\u2028bar", match_default, make_array(0, 4, -2, -2));
|
||||
TEST_REGEX_SEARCH_W(L"(?x) abc \\R", perl | no_escape_in_lists, L"abc\u2029bar", match_default, make_array(0, 4, -2, -2));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,9 @@ test_locale::test_locale(const char* c_name, boost::uint32_t lcid)
|
||||
#else
|
||||
s_c_locale = no_test;
|
||||
#endif
|
||||
#if !defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_EXCEPTIONS)
|
||||
// Disabled for VC15.7 (and later?) as the C runtime asserts if you pass an invalid
|
||||
// locale name to std::locale, rather than throwing the expected exception.
|
||||
#if !defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_EXCEPTIONS) && !BOOST_WORKAROUND(BOOST_MSVC, > 1913)
|
||||
// back up the C++ locale and create the new one:
|
||||
m_old_cpp_locale = s_cpp_locale_inst;
|
||||
m_old_cpp_state = s_cpp_locale;
|
||||
|
||||
@@ -65,8 +65,8 @@ void report_unexpected_exception(const E& e, int severity, const char* file, int
|
||||
}
|
||||
|
||||
#define BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity) \
|
||||
catch(const std::exception& e) \
|
||||
{ report_unexpected_exception(e, severity, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); }\
|
||||
catch(const std::exception& __e) \
|
||||
{ report_unexpected_exception(__e, severity, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); }\
|
||||
catch(...)\
|
||||
{ BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Exception of unknown type was thrown" << std::endl; report_severity(severity); }
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2018
|
||||
* John Maddock
|
||||
*
|
||||
* Use, modification and distribution are subject to the
|
||||
* Boost Software License, Version 1.0. (See accompanying file
|
||||
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable:4820 4668)
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE_CC__
|
||||
#pragma clang diagnostic ignored "-Wc++11-long-long"
|
||||
#endif
|
||||
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
void test_proc()
|
||||
{
|
||||
std::string text, re;
|
||||
boost::regex exp(re);
|
||||
regex_match(text, exp);
|
||||
}
|
||||
|
||||
@@ -157,22 +157,30 @@ void spot_checks()
|
||||
void test(const std::vector< ::boost::uint32_t>& v)
|
||||
{
|
||||
typedef std::vector< ::boost::uint32_t> vector32_type;
|
||||
#ifdef TEST_UTF16
|
||||
typedef std::vector< ::boost::uint16_t> vector16_type;
|
||||
#endif
|
||||
typedef std::vector< ::boost::uint8_t> vector8_type;
|
||||
#ifdef TEST_UTF16
|
||||
typedef boost::u32_to_u16_iterator<vector32_type::const_iterator, ::boost::uint16_t> u32to16type;
|
||||
typedef boost::u16_to_u32_iterator<vector16_type::const_iterator, ::boost::uint32_t> u16to32type;
|
||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
|
||||
typedef std::reverse_iterator<u32to16type> ru32to16type;
|
||||
typedef std::reverse_iterator<u16to32type> ru16to32type;
|
||||
#endif
|
||||
#endif // TEST_UTF16
|
||||
#ifdef TEST_UTF8
|
||||
typedef boost::u32_to_u8_iterator<vector32_type::const_iterator, ::boost::uint8_t> u32to8type;
|
||||
typedef boost::u8_to_u32_iterator<vector8_type::const_iterator, ::boost::uint32_t> u8to32type;
|
||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_STD_ITERATOR) && !defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
|
||||
typedef std::reverse_iterator<u32to8type> ru32to8type;
|
||||
typedef std::reverse_iterator<u8to32type> ru8to32type;
|
||||
#endif
|
||||
#endif // TEST_UTF8
|
||||
vector8_type v8;
|
||||
#ifdef TEST_UTF16
|
||||
vector16_type v16;
|
||||
#endif
|
||||
vector32_type v32;
|
||||
vector32_type::const_iterator i, j, k;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user