diff options
| -rw-r--r-- | ChangeLog | 11 | ||||
| -rw-r--r-- | regex.c | 23 | 
2 files changed, 28 insertions, 6 deletions
| @@ -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 $ @@ -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++;  	}      } | 
