commit 5c617182b79c0f9a812c078577d0dff5a39cc1a9
parent 017ff1d84be4efb0505563e71ef8922ad128f331
Author: ukai <ukai>
Date: Fri, 22 Nov 2002 15:56:43 +0000
[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
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
Diffstat:
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git 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()
diff --git a/regex.c b/regex.c
@@ -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++;
}
}