aboutsummaryrefslogtreecommitdiffstats
path: root/src/font.c
diff options
context:
space:
mode:
authorKenichi Handa2006-06-09 02:14:31 +0000
committerKenichi Handa2006-06-09 02:14:31 +0000
commit1bb1d99b434ea422c401fa8e71d06a7db065fafb (patch)
tree0b858498a12768171a9ee238cde29524c00d13ae /src/font.c
parent3223c4494d9185e9b4899277940ed7be3bb4a34e (diff)
downloademacs-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/font.c')
-rw-r--r--src/font.c69
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
50Lisp_Object Qfontp; 50Lisp_Object Qfontp;
51 51
52/* Important character set symbols. */
53Lisp_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)
582int 585int
583font_unparse_xlfd (font, pixel_size, name, nbytes) 586font_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");