comparison src/xfns.c @ 60668:34f4b9f0b40d

(xic_create_fontsetname): Add `motif' argument. Always return a freshly allocated string. (xic_create_xfontset): Adjust call.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 17 Mar 2005 18:32:33 +0000
parents c2a74bfb2e79
children d8c3512bc427
comparison
equal deleted inserted replaced
60667:bb5e00e5ccd5 60668:34f4b9f0b40d
1959 1959
1960 /* Create an X fontset on frame F with base font name BASE_FONTNAME. */ 1960 /* Create an X fontset on frame F with base font name BASE_FONTNAME. */
1961 1961
1962 char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; 1962 char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
1963 1963
1964 /* Create an Xt fontset spec from the name of a base font.
1965 If `motif' is True use the Motif syntax. */
1964 char * 1966 char *
1965 xic_create_fontsetname (base_fontname) 1967 xic_create_fontsetname (base_fontname, motif)
1966 char *base_fontname; 1968 char *base_fontname;
1967 { 1969 Bool motif;
1970 {
1971 const char *sep = motif ? ";" : ",";
1972 char *fontsetname;
1973
1968 /* Make a fontset name from the base font name. */ 1974 /* Make a fontset name from the base font name. */
1969 if (xic_defaut_fontset == base_fontname) 1975 if (xic_defaut_fontset == base_fontname)
1970 /* There is no base font name, use the default. */ 1976 { /* There is no base font name, use the default. */
1971 return base_fontname; 1977 int len = strlen (base_fontname) + 2;
1978 fontsetname = xmalloc (len);
1979 bzero (fontsetname, len);
1980 strcpy (fontsetname, base_fontname);
1981 }
1972 else 1982 else
1973 { 1983 {
1974 /* Make a fontset name from the base font name. 1984 /* Make a fontset name from the base font name.
1975 The font set will be made of the following elements: 1985 The font set will be made of the following elements:
1976 - the base font. 1986 - the base font.
1977 - the base font where the charset spec is replaced by -*-*. 1987 - the base font where the charset spec is replaced by -*-*.
1978 - the same but with the family also replaced with -*-*-. */ 1988 - the same but with the family also replaced with -*-*-. */
1979 char *p = base_fontname; 1989 char *p = base_fontname;
1980 char *fontsetname;
1981 int i; 1990 int i;
1982 1991
1983 for (i = 0; *p; p++) 1992 for (i = 0; *p; p++)
1984 if (*p == '-') i++; 1993 if (*p == '-') i++;
1985 if (i != 14) 1994 if (i != 14)
1986 { /* As the font name doesn't conform to XLFD, we can't 1995 { /* As the font name doesn't conform to XLFD, we can't
1987 modify it to generalize it to allcs and allfamilies. 1996 modify it to generalize it to allcs and allfamilies.
1988 Use the specified font plus the default. */ 1997 Use the specified font plus the default. */
1989 int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 2; 1998 int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 3;
1990 fontsetname = xmalloc (len); 1999 fontsetname = xmalloc (len);
1991 bzero (fontsetname, len); 2000 bzero (fontsetname, len);
1992 strcpy (fontsetname, base_fontname); 2001 strcpy (fontsetname, base_fontname);
1993 strcat (fontsetname, ","); 2002 strcat (fontsetname, sep);
1994 strcat (fontsetname, xic_defaut_fontset); 2003 strcat (fontsetname, xic_defaut_fontset);
1995 } 2004 }
1996 else 2005 else
1997 { 2006 {
1998 int len; 2007 int len;
2026 bcopy (p1, font_allfamilies + (strlen (allfamilies)), p - p1); 2035 bcopy (p1, font_allfamilies + (strlen (allfamilies)), p - p1);
2027 strcat (font_allfamilies, allcs); 2036 strcat (font_allfamilies, allcs);
2028 2037
2029 /* Build the actual font set name. */ 2038 /* Build the actual font set name. */
2030 len = strlen (base_fontname) + strlen (font_allcs) 2039 len = strlen (base_fontname) + strlen (font_allcs)
2031 + strlen (font_allfamilies) + 3; 2040 + strlen (font_allfamilies) + 4;
2032 fontsetname = xmalloc (len); 2041 fontsetname = xmalloc (len);
2033 bzero (fontsetname, len); 2042 bzero (fontsetname, len);
2034 strcpy (fontsetname, base_fontname); 2043 strcpy (fontsetname, base_fontname);
2035 strcat (fontsetname, ","); 2044 strcat (fontsetname, sep);
2036 strcat (fontsetname, font_allcs); 2045 strcat (fontsetname, font_allcs);
2037 strcat (fontsetname, ","); 2046 strcat (fontsetname, sep);
2038 strcat (fontsetname, font_allfamilies); 2047 strcat (fontsetname, font_allfamilies);
2039 } 2048 }
2040 return fontsetname; 2049 }
2041 } 2050 if (motif)
2051 strcat (fontsetname, ":");
2052 return fontsetname;
2042 } 2053 }
2043 2054
2044 static XFontSet 2055 static XFontSet
2045 xic_create_xfontset (f, base_fontname) 2056 xic_create_xfontset (f, base_fontname)
2046 struct frame *f; 2057 struct frame *f;
2069 } 2080 }
2070 } 2081 }
2071 2082
2072 if (!xfs) 2083 if (!xfs)
2073 { 2084 {
2074 char *fontsetname = xic_create_fontsetname (base_fontname); 2085 char *fontsetname = xic_create_fontsetname (base_fontname, False);
2075 2086
2076 /* New fontset. */ 2087 /* New fontset. */
2077 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), 2088 xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
2078 fontsetname, &missing_list, 2089 fontsetname, &missing_list,
2079 &missing_count, &def_string); 2090 &missing_count, &def_string);
2080 if (missing_list) 2091 if (missing_list)
2081 XFreeStringList (missing_list); 2092 XFreeStringList (missing_list);
2082 if (fontsetname != base_fontname) 2093 xfree (fontsetname);
2083 xfree (fontsetname);
2084 } 2094 }
2085 2095
2086 if (FRAME_XIC_BASE_FONTNAME (f)) 2096 if (FRAME_XIC_BASE_FONTNAME (f))
2087 xfree (FRAME_XIC_BASE_FONTNAME (f)); 2097 xfree (FRAME_XIC_BASE_FONTNAME (f));
2088 FRAME_XIC_BASE_FONTNAME (f) = xstrdup (base_fontname); 2098 FRAME_XIC_BASE_FONTNAME (f) = xstrdup (base_fontname);