/* font.h -- Interface definition for font handling.
- Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
- Copyright (C) 2006, 2007, 2008
+ Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2007, 2008, 2009
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H13PRO009
struct font_driver;
struct font;
+struct glyph_string;
/* An enumerator for each font property. This is used as an index to
the vector of FONT-SPEC and FONT-ENTITY.
is not available. */
FONT_FILE_INDEX,
- /* Format of the font (symbol). */
+ /* Format of the font (symbol) or nil if unknown. */
FONT_FORMAT_INDEX,
/* This value is the length of font-object vector. */
extern Lisp_Object QCavgwidth, QCfont_entity, QCfc_unknown_spec;
/* Important character set symbols. */
+extern Lisp_Object Qascii_0;
extern Lisp_Object Qiso8859_1, Qiso10646_1, Qunicode_bmp, Qunicode_sip;
/* Structure for a font-spec. */
on resolution DPI. */
#define POINT_TO_PIXEL(POINT, DPI) ((POINT) * (DPI) / PT_PER_INCH + 0.5)
-/* Return a point size (double) corresponding to POINT size (integer)
- on resolution DPI. */
+/* Return a point size corresponding to POINT size (integer)
+ on resolution DPI. Note that though point size is a double, we expect
+ it to be rounded to an int, so we add 0.5 here. If the desired value
+ is tenths of points (as in xfld specs), then the pixel size should
+ be multiplied BEFORE the conversion to avoid magnifying the error. */
#define PIXEL_TO_POINT(PIXEL, DPI) ((PIXEL) * PT_PER_INCH / (DPI) + 0.5)
/* Ignore the difference of font pixel sizes less than or equal to
#define FONT_PIXEL_SIZE_QUANTUM 1
struct face;
-struct composition;
-
-/* Macros for lispy glyph-string. */
-enum lgstring_indices
- {
- LGSTRING_IX_FONT, LGSTRING_IX_WIDTH,
- LGSTRING_IX_LBEARING, LGSTRING_IX_RBEARING,
- LGSTRING_IX_ASCENT, LGSTRING_IX_DESCENT
- };
-#define LGSTRING_SLOT(lgs, ix) AREF (AREF ((lgs), 0), ix)
-#define LGSTRING_FONT(lgs) LGSTRING_SLOT (lgs, LGSTRING_IX_FONT)
-#define LGSTRING_WIDTH(lgs) XINT (LGSTRING_SLOT (lgs, LGSTRING_IX_WIDTH))
-#define LGSTRING_LBEARING(lgs) XINT (LGSTRING_SLOT (lgs, LGSTRING_IX_LBEARING))
-#define LGSTRING_RBEARING(lgs) XINT (LGSTRING_SLOT (lgs, LGSTRING_IX_RBEARING))
-#define LGSTRING_ASCENT(lgs) XINT (LGSTRING_SLOT (lgs, LGSTRING_IX_ASCENT))
-#define LGSTRING_DESCENT(lgs) XINT (LGSTRING_SLOT (lgs, LGSTRING_IX_DESCENT))
-#define LGSTRING_SET_SLOT(lgs, ix, val) ASET (AREF ((lgs), 0), ix, (val))
-#define LGSTRING_SET_FONT(lgs, val) \
- LGSTRING_SET_SLOT(lgs, LGSTRING_IX_FONT, (val))
-#define LGSTRING_SET_WIDTH(lgs, val) \
- LGSTRING_SET_SLOT(lgs, LGSTRING_IX_WIDTH, make_number (val))
-#define LGSTRING_SET_LBEARING(lgs, val) \
- LGSTRING_SET_SLOT(lgs, LGSTRING_IX_LBEARING, make_number (val))
-#define LGSTRING_SET_RBEARING(lgs, val) \
- LGSTRING_SET_SLOT(lgs, LGSTRING_IX_RBEARING, make_number (val))
-#define LGSTRING_SET_ASCENT(lgs, val) \
- LGSTRING_SET_SLOT(lgs, LGSTRING_IX_ASCENT, make_number (val))
-#define LGSTRING_SET_DESCENT(lgs, val) \
- LGSTRING_SET_SLOT(lgs, LGSTRING_IX_DESCENT, make_number (val))
-
-#define LGSTRING_LENGTH(lgs) (ASIZE ((lgs)) - 1)
-#define LGSTRING_GLYPH(lgs, idx) AREF ((lgs), (idx) + 1)
-#define LGSTRING_SET_GLYPH(lgs, idx, val) ASET ((lgs), (idx) + 1, (val))
-
-/* Vector size of Lispy glyph. */
-enum lglyph_indices
- {
- LGLYPH_IX_FROM, LGLYPH_IX_TO, LGLYPH_IX_CHAR, LGLYPH_IX_CODE,
- LGLYPH_IX_WIDTH, LGLYPH_IX_LBEARING, LGLYPH_IX_RBEARING,
- LGLYPH_IX_ASCENT, LGLYPH_IX_DESCENT, LGLYPH_IX_ADJUSTMENT,
- /* Not an index. */
- LGLYPH_SIZE
- };
-#define LGLYPH_FROM(g) XINT (AREF ((g), LGLYPH_IX_FROM))
-#define LGLYPH_TO(g) XINT (AREF ((g), LGLYPH_IX_TO))
-#define LGLYPH_CHAR(g) XINT (AREF ((g), LGLYPH_IX_CHAR))
-#define LGLYPH_CODE(g) XUINT (AREF ((g), LGLYPH_IX_CODE))
-#define LGLYPH_WIDTH(g) XINT (AREF ((g), LGLYPH_IX_WIDTH))
-#define LGLYPH_LBEARING(g) XINT (AREF ((g), LGLYPH_IX_LBEARING))
-#define LGLYPH_RBEARING(g) XINT (AREF ((g), LGLYPH_IX_RBEARING))
-#define LGLYPH_ASCENT(g) XINT (AREF ((g), LGLYPH_IX_ASCENT))
-#define LGLYPH_DESCENT(g) XINT (AREF ((g), LGLYPH_IX_DESCENT))
-#define LGLYPH_ADJUSTMENT(g) AREF ((g), LGLYPH_IX_ADJUSTMENT)
-#define LGLYPH_SET_FROM(g, val) ASET ((g), LGLYPH_IX_FROM, make_number (val))
-#define LGLYPH_SET_TO(g, val) ASET ((g), LGLYPH_IX_TO, make_number (val))
-#define LGLYPH_SET_CHAR(g, val) ASET ((g), LGLYPH_IX_CHAR, make_number (val))
-/* FIXME: we should use make_uint_number here. */
-#define LGLYPH_SET_CODE(g, val) ASET ((g), LGLYPH_IX_CODE, make_number (val))
-#define LGLYPH_SET_WIDTH(g, val) ASET ((g), LGLYPH_IX_WIDTH, make_number (val))
-#define LGLYPH_SET_LBEARING(g, val) ASET ((g), LGLYPH_IX_RBEARING, make_number (val))
-#define LGLYPH_SET_RBEARING(g, val) ASET ((g), LGLYPH_IX_LBEARING, make_number (val))
-#define LGLYPH_SET_ASCENT(g, val) ASET ((g), LGLYPH_IX_ASCENT, make_number (val))
-#define LGLYPH_SET_DESCENT(g, val) ASET ((g), LGLYPH_IX_DESCENT, make_number (val))
-#define LGLYPH_SET_ADJUSTMENT(g, val) ASET ((g), LGLYPH_IX_ADJUSTMENT, (val))
-
-#define LGLYPH_XOFF(g) (VECTORP (LGLYPH_ADJUSTMENT (g)) \
- ? XINT (AREF (LGLYPH_ADJUSTMENT (g), 0)) : 0)
-#define LGLYPH_YOFF(g) (VECTORP (LGLYPH_ADJUSTMENT (g)) \
- ? XINT (AREF (LGLYPH_ADJUSTMENT (g), 1)) : 0)
-#define LGLYPH_WADJUST(g) (VECTORP (LGLYPH_ADJUSTMENT (g)) \
- ? XINT (AREF (LGLYPH_ADJUSTMENT (g), 2)) : 0)
#define FONT_INVALID_CODE 0xFFFFFFFF
void (*done_face) P_ ((FRAME_PTR f, struct face *face));
/* Optional.
- If FONT_ENTITY has a glyph for character C (Unicode code point),
- return 1. If not, return 0. If a font must be opened to check
- it, return -1. */
- int (*has_char) P_ ((Lisp_Object entity, int c));
+ If FONT (FONT-ENTITY or FONT-OBJECT) has a glyph for character C
+ (Unicode code point), return 1. If not, return 0. If FONT is
+ FONT-ENTITY and it must be opened to check it, return -1. */
+ int (*has_char) P_ ((Lisp_Object font, int c));
/* Return a glyph code of FONT for characer C (Unicode code point).
If FONT doesn't have such a glyph, return FONT_INVALID_CODE. */
/* Optional.
Make the font driver ready for frame F. Usually this function
- makes some data specific to F and store it in F by calling
+ makes some data specific to F and stores it in F by calling
font_put_frame_data (). */
int (*start_for_frame) P_ ((FRAME_PTR f));
/* Optional.
- Shape text in LGSTRING. See the docstring of `font-make-gstring'
- for the format of LGSTRING. If the (N+1)th element of LGSTRING
- is nil, input of shaping is from the 1st to (N)th elements. In
- each input glyph, FROM, TO, CHAR, and CODE are already set.
+ Shape text in GSTRING. See the docstring of
+ `composition-get-gstring' for the format of GSTRING. If the
+ (N+1)th element of GSTRING is nil, input of shaping is from the
+ 1st to (N)th elements. In each input glyph, FROM, TO, CHAR, and
+ CODE are already set.
This function updates all fields of the input glyphs. If the
output glyphs (M) are more than the input glyphs (N), (N+1)th
- through (M)th elements of LGSTRING are updated possibly by making
- a new glyph object and storing it in LGSTRING. If (M) is greater
- than the length of LGSTRING, nil should be return. In that case,
- this function is called again with the larger LGSTRING. */
+ through (M)th elements of GSTRING are updated possibly by making
+ a new glyph object and storing it in GSTRING. If (M) is greater
+ than the length of GSTRING, nil should be return. In that case,
+ this function is called again with the larger GSTRING. */
Lisp_Object (*shape) P_ ((Lisp_Object lgstring));
/* Optional.
If FONT is usable on frame F, return 0. Otherwise return -1.
- */
+ This method is used only for debugging. If this method is NULL,
+ Emacs assumes that the font is usable on any frame. */
int (*check) P_ ((FRAME_PTR F, struct font *font));
+
+ /* Optional.
+
+ Return the number of variation glyphs of character C supported by
+ FONT. VARIATIONS is an array of 256 elements. If the variation
+ selector N (1..256) defines a glyph, that glyph code is stored in
+ the (N-1)th element of VARIATIONS. */
+ int (*get_variation_glyphs) P_ ((struct font *font,
+ int c, unsigned variations[256]));
};
EXFUN (Flist_fonts, 4);
EXFUN (Ffont_family_list, 1);
EXFUN (Fclear_font_cache, 0);
-EXFUN (Ffont_xlfd_name, 1);
+EXFUN (Ffont_xlfd_name, 2);
extern Lisp_Object font_make_spec P_ ((void));
extern Lisp_Object font_make_entity P_ ((void));
-extern Lisp_Object font_make_object P_ ((int));
+extern Lisp_Object font_make_object P_ ((int, Lisp_Object, int));
+extern Lisp_Object find_font_encoding P_ ((Lisp_Object));
extern int font_registry_charsets P_ ((Lisp_Object, struct charset **,
struct charset **));
extern int font_style_to_value P_ ((enum font_property_index prop,
extern Lisp_Object font_style_symbolic P_ ((Lisp_Object font,
enum font_property_index prop,
int for_face));
-
-extern int font_match_p P_ ((Lisp_Object spec, Lisp_Object entity));
+
+extern int font_match_p P_ ((Lisp_Object spec, Lisp_Object font));
extern Lisp_Object font_list_entities P_ ((Lisp_Object frame,
Lisp_Object spec));
extern Lisp_Object font_open_by_name P_ ((FRAME_PTR f, char *name));
extern void font_close_object (FRAME_PTR f, Lisp_Object font_object);
-extern Lisp_Object font_intern_prop P_ ((char *str, int len));
+extern Lisp_Object font_intern_prop P_ ((char *str, int len, int force_symbol));
extern void font_update_sort_order P_ ((int *order));
extern void font_parse_family_registry P_ ((Lisp_Object family,
extern int font_parse_fcname P_ ((char *name, Lisp_Object font));
extern int font_unparse_fcname P_ ((Lisp_Object font, int pixel_size,
char *name, int bytes));
+extern int font_unparse_gtkname P_ ((Lisp_Object, struct frame *, char *, int));
extern void register_font_driver P_ ((struct font_driver *driver, FRAME_PTR f));
extern void free_font_driver_list P_ ((FRAME_PTR f));
extern Lisp_Object font_update_drivers P_ ((FRAME_PTR f, Lisp_Object list));
extern Lisp_Object font_at P_ ((int c, EMACS_INT pos, struct face *face,
struct window *w, Lisp_Object object));
-extern EMACS_INT font_range P_ ((EMACS_INT pos, EMACS_INT limit,
- struct face *face, FRAME_PTR f,
- Lisp_Object object));
-
-extern struct font *font_prepare_composition P_ ((struct composition *cmp,
- FRAME_PTR f));
+extern Lisp_Object font_range (EMACS_INT, EMACS_INT *,
+ struct window *, struct face *,
+ Lisp_Object);
+extern void font_fill_lglyph_metrics P_ ((Lisp_Object, Lisp_Object));
extern Lisp_Object font_put_extra P_ ((Lisp_Object font, Lisp_Object prop,
Lisp_Object val));
extern struct font_driver w32font_driver;
extern struct font_driver uniscribe_font_driver;
#endif /* WINDOWSNT */
-#ifdef MAC_OS
-extern struct font_driver atmfont_driver;
-#endif /* MAC_OS */
+#ifdef HAVE_NS
+extern struct font_driver nsfont_driver;
+#endif /* HAVE_NS */
+
+#ifndef FONT_DEBUG
+#define FONT_DEBUG
+#endif
+
+extern void font_add_log P_ ((char *, Lisp_Object, Lisp_Object));
+extern void font_deferred_log P_ ((char *, Lisp_Object, Lisp_Object));
+
+#ifdef FONT_DEBUG
+#define font_assert(X) do {if (!(X)) abort ();} while (0)
+#else /* not FONT_DEBUG */
+#define font_assert(X) (void) 0
+#endif /* not FONT_DEBUG */
#endif /* not EMACS_FONT_H */