emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/src/xfns.c
Date: Sat, 12 Mar 2005 18:25:43 -0500

Index: emacs/src/xfns.c
diff -c emacs/src/xfns.c:1.633 emacs/src/xfns.c:1.634
*** emacs/src/xfns.c:1.633      Thu Mar 10 19:08:01 2005
--- emacs/src/xfns.c    Sat Mar 12 23:25:42 2005
***************
*** 1959,1964 ****
--- 1959,2046 ----
  
  /* Create an X fontset on frame F with base font name BASE_FONTNAME.  */
  
+ char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
+ 
+ char *
+ xic_create_fontsetname (base_fontname)
+      char *base_fontname;
+ {
+   /* Make a fontset name from the base font name.  */
+   if (xic_defaut_fontset == base_fontname)
+     /* There is no base font name, use the default.  */
+     return base_fontname;
+   else
+     {
+       /* Make a fontset name from the base font name.
+        The font set will be made of the following elements:
+        - the base font.
+        - the base font where the charset spec is replaced by -*-*.
+        - the same but with the family also replaced with -*-*-.  */
+       char *p = base_fontname;
+       char *fontsetname;
+       int i;
+       
+       for (i = 0; *p; p++)
+       if (*p == '-') i++;
+       if (i != 14)
+       { /* As the font name doesn't conform to XLFD, we can't
+            modify it to generalize it to allcs and allfamilies.
+            Use the specified font plus the default.  */
+         int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 2;
+         fontsetname = xmalloc (len);
+         bzero (fontsetname, len);
+         strcpy (fontsetname, base_fontname);
+         strcat (fontsetname, ",");
+         strcat (fontsetname, xic_defaut_fontset);
+       }
+       else
+       {
+         int len;
+         char *p1 = NULL;
+         char *font_allcs = NULL;
+         char *font_allfamilies = NULL;
+         char *allcs = "*-*-*-*-*-*-*";
+         char *allfamilies = "-*-*-";
+         
+         for (i = 0, p = base_fontname; i < 8; p++)
+           {
+             if (*p == '-')
+               {
+                 i++;
+                 if (i == 3)
+                   p1 = p + 1;
+               }
+           }
+         /* Build the font spec that matches all charsets.  */
+         len = p - base_fontname + strlen (allcs) + 1;
+         font_allcs = (char *) alloca (len);
+         bzero (font_allcs, len);
+         bcopy (base_fontname, font_allcs, p - base_fontname);
+         strcat (font_allcs, allcs);
+ 
+         /* Build the font spec that matches all families.  */
+         len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1;
+         font_allfamilies = (char *) alloca (len);
+         bzero (font_allfamilies, len);
+         strcpy (font_allfamilies, allfamilies);
+         bcopy (p1, font_allfamilies + (strlen (allfamilies)), p - p1);
+         strcat (font_allfamilies, allcs);
+ 
+         /* Build the actual font set name.  */
+         len = strlen (base_fontname) + strlen (font_allcs)
+           + strlen (font_allfamilies) + 3;
+         fontsetname = xmalloc (len);
+         bzero (fontsetname, len);
+         strcpy (fontsetname, base_fontname);
+         strcat (fontsetname, ",");
+         strcat (fontsetname, font_allcs);
+         strcat (fontsetname, ",");
+         strcat (fontsetname, font_allfamilies);
+       }
+       return fontsetname;
+     }
+ }
+ 
  static XFontSet
  xic_create_xfontset (f, base_fontname)
       struct frame *f;
***************
*** 1970,1975 ****
--- 2052,2060 ----
    char *def_string;
    Lisp_Object rest, frame;
  
+   if (!base_fontname)
+     base_fontname = xic_defaut_fontset;
+ 
    /* See if there is another frame already using same fontset.  */
    FOR_EACH_FRAME (rest, frame)
      {
***************
*** 1986,1997 ****
  
    if (!xfs)
      {
        /* New fontset.  */
        xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
!                             base_fontname, &missing_list,
                              &missing_count, &def_string);
        if (missing_list)
          XFreeStringList (missing_list);
      }
  
    if (FRAME_XIC_BASE_FONTNAME (f))
--- 2071,2086 ----
  
    if (!xfs)
      {
+       char *fontsetname = xic_create_fontsetname (base_fontname);
+ 
        /* New fontset.  */
        xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
!                             fontsetname, &missing_list,
                              &missing_count, &def_string);
        if (missing_list)
          XFreeStringList (missing_list);
+       if (fontsetname != base_fontname)
+       xfree (fontsetname);
      }
  
    if (FRAME_XIC_BASE_FONTNAME (f))
***************
*** 2073,2078 ****
--- 2162,2172 ----
    if (FRAME_XIC (f))
      return;
  
+   /* Create X fontset. */
+   xfs = xic_create_xfontset
+     (f, (FRAME_FONTSET (f) < 0) ? NULL
+         : (char *) SDATA (fontset_ascii (FRAME_FONTSET (f))));
+ 
    xim = FRAME_X_XIM (f);
    if (xim)
      {
***************
*** 2080,2131 ****
        XPoint spot;
        XVaNestedList preedit_attr;
        XVaNestedList status_attr;
-       char *base_fontname;
-       int fontset;
  
        s_area.x = 0; s_area.y = 0; s_area.width = 1; s_area.height = 1;
        spot.x = 0; spot.y = 1;
-       /* Create X fontset. */
-       fontset = FRAME_FONTSET (f);
-       if (fontset < 0)
-       base_fontname = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
-       else
-       {
-         /* Determine the base fontname from the ASCII font name of
-            FONTSET.  */
-         char *ascii_font = (char *) SDATA (fontset_ascii (fontset));
-         char *p = ascii_font;
-         int i;
- 
-         for (i = 0; *p; p++)
-           if (*p == '-') i++;
-         if (i != 14)
-           /* As the font name doesn't conform to XLFD, we can't
-              modify it to get a suitable base fontname for the
-              frame.  */
-           base_fontname = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
-         else
-           {
-             int len = strlen (ascii_font) + 1;
-             char *p1 = NULL;
- 
-             for (i = 0, p = ascii_font; i < 8; p++)
-               {
-                 if (*p == '-')
-                   {
-                     i++;
-                     if (i == 3)
-                       p1 = p + 1;
-                   }
-               }
-             base_fontname = (char *) alloca (len);
-             bzero (base_fontname, len);
-             strcpy (base_fontname, "-*-*-");
-             bcopy (p1, base_fontname + 5, p - p1);
-             strcat (base_fontname, "*-*-*-*-*-*-*");
-           }
-       }
-       xfs = xic_create_xfontset (f, base_fontname);
  
        /* Determine XIC style.  */
        if (xic_style == 0)
--- 2174,2182 ----




reply via email to

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