aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa2008-06-10 02:09:15 +0000
committerKenichi Handa2008-06-10 02:09:15 +0000
commit2f286d4fe7bede420aab95fb15ddbc85833763e0 (patch)
tree7a71a56ebae2ebd64489dd419f23178a7fffe95c /src
parenta1a9410256d2618f5f6cbf3683b4e84e43afc64d (diff)
downloademacs-2f286d4fe7bede420aab95fb15ddbc85833763e0.tar.gz
emacs-2f286d4fe7bede420aab95fb15ddbc85833763e0.zip
(font_intern_prop): New arg force_symbol.
(font_parse_xlfd): Adjusted for the change of font_intern_prop. (font_parse_fcname): Likewise. (font_parse_family_registry): Likewise.
Diffstat (limited to 'src')
-rw-r--r--src/font.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/src/font.c b/src/font.c
index 763141a1ffa..04de0cfdf03 100644
--- a/src/font.c
+++ b/src/font.c
@@ -212,13 +212,15 @@ static int num_font_drivers;
212 212
213/* Return a Lispy value of a font property value at STR and LEN bytes. 213/* Return a Lispy value of a font property value at STR and LEN bytes.
214 If STR is "*", it returns nil. 214 If STR is "*", it returns nil.
215 If all characters in STR are digits, it returns an integer. 215 If FORCE_SYMBOL is zero and all characters in STR are digits, it
216 Otherwise, it returns a symbol interned from STR. */ 216 returns an integer. Otherwise, it returns a symbol interned from
217 STR. */
217 218
218Lisp_Object 219Lisp_Object
219font_intern_prop (str, len) 220font_intern_prop (str, len, force_symbol)
220 char *str; 221 char *str;
221 int len; 222 int len;
223 int force_symbol;
222{ 224{
223 int i; 225 int i;
224 Lisp_Object tem; 226 Lisp_Object tem;
@@ -226,7 +228,7 @@ font_intern_prop (str, len)
226 228
227 if (len == 1 && *str == '*') 229 if (len == 1 && *str == '*')
228 return Qnil; 230 return Qnil;
229 if (len >=1 && isdigit (*str)) 231 if (!force_symbol && len >=1 && isdigit (*str))
230 { 232 {
231 for (i = 1; i < len; i++) 233 for (i = 1; i < len; i++)
232 if (! isdigit (str[i])) 234 if (! isdigit (str[i]))
@@ -1040,33 +1042,35 @@ font_parse_xlfd (name, font)
1040 } 1042 }
1041 f[i] = name + len; 1043 f[i] = name + len;
1042 1044
1043#define INTERN_FIELD(N) font_intern_prop (f[N], f[(N) + 1] - 1 - f[N]) 1045#define INTERN_FIELD(N) font_intern_prop (f[N], f[(N) + 1] - 1 - f[N], 0)
1046#define INTERN_FIELD_SYM(N) font_intern_prop (f[N], f[(N) + 1] - 1 - f[N], 1)
1044 1047
1045 if (i == XLFD_LAST_INDEX) 1048 if (i == XLFD_LAST_INDEX)
1046 { 1049 {
1047 /* Fully specified XLFD. */ 1050 /* Fully specified XLFD. */
1048 int pixel_size; 1051 int pixel_size;
1049 1052
1050 ASET (font, FONT_FOUNDRY_INDEX, INTERN_FIELD (XLFD_FOUNDRY_INDEX)); 1053 ASET (font, FONT_FOUNDRY_INDEX, INTERN_FIELD_SYM (XLFD_FOUNDRY_INDEX));
1051 ASET (font, FONT_FAMILY_INDEX, INTERN_FIELD (XLFD_FAMILY_INDEX)); 1054 ASET (font, FONT_FAMILY_INDEX, INTERN_FIELD_SYM (XLFD_FAMILY_INDEX));
1052 for (i = XLFD_WEIGHT_INDEX, j = FONT_WEIGHT_INDEX; 1055 for (i = XLFD_WEIGHT_INDEX, j = FONT_WEIGHT_INDEX;
1053 i <= XLFD_SWIDTH_INDEX; i++, j++) 1056 i <= XLFD_SWIDTH_INDEX; i++, j++)
1054 { 1057 {
1055 val = INTERN_FIELD (i); 1058 val = INTERN_FIELD_SYM (i);
1056 if (! NILP (val)) 1059 if (! NILP (val))
1057 { 1060 {
1058 if ((n = font_style_to_value (j, INTERN_FIELD (i), 0)) < 0) 1061 if ((n = font_style_to_value (j, INTERN_FIELD_SYM (i), 0)) < 0)
1059 return -1; 1062 return -1;
1060 ASET (font, j, make_number (n)); 1063 ASET (font, j, make_number (n));
1061 } 1064 }
1062 } 1065 }
1063 ASET (font, FONT_ADSTYLE_INDEX, INTERN_FIELD (XLFD_ADSTYLE_INDEX)); 1066 ASET (font, FONT_ADSTYLE_INDEX, INTERN_FIELD_SYM (XLFD_ADSTYLE_INDEX));
1064 if (strcmp (f[XLFD_REGISTRY_INDEX], "*-*") == 0) 1067 if (strcmp (f[XLFD_REGISTRY_INDEX], "*-*") == 0)
1065 ASET (font, FONT_REGISTRY_INDEX, Qnil); 1068 ASET (font, FONT_REGISTRY_INDEX, Qnil);
1066 else 1069 else
1067 ASET (font, FONT_REGISTRY_INDEX, 1070 ASET (font, FONT_REGISTRY_INDEX,
1068 font_intern_prop (f[XLFD_REGISTRY_INDEX], 1071 font_intern_prop (f[XLFD_REGISTRY_INDEX],
1069 f[XLFD_LAST_INDEX] - f[XLFD_REGISTRY_INDEX])); 1072 f[XLFD_LAST_INDEX] - f[XLFD_REGISTRY_INDEX],
1073 1));
1070 p = f[XLFD_PIXEL_INDEX]; 1074 p = f[XLFD_PIXEL_INDEX];
1071 if (*p == '[' && (pixel_size = parse_matrix (p)) >= 0) 1075 if (*p == '[' && (pixel_size = parse_matrix (p)) >= 0)
1072 ASET (font, FONT_SIZE_INDEX, make_number (pixel_size)); 1076 ASET (font, FONT_SIZE_INDEX, make_number (pixel_size));
@@ -1103,7 +1107,7 @@ font_parse_xlfd (name, font)
1103 if (*p == '~') 1107 if (*p == '~')
1104 p++; 1108 p++;
1105 ASET (font, FONT_AVGWIDTH_INDEX, 1109 ASET (font, FONT_AVGWIDTH_INDEX,
1106 font_intern_prop (p, f[XLFD_REGISTRY_INDEX] - 1 - p)); 1110 font_intern_prop (p, f[XLFD_REGISTRY_INDEX] - 1 - p, 1));
1107 } 1111 }
1108 else 1112 else
1109 { 1113 {
@@ -1124,7 +1128,7 @@ font_parse_xlfd (name, font)
1124 else if (j + 1 < i) 1128 else if (j + 1 < i)
1125 prop[j] = INTERN_FIELD (j); 1129 prop[j] = INTERN_FIELD (j);
1126 else 1130 else
1127 prop[j] = font_intern_prop (f[j], f[i] - f[j]); 1131 prop[j] = font_intern_prop (f[j], f[i] - f[j], 0);
1128 } 1132 }
1129 if (! wild_card_found) 1133 if (! wild_card_found)
1130 return -1; 1134 return -1;
@@ -1345,7 +1349,7 @@ font_parse_fcname (name, font)
1345 for (p0 = name + 1; *p0 && (*p0 != '-' && *p0 != ':'); p0++) 1349 for (p0 = name + 1; *p0 && (*p0 != '-' && *p0 != ':'); p0++)
1346 if (*p0 == '\\' && p0[1]) 1350 if (*p0 == '\\' && p0[1])
1347 p0++; 1351 p0++;
1348 family = font_intern_prop (name, p0 - name); 1352 family = font_intern_prop (name, p0 - name, 1);
1349 if (*p0 == '-') 1353 if (*p0 == '-')
1350 { 1354 {
1351 if (! isdigit (p0[1])) 1355 if (! isdigit (p0[1]))
@@ -1377,7 +1381,7 @@ font_parse_fcname (name, font)
1377 if (*p1 != '=') 1381 if (*p1 != '=')
1378 { 1382 {
1379 /* Must be an enumerated value. */ 1383 /* Must be an enumerated value. */
1380 val = font_intern_prop (p0 + 1, p1 - p0 - 1); 1384 val = font_intern_prop (p0 + 1, p1 - p0 - 1, 1);
1381 if (memcmp (p0 + 1, "light", 5) == 0 1385 if (memcmp (p0 + 1, "light", 5) == 0
1382 || memcmp (p0 + 1, "medium", 6) == 0 1386 || memcmp (p0 + 1, "medium", 6) == 0
1383 || memcmp (p0 + 1, "demibold", 8) == 0 1387 || memcmp (p0 + 1, "demibold", 8) == 0
@@ -1412,12 +1416,12 @@ font_parse_fcname (name, font)
1412 prop = FONT_SIZE_INDEX; 1416 prop = FONT_SIZE_INDEX;
1413 else 1417 else
1414 { 1418 {
1415 key = font_intern_prop (p0, p1 - p0); 1419 key = font_intern_prop (p0, p1 - p0, 1);
1416 prop = get_font_prop_index (key); 1420 prop = get_font_prop_index (key);
1417 } 1421 }
1418 p0 = p1 + 1; 1422 p0 = p1 + 1;
1419 for (p1 = p0; *p1 && *p1 != ':'; p1++); 1423 for (p1 = p0; *p1 && *p1 != ':'; p1++);
1420 val = font_intern_prop (p0, p1 - p0); 1424 val = font_intern_prop (p0, p1 - p0, 0);
1421 if (! NILP (val)) 1425 if (! NILP (val))
1422 { 1426 {
1423 if (prop >= FONT_FOUNDRY_INDEX && prop < FONT_EXTRA_INDEX) 1427 if (prop >= FONT_FOUNDRY_INDEX && prop < FONT_EXTRA_INDEX)
@@ -1581,10 +1585,10 @@ font_parse_family_registry (family, registry, font_spec)
1581 { 1585 {
1582 if ((*p0 != '*' || p1 - p0 > 1) 1586 if ((*p0 != '*' || p1 - p0 > 1)
1583 && NILP (AREF (font_spec, FONT_FOUNDRY_INDEX))) 1587 && NILP (AREF (font_spec, FONT_FOUNDRY_INDEX)))
1584 Ffont_put (font_spec, QCfoundry, font_intern_prop (p0, p1 - p0)); 1588 Ffont_put (font_spec, QCfoundry, font_intern_prop (p0, p1 - p0, 1));
1585 p1++; 1589 p1++;
1586 len -= p1 - p0; 1590 len -= p1 - p0;
1587 Ffont_put (font_spec, QCfamily, font_intern_prop (p1, len)); 1591 Ffont_put (font_spec, QCfamily, font_intern_prop (p1, len, 1));
1588 } 1592 }
1589 else 1593 else
1590 ASET (font_spec, FONT_FAMILY_INDEX, Fintern (family, Qnil)); 1594 ASET (font_spec, FONT_FAMILY_INDEX, Fintern (family, Qnil));