emacs-diffs
[Top][All Lists]
Advanced

[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);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]