diff options
| author | Chong Yidong | 2008-06-17 16:04:47 +0000 |
|---|---|---|
| committer | Chong Yidong | 2008-06-17 16:04:47 +0000 |
| commit | 59facb788f308d763e80387d5ecbad79456b9496 (patch) | |
| tree | fb83b3902830066aa65f1b94c30d4dbeae96a8c9 /src | |
| parent | 1578da31966f18cbd78389bd74fc022b2c62221d (diff) | |
| download | emacs-59facb788f308d763e80387d5ecbad79456b9496.tar.gz emacs-59facb788f308d763e80387d5ecbad79456b9496.zip | |
(font_parse_fcname): For known key symbols, intern using correct
symbol name.
Diffstat (limited to 'src')
| -rw-r--r-- | src/font.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/font.c b/src/font.c index 962e8a308f2..ff97af063a7 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -1359,8 +1359,7 @@ font_parse_fcname (name, font) | |||
| 1359 | p++; | 1359 | p++; |
| 1360 | else if (*p == ':') | 1360 | else if (*p == ':') |
| 1361 | { | 1361 | { |
| 1362 | family_end = p; | 1362 | props_beg = family_end = p; |
| 1363 | props_beg = p + 1; | ||
| 1364 | break; | 1363 | break; |
| 1365 | } | 1364 | } |
| 1366 | else if (*p == '-') | 1365 | else if (*p == '-') |
| @@ -1400,7 +1399,7 @@ font_parse_fcname (name, font) | |||
| 1400 | double point_size = strtod (size_beg, &size_end); | 1399 | double point_size = strtod (size_beg, &size_end); |
| 1401 | ASET (font, FONT_SIZE_INDEX, make_float (point_size)); | 1400 | ASET (font, FONT_SIZE_INDEX, make_float (point_size)); |
| 1402 | if (*size_end == ':' && size_end[1]) | 1401 | if (*size_end == ':' && size_end[1]) |
| 1403 | props_beg = size_end + 1; | 1402 | props_beg = size_end; |
| 1404 | } | 1403 | } |
| 1405 | if (props_beg) | 1404 | if (props_beg) |
| 1406 | { | 1405 | { |
| @@ -1408,22 +1407,21 @@ font_parse_fcname (name, font) | |||
| 1408 | extra, copy unknown ones to COPY. It is stored in extra slot by | 1407 | extra, copy unknown ones to COPY. It is stored in extra slot by |
| 1409 | the key QCfc_unknown_spec. */ | 1408 | the key QCfc_unknown_spec. */ |
| 1410 | char *copy_start, *copy; | 1409 | char *copy_start, *copy; |
| 1410 | Lisp_Object val; | ||
| 1411 | 1411 | ||
| 1412 | copy_start = copy = alloca (name + len - props_beg + 2); | 1412 | copy_start = copy = alloca (name + len - props_beg + 2); |
| 1413 | if (! copy) | 1413 | if (! copy) |
| 1414 | return -1; | 1414 | return -1; |
| 1415 | 1415 | ||
| 1416 | p = props_beg; | 1416 | for (p = props_beg; *p; p = q) |
| 1417 | while (*p) | ||
| 1418 | { | 1417 | { |
| 1419 | Lisp_Object val; | ||
| 1420 | int word_len, prop; | ||
| 1421 | |||
| 1422 | for (q = p + 1; *q && *q != '=' && *q != ':'; q++); | 1418 | for (q = p + 1; *q && *q != '=' && *q != ':'; q++); |
| 1423 | word_len = q - p; | ||
| 1424 | if (*q != '=') | 1419 | if (*q != '=') |
| 1425 | { | 1420 | { |
| 1426 | /* Must be an enumerated value. */ | 1421 | /* Must be an enumerated value. */ |
| 1422 | int word_len; | ||
| 1423 | p = p + 1; | ||
| 1424 | word_len = q - p; | ||
| 1427 | val = font_intern_prop (p, q - p, 1); | 1425 | val = font_intern_prop (p, q - p, 1); |
| 1428 | 1426 | ||
| 1429 | #define PROP_MATCH(STR,N) ((word_len == N) && memcmp (p, STR, N) == 0) | 1427 | #define PROP_MATCH(STR,N) ((word_len == N) && memcmp (p, STR, N) == 0) |
| @@ -1456,12 +1454,14 @@ font_parse_fcname (name, font) | |||
| 1456 | } | 1454 | } |
| 1457 | #undef PROP_MATCH | 1455 | #undef PROP_MATCH |
| 1458 | } | 1456 | } |
| 1459 | else /* KEY=VAL pairs */ | 1457 | else |
| 1460 | { | 1458 | { |
| 1459 | /* KEY=VAL pairs */ | ||
| 1461 | Lisp_Object key; | 1460 | Lisp_Object key; |
| 1462 | char *keyhead = p; | 1461 | char *keyhead = p; |
| 1462 | int prop; | ||
| 1463 | 1463 | ||
| 1464 | if (word_len == 9 && memcmp (p, "pixelsize=", 10) == 0) | 1464 | if (q - p == 10 && memcmp (p + 1, "pixelsize", 9) == 0) |
| 1465 | prop = FONT_SIZE_INDEX; | 1465 | prop = FONT_SIZE_INDEX; |
| 1466 | else | 1466 | else |
| 1467 | { | 1467 | { |
| @@ -1483,13 +1483,11 @@ font_parse_fcname (name, font) | |||
| 1483 | Ffont_put (font, key, val); | 1483 | Ffont_put (font, key, val); |
| 1484 | else | 1484 | else |
| 1485 | { | 1485 | { |
| 1486 | *copy++ = ':'; | ||
| 1487 | bcopy (keyhead, copy, q - keyhead); | 1486 | bcopy (keyhead, copy, q - keyhead); |
| 1488 | copy += q - keyhead; | 1487 | copy += q - keyhead; |
| 1489 | } | 1488 | } |
| 1490 | } | 1489 | } |
| 1491 | } | 1490 | } |
| 1492 | p = *q ? q + 1 : q; | ||
| 1493 | } | 1491 | } |
| 1494 | if (copy_start != copy) | 1492 | if (copy_start != copy) |
| 1495 | font_put_extra (font, QCfc_unknown_spec, | 1493 | font_put_extra (font, QCfc_unknown_spec, |