[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/fontset.c [emacs-unicode-2]
From: |
Kenichi Handa |
Subject: |
[Emacs-diffs] Changes to emacs/src/fontset.c [emacs-unicode-2] |
Date: |
Wed, 29 Oct 2003 06:51:43 -0500 |
Index: emacs/src/fontset.c
diff -c emacs/src/fontset.c:1.77.4.4 emacs/src/fontset.c:1.77.4.5
*** emacs/src/fontset.c:1.77.4.4 Thu Oct 23 20:44:48 2003
--- emacs/src/fontset.c Wed Oct 29 06:51:42 2003
***************
*** 627,633 ****
try_default:
if (! EQ (base_fontset, Vdefault_fontset))
! return fontset_face (FONTSET_FALLBACK (fontset), c, face);
/* We have tried all the fonts for C, but none of them can be opened
nor can display C. */
--- 627,638 ----
try_default:
if (! EQ (base_fontset, Vdefault_fontset))
! {
! if (NILP (FONTSET_FALLBACK (fontset)))
! FONTSET_FALLBACK (fontset)
! = make_fontset (FONTSET_FRAME (fontset), Qnil, Vdefault_fontset);
! return fontset_face (FONTSET_FALLBACK (fontset), c, face);
! }
/* We have tried all the fonts for C, but none of them can be opened
nor can display C. */
***************
*** 691,698 ****
ASET (Vfontset_table, id, fontset);
next_fontset_id = id + 1;
- if (! NILP (base) && ! EQ (base, Vdefault_fontset))
- FONTSET_FALLBACK (fontset) = make_fontset (frame, Qnil, Vdefault_fontset);
return fontset;
}
--- 696,701 ----
***************
*** 737,745 ****
--- 740,764 ----
FRAME_PTR f;
struct face *face;
{
+ Lisp_Object fontset;
+
+ fontset = AREF (Vfontset_table, face->fontset);
+ xassert (!NILP (fontset) && ! BASE_FONTSET_P (fontset));
+ xassert (f == XFRAME (FONTSET_FRAME (fontset)));
ASET (Vfontset_table, face->fontset, Qnil);
if (face->fontset < next_fontset_id)
next_fontset_id = face->fontset;
+ if (! NILP (FONTSET_FALLBACK (fontset)))
+ {
+ int id = FONTSET_ID (FONTSET_FALLBACK (fontset));
+
+ fontset = AREF (Vfontset_table, id);
+ xassert (!NILP (fontset) && ! BASE_FONTSET_P (fontset));
+ xassert (f == XFRAME (FONTSET_FRAME (fontset)));
+ ASET (Vfontset_table, id, Qnil);
+ if (id < next_fontset_id)
+ next_fontset_id = face->fontset;
+ }
}
***************
*** 1415,1455 ****
}
! /* Number of fontsets created from a fontname automatically. */
! static int n_auto_fontsets;
int
new_fontset_from_font_name (Lisp_Object fontname)
{
Lisp_Object name;
Lisp_Object vec;
fontname = Fdowncase (fontname);
vec = split_font_name_into_vector (fontname);
if ( NILP (vec))
vec = Fmake_vector (make_number (14), build_string (""));
ASET (vec, 12, build_string ("fontset"));
! if (n_auto_fontsets == 0)
{
ASET (vec, 13, build_string ("startup"));
name = build_font_name_from_vector (vec);
- n_auto_fontsets++;
}
else
{
char temp[20];
! do {
! sprintf (temp, "auto%d", n_auto_fontsets);
! ASET (vec, 13, build_string (temp));
! name = build_font_name_from_vector (vec);
! n_auto_fontsets++;
! } while (fs_query_fontset (name, 0) >= 0);
! }
! name = Fnew_fontset (name,
! Fcons (Fcons (Qascii, Fcons (fontname, Qnil)), Qnil));
! Vfontset_alias_alist = Fcons (Fcons (name, fontname), Vfontset_alias_alist);
! return fs_query_fontset (name, 0);
}
--- 1434,1480 ----
}
! /* Alist of automatically created fontsets. Each element is a cons
! (FONTNAME . FONTSET-ID). */
! static Lisp_Object auto_fontset_alist;
int
new_fontset_from_font_name (Lisp_Object fontname)
{
+ Lisp_Object val;
Lisp_Object name;
Lisp_Object vec;
+ int id;
fontname = Fdowncase (fontname);
+ val = Fassoc (fontname, auto_fontset_alist);
+ if (CONSP (val))
+ return XINT (XCDR (val));
+
vec = split_font_name_into_vector (fontname);
if ( NILP (vec))
vec = Fmake_vector (make_number (14), build_string (""));
ASET (vec, 12, build_string ("fontset"));
! if (NILP (auto_fontset_alist))
{
ASET (vec, 13, build_string ("startup"));
name = build_font_name_from_vector (vec);
}
else
{
char temp[20];
+ int len = Flength (auto_fontset_alist);
! sprintf (temp, "auto%d", len);
! ASET (vec, 13, build_string (temp));
! name = build_font_name_from_vector (vec);
! }
! name = Fnew_fontset (name, Fcons (Fcons (Qascii, Fcons (fontname, Qnil)),
! Qnil));
! id = fs_query_fontset (name, 0);
! auto_fontset_alist
! = Fcons (Fcons (fontname, make_number (id)), auto_fontset_alist);
! return id;
}
***************
*** 1718,1723 ****
--- 1743,1798 ----
return list;
}
+
+ #ifdef FONTSET_DEBUG
+
+ Lisp_Object
+ dump_fontset (fontset)
+ Lisp_Object fontset;
+ {
+ Lisp_Object vec;
+
+ vec = Fmake_vector (make_number (3), Qnil);
+ ASET (vec, 0, FONTSET_ID (fontset));
+
+ if (BASE_FONTSET_P (fontset))
+ {
+ ASET (vec, 1, FONTSET_NAME (fontset));
+ }
+ else
+ {
+ Lisp_Object frame;
+
+ frame = FONTSET_FRAME (fontset);
+ if (FRAMEP (frame))
+ {
+ FRAME_PTR f = XFRAME (frame);
+
+ if (FRAME_LIVE_P (f))
+ ASET (vec, 1, f->name);
+ else
+ ASET (vec, 1, Qt);
+ }
+ if (!NILP (FONTSET_FALLBACK (fontset)))
+ ASET (vec, 2, FONTSET_ID (FONTSET_FALLBACK (fontset)));
+ }
+ return vec;
+ }
+
+ DEFUN ("fontset-list-all", Ffontset_list_all, Sfontset_list_all, 0, 0, 0,
+ doc: /* Return a brief summary of all fontsets for debug use. */)
+ ()
+ {
+ Lisp_Object val;
+ int i;
+
+ for (i = 0, val = Qnil; i < ASIZE (Vfontset_table); i++)
+ if (! NILP (AREF (Vfontset_table, i)))
+ val = Fcons (dump_fontset (AREF (Vfontset_table, i)), val);
+ return (Fnreverse (val));
+ }
+ #endif /* FONTSET_DEBUG */
+
void
syms_of_fontset ()
{
***************
*** 1762,1767 ****
--- 1837,1845 ----
AREF (Vfontset_table, 0) = Vdefault_fontset;
next_fontset_id = 1;
+ auto_fontset_alist = Qnil;
+ staticpro (&auto_fontset_alist);
+
DEFVAR_LISP ("font-encoding-alist", &Vfont_encoding_alist,
doc: /*
Alist of fontname patterns vs the corresponding encoding and repertory info.
***************
*** 1827,1853 ****
defsubr (&Sfontset_info);
defsubr (&Sfontset_font);
defsubr (&Sfontset_list);
! }
!
! Lisp_Object
! dump_fontset (fontset)
! Lisp_Object fontset;
! {
! Lisp_Object val;
!
! if (NILP (FONTSET_FALLBACK (fontset)))
! val = Fcons (Fcons (intern ("fallback-id"), Qnil), Qnil);
! else
! val = Fcons (Fcons (intern ("fallback-id"),
! FONTSET_ID (FONTSET_FALLBACK (fontset))),
! Qnil);
! if (NILP (FONTSET_BASE (fontset)))
! val = Fcons (Fcons (intern ("base"), Qnil), val);
! else
! val = Fcons (Fcons (intern ("base"),
! FONTSET_NAME (FONTSET_BASE (fontset))),
! val);
! val = Fcons (Fcons (intern ("name"), FONTSET_NAME (fontset)), val);
! val = Fcons (Fcons (intern ("id"), FONTSET_ID (fontset)), val);
! return val;
}
--- 1905,1911 ----
defsubr (&Sfontset_info);
defsubr (&Sfontset_font);
defsubr (&Sfontset_list);
! #ifdef FONTSET_DEBUG
! defsubr (&Sfontset_list_all);
! #endif
}