projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
correction to last commit: Korean and Romanian translations will only be in 2.9.1...
[wxWidgets.git]
/
src
/
common
/
regex.cpp
diff --git
a/src/common/regex.cpp
b/src/common/regex.cpp
index 33458574c99247dfdfbb12b874af393c0e846746..30dddf3804ae9c38d4bb24aced45cafcef88c9a7 100644
(file)
--- a/
src/common/regex.cpp
+++ b/
src/common/regex.cpp
@@
-1,11
+1,11
@@
///////////////////////////////////////////////////////////////////////////////
// Name: src/common/regex.cpp
// Purpose: regular expression matching
///////////////////////////////////////////////////////////////////////////////
// Name: src/common/regex.cpp
// Purpose: regular expression matching
-// Author: Karsten Ball
ü
der and Vadim Zeitlin
+// Author: Karsten Ball
ue
der and Vadim Zeitlin
// Modified by:
// Created: 13.07.01
// RCS-ID: $Id$
// Modified by:
// Created: 13.07.01
// RCS-ID: $Id$
-// Copyright: (c) 2000 Karsten Ball
ü
der <ballueder@gmx.net>
+// Copyright: (c) 2000 Karsten Ball
ue
der <ballueder@gmx.net>
// 2001 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// 2001 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
@@
-27,11
+27,13
@@
#if wxUSE_REGEX
#if wxUSE_REGEX
+#include "wx/regex.h"
+
#ifndef WX_PRECOMP
#include "wx/object.h"
#ifndef WX_PRECOMP
#include "wx/object.h"
- #include "wx/string.h"
#include "wx/log.h"
#include "wx/intl.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 //WX_PRECOMP
// FreeBSD, Watcom and DMars require this, CW doesn't have nor need it.
@@
-43,7
+45,6
@@
#endif
#include <regex.h>
#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
// 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
@@
-56,7
+57,11
@@
#ifdef __REG_NOFRONT
# define WXREGEX_USING_BUILTIN
# define WXREGEX_IF_NEED_LEN(x) ,x
#ifdef __REG_NOFRONT
# define WXREGEX_USING_BUILTIN
# define WXREGEX_IF_NEED_LEN(x) ,x
-# define WXREGEX_CHAR(x) x
+# if wxUSE_UNICODE
+# define WXREGEX_CHAR(x) (x).wc_str()
+# else
+# define WXREGEX_CHAR(x) (x).mb_str()
+# endif
#else
# ifdef HAVE_RE_SEARCH
# define WXREGEX_IF_NEED_LEN(x) ,x
#else
# ifdef HAVE_RE_SEARCH
# define WXREGEX_IF_NEED_LEN(x) ,x
@@
-67,7
+72,7
@@
# if wxUSE_UNICODE
# define WXREGEX_CONVERT_TO_MB
# endif
# if wxUSE_UNICODE
# define WXREGEX_CONVERT_TO_MB
# endif
-# define WXREGEX_CHAR(x)
wxConvertWX2MB(x
)
+# define WXREGEX_CHAR(x)
(x).mb_str(
)
# define wx_regfree regfree
# define wx_regerror regerror
#endif
# define wx_regfree regfree
# define wx_regerror regerror
#endif
@@
-277,12
+282,14
@@
bool wxRegExImpl::Compile(const wxString& expr, int flags)
// translate our flags to regcomp() ones
int flagsRE = 0;
if ( !(flags & wxRE_BASIC) )
// 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;
#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 )
if ( flags & wxRE_ICASE )
flagsRE |= REG_ICASE;
if ( flags & wxRE_NOSUB )
@@
-293,8
+300,11
@@
bool wxRegExImpl::Compile(const wxString& expr, int flags)
// compile it
#ifdef WXREGEX_USING_BUILTIN
bool conv = true;
// compile it
#ifdef WXREGEX_USING_BUILTIN
bool conv = true;
- int errorcode = wx_re_comp(&m_RegEx, expr, expr.length(), flagsRE);
+ // FIXME-UTF8: use wc_str() after removing ANSI build
+ int errorcode = wx_re_comp(&m_RegEx, expr.c_str(), expr.length(), flagsRE);
#else
#else
+ // FIXME-UTF8: this is potentially broken, we shouldn't even try it
+ // and should always use builtin regex library (or PCRE?)
const wxWX2MBbuf conv = expr.mbc_str();
int errorcode = conv ? regcomp(&m_RegEx, conv, flagsRE) : REG_BADPAT;
#endif
const wxWX2MBbuf conv = expr.mbc_str();
int errorcode = conv ? regcomp(&m_RegEx, conv, flagsRE) : REG_BADPAT;
#endif
@@
-368,7
+378,7
@@
static int ReSearch(const regex_t *preg,
re_registers *matches,
int eflags)
{
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;
pattern->not_bol = (eflags & REG_NOTBOL) != 0;
pattern->not_eol = (eflags & REG_NOTEOL) != 0;
@@
-505,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) &&
// 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)) )
{
countRepl ? wxRE_NOTBOL : 0
WXREGEX_IF_NEED_LEN(textlen - matchStart)) )
{
@@
-551,7
+566,12
@@
int wxRegExImpl::Replace(wxString *text,
}
else
{
}
else
{
+#ifndef WXREGEX_CONVERT_TO_MB
textNew += wxString(textstr + matchStart + start,
textNew += wxString(textstr + matchStart + start,
+#else
+ textNew += wxString(textstr.data() + matchStart +
+ start,
+#endif
*wxConvCurrent, len);
mayHaveBackrefs = true;
*wxConvCurrent, len);
mayHaveBackrefs = true;
@@
-581,7
+601,8
@@
int wxRegExImpl::Replace(wxString *text,
#ifndef WXREGEX_CONVERT_TO_MB
result.append(*text, matchStart, start);
#else
#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);
#endif
matchStart += start;
result.append(textNew);
@@
-594,7
+615,7
@@
int wxRegExImpl::Replace(wxString *text,
#ifndef WXREGEX_CONVERT_TO_MB
result.append(*text, matchStart, wxString::npos);
#else
#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;
#endif
*text = result;