summaryrefslogtreecommitdiff
path: root/src/font.c
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2006-06-09 02:14:31 +0000
committerKenichi Handa <handa@m17n.org>2006-06-09 02:14:31 +0000
commit1bb1d99b434ea422c401fa8e71d06a7db065fafb (patch)
tree0b858498a12768171a9ee238cde29524c00d13ae /src/font.c
parent3223c4494d9185e9b4899277940ed7be3bb4a34e (diff)
downloademacs-1bb1d99b434ea422c401fa8e71d06a7db065fafb.tar.gz
emacs-1bb1d99b434ea422c401fa8e71d06a7db065fafb.tar.bz2
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;
Lisp_Object Qfontp;
+/* Important character set symbols. */
+Lisp_Object Qiso8859_1, Qiso10646_1, Qunicode_bmp;
+
/* Like CHECK_FONT_SPEC but also validate properties of the font-spec,
and set X to the validated result. */
@@ -582,6 +585,7 @@ font_parse_xlfd (name, font, merge)
int
font_unparse_xlfd (font, pixel_size, name, nbytes)
Lisp_Object font;
+ int pixel_size;
char *name;
int nbytes;
{
@@ -601,12 +605,35 @@ font_unparse_xlfd (font, pixel_size, name, nbytes)
j = XLFD_REGISTRY_INDEX;
val = AREF (font, i);
if (NILP (val))
- f[j] = "*", len += 2;
+ {
+ if (j == XLFD_REGISTRY_INDEX)
+ f[j] = "*-*", len += 4;
+ else
+ f[j] = "*", len += 2;
+ }
else
{
if (SYMBOLP (val))
val = SYMBOL_NAME (val);
- f[j] = (char *) SDATA (val), len += SBYTES (val) + 1;
+ if (j == XLFD_REGISTRY_INDEX
+ && ! strchr ((char *) SDATA (val), '-'))
+ {
+ /* Change "jisx0208*" and "jisx0208" to "jisx0208*-*". */
+ if (SDATA (val)[SBYTES (val) - 1] == '*')
+ {
+ f[j] = alloca (SBYTES (val) + 3);
+ sprintf (f[j], "%s-*", SDATA (val));
+ len += SBYTES (val) + 3;
+ }
+ else
+ {
+ f[j] = alloca (SBYTES (val) + 4);
+ sprintf (f[j], "%s*-*", SDATA (val));
+ len += SBYTES (val) + 4;
+ }
+ }
+ else
+ f[j] = (char *) SDATA (val), len += SBYTES (val) + 1;
}
}
@@ -1677,12 +1704,12 @@ font_find_for_lface (f, lface, spec)
Lisp_Object *lface;
Lisp_Object spec;
{
- Lisp_Object attrs[LFACE_SLANT_INDEX + 1];
+ Lisp_Object attrs[LFACE_FONT_INDEX + 1];
Lisp_Object frame, val, entities;
int i;
unsigned char try_unspecified[FONT_SPEC_MAX];
- for (i = 0; i <= LFACE_SLANT_INDEX; i++)
+ for (i = 0; i <= LFACE_FONT_INDEX; i++)
{
val = lface[i];
if (EQ (val, Qunspecified) || EQ (val, Qignore_defface))
@@ -1855,22 +1882,32 @@ font_open_by_name (f, name)
char *name;
{
Lisp_Object spec = Ffont_spec (0, NULL);
- Lisp_Object entities = Qnil;
Lisp_Object frame;
- int pixel_size;
+ struct font_driver_list *dlist;
XSETFRAME (frame, f);
-
ASET (spec, FONT_EXTRA_INDEX,
Fcons (Fcons (QCname, make_unibyte_string (name, strlen (name))),
Qnil));
- entities = font_list_entities (frame, spec);
- if (ASIZE (entities) == 0)
- return Qnil;
- pixel_size = XINT (AREF (AREF (entities, 0), FONT_SIZE_INDEX));
- if (pixel_size == 0)
- pixel_size = 12;
- return font_open_entity (f, AREF (entities, 0), pixel_size);
+
+ for (dlist = f->font_driver_list; dlist; dlist = dlist->next)
+ if (dlist->driver->parse_name
+ && dlist->driver->parse_name (f, name, spec) >= 0)
+ {
+ Lisp_Object entities = font_list_entities (frame, spec);
+ Lisp_Object font_object;
+ int pixel_size;
+
+ if (ASIZE (entities) == 0)
+ continue;
+ pixel_size = XINT (AREF (AREF (entities, 0), FONT_SIZE_INDEX));
+ if (pixel_size == 0 && INTEGERP (AREF (spec, FONT_SIZE_INDEX)))
+ pixel_size = XINT (AREF (spec, FONT_SIZE_INDEX));
+ font_object = font_open_entity (f, AREF (entities, 0), pixel_size);
+ if (! NILP (font_object))
+ return font_object;
+ }
+ return Qnil;
}
@@ -2503,6 +2540,10 @@ syms_of_font ()
DEFSYM (Qfontp, "fontp");
+ DEFSYM (Qiso8859_1, "iso8859-1");
+ DEFSYM (Qiso10646_1, "iso10646-1");
+ DEFSYM (Qunicode_bmp, "unicode-bmp");
+
DEFSYM (QCotf, ":otf");
DEFSYM (QClanguage, ":language");
DEFSYM (QCscript, ":script");