///////////////////////////////////////////////////////////////////////////////
// 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 <ballueder@gmx.net>
+// Copyright: (c) 2000 Karsten Ballueder <ballueder@gmx.net>
// 2001 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#if wxUSE_REGEX
+#include "wx/regex.h"
+
#ifndef WX_PRECOMP
#include "wx/object.h"
- #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.
#endif
#include <regex.h>
-#include "wx/regex.h"
// WXREGEX_USING_BUILTIN defined when using the built-in regex lib
// WXREGEX_USING_RE_SEARCH defined when using re_search in the GNU regex lib
# 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
# 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
// 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 )
re_registers *matches,
int eflags)
{
- regex_t *pattern = wx_const_cast(regex_t*, preg);
+ regex_t *pattern = const_cast<regex_t*>(preg);
pattern->not_bol = (eflags & REG_NOTBOL) != 0;
pattern->not_eol = (eflags & REG_NOTEOL) != 0;
// 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)) )
{
}
else
{
+#ifndef WXREGEX_CONVERT_TO_MB
textNew += wxString(textstr + matchStart + start,
+#else
+ textNew += wxString(textstr.data() + matchStart +
+ start,
+#endif
*wxConvCurrent, len);
mayHaveBackrefs = true;
#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);
#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;