aboutsummaryrefslogtreecommitdiffstats
path: root/regex.c
diff options
context:
space:
mode:
authorFumitoshi UKAI <ukai@debian.or.jp>2002-11-22 15:56:43 +0000
committerFumitoshi UKAI <ukai@debian.or.jp>2002-11-22 15:56:43 +0000
commitbd44683efa3849302b8b30309834ac72d6bc4eeb (patch)
tree3cca28e4ffeb42fa72abcf5e88e6231b290d99af /regex.c
parent[w3m-dev 03459] background download when external viewer (diff)
downloadw3m-bd44683efa3849302b8b30309834ac72d6bc4eeb.tar.gz
w3m-bd44683efa3849302b8b30309834ac72d6bc4eeb.zip
[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 (limited to 'regex.c')
-rw-r--r--regex.c23
1 files changed, 18 insertions, 5 deletions
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++;
}
}