diff options
| author | Miles Bader | 2004-11-12 02:53:04 +0000 |
|---|---|---|
| committer | Miles Bader | 2004-11-12 02:53:04 +0000 |
| commit | 8b7e837d9c3266e775142a4865845b3d2a8b60aa (patch) | |
| tree | d1468612ab319b665728b9ebf94dbc0c0d4c20fc /src/fontset.c | |
| parent | d1a3e560ff62e047d9fa8e8b3b1bc1e56e104c26 (diff) | |
| parent | e22c7647c7ff33c846132f3d2877ac436b8b47e6 (diff) | |
| download | emacs-8b7e837d9c3266e775142a4865845b3d2a8b60aa.tar.gz emacs-8b7e837d9c3266e775142a4865845b3d2a8b60aa.zip | |
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-70
Merge from emacs--cvs-trunk--0
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-669
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-678
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-679
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-680
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-688
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-689
Merge from gnus--rel--5.10
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-690
- miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-691
Update from CVS
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-69
Merge from emacs--cvs-trunk--0
* miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-70
- miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-71
Update from CVS
Diffstat (limited to 'src/fontset.c')
| -rw-r--r-- | src/fontset.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/src/fontset.c b/src/fontset.c index 52d3cc555c5..baa56ad3a6f 100644 --- a/src/fontset.c +++ b/src/fontset.c | |||
| @@ -1069,14 +1069,14 @@ fontset_pattern_regexp (pattern) | |||
| 1069 | || strcmp (SDATA (pattern), CACHED_FONTSET_NAME)) | 1069 | || strcmp (SDATA (pattern), CACHED_FONTSET_NAME)) |
| 1070 | { | 1070 | { |
| 1071 | /* We must at first update the cached data. */ | 1071 | /* We must at first update the cached data. */ |
| 1072 | char *regex, *p0, *p1; | 1072 | unsigned char *regex, *p0, *p1; |
| 1073 | int ndashes = 0, nstars = 0; | 1073 | int ndashes = 0, nstars = 0; |
| 1074 | 1074 | ||
| 1075 | for (p0 = SDATA (pattern); *p0; p0++) | 1075 | for (p0 = SDATA (pattern); *p0; p0++) |
| 1076 | { | 1076 | { |
| 1077 | if (*p0 == '-') | 1077 | if (*p0 == '-') |
| 1078 | ndashes++; | 1078 | ndashes++; |
| 1079 | else if (*p0 == '*' && p0 > SDATA (pattern) && p0[-1] != '\\') | 1079 | else if (*p0 == '*') |
| 1080 | nstars++; | 1080 | nstars++; |
| 1081 | } | 1081 | } |
| 1082 | 1082 | ||
| @@ -1084,14 +1084,14 @@ fontset_pattern_regexp (pattern) | |||
| 1084 | we convert "*" to "[^-]*" which is much faster in regular | 1084 | we convert "*" to "[^-]*" which is much faster in regular |
| 1085 | expression matching. */ | 1085 | expression matching. */ |
| 1086 | if (ndashes < 14) | 1086 | if (ndashes < 14) |
| 1087 | p1 = regex = (char *) alloca (SBYTES (pattern) + 2 * nstars + 1); | 1087 | p1 = regex = (unsigned char *) alloca (SBYTES (pattern) + 2 * nstars + 1); |
| 1088 | else | 1088 | else |
| 1089 | p1 = regex = (char *) alloca (SBYTES (pattern) + 5 * nstars + 1); | 1089 | p1 = regex = (unsigned char *) alloca (SBYTES (pattern) + 5 * nstars + 1); |
| 1090 | 1090 | ||
| 1091 | *p1++ = '^'; | 1091 | *p1++ = '^'; |
| 1092 | for (p0 = (char *) SDATA (pattern); *p0; p0++) | 1092 | for (p0 = SDATA (pattern); *p0; p0++) |
| 1093 | { | 1093 | { |
| 1094 | if (*p0 == '*' && p0 > SDATA (pattern) && p0[-1] != '\\') | 1094 | if (*p0 == '*') |
| 1095 | { | 1095 | { |
| 1096 | if (ndashes < 14) | 1096 | if (ndashes < 14) |
| 1097 | *p1++ = '.'; | 1097 | *p1++ = '.'; |
| @@ -1115,31 +1115,35 @@ fontset_pattern_regexp (pattern) | |||
| 1115 | } | 1115 | } |
| 1116 | 1116 | ||
| 1117 | /* Return ID of the base fontset named NAME. If there's no such | 1117 | /* Return ID of the base fontset named NAME. If there's no such |
| 1118 | fontset, return -1. */ | 1118 | fontset, return -1. NAME_PATTERN specifies how to treat NAME as this: |
| 1119 | 0: pattern containing '*' and '?' as wildcards | ||
| 1120 | 1: regular expression | ||
| 1121 | 2: literal fontset name | ||
| 1122 | */ | ||
| 1119 | 1123 | ||
| 1120 | int | 1124 | int |
| 1121 | fs_query_fontset (name, regexpp) | 1125 | fs_query_fontset (name, name_pattern) |
| 1122 | Lisp_Object name; | 1126 | Lisp_Object name; |
| 1123 | int regexpp; | 1127 | int name_pattern; |
| 1124 | { | 1128 | { |
| 1125 | Lisp_Object tem; | 1129 | Lisp_Object tem; |
| 1126 | int i; | 1130 | int i; |
| 1127 | 1131 | ||
| 1128 | name = Fdowncase (name); | 1132 | name = Fdowncase (name); |
| 1129 | if (!regexpp) | 1133 | if (name_pattern != 1) |
| 1130 | { | 1134 | { |
| 1131 | tem = Frassoc (name, Vfontset_alias_alist); | 1135 | tem = Frassoc (name, Vfontset_alias_alist); |
| 1132 | if (NILP (tem)) | 1136 | if (NILP (tem)) |
| 1133 | tem = Fassoc (name, Vfontset_alias_alist); | 1137 | tem = Fassoc (name, Vfontset_alias_alist); |
| 1134 | if (CONSP (tem) && STRINGP (XCAR (tem))) | 1138 | if (CONSP (tem) && STRINGP (XCAR (tem))) |
| 1135 | name = XCAR (tem); | 1139 | name = XCAR (tem); |
| 1136 | else | 1140 | else if (name_pattern == 0) |
| 1137 | { | 1141 | { |
| 1138 | tem = fontset_pattern_regexp (name); | 1142 | tem = fontset_pattern_regexp (name); |
| 1139 | if (STRINGP (tem)) | 1143 | if (STRINGP (tem)) |
| 1140 | { | 1144 | { |
| 1141 | name = tem; | 1145 | name = tem; |
| 1142 | regexpp = 1; | 1146 | name_pattern = 1; |
| 1143 | } | 1147 | } |
| 1144 | } | 1148 | } |
| 1145 | } | 1149 | } |
| @@ -1154,7 +1158,7 @@ fs_query_fontset (name, regexpp) | |||
| 1154 | continue; | 1158 | continue; |
| 1155 | 1159 | ||
| 1156 | this_name = FONTSET_NAME (fontset); | 1160 | this_name = FONTSET_NAME (fontset); |
| 1157 | if (regexpp | 1161 | if (name_pattern == 1 |
| 1158 | ? fast_string_match (name, this_name) >= 0 | 1162 | ? fast_string_match (name, this_name) >= 0 |
| 1159 | : !strcmp (SDATA (name), SDATA (this_name))) | 1163 | : !strcmp (SDATA (name), SDATA (this_name))) |
| 1160 | return i; | 1164 | return i; |
| @@ -1284,7 +1288,11 @@ check_fontset_name (name) | |||
| 1284 | return Vdefault_fontset; | 1288 | return Vdefault_fontset; |
| 1285 | 1289 | ||
| 1286 | CHECK_STRING (name); | 1290 | CHECK_STRING (name); |
| 1287 | id = fs_query_fontset (name, 0); | 1291 | /* First try NAME as literal. */ |
| 1292 | id = fs_query_fontset (name, 2); | ||
| 1293 | if (id < 0) | ||
| 1294 | /* For backward compatibility, try again NAME as pattern. */ | ||
| 1295 | id = fs_query_fontset (name, 0); | ||
| 1288 | if (id < 0) | 1296 | if (id < 0) |
| 1289 | error ("Fontset `%s' does not exist", SDATA (name)); | 1297 | error ("Fontset `%s' does not exist", SDATA (name)); |
| 1290 | return FONTSET_FROM_ID (id); | 1298 | return FONTSET_FROM_ID (id); |