Mercurial > emacs
diff src/fontset.c @ 83222:ae7fab96922c
Merged in changes from CVS trunk.
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-626
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-627
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-628
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-629
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-630
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-631
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-632
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-633
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-634
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-635
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-636
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-637
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-638
Update from CVS
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-54
Update from CVS
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-55
Update from CVS
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-56
Update from CVS: Add lisp/legacy-gnus-agent.el
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-57
Update from CVS
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-58
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-262
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Mon, 25 Oct 2004 18:17:28 +0000 |
parents | 0fc4928cc48e b935fc1cb542 |
children | 7a0245dd1848 |
line wrap: on
line diff
--- a/src/fontset.c Tue Oct 19 17:00:02 2004 +0000 +++ b/src/fontset.c Mon Oct 25 18:17:28 2004 +0000 @@ -790,16 +790,34 @@ || strcmp (SDATA (pattern), CACHED_FONTSET_NAME)) { /* We must at first update the cached data. */ - char *regex = (char *) alloca (SCHARS (pattern) * 2 + 3); - char *p0, *p1 = regex; + char *regex, *p0, *p1; + int ndashes = 0, nstars = 0; + + for (p0 = SDATA (pattern); *p0; p0++) + { + if (*p0 == '-') + ndashes++; + else if (*p0 == '*') + nstars++; + } - /* Convert "*" to ".*", "?" to ".". */ + /* If PATTERN is not full XLFD we conert "*" to ".*". Otherwise + we convert "*" to "[^-]*" which is much faster in regular + expression matching. */ + if (ndashes < 14) + p1 = regex = (char *) alloca (SBYTES (pattern) + 2 * nstars + 1); + else + p1 = regex = (char *) alloca (SBYTES (pattern) + 5 * nstars + 1); + *p1++ = '^'; for (p0 = (char *) SDATA (pattern); *p0; p0++) { if (*p0 == '*') { - *p1++ = '.'; + if (ndashes < 14) + *p1++ = '.'; + else + *p1++ = '[', *p1++ = '^', *p1++ = '-', *p1++ = ']'; *p1++ = '*'; } else if (*p0 == '?')