#include "intervals.h"
#include "fontset.h"
#include "window.h"
-#ifdef HAVE_X_WINDOWS
-#include "xterm.h"
-#endif
-#ifdef HAVE_NTGUI
-#include "w32term.h"
-#endif
-#ifdef HAVE_NS
-#include "nsterm.h"
-#endif
+#ifdef HAVE_WINDOW_SYSTEM
+#include TERM_HEADER
+#endif /* HAVE_WINDOW_SYSTEM */
#include "termhooks.h"
-
#include "font.h"
/* FONTSET
font for each character. */
static Lisp_Object Vdefault_fontset;
-/* Check if any window system is used now. */
-void (*check_window_system_func) (void);
-
-
/* Prototype declarations for static functions. */
static Lisp_Object make_fontset (Lisp_Object, Lisp_Object, Lisp_Object);
/* Macros for FONT-DEF and RFONT-DEF of fontset. */
#define FONT_DEF_NEW(font_def, font_spec, encoding, repertory) \
do { \
- (font_def) = Fmake_vector (make_number (3), (font_spec)); \
+ (font_def) = make_uninit_vector (3); \
+ ASET ((font_def), 0, font_spec); \
ASET ((font_def), 1, encoding); \
ASET ((font_def), 2, repertory); \
} while (0)
}
if (score_changed)
- qsort (XVECTOR (vec)->contents, size, word_size,
+ qsort (XVECTOR (vec)->u.contents, size, word_size,
fontset_compare_rfontdef);
XSETCAR (font_group, make_number (charset_ordered_list_tick));
}
{
Lisp_Object vec, font_group;
int i, charset_matched = 0, found_index;
- FRAME_PTR f = (FRAMEP (FONTSET_FRAME (fontset))
- ? XFRAME (FONTSET_FRAME (fontset)) : XFRAME (selected_frame));
+ struct frame *f = (FRAMEP (FONTSET_FRAME (fontset))
+ ? XFRAME (FONTSET_FRAME (fontset))
+ : XFRAME (selected_frame));
Lisp_Object rfont_def;
font_group = fontset_get_font_group (fontset, fallback ? -1 : c);
}
static void
-free_realized_fontset (FRAME_PTR f, Lisp_Object fontset)
+free_realized_fontset (struct frame *f, Lisp_Object fontset)
{
#if 0
Lisp_Object tail;
free_realized_face. */
void
-free_face_fontset (FRAME_PTR f, struct face *face)
+free_face_fontset (struct frame *f, struct face *face)
{
Lisp_Object fontset;
the macro FACE_FOR_CHAR. */
int
-face_for_char (FRAME_PTR f, struct face *face, int c, int pos, Lisp_Object object)
+face_for_char (struct frame *f, struct face *face, int c, int pos, Lisp_Object object)
{
Lisp_Object fontset, rfont_def, charset;
int face_id;
if (ASCII_CHAR_P (c) || face->fontset < 0)
return face->ascii_face->id;
+#ifdef HAVE_NS
+ if (face->font)
+ {
+ /* Fonts often have characters in other scripts, like symbol, even if they
+ don't match script: symbol. So check if the character is present
+ in the current face first. Only enable for NS for now, but should
+ perhaps be general? */
+ Lisp_Object font_object;
+ XSETFONT (font_object, face->font);
+ if (font_has_char (f, font_object, c)) return face->id;
+ }
+#endif
+
eassert (fontset_id_valid_p (face->fontset));
fontset = FONTSET_FROM_ID (face->fontset);
eassert (!BASE_FONTSET_P (fontset));
Called from realize_x_face. */
int
-make_fontset_for_ascii_face (FRAME_PTR f, int base_fontset_id, struct face *face)
+make_fontset_for_ascii_face (struct frame *f, int base_fontset_id, struct face *face)
{
Lisp_Object base_fontset, fontset, frame;
Lisp_Object fontset;
int id;
- (*check_window_system_func) ();
+ check_window_system (NULL);
CHECK_STRING (pattern);
/* Return a list of base fontset names matching PATTERN on frame F. */
Lisp_Object
-list_fontsets (FRAME_PTR f, Lisp_Object pattern, int size)
+list_fontsets (struct frame *f, Lisp_Object pattern, int size)
{
Lisp_Object frame, regexp, val;
int id;
for (tail = FONTSET_FACE_ALIST (this); CONSP (tail);
tail = XCDR (tail))
{
- FRAME_PTR f = XFRAME (FONTSET_FRAME (this));
+ struct frame *f = XFRAME (FONTSET_FRAME (this));
int face_id = XINT (XCDR (XCAR (tail)));
struct face *face = FACE_FROM_ID (f, face_id);
{
if (XFASTINT (target) < 0x80)
error ("Can't set a font for partial ASCII range");
- range_list = Fcons (Fcons (target, target), Qnil);
+ range_list = list1 (Fcons (target, target));
}
else if (CONSP (target))
{
error ("Can't set a font for partial ASCII range");
ascii_changed = 1;
}
- range_list = Fcons (target, Qnil);
+ range_list = list1 (target);
}
else if (SYMBOLP (target) && !NILP (target))
{
{
if (EQ (target, Qlatin))
ascii_changed = 1;
- val = Fcons (target, Qnil);
+ val = list1 (target);
map_char_table (accumulate_script_ranges, Qnil, Vchar_script_table,
val);
range_list = Fnreverse (XCDR (val));
SDATA (SYMBOL_NAME (target)));
}
else if (NILP (target))
- range_list = Fcons (Qnil, Qnil);
+ range_list = list1 (Qnil);
else
error ("Invalid target for setting a font");
{
Lisp_Object arg;
- arg = Fmake_vector (make_number (5), Qnil);
+ arg = make_uninit_vector (5);
ASET (arg, 0, fontset);
ASET (arg, 1, font_def);
ASET (arg, 2, add);
name = FONTSET_NAME (fontset);
FOR_EACH_FRAME (tail, fr)
{
- FRAME_PTR f = XFRAME (fr);
+ struct frame *f = XFRAME (fr);
Lisp_Object font_object;
struct face *face;
if (! NILP (font_object))
{
update_auto_fontset_alist (font_object, fontset);
- alist = Fcons (Fcons (Qfont, Fcons (name, font_object)), Qnil);
+ alist = list1 (Fcons (Qfont, Fcons (name, font_object)));
Fmodify_frame_parameters (fr, alist);
}
}
Lisp_Object val, elt;
int c, i, j, k;
- (*check_window_system_func) ();
-
+ check_window_system (NULL);
fontset = check_fontset_name (fontset, &frame);
/* Recode fontsets realized on FRAME from the base fontset FONTSET
slot = Fassq (RFONT_DEF_SPEC (elt), alist);
name = AREF (font_object, FONT_NAME_INDEX);
if (NILP (Fmember (name, XCDR (slot))))
- nconc2 (slot, Fcons (name, Qnil));
+ nconc2 (slot, list1 (name));
}
}
}
frame = FONTSET_FRAME (fontset);
if (FRAMEP (frame))
{
- FRAME_PTR f = XFRAME (frame);
+ struct frame *f = XFRAME (frame);
if (FRAME_LIVE_P (f))
ASET (vec, 1,
DEFVAR_LISP ("fontset-alias-alist", Vfontset_alias_alist,
doc: /* Alist of fontset names vs the aliases. */);
- Vfontset_alias_alist = Fcons (Fcons (FONTSET_NAME (Vdefault_fontset),
- build_pure_c_string ("fontset-default")),
- Qnil);
+ Vfontset_alias_alist
+ = list1 (Fcons (FONTSET_NAME (Vdefault_fontset),
+ build_pure_c_string ("fontset-default")));
DEFVAR_LISP ("vertical-centering-font-regexp",
Vvertical_centering_font_regexp,