[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/fontset.c [emacs-unicode-2]
From: |
Miles Bader |
Subject: |
[Emacs-diffs] Changes to emacs/src/fontset.c [emacs-unicode-2] |
Date: |
Thu, 11 Nov 2004 22:18:10 -0500 |
Index: emacs/src/fontset.c
diff -c emacs/src/fontset.c:1.77.4.24 emacs/src/fontset.c:1.77.4.25
*** emacs/src/fontset.c:1.77.4.24 Thu Nov 4 08:55:31 2004
--- emacs/src/fontset.c Fri Nov 12 02:52:55 2004
***************
*** 1069,1082 ****
|| strcmp (SDATA (pattern), CACHED_FONTSET_NAME))
{
/* We must at first update the cached data. */
! char *regex, *p0, *p1;
int ndashes = 0, nstars = 0;
!
for (p0 = SDATA (pattern); *p0; p0++)
{
if (*p0 == '-')
ndashes++;
! else if (*p0 == '*' && p0 > SDATA (pattern) && p0[-1] != '\\')
nstars++;
}
--- 1069,1082 ----
|| strcmp (SDATA (pattern), CACHED_FONTSET_NAME))
{
/* We must at first update the cached data. */
! unsigned char *regex, *p0, *p1;
int ndashes = 0, nstars = 0;
!
for (p0 = SDATA (pattern); *p0; p0++)
{
if (*p0 == '-')
ndashes++;
! else if (*p0 == '*')
nstars++;
}
***************
*** 1084,1097 ****
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 == '*' && p0 > SDATA (pattern) && p0[-1] != '\\')
{
if (ndashes < 14)
*p1++ = '.';
--- 1084,1097 ----
we convert "*" to "[^-]*" which is much faster in regular
expression matching. */
if (ndashes < 14)
! p1 = regex = (unsigned char *) alloca (SBYTES (pattern) + 2 * nstars +
1);
else
! p1 = regex = (unsigned char *) alloca (SBYTES (pattern) + 5 * nstars +
1);
*p1++ = '^';
! for (p0 = SDATA (pattern); *p0; p0++)
{
! if (*p0 == '*')
{
if (ndashes < 14)
*p1++ = '.';
***************
*** 1115,1145 ****
}
/* Return ID of the base fontset named NAME. If there's no such
! fontset, return -1. */
int
! fs_query_fontset (name, regexpp)
Lisp_Object name;
! int regexpp;
{
Lisp_Object tem;
int i;
name = Fdowncase (name);
! if (!regexpp)
{
tem = Frassoc (name, Vfontset_alias_alist);
if (NILP (tem))
tem = Fassoc (name, Vfontset_alias_alist);
if (CONSP (tem) && STRINGP (XCAR (tem)))
name = XCAR (tem);
! else
{
tem = fontset_pattern_regexp (name);
if (STRINGP (tem))
{
name = tem;
! regexpp = 1;
}
}
}
--- 1115,1149 ----
}
/* Return ID of the base fontset named NAME. If there's no such
! fontset, return -1. NAME_PATTERN specifies how to treat NAME as this:
! 0: pattern containing '*' and '?' as wildcards
! 1: regular expression
! 2: literal fontset name
! */
int
! fs_query_fontset (name, name_pattern)
Lisp_Object name;
! int name_pattern;
{
Lisp_Object tem;
int i;
name = Fdowncase (name);
! if (name_pattern != 1)
{
tem = Frassoc (name, Vfontset_alias_alist);
if (NILP (tem))
tem = Fassoc (name, Vfontset_alias_alist);
if (CONSP (tem) && STRINGP (XCAR (tem)))
name = XCAR (tem);
! else if (name_pattern == 0)
{
tem = fontset_pattern_regexp (name);
if (STRINGP (tem))
{
name = tem;
! name_pattern = 1;
}
}
}
***************
*** 1154,1160 ****
continue;
this_name = FONTSET_NAME (fontset);
! if (regexpp
? fast_string_match (name, this_name) >= 0
: !strcmp (SDATA (name), SDATA (this_name)))
return i;
--- 1158,1164 ----
continue;
this_name = FONTSET_NAME (fontset);
! if (name_pattern == 1
? fast_string_match (name, this_name) >= 0
: !strcmp (SDATA (name), SDATA (this_name)))
return i;
***************
*** 1284,1290 ****
return Vdefault_fontset;
CHECK_STRING (name);
! id = fs_query_fontset (name, 0);
if (id < 0)
error ("Fontset `%s' does not exist", SDATA (name));
return FONTSET_FROM_ID (id);
--- 1288,1298 ----
return Vdefault_fontset;
CHECK_STRING (name);
! /* First try NAME as literal. */
! id = fs_query_fontset (name, 2);
! if (id < 0)
! /* For backward compatibility, try again NAME as pattern. */
! id = fs_query_fontset (name, 0);
if (id < 0)
error ("Fontset `%s' does not exist", SDATA (name));
return FONTSET_FROM_ID (id);