comparison 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
comparison
equal deleted inserted replaced
83221:0fc4928cc48e 83222:ae7fab96922c
788 788
789 if (!CONSP (Vcached_fontset_data) 789 if (!CONSP (Vcached_fontset_data)
790 || strcmp (SDATA (pattern), CACHED_FONTSET_NAME)) 790 || strcmp (SDATA (pattern), CACHED_FONTSET_NAME))
791 { 791 {
792 /* We must at first update the cached data. */ 792 /* We must at first update the cached data. */
793 char *regex = (char *) alloca (SCHARS (pattern) * 2 + 3); 793 char *regex, *p0, *p1;
794 char *p0, *p1 = regex; 794 int ndashes = 0, nstars = 0;
795 795
796 /* Convert "*" to ".*", "?" to ".". */ 796 for (p0 = SDATA (pattern); *p0; p0++)
797 {
798 if (*p0 == '-')
799 ndashes++;
800 else if (*p0 == '*')
801 nstars++;
802 }
803
804 /* If PATTERN is not full XLFD we conert "*" to ".*". Otherwise
805 we convert "*" to "[^-]*" which is much faster in regular
806 expression matching. */
807 if (ndashes < 14)
808 p1 = regex = (char *) alloca (SBYTES (pattern) + 2 * nstars + 1);
809 else
810 p1 = regex = (char *) alloca (SBYTES (pattern) + 5 * nstars + 1);
811
797 *p1++ = '^'; 812 *p1++ = '^';
798 for (p0 = (char *) SDATA (pattern); *p0; p0++) 813 for (p0 = (char *) SDATA (pattern); *p0; p0++)
799 { 814 {
800 if (*p0 == '*') 815 if (*p0 == '*')
801 { 816 {
802 *p1++ = '.'; 817 if (ndashes < 14)
818 *p1++ = '.';
819 else
820 *p1++ = '[', *p1++ = '^', *p1++ = '-', *p1++ = ']';
803 *p1++ = '*'; 821 *p1++ = '*';
804 } 822 }
805 else if (*p0 == '?') 823 else if (*p0 == '?')
806 *p1++ = '.'; 824 *p1++ = '.';
807 else 825 else