diff options
| author | Kenichi Handa | 2006-10-21 01:57:34 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2006-10-21 01:57:34 +0000 |
| commit | cd987aaa0a8254a701886b3c32c269b09025c7a1 (patch) | |
| tree | 31fa5fd7d4ad6ba4fb843d1ec4e8cd5c5b57a5fc /src | |
| parent | f5da083ed9884178b88bf2ee81486e4527d0da81 (diff) | |
| download | emacs-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/ChangeLog | 7 | ||||
| -rw-r--r-- | src/xfns.c | 50 |
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 @@ | |||
| 1 | 2006-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 | |||
| 1 | 2006-10-19 Chong Yidong <cyd@stupidchicken.com> | 8 | 2006-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 | ||