emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/macterm.c


From: Steven Tamm
Subject: [Emacs-diffs] Changes to emacs/src/macterm.c
Date: Sat, 18 Dec 2004 12:18:01 -0500

Index: emacs/src/macterm.c
diff -c emacs/src/macterm.c:1.83 emacs/src/macterm.c:1.84
*** emacs/src/macterm.c:1.83    Tue Nov 30 05:57:27 2004
--- emacs/src/macterm.c Sat Dec 18 16:36:29 2004
***************
*** 5976,5982 ****
        strcpy(cs, "mac-cyrillic");
        break;
        case kTextEncodingMacCentralEurRoman:
!       strcpy(cs, "mac-centraleuropean");
        break;
        case kTextEncodingMacSymbol:
        case kTextEncodingMacDingbats:
--- 5976,5982 ----
        strcpy(cs, "mac-cyrillic");
        break;
        case kTextEncodingMacCentralEurRoman:
!       strcpy(cs, "mac-centraleurroman");
        break;
        case kTextEncodingMacSymbol:
        case kTextEncodingMacDingbats:
***************
*** 6034,6040 ****
      coding_system = Qeuc_kr;
    else if (strcmp (cs, "mac-roman") == 0
           || strcmp (cs, "mac-cyrillic") == 0
!          || strcmp (cs, "mac-centraleuropean") == 0
           || strcmp (cs, "adobe-fontspecific") == 0)
      strcpy (mf, family);
    else
--- 6034,6040 ----
      coding_system = Qeuc_kr;
    else if (strcmp (cs, "mac-roman") == 0
           || strcmp (cs, "mac-cyrillic") == 0
!          || strcmp (cs, "mac-centraleurroman") == 0
           || strcmp (cs, "adobe-fontspecific") == 0)
      strcpy (mf, family);
    else
***************
*** 6276,6281 ****
--- 6276,6303 ----
    };
  
  static Lisp_Object
+ mac_c_string_match (regexp, string, nonspecial, exact)
+      Lisp_Object regexp;
+      const char *string, *nonspecial;
+      int exact;
+ {
+   if (exact)
+     {
+       if (strcmp (string, nonspecial) == 0)
+       return build_string (string);
+     }
+   else if (strstr (string, nonspecial))
+     {
+       Lisp_Object str = build_string (string);
+ 
+       if (fast_string_match (regexp, str) >= 0)
+       return str;
+     }
+ 
+   return Qnil;
+ }
+ 
+ static Lisp_Object
  mac_do_list_fonts (pattern, maxnames)
       char *pattern;
       int maxnames;
***************
*** 6286,6291 ****
--- 6308,6315 ----
    char scaled[256];
    char *ptr;
    int scl_val[XLFD_SCL_LAST], *field, *val;
+   char *longest_start, *cur_start, *nonspecial;
+   int longest_len, cur_len, exact;
  
    for (i = 0; i < XLFD_SCL_LAST; i++)
      scl_val[i] = -1;
***************
*** 6343,6376 ****
    ptr = regex;
    *ptr++ = '^';
  
!   /* Turn pattern into a regexp and do a regexp match.  */
    for (; *pattern; pattern++)
      {
!       if (*pattern == '?')
!         *ptr++ = '.';
!       else if (*pattern == '*')
!         {
!           *ptr++ = '.';
!           *ptr++ = '*';
!         }
        else
!         *ptr++ = tolower (*pattern);
      }
    *ptr = '$';
    *(ptr + 1) = '\0';
  
    pattern_regex = build_string (regex);
  
    for (i = 0; i < font_name_count; i++)
      {
!       fontname = build_string (font_name_table[i]);
!       if (fast_string_match (pattern_regex, fontname) >= 0)
        {
          font_list = Fcons (fontname, font_list);
! 
!           n_fonts++;
!           if (maxnames > 0 && n_fonts >= maxnames)
!             break;
        }
        else if (scl_val[XLFD_SCL_PIXEL_SIZE] > 0
               && (ptr = strstr (font_name_table[i], "-0-0-75-75-m-0-")))
--- 6367,6432 ----
    ptr = regex;
    *ptr++ = '^';
  
!   longest_start = cur_start = ptr;
!   longest_len = cur_len = 0;
!   exact = 1;
! 
!   /* Turn pattern into a regexp and do a regexp match.  Also find the
!      longest substring containing no special characters.  */
    for (; *pattern; pattern++)
      {
!       if (*pattern == '?' || *pattern == '*')
!       {
!         if (cur_len > longest_len)
!           {
!             longest_start = cur_start;
!             longest_len = cur_len;
!           }
!         cur_len = 0;
!         exact = 0;
! 
!         if (*pattern == '?')
!           *ptr++ = '.';
!         else /* if (*pattern == '*') */
!           {
!             *ptr++ = '.';
!             *ptr++ = '*';
!           }
!       }
        else
!       {
!         if (cur_len == 0)
!           cur_start = ptr;
!         cur_len++;
! 
!         *ptr++ = tolower (*pattern);
!       }
!     }
! 
!   if (cur_len > longest_len)
!     {
!       longest_start = cur_start;
!       longest_len = cur_len;
      }
+ 
    *ptr = '$';
    *(ptr + 1) = '\0';
  
+   nonspecial = xmalloc (longest_len + 1);
+   strncpy (nonspecial, longest_start, longest_len);
+   nonspecial[longest_len] = '\0';
+ 
    pattern_regex = build_string (regex);
  
    for (i = 0; i < font_name_count; i++)
      {
!       fontname = mac_c_string_match (pattern_regex, font_name_table[i],
!                                    nonspecial, exact);
!       if (!NILP (fontname))
        {
          font_list = Fcons (fontname, font_list);
!         if (exact || maxnames > 0 && ++n_fonts >= maxnames)
!           return font_list;
        }
        else if (scl_val[XLFD_SCL_PIXEL_SIZE] > 0
               && (ptr = strstr (font_name_table[i], "-0-0-75-75-m-0-")))
***************
*** 6384,6400 ****
                   scl_val[XLFD_SCL_POINT_SIZE],
                   scl_val[XLFD_SCL_AVGWIDTH],
                   ptr + sizeof ("-0-0-75-75-m-0-") - 1);
!         fontname = build_string (scaled);
!         if (fast_string_match (pattern_regex, fontname) >= 0)
            {
              font_list = Fcons (fontname, font_list);
! 
!             n_fonts++;
!             if (maxnames > 0 && n_fonts >= maxnames)
!               break;
            }
        }
      }
    return font_list;
  }
  
--- 6440,6458 ----
                   scl_val[XLFD_SCL_POINT_SIZE],
                   scl_val[XLFD_SCL_AVGWIDTH],
                   ptr + sizeof ("-0-0-75-75-m-0-") - 1);
!         fontname = mac_c_string_match (pattern_regex, scaled,
!                                        nonspecial, exact);
!         if (!NILP (fontname))
            {
              font_list = Fcons (fontname, font_list);
!             if (exact || maxnames > 0 && ++n_fonts >= maxnames)
!               return font_list;
            }
        }
      }
+ 
+   xfree (nonspecial);
+ 
    return font_list;
  }
  




reply via email to

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