diff options
| author | Kenichi Handa | 2006-06-09 02:14:31 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2006-06-09 02:14:31 +0000 |
| commit | 1bb1d99b434ea422c401fa8e71d06a7db065fafb (patch) | |
| tree | 0b858498a12768171a9ee238cde29524c00d13ae /src | |
| parent | 3223c4494d9185e9b4899277940ed7be3bb4a34e (diff) | |
| download | emacs-1bb1d99b434ea422c401fa8e71d06a7db065fafb.tar.gz emacs-1bb1d99b434ea422c401fa8e71d06a7db065fafb.zip | |
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
ftfont.c.
(font_unparse_xlfd): Fix argument type declaration. Append "*" if
registry doesn't specify encoding part.
(font_find_for_lface): Pay attention to LFACE_FONT_INDEX.
(font_open_by_name): At first try parsing the name.
(syms_of_font): Declare Qiso8859_1, Qiso10646_1, and Qunicode_bmp
as Lisp symbols.
Diffstat (limited to 'src')
| -rw-r--r-- | src/font.c | 69 |
1 files changed, 55 insertions, 14 deletions
diff --git a/src/font.c b/src/font.c index ce6d26e5de1..9c8f37c01f9 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -49,6 +49,9 @@ int enable_font_backend; | |||
| 49 | 49 | ||
| 50 | Lisp_Object Qfontp; | 50 | Lisp_Object Qfontp; |
| 51 | 51 | ||
| 52 | /* Important character set symbols. */ | ||
| 53 | Lisp_Object Qiso8859_1, Qiso10646_1, Qunicode_bmp; | ||
| 54 | |||
| 52 | /* Like CHECK_FONT_SPEC but also validate properties of the font-spec, | 55 | /* Like CHECK_FONT_SPEC but also validate properties of the font-spec, |
| 53 | and set X to the validated result. */ | 56 | and set X to the validated result. */ |
| 54 | 57 | ||
| @@ -582,6 +585,7 @@ font_parse_xlfd (name, font, merge) | |||
| 582 | int | 585 | int |
| 583 | font_unparse_xlfd (font, pixel_size, name, nbytes) | 586 | font_unparse_xlfd (font, pixel_size, name, nbytes) |
| 584 | Lisp_Object font; | 587 | Lisp_Object font; |
| 588 | int pixel_size; | ||
| 585 | char *name; | 589 | char *name; |
| 586 | int nbytes; | 590 | int nbytes; |
| 587 | { | 591 | { |
| @@ -601,12 +605,35 @@ font_unparse_xlfd (font, pixel_size, name, nbytes) | |||
| 601 | j = XLFD_REGISTRY_INDEX; | 605 | j = XLFD_REGISTRY_INDEX; |
| 602 | val = AREF (font, i); | 606 | val = AREF (font, i); |
| 603 | if (NILP (val)) | 607 | if (NILP (val)) |
| 604 | f[j] = "*", len += 2; | 608 | { |
| 609 | if (j == XLFD_REGISTRY_INDEX) | ||
| 610 | f[j] = "*-*", len += 4; | ||
| 611 | else | ||
| 612 | f[j] = "*", len += 2; | ||
| 613 | } | ||
| 605 | else | 614 | else |
| 606 | { | 615 | { |
| 607 | if (SYMBOLP (val)) | 616 | if (SYMBOLP (val)) |
| 608 | val = SYMBOL_NAME (val); | 617 | val = SYMBOL_NAME (val); |
| 609 | f[j] = (char *) SDATA (val), len += SBYTES (val) + 1; | 618 | if (j == XLFD_REGISTRY_INDEX |
| 619 | && ! strchr ((char *) SDATA (val), '-')) | ||
| 620 | { | ||
| 621 | /* Change "jisx0208*" and "jisx0208" to "jisx0208*-*". */ | ||
| 622 | if (SDATA (val)[SBYTES (val) - 1] == '*') | ||
| 623 | { | ||
| 624 | f[j] = alloca (SBYTES (val) + 3); | ||
| 625 | sprintf (f[j], "%s-*", SDATA (val)); | ||
| 626 | len += SBYTES (val) + 3; | ||
| 627 | } | ||
| 628 | else | ||
| 629 | { | ||
| 630 | f[j] = alloca (SBYTES (val) + 4); | ||
| 631 | sprintf (f[j], "%s*-*", SDATA (val)); | ||
| 632 | len += SBYTES (val) + 4; | ||
| 633 | } | ||
| 634 | } | ||
| 635 | else | ||
| 636 | f[j] = (char *) SDATA (val), len += SBYTES (val) + 1; | ||
| 610 | } | 637 | } |
| 611 | } | 638 | } |
| 612 | 639 | ||
| @@ -1677,12 +1704,12 @@ font_find_for_lface (f, lface, spec) | |||
| 1677 | Lisp_Object *lface; | 1704 | Lisp_Object *lface; |
| 1678 | Lisp_Object spec; | 1705 | Lisp_Object spec; |
| 1679 | { | 1706 | { |
| 1680 | Lisp_Object attrs[LFACE_SLANT_INDEX + 1]; | 1707 | Lisp_Object attrs[LFACE_FONT_INDEX + 1]; |
| 1681 | Lisp_Object frame, val, entities; | 1708 | Lisp_Object frame, val, entities; |
| 1682 | int i; | 1709 | int i; |
| 1683 | unsigned char try_unspecified[FONT_SPEC_MAX]; | 1710 | unsigned char try_unspecified[FONT_SPEC_MAX]; |
| 1684 | 1711 | ||
| 1685 | for (i = 0; i <= LFACE_SLANT_INDEX; i++) | 1712 | for (i = 0; i <= LFACE_FONT_INDEX; i++) |
| 1686 | { | 1713 | { |
| 1687 | val = lface[i]; | 1714 | val = lface[i]; |
| 1688 | if (EQ (val, Qunspecified) || EQ (val, Qignore_defface)) | 1715 | if (EQ (val, Qunspecified) || EQ (val, Qignore_defface)) |
| @@ -1855,22 +1882,32 @@ font_open_by_name (f, name) | |||
| 1855 | char *name; | 1882 | char *name; |
| 1856 | { | 1883 | { |
| 1857 | Lisp_Object spec = Ffont_spec (0, NULL); | 1884 | Lisp_Object spec = Ffont_spec (0, NULL); |
| 1858 | Lisp_Object entities = Qnil; | ||
| 1859 | Lisp_Object frame; | 1885 | Lisp_Object frame; |
| 1860 | int pixel_size; | 1886 | struct font_driver_list *dlist; |
| 1861 | 1887 | ||
| 1862 | XSETFRAME (frame, f); | 1888 | XSETFRAME (frame, f); |
| 1863 | |||
| 1864 | ASET (spec, FONT_EXTRA_INDEX, | 1889 | ASET (spec, FONT_EXTRA_INDEX, |
| 1865 | Fcons (Fcons (QCname, make_unibyte_string (name, strlen (name))), | 1890 | Fcons (Fcons (QCname, make_unibyte_string (name, strlen (name))), |
| 1866 | Qnil)); | 1891 | Qnil)); |
| 1867 | entities = font_list_entities (frame, spec); | 1892 | |
| 1868 | if (ASIZE (entities) == 0) | 1893 | for (dlist = f->font_driver_list; dlist; dlist = dlist->next) |
| 1869 | return Qnil; | 1894 | if (dlist->driver->parse_name |
| 1870 | pixel_size = XINT (AREF (AREF (entities, 0), FONT_SIZE_INDEX)); | 1895 | && dlist->driver->parse_name (f, name, spec) >= 0) |
| 1871 | if (pixel_size == 0) | 1896 | { |
| 1872 | pixel_size = 12; | 1897 | Lisp_Object entities = font_list_entities (frame, spec); |
| 1873 | return font_open_entity (f, AREF (entities, 0), pixel_size); | 1898 | Lisp_Object font_object; |
| 1899 | int pixel_size; | ||
| 1900 | |||
| 1901 | if (ASIZE (entities) == 0) | ||
| 1902 | continue; | ||
| 1903 | pixel_size = XINT (AREF (AREF (entities, 0), FONT_SIZE_INDEX)); | ||
| 1904 | if (pixel_size == 0 && INTEGERP (AREF (spec, FONT_SIZE_INDEX))) | ||
| 1905 | pixel_size = XINT (AREF (spec, FONT_SIZE_INDEX)); | ||
| 1906 | font_object = font_open_entity (f, AREF (entities, 0), pixel_size); | ||
| 1907 | if (! NILP (font_object)) | ||
| 1908 | return font_object; | ||
| 1909 | } | ||
| 1910 | return Qnil; | ||
| 1874 | } | 1911 | } |
| 1875 | 1912 | ||
| 1876 | 1913 | ||
| @@ -2503,6 +2540,10 @@ syms_of_font () | |||
| 2503 | 2540 | ||
| 2504 | DEFSYM (Qfontp, "fontp"); | 2541 | DEFSYM (Qfontp, "fontp"); |
| 2505 | 2542 | ||
| 2543 | DEFSYM (Qiso8859_1, "iso8859-1"); | ||
| 2544 | DEFSYM (Qiso10646_1, "iso10646-1"); | ||
| 2545 | DEFSYM (Qunicode_bmp, "unicode-bmp"); | ||
| 2546 | |||
| 2506 | DEFSYM (QCotf, ":otf"); | 2547 | DEFSYM (QCotf, ":otf"); |
| 2507 | DEFSYM (QClanguage, ":language"); | 2548 | DEFSYM (QClanguage, ":language"); |
| 2508 | DEFSYM (QCscript, ":script"); | 2549 | DEFSYM (QCscript, ":script"); |