Subject: bug#22090: Isearch is sluggish and eventually refuses further service with "[Too many words]".

From: Artur Malabarba <[email-masked]>
Date: Fri, 4 Dec 2015 20:49:42 +0000

2015-12-04 19:21 GMT+00:00 Alan Mackenzie <[email-masked]>:
> Would you like any help to sort out these regexps?  I have some expertise
> in doing this, having half-written fix-re.el, a program which analyses
> and corrects just the sort of thing you're talking about.

Maybe you can help then. The situation is actually quite simple.
We have a regexp for matching anything that 'a' should match (for
instance, that might look like "\\(a[´`]?\\|[áà𝑎]\\)"), and we have
another for matching anything that A could match (e.g.
"\\(A[`´]?\\|[ÁÀ]\\)").
When case-fold-search is on the previous code would simply join these
regexps with "\\(\\(a[´`]?\\|[áà𝑎]\\)\\|\\(A[`´]?\\|[ÁÀ]\\)\\)". The
problem is that (when case-fold-search is on) this creates a lot of
redundancy. There are two paths in that regexp that match "a", there
are two paths that match "à" and so on (but it's not full redundancy,
for instance, only one path matches 𝑎).