X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/52de37c78f31bc03f8b96090932c7ce8c3907d29..952f4277280975bada5ab5019728449d41a80a1b:/src/common/regex.cpp diff --git a/src/common/regex.cpp b/src/common/regex.cpp index ccf9ffd727..40dff4df70 100644 --- a/src/common/regex.cpp +++ b/src/common/regex.cpp @@ -1,11 +1,11 @@ /////////////////////////////////////////////////////////////////////////////// // Name: src/common/regex.cpp // Purpose: regular expression matching -// Author: Karsten Ballüder and Vadim Zeitlin +// Author: Karsten Ballueder and Vadim Zeitlin // Modified by: // Created: 13.07.01 // RCS-ID: $Id$ -// Copyright: (c) 2000 Karsten Ballüder +// Copyright: (c) 2000 Karsten Ballueder // 2001 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -32,6 +32,7 @@ #include "wx/string.h" #include "wx/log.h" #include "wx/intl.h" + #include "wx/crt.h" #endif //WX_PRECOMP // FreeBSD, Watcom and DMars require this, CW doesn't have nor need it. @@ -57,9 +58,9 @@ # define WXREGEX_USING_BUILTIN # define WXREGEX_IF_NEED_LEN(x) ,x # if wxUSE_UNICODE -# define WXREGEX_CHAR(x) x.wc_str() +# define WXREGEX_CHAR(x) (x).wc_str() # else -# define WXREGEX_CHAR(x) x.mb_str() +# define WXREGEX_CHAR(x) (x).mb_str() # endif #else # ifdef HAVE_RE_SEARCH @@ -71,7 +72,7 @@ # if wxUSE_UNICODE # define WXREGEX_CONVERT_TO_MB # endif -# define WXREGEX_CHAR(x) x.mb_str() +# define WXREGEX_CHAR(x) (x).mb_str() # define wx_regfree regfree # define wx_regerror regerror #endif @@ -281,12 +282,14 @@ bool wxRegExImpl::Compile(const wxString& expr, int flags) // translate our flags to regcomp() ones int flagsRE = 0; if ( !(flags & wxRE_BASIC) ) + { #ifndef WX_NO_REGEX_ADVANCED if (flags & wxRE_ADVANCED) flagsRE |= REG_ADVANCED; else #endif flagsRE |= REG_EXTENDED; + } if ( flags & wxRE_ICASE ) flagsRE |= REG_ICASE; if ( flags & wxRE_NOSUB ) @@ -375,7 +378,7 @@ static int ReSearch(const regex_t *preg, re_registers *matches, int eflags) { - regex_t *pattern = wx_const_cast(regex_t*, preg); + regex_t *pattern = const_cast(preg); pattern->not_bol = (eflags & REG_NOTBOL) != 0; pattern->not_eol = (eflags & REG_NOTEOL) != 0; @@ -512,7 +515,12 @@ int wxRegExImpl::Replace(wxString *text, // note that "^" shouldn't match after the first call to Matches() so we // use wxRE_NOTBOL to prevent it from happening while ( (!maxMatches || countRepl < maxMatches) && - Matches(textstr + matchStart, + Matches( +#ifndef WXREGEX_CONVERT_TO_MB + textstr + matchStart, +#else + textstr.data() + matchStart, +#endif countRepl ? wxRE_NOTBOL : 0 WXREGEX_IF_NEED_LEN(textlen - matchStart)) ) { @@ -558,7 +566,12 @@ int wxRegExImpl::Replace(wxString *text, } else { +#ifndef WXREGEX_CONVERT_TO_MB textNew += wxString(textstr + matchStart + start, +#else + textNew += wxString(textstr.data() + matchStart + + start, +#endif *wxConvCurrent, len); mayHaveBackrefs = true; @@ -588,7 +601,8 @@ int wxRegExImpl::Replace(wxString *text, #ifndef WXREGEX_CONVERT_TO_MB result.append(*text, matchStart, start); #else - result.append(wxString(textstr + matchStart, *wxConvCurrent, start)); + result.append(wxString(textstr.data() + matchStart, *wxConvCurrent, + start)); #endif matchStart += start; result.append(textNew); @@ -601,7 +615,7 @@ int wxRegExImpl::Replace(wxString *text, #ifndef WXREGEX_CONVERT_TO_MB result.append(*text, matchStart, wxString::npos); #else - result.append(wxString(textstr + matchStart, *wxConvCurrent)); + result.append(wxString(textstr.data() + matchStart, *wxConvCurrent)); #endif *text = result;