aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa2006-10-21 01:57:34 +0000
committerKenichi Handa2006-10-21 01:57:34 +0000
commitcd987aaa0a8254a701886b3c32c269b09025c7a1 (patch)
tree31fa5fd7d4ad6ba4fb843d1ec4e8cd5c5b57a5fc /src
parentf5da083ed9884178b88bf2ee81486e4527d0da81 (diff)
downloademacs-cd987aaa0a8254a701886b3c32c269b09025c7a1.tar.gz
emacs-cd987aaa0a8254a701886b3c32c269b09025c7a1.zip
(xic_create_fontsetname): If ADSTYLE field is not a wild
card, change it to "*". (xic_create_xfontset): Call XCreateFontSet for each single fontname in fontsetname.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/xfns.c50
2 files changed, 50 insertions, 7 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 0f098a07c8a..930c2a44d4d 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
12006-10-21 Kenichi Handa <handa@m17n.org>
2
3 * xfns.c (xic_create_fontsetname): If ADSTYLE field is not a wild
4 card, change it to "*".
5 (xic_create_xfontset): Call XCreateFontSet for each single
6 fontname in fontsetname.
7
12006-10-19 Chong Yidong <cyd@stupidchicken.com> 82006-10-19 Chong Yidong <cyd@stupidchicken.com>
2 9
3 * callint.c (callint_message): Convert to a Lisp string. 10 * callint.c (callint_message): Convert to a Lisp string.
diff --git a/src/xfns.c b/src/xfns.c
index 3afaf0ea20a..9f656d4cd7b 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -2020,13 +2020,14 @@ xic_create_fontsetname (base_fontname, motif)
2020 else 2020 else
2021 { 2021 {
2022 int len; 2022 int len;
2023 char *p1 = NULL, *p2 = NULL; 2023 char *p1 = NULL, *p2 = NULL, *p3 = NULL;
2024 char *font_allcs = NULL; 2024 char *font_allcs = NULL;
2025 char *font_allfamilies = NULL; 2025 char *font_allfamilies = NULL;
2026 char *font_all = NULL; 2026 char *font_all = NULL;
2027 char *allcs = "*-*-*-*-*-*-*"; 2027 char *allcs = "*-*-*-*-*-*-*";
2028 char *allfamilies = "-*-*-"; 2028 char *allfamilies = "-*-*-";
2029 char *all = "*-*-*-*-"; 2029 char *all = "*-*-*-*-";
2030 char *base;
2030 2031
2031 for (i = 0, p = base_fontname; i < 8; p++) 2032 for (i = 0, p = base_fontname; i < 8; p++)
2032 { 2033 {
@@ -2037,8 +2038,27 @@ xic_create_fontsetname (base_fontname, motif)
2037 p1 = p + 1; 2038 p1 = p + 1;
2038 else if (i == 7) 2039 else if (i == 7)
2039 p2 = p + 1; 2040 p2 = p + 1;
2041 else if (i == 6)
2042 p3 = p + 1;
2040 } 2043 }
2041 } 2044 }
2045 /* If base_fontname specifies ADSTYLE, make it a
2046 wildcard. */
2047 if (*p3 != '*')
2048 {
2049 int diff = (p2 - p3) - 2;
2050
2051 base = alloca (strlen (base_fontname) + 1);
2052 bcopy (base_fontname, base, p3 - base_fontname);
2053 base[p3 - base_fontname] = '*';
2054 base[(p3 - base_fontname) + 1] = '-';
2055 strcpy (base + (p3 - base_fontname) + 2, p2);
2056 p = base + (p - base_fontname) - diff;
2057 p1 = base + (p1 - base_fontname);
2058 p2 = base + (p2 - base_fontname) - diff;
2059 base_fontname = base;
2060 }
2061
2042 /* Build the font spec that matches all charsets. */ 2062 /* Build the font spec that matches all charsets. */
2043 len = p - base_fontname + strlen (allcs) + 1; 2063 len = p - base_fontname + strlen (allcs) + 1;
2044 font_allcs = (char *) alloca (len); 2064 font_allcs = (char *) alloca (len);
@@ -2046,7 +2066,8 @@ xic_create_fontsetname (base_fontname, motif)
2046 bcopy (base_fontname, font_allcs, p - base_fontname); 2066 bcopy (base_fontname, font_allcs, p - base_fontname);
2047 strcat (font_allcs, allcs); 2067 strcat (font_allcs, allcs);
2048 2068
2049 /* Build the font spec that matches all families. */ 2069 /* Build the font spec that matches all families and
2070 add-styles. */
2050 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; 2071 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1;
2051 font_allfamilies = (char *) alloca (len); 2072 font_allfamilies = (char *) alloca (len);
2052 bzero (font_allfamilies, len); 2073 bzero (font_allfamilies, len);
@@ -2113,13 +2134,28 @@ xic_create_xfontset (f, base_fontname)
2113 if (!xfs) 2134 if (!xfs)
2114 { 2135 {
2115 char *fontsetname = xic_create_fontsetname (base_fontname, False); 2136 char *fontsetname = xic_create_fontsetname (base_fontname, False);
2137 char *p0 = fontsetname, *p1;
2116 2138
2117 /* New fontset. */ 2139 /* New fontset. */
2118 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), 2140 /* FONTSETNAME contains a list of font names (specific fonts
2119 fontsetname, &missing_list, 2141 first, general fonts last), but giving that to XCreateFontSet
2120 &missing_count, &def_string); 2142 at once occasionally fails (bug of X?). So, we try to call
2121 if (missing_list) 2143 XCreateFontSet for each fontname. */
2122 XFreeStringList (missing_list); 2144
2145 while (p0)
2146 {
2147 p1 = strchr (p0, ',');
2148 if (p1)
2149 *p1 = '\0';
2150 xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
2151 p0, &missing_list,
2152 &missing_count, &def_string);
2153 if (missing_list)
2154 XFreeStringList (missing_list);
2155 if (xfs)
2156 break;
2157 p0 = p1 ? p1 + 1 : NULL;
2158 }
2123 xfree (fontsetname); 2159 xfree (fontsetname);
2124 } 2160 }
2125 2161