/* font.h -- Interface definition for font handling.
- Copyright (C) 2006-2013 Free Software Foundation, Inc.
+ Copyright (C) 2006-2015 Free Software Foundation, Inc.
Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H13PRO009
#include "ccl.h"
#include "frame.h"
+INLINE_HEADER_BEGIN
+
/* We have three types of Lisp objects related to font.
FONT-SPEC
Note: Only the method `open' of a font-driver can create this
object, and it should never be modified by Lisp. */
-extern Lisp_Object Qfont_spec, Qfont_entity, Qfont_object;
/* An enumerator for each font property. This is used as an index to
the vector of FONT-SPEC and FONT-ENTITY.
font. */
FONT_AVGWIDTH_INDEX,
-#if 0
+#if false
/* The following two members are to substitute for the above 6
members (FONT_WEIGHT_INDEX to FONT_AVGWIDTH_INDEX excluding
FONT_SIZE_INDEX) if it is found that font-entities consumes too
/* List of font-objects opened from the font-entity. */
FONT_OBJLIST_INDEX = FONT_SPEC_MAX,
- /* Font-entity from which the font-object is opened. */
- FONT_ENTITY_INDEX = FONT_SPEC_MAX,
-
/* This value is the length of font-entity vector. */
FONT_ENTITY_MAX,
is not available. */
FONT_FILE_INDEX,
- /* Format of the font (symbol) or nil if unknown. */
- FONT_FORMAT_INDEX,
-
/* This value is the length of font-object vector. */
FONT_OBJECT_MAX
};
? (XINT (AREF ((font), FONT_WIDTH_INDEX)) >> 8) : -1)
/* Return the symbolic weight value of FONT. */
#define FONT_WEIGHT_SYMBOLIC(font) \
- font_style_symbolic (font, FONT_WEIGHT_INDEX, 0)
+ font_style_symbolic (font, FONT_WEIGHT_INDEX, false)
/* Return the symbolic slant value of FONT. */
#define FONT_SLANT_SYMBOLIC(font) \
- font_style_symbolic (font, FONT_SLANT_INDEX, 0)
+ font_style_symbolic (font, FONT_SLANT_INDEX, false)
/* Return the symbolic width value of FONT. */
#define FONT_WIDTH_SYMBOLIC(font) \
- font_style_symbolic (font, FONT_WIDTH_INDEX, 0)
+ font_style_symbolic (font, FONT_WIDTH_INDEX, false)
/* Return the face-weight corresponding to the weight of FONT. */
#define FONT_WEIGHT_FOR_FACE(font) \
- font_style_symbolic (font, FONT_WEIGHT_INDEX, 1)
+ font_style_symbolic (font, FONT_WEIGHT_INDEX, true)
/* Return the face-slant corresponding to the slant of FONT. */
#define FONT_SLANT_FOR_FACE(font) \
- font_style_symbolic (font, FONT_SLANT_INDEX, 1)
+ font_style_symbolic (font, FONT_SLANT_INDEX, true)
/* Return the face-swidth corresponding to the slant of FONT. */
#define FONT_WIDTH_FOR_FACE(font) \
- font_style_symbolic (font, FONT_WIDTH_INDEX, 1)
+ font_style_symbolic (font, FONT_WIDTH_INDEX, true)
/* Return the numeric weight value corresponding ot the symbol NAME. */
#define FONT_WEIGHT_NAME_NUMERIC(name) \
- (font_style_to_value (FONT_WEIGHT_INDEX, (name), 0) >> 8)
+ (font_style_to_value (FONT_WEIGHT_INDEX, (name), false) >> 8)
/* Return the numeric slant value corresponding ot the symbol NAME. */
#define FONT_SLANT_NAME_NUMERIC(name) \
- (font_style_to_value (FONT_SLANT_INDEX, (name), 0) >> 8)
+ (font_style_to_value (FONT_SLANT_INDEX, (name), false) >> 8)
/* Return the numeric width value corresponding ot the symbol NAME. */
#define FONT_WIDTH_NAME_NUMERIC(name) \
- (font_style_to_value (FONT_WIDTH_INDEX, (name), 0) >> 8)
+ (font_style_to_value (FONT_WIDTH_INDEX, (name), false) >> 8)
/* Set the font property PROP of FONT to VAL. PROP is one of
style-related font property index (FONT_WEIGHT/SLANT/WIDTH_INDEX).
VAL (integer or symbol) is the numeric or symbolic style value. */
#define FONT_SET_STYLE(font, prop, val) \
- ASET ((font), prop, make_number (font_style_to_value (prop, val, 1)))
+ ASET ((font), prop, make_number (font_style_to_value (prop, val, true)))
+#ifndef MSDOS
#define FONT_WIDTH(f) ((f)->max_width)
+#else
+#define FONT_WIDTH(f) 1
+#endif
#define FONT_HEIGHT(f) ((f)->height)
#define FONT_BASE(f) ((f)->ascent)
#define FONT_DESCENT(f) ((f)->descent)
-extern Lisp_Object QCspacing, QCdpi, QCscalable, QCotf, QClang, QCscript;
-extern Lisp_Object QCavgwidth, QCantialias, QCfont_entity;
-extern Lisp_Object Qp;
-
-
-/* Important character set symbols. */
-extern Lisp_Object Qascii_0;
-extern Lisp_Object Qiso8859_1, Qiso10646_1, Qunicode_bmp, Qunicode_sip;
-
-/* Special ADSTYLE properties to avoid fonts used for Latin characters. */
-extern Lisp_Object Qja, Qko;
/* Structure for a font-spec. */
/* Predicates to check various font-related objects. */
-/* 1 iff X is one of font-spec, font-entity, and font-object. */
+/* True iff X is one of font-spec, font-entity, and font-object. */
#define FONTP(x) PSEUDOVECTORP (x, PVEC_FONT)
-/* 1 iff X is font-spec. */
+/* True iff X is font-spec. */
#define FONT_SPEC_P(x) \
(FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX)
-/* 1 iff X is font-entity. */
+/* True iff X is font-entity. */
#define FONT_ENTITY_P(x) \
(FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX)
-/* 1 iff X is font-object. */
+/* True iff X is font-object. */
#define FONT_OBJECT_P(x) \
(FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX)
-/* 1 iff ENTITY can't be loaded. */
-#define FONT_ENTITY_NOT_LOADABLE(entity) \
- EQ (AREF (entity, FONT_OBJLIST_INDEX), Qt)
-
-/* Flag ENTITY not loadable. */
-#define FONT_ENTITY_SET_NOT_LOADABLE(entity) \
- ASET (entity, FONT_OBJLIST_INDEX, Qt)
-
-
/* Check macros for various font-related objects. */
#define CHECK_FONT(x) \
- do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (0)
+ do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (false)
#define CHECK_FONT_SPEC(x) \
- do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } while (0)
+ do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } \
+ while (false)
#define CHECK_FONT_ENTITY(x) \
- do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } while (0)
+ do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } \
+ while (false)
#define CHECK_FONT_OBJECT(x) \
- do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } while (0)
+ do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } \
+ while (false)
#define CHECK_FONT_GET_OBJECT(x, font) \
do { \
CHECK_FONT_OBJECT (x); \
font = XFONT_OBJECT (x); \
- } while (0)
+ } while (false)
#define XFONT_SPEC(p) \
(eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike))
/* Close FONT. NOTE: this can be called by GC. */
void (*close) (struct font *font);
- /* Optional (if FACE->extra is not used).
- Prepare FACE for displaying characters by FONT on frame F by
- storing some data in FACE->extra. If successful, return 0.
- Otherwise, return -1. */
- int (*prepare_face) (struct frame *f, struct face *face);
+ /* Prepare FACE for displaying characters by FONT on frame F by
+ storing some data in FACE->extra. */
+ void (*prepare_face) (struct frame *f, struct face *face);
/* Optional.
Done FACE for displaying characters by FACE->font on frame F. */
/* Compute the total metrics of the NGLYPHS glyphs specified by
the font FONT and the sequence of glyph codes CODE, and store the
result in METRICS. */
- int (*text_extents) (struct font *font,
- unsigned *code, int nglyphs,
- struct font_metrics *metrics);
+ void (*text_extents) (struct font *font,
+ unsigned *code, int nglyphs,
+ struct font_metrics *metrics);
#ifdef HAVE_WINDOW_SYSTEM
#endif /* HAVE_WINDOW_SYSTEM */
- /* Optional.
- Return an outline data for glyph-code CODE of FONT. The format
- of the outline data depends on the font-driver. */
- void *(*get_outline) (struct font *font, unsigned code);
-
- /* Optional.
- Free OUTLINE (that is obtained by the above method). */
- void (*free_outline) (struct font *font, void *outline);
-
/* Optional.
Get coordinates of the INDEXth anchor point of the glyph whose
code is CODE. Store the coordinates in *X and *Y. Return 0 if
struct font_driver_list *next;
};
-
-/* Chain of arbitrary data specific to each font driver.
- Each frame has its own font data list at F->font_data_list. */
-
-struct font_data_list
-{
- /* Pointer to the font driver. */
- struct font_driver *driver;
- /* Data specific to the font driver. */
- void *data;
- /* Pointer to the next element of the chain. */
- struct font_data_list *next;
-};
-
extern Lisp_Object copy_font_spec (Lisp_Object);
extern Lisp_Object merge_font_spec (Lisp_Object, Lisp_Object);
extern Lisp_Object font_make_entity (void);
extern Lisp_Object font_make_object (int, Lisp_Object, int);
+#if defined (HAVE_XFT) || defined (HAVE_FREETYPE) || defined (HAVE_NS)
+extern Lisp_Object font_build_object (int, Lisp_Object, Lisp_Object, double);
+#endif
extern Lisp_Object find_font_encoding (Lisp_Object);
extern int font_registry_charsets (Lisp_Object, struct charset **,
extern int font_parse_xlfd (char *name, ptrdiff_t len, Lisp_Object font);
extern ptrdiff_t font_unparse_xlfd (Lisp_Object font, int pixel_size,
char *name, int bytes);
-extern int font_unparse_fcname (Lisp_Object font, int pixel_size,
- char *name, int bytes);
extern void register_font_driver (struct font_driver *driver, struct frame *f);
extern void free_font_driver_list (struct frame *f);
+#ifdef ENABLE_CHECKING
+extern bool valid_font_driver (struct font_driver *);
+#else
+INLINE bool
+valid_font_driver (struct font_driver *d)
+{
+ return true;
+}
+#endif
extern Lisp_Object font_update_drivers (struct frame *f, Lisp_Object list);
extern Lisp_Object font_range (ptrdiff_t, ptrdiff_t, ptrdiff_t *,
struct window *, struct face *,
extern Lisp_Object font_put_extra (Lisp_Object font, Lisp_Object prop,
Lisp_Object val);
-extern int font_put_frame_data (struct frame *f,
- struct font_driver *driver,
- void *data);
-extern void *font_get_frame_data (struct frame *f,
- struct font_driver *driver);
+#if defined (HAVE_XFT) || defined (HAVE_FREETYPE)
+extern void font_put_frame_data (struct frame *, Lisp_Object, void *);
+extern void *font_get_frame_data (struct frame *f, Lisp_Object);
+#endif /* HAVE_XFT || HAVE_FREETYPE */
extern void font_filter_properties (Lisp_Object font,
Lisp_Object alist,
extern void syms_of_xfont (void);
extern void syms_of_ftxfont (void);
#ifdef HAVE_XFT
-extern Lisp_Object Qxft;
extern struct font_driver xftfont_driver;
-extern void syms_of_xftfont (void);
-#elif defined HAVE_FREETYPE
+#endif
+#if defined HAVE_FREETYPE || defined HAVE_XFT
extern struct font_driver ftxfont_driver;
+extern void syms_of_xftfont (void);
#endif
#ifdef HAVE_BDFFONT
extern void syms_of_bdffont (void);
extern void syms_of_w32font (void);
#endif /* HAVE_NTGUI */
#ifdef HAVE_NS
-extern Lisp_Object Qfontsize;
extern struct font_driver nsfont_driver;
extern void syms_of_nsfont (void);
extern void syms_of_macfont (void);
#define FONT_DEBUG
#endif
-extern Lisp_Object QCfoundry;
-
extern void font_add_log (const char *, Lisp_Object, Lisp_Object);
extern void font_deferred_log (const char *, Lisp_Object, Lisp_Object);
do { \
if (! EQ (Vfont_log, Qt)) \
font_add_log ((ACTION), (ARG), (RESULT)); \
- } while (0)
+ } while (false)
#define FONT_DEFERRED_LOG(ACTION, ARG, RESULT) \
do { \
if (! EQ (Vfont_log, Qt)) \
font_deferred_log ((ACTION), (ARG), (RESULT)); \
- } while (0)
+ } while (false)
+
+INLINE_HEADER_END
#endif /* not EMACS_FONT_H */