diff options
| author | Kenichi Handa | 2008-06-10 02:09:15 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2008-06-10 02:09:15 +0000 |
| commit | 2f286d4fe7bede420aab95fb15ddbc85833763e0 (patch) | |
| tree | 7a71a56ebae2ebd64489dd419f23178a7fffe95c /src | |
| parent | a1a9410256d2618f5f6cbf3683b4e84e43afc64d (diff) | |
| download | emacs-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.c | 42 |
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 | ||
| 218 | Lisp_Object | 219 | Lisp_Object |
| 219 | font_intern_prop (str, len) | 220 | font_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)); |