aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--regex.c23
2 files changed, 28 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 525b704..4d54c0c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2002-11-23 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
+ * [w3m-dev 03464] Re: case insensitive regexp search
+ (rewrite [w3m-dev 03462] by Hiroyuki Ito <hito@crl.go.jp>)
+ * regex.c (matchWhich): add int
+ (newRegex0): igncase
+ (regmatch1): matchWhich with re->mode & RE_IGNCASE
+ (matchWhich): add igncase
+
+2002-11-23 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
+
* [w3m-dev 03459] background download when external viewer
* etc.c (myExec): added
(mySystem): rewrite to use myExec()
@@ -5040,4 +5049,4 @@ a * [w3m-dev 03276] compile error on EWS4800
* release-0-2-1
* import w3m-0.2.1
-$Id: ChangeLog,v 1.548 2002/11/22 15:49:42 ukai Exp $
+$Id: ChangeLog,v 1.549 2002/11/22 15:56:43 ukai Exp $
diff --git a/regex.c b/regex.c
index f2b02dd..dd1042d 100644
--- a/regex.c
+++ b/regex.c
@@ -1,4 +1,4 @@
-/* $Id: regex.c,v 1.16 2002/01/21 17:57:28 ukai Exp $ */
+/* $Id: regex.c,v 1.17 2002/11/22 15:56:43 ukai Exp $ */
/*
* regex: Regular expression pattern match library
*
@@ -68,7 +68,7 @@ static Regex DefaultRegex;
static int regmatch(regexchar *, char *, char *, int, char **);
static int regmatch1(regexchar *, longchar);
-static int matchWhich(longchar *, longchar);
+static int matchWhich(longchar *, longchar, int);
/*
* regexCompile: compile regular expression
@@ -190,6 +190,8 @@ newRegex0(char **ex, int igncase, Regex *regex, char **msg, int level)
*(st_ptr++) = '\0';
re->p.pattern = r;
RE_SET_MODE(re, m);
+ if (igncase)
+ re->mode |= RE_IGNCASE;
re++;
break;
case '|':
@@ -634,15 +636,15 @@ regmatch1(regexchar * re, longchar c)
else
return (*re->p.pattern == c);
case RE_WHICH:
- return matchWhich(re->p.pattern, c);
+ return matchWhich(re->p.pattern, c, re->mode & RE_IGNCASE);
case RE_EXCEPT:
- return !matchWhich(re->p.pattern, c);
+ return !matchWhich(re->p.pattern, c, re->mode & RE_IGNCASE);
}
return 0;
}
static int
-matchWhich(longchar * pattern, longchar c)
+matchWhich(longchar * pattern, longchar c, int igncase)
{
longchar *p = pattern;
int ans = 0;
@@ -657,6 +659,12 @@ matchWhich(longchar * pattern, longchar c)
ans = 1;
break;
}
+ else if (igncase && c < 127 && IS_ALPHA(c) &&
+ ((*p <= c && tolower(c) <= *(p + 2)) ||
+ (*p <= c && toupper(c) <= *(p + 2)))) {
+ ans = 1;
+ break;
+ }
p += 3;
}
else {
@@ -664,6 +672,11 @@ matchWhich(longchar * pattern, longchar c)
ans = 1;
break;
}
+ else if (igncase && c < 127 && IS_ALPHA(c) &&
+ (*p == tolower(c) || *p == toupper(c))) {
+ ans = 1;
+ break;
+ }
p++;
}
}