aboutsummaryrefslogtreecommitdiffstats
path: root/src/fontset.c
diff options
context:
space:
mode:
authorMiles Bader2004-11-12 02:53:04 +0000
committerMiles Bader2004-11-12 02:53:04 +0000
commit8b7e837d9c3266e775142a4865845b3d2a8b60aa (patch)
treed1468612ab319b665728b9ebf94dbc0c0d4c20fc /src/fontset.c
parentd1a3e560ff62e047d9fa8e8b3b1bc1e56e104c26 (diff)
parente22c7647c7ff33c846132f3d2877ac436b8b47e6 (diff)
downloademacs-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.c38
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
1120int 1124int
1121fs_query_fontset (name, regexpp) 1125fs_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);