aboutsummaryrefslogtreecommitdiffstats
path: root/src/xfns.c
diff options
context:
space:
mode:
authorKaroly Lorentey2006-12-03 12:25:18 +0000
committerKaroly Lorentey2006-12-03 12:25:18 +0000
commitd6e01aa592f7326dffeafa6e97180a1cc39fe7ea (patch)
tree5a22b785cfee1d77d6452607450a12ca82eeecd3 /src/xfns.c
parent14bcc1e098410087a837313e2fc822319ff2e8ca (diff)
parent4975e69596a64247e8995d1ff9084b98a9a5ed0d (diff)
downloademacs-d6e01aa592f7326dffeafa6e97180a1cc39fe7ea.tar.gz
emacs-d6e01aa592f7326dffeafa6e97180a1cc39fe7ea.zip
Merged from emacs@sv.gnu.org.
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-479 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-480 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-481 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-482 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-483 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-484 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-485 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-153 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-154 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-155 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-585
Diffstat (limited to 'src/xfns.c')
-rw-r--r--src/xfns.c50
1 files changed, 43 insertions, 7 deletions
diff --git a/src/xfns.c b/src/xfns.c
index 066996628e2..1cd8265d20f 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -2029,13 +2029,14 @@ xic_create_fontsetname (base_fontname, motif)
2029 else 2029 else
2030 { 2030 {
2031 int len; 2031 int len;
2032 char *p1 = NULL, *p2 = NULL; 2032 char *p1 = NULL, *p2 = NULL, *p3 = NULL;
2033 char *font_allcs = NULL; 2033 char *font_allcs = NULL;
2034 char *font_allfamilies = NULL; 2034 char *font_allfamilies = NULL;
2035 char *font_all = NULL; 2035 char *font_all = NULL;
2036 char *allcs = "*-*-*-*-*-*-*"; 2036 char *allcs = "*-*-*-*-*-*-*";
2037 char *allfamilies = "-*-*-"; 2037 char *allfamilies = "-*-*-";
2038 char *all = "*-*-*-*-"; 2038 char *all = "*-*-*-*-";
2039 char *base;
2039 2040
2040 for (i = 0, p = base_fontname; i < 8; p++) 2041 for (i = 0, p = base_fontname; i < 8; p++)
2041 { 2042 {
@@ -2046,8 +2047,27 @@ xic_create_fontsetname (base_fontname, motif)
2046 p1 = p + 1; 2047 p1 = p + 1;
2047 else if (i == 7) 2048 else if (i == 7)
2048 p2 = p + 1; 2049 p2 = p + 1;
2050 else if (i == 6)
2051 p3 = p + 1;
2049 } 2052 }
2050 } 2053 }
2054 /* If base_fontname specifies ADSTYLE, make it a
2055 wildcard. */
2056 if (*p3 != '*')
2057 {
2058 int diff = (p2 - p3) - 2;
2059
2060 base = alloca (strlen (base_fontname) + 1);
2061 bcopy (base_fontname, base, p3 - base_fontname);
2062 base[p3 - base_fontname] = '*';
2063 base[(p3 - base_fontname) + 1] = '-';
2064 strcpy (base + (p3 - base_fontname) + 2, p2);
2065 p = base + (p - base_fontname) - diff;
2066 p1 = base + (p1 - base_fontname);
2067 p2 = base + (p2 - base_fontname) - diff;
2068 base_fontname = base;
2069 }
2070
2051 /* Build the font spec that matches all charsets. */ 2071 /* Build the font spec that matches all charsets. */
2052 len = p - base_fontname + strlen (allcs) + 1; 2072 len = p - base_fontname + strlen (allcs) + 1;
2053 font_allcs = (char *) alloca (len); 2073 font_allcs = (char *) alloca (len);
@@ -2055,7 +2075,8 @@ xic_create_fontsetname (base_fontname, motif)
2055 bcopy (base_fontname, font_allcs, p - base_fontname); 2075 bcopy (base_fontname, font_allcs, p - base_fontname);
2056 strcat (font_allcs, allcs); 2076 strcat (font_allcs, allcs);
2057 2077
2058 /* Build the font spec that matches all families. */ 2078 /* Build the font spec that matches all families and
2079 add-styles. */
2059 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; 2080 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1;
2060 font_allfamilies = (char *) alloca (len); 2081 font_allfamilies = (char *) alloca (len);
2061 bzero (font_allfamilies, len); 2082 bzero (font_allfamilies, len);
@@ -2122,13 +2143,28 @@ xic_create_xfontset (f, base_fontname)
2122 if (!xfs) 2143 if (!xfs)
2123 { 2144 {
2124 char *fontsetname = xic_create_fontsetname (base_fontname, False); 2145 char *fontsetname = xic_create_fontsetname (base_fontname, False);
2146 char *p0 = fontsetname, *p1;
2125 2147
2126 /* New fontset. */ 2148 /* New fontset. */
2127 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), 2149 /* FONTSETNAME contains a list of font names (specific fonts
2128 fontsetname, &missing_list, 2150 first, general fonts last), but giving that to XCreateFontSet
2129 &missing_count, &def_string); 2151 at once occasionally fails (bug of X?). So, we try to call
2130 if (missing_list) 2152 XCreateFontSet for each fontname. */
2131 XFreeStringList (missing_list); 2153
2154 while (p0)
2155 {
2156 p1 = strchr (p0, ',');
2157 if (p1)
2158 *p1 = '\0';
2159 xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
2160 p0, &missing_list,
2161 &missing_count, &def_string);
2162 if (missing_list)
2163 XFreeStringList (missing_list);
2164 if (xfs)
2165 break;
2166 p0 = p1 ? p1 + 1 : NULL;
2167 }
2132 xfree (fontsetname); 2168 xfree (fontsetname);
2133 } 2169 }
2134 2170