all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* regexp case sensitivity bug
@ 2002-12-08 21:08 Dean Herington
  2002-12-09 20:22 ` Richard Stallman
  0 siblings, 1 reply; 7+ messages in thread
From: Dean Herington @ 2002-12-08 21:08 UTC (permalink / raw)


In Emacs 21.1.1, when I do isearch-forward-regexp with input "\bP",
Emacs matches 'p's case insensitively.  I see nothing in the
documentation to suggest that the case sensitivity behavior should
differ from that of isearch-forward, where "P" matches only upper-case
'p's.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: regexp case sensitivity bug
       [not found] <mailman.11.1039383012.19936.bug-gnu-emacs@gnu.org>
@ 2002-12-08 21:51 ` David Kastrup
  0 siblings, 0 replies; 7+ messages in thread
From: David Kastrup @ 2002-12-08 21:51 UTC (permalink / raw)


Dean Herington <heringto@cs.unc.edu> writes:

> In Emacs 21.1.1, when I do isearch-forward-regexp with input "\bP",
> Emacs matches 'p's case insensitively.  I see nothing in the
> documentation to suggest that the case sensitivity behavior should
> differ from that of isearch-forward, where "P" matches only upper-case
> 'p's.

But I see something in the documentation:

File: emacs,  Node: Search Case,  Next: Replace,  Prev: Regexps,  Up: Search

Searching and Case
==================

   Incremental searches in Emacs normally ignore the case of the text
they are searching through, if you specify the text in lower case.
Thus, if you specify searching for `foo', then `Foo' and `foo' are also
considered a match.  Regexps, and in particular character sets, are
included: `[ab]' would match `a' or `A' or `b' or `B'.

   An upper-case letter anywhere in the incremental search string makes
the search case-sensitive.  Thus, searching for `Foo' does not find
`foo' or `FOO'.  This applies to regular expression search as well as
to string search.  The effect ceases if you delete the upper-case
letter from the search string.

   Typing `M-c' within an incremental search toggles the case
sensitivity of that search.  The effect does not extend beyond the
current incremental search to the next one, but it does override the
effect of including an upper-case letter in the current search.

   If you set the variable `case-fold-search' to `nil', then all
letters must match exactly, including case.  This is a per-buffer
variable; altering the variable affects only the current buffer, but
there is a default value which you can change as well.  See *Note Locals::.
This variable applies to nonincremental searches also, including those
performed by the replace commands (see *note Replace::) and the minibuffer
history matching commands (see *note Minibuffer History::).

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: regexp case sensitivity bug
  2002-12-08 21:08 regexp case sensitivity bug Dean Herington
@ 2002-12-09 20:22 ` Richard Stallman
  2002-12-09 22:27   ` Dean Herington
  0 siblings, 1 reply; 7+ messages in thread
From: Richard Stallman @ 2002-12-09 20:22 UTC (permalink / raw)
  Cc: emacs-devel

    In Emacs 21.1.1, when I do isearch-forward-regexp with input "\bP",
    Emacs matches 'p's case insensitively.

Does this patch fix it?

*** isearch.el.~1.215.~	Sun Nov 10 13:13:37 2002
--- isearch.el	Mon Dec  9 11:20:37 2002
***************
*** 1871,1877 ****
  	(if (and regexp-flag (eq char ?\\))
  	    (setq quote-flag (not quote-flag))
  	  (if (and (not quote-flag) (not (eq char (downcase char))))
! 	      (setq found t))))
        (setq i (1+ i)))
      (not found)))
  
--- 1871,1878 ----
  	(if (and regexp-flag (eq char ?\\))
  	    (setq quote-flag (not quote-flag))
  	  (if (and (not quote-flag) (not (eq char (downcase char))))
! 	      (setq found t))
! 	  (setq quote-flag nil)))
        (setq i (1+ i)))
      (not found)))

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: regexp case sensitivity bug
  2002-12-09 20:22 ` Richard Stallman
@ 2002-12-09 22:27   ` Dean Herington
  2002-12-10  0:45     ` Kim F. Storm
  0 siblings, 1 reply; 7+ messages in thread
From: Dean Herington @ 2002-12-09 22:27 UTC (permalink / raw)
  Cc: emacs-devel

Richard Stallman wrote:

>     In Emacs 21.1.1, when I do isearch-forward-regexp with input "\bP",
>     Emacs matches 'p's case insensitively.
>
> Does this patch fix it?
>
> *** isearch.el.~1.215.~ Sun Nov 10 13:13:37 2002
> --- isearch.el  Mon Dec  9 11:20:37 2002
> ***************
> *** 1871,1877 ****
>         (if (and regexp-flag (eq char ?\\))
>             (setq quote-flag (not quote-flag))
>           (if (and (not quote-flag) (not (eq char (downcase char))))
> !             (setq found t))))
>         (setq i (1+ i)))
>       (not found)))
>
> --- 1871,1878 ----
>         (if (and regexp-flag (eq char ?\\))
>             (setq quote-flag (not quote-flag))
>           (if (and (not quote-flag) (not (eq char (downcase char))))
> !             (setq found t))
> !         (setq quote-flag nil)))
>         (setq i (1+ i)))
>       (not found)))

That patch fixes the bug I saw.

How about the following, which I find simpler?

(defun isearch-no-upper-case-p (string regexp-flag)
  "Return t if there are no upper case chars in STRING.
If REGEXP-FLAG is non-nil, disregard letters quoted by `\\'
since they have special meaning in a regexp."
  (let ((i 0) (len (length string)) found)
    (while (and (not found) (< i len))
      (let ((char (aref string i)))
        (if (and regexp-flag (eq char ?\\))
            (setq i (1+ i))
          (if (not (eq char (downcase char)))
              (setq found t))))
      (setq i (1+ i)))
    (not found)))

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: regexp case sensitivity bug
  2002-12-09 22:27   ` Dean Herington
@ 2002-12-10  0:45     ` Kim F. Storm
  2002-12-10 10:52       ` Andreas Schwab
  2002-12-10 21:30       ` Richard Stallman
  0 siblings, 2 replies; 7+ messages in thread
From: Kim F. Storm @ 2002-12-10  0:45 UTC (permalink / raw)
  Cc: emacs-devel

Dean Herington <heringto@cs.unc.edu> writes:

> Richard Stallman wrote:
> 
> >     In Emacs 21.1.1, when I do isearch-forward-regexp with input "\bP",
> >     Emacs matches 'p's case insensitively.
> >
> > Does this patch fix it?
> >
> > *** isearch.el.~1.215.~ Sun Nov 10 13:13:37 2002
> > --- isearch.el  Mon Dec  9 11:20:37 2002
> > ***************
> > *** 1871,1877 ****
> >         (if (and regexp-flag (eq char ?\\))
> >             (setq quote-flag (not quote-flag))
> >           (if (and (not quote-flag) (not (eq char (downcase char))))
> > !             (setq found t))))
> >         (setq i (1+ i)))
> >       (not found)))
> >
> > --- 1871,1878 ----
> >         (if (and regexp-flag (eq char ?\\))
> >             (setq quote-flag (not quote-flag))
> >           (if (and (not quote-flag) (not (eq char (downcase char))))
> > !             (setq found t))
> > !         (setq quote-flag nil)))
> >         (setq i (1+ i)))
> >       (not found)))
> 
> That patch fixes the bug I saw.
> 
> How about the following, which I find simpler?
> 
> (defun isearch-no-upper-case-p (string regexp-flag)
>   "Return t if there are no upper case chars in STRING.
> If REGEXP-FLAG is non-nil, disregard letters quoted by `\\'
> since they have special meaning in a regexp."
>   (let ((i 0) (len (length string)) found)
>     (while (and (not found) (< i len))
>       (let ((char (aref string i)))
>         (if (and regexp-flag (eq char ?\\))
>             (setq i (1+ i))
>           (if (not (eq char (downcase char)))
>               (setq found t))))
>       (setq i (1+ i)))
>     (not found)))
> 

Or we can use a completely different approach:

(defun isearch-no-upper-case-p (string regexp-flag)
  "..."
  (let ((case-fold-search nil))
    (save-match-data
      (null (string-match 
              (if regexp-flag "\\(^\\|[^\\]\\)[[:upper:]]" "[[:upper:]]")
              string)))))


-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: regexp case sensitivity bug
  2002-12-10  0:45     ` Kim F. Storm
@ 2002-12-10 10:52       ` Andreas Schwab
  2002-12-10 21:30       ` Richard Stallman
  1 sibling, 0 replies; 7+ messages in thread
From: Andreas Schwab @ 2002-12-10 10:52 UTC (permalink / raw)
  Cc: emacs-devel

storm@cua.dk (Kim F. Storm) writes:

|> Or we can use a completely different approach:
|> 
|> (defun isearch-no-upper-case-p (string regexp-flag)
|>   "..."
|>   (let ((case-fold-search nil))
|>     (save-match-data
|>       (null (string-match 
|>               (if regexp-flag "\\(^\\|[^\\]\\)[[:upper:]]" "[[:upper:]]")
|>               string)))))

That needs to check whether there is an even number of \ before the
letter, because only then the letter is not part of a special regex
matcher.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: regexp case sensitivity bug
  2002-12-10  0:45     ` Kim F. Storm
  2002-12-10 10:52       ` Andreas Schwab
@ 2002-12-10 21:30       ` Richard Stallman
  1 sibling, 0 replies; 7+ messages in thread
From: Richard Stallman @ 2002-12-10 21:30 UTC (permalink / raw)
  Cc: emacs-devel

    Or we can use a completely different approach:

    (defun isearch-no-upper-case-p (string regexp-flag)
      "..."
      (let ((case-fold-search nil))
	(save-match-data
	  (null (string-match 
		  (if regexp-flag "\\(^\\|[^\\]\\)[[:upper:]]" "[[:upper:]]")
		  string)))))

That's not correct in the case where there are two \'s in a row
(or any even number).

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2002-12-10 21:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-12-08 21:08 regexp case sensitivity bug Dean Herington
2002-12-09 20:22 ` Richard Stallman
2002-12-09 22:27   ` Dean Herington
2002-12-10  0:45     ` Kim F. Storm
2002-12-10 10:52       ` Andreas Schwab
2002-12-10 21:30       ` Richard Stallman
     [not found] <mailman.11.1039383012.19936.bug-gnu-emacs@gnu.org>
2002-12-08 21:51 ` David Kastrup

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.