#define DISP_TABLE_P(obj) \
(CHAR_TABLE_P (obj) \
- && XCHAR_TABLE (obj)->purpose == Qdisplay_table \
+ && EQ (XCHAR_TABLE (obj)->purpose, Qdisplay_table) \
&& CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (obj)) == DISP_TABLE_EXTRA_SLOTS)
#define DISP_TABLE_EXTRA_SLOTS 6
#define DISP_INVIS_VECTOR(dp) ((dp)->extras[4])
#define DISP_BORDER_GLYPH(dp) ((dp)->extras[5])
-#define DISP_CHAR_VECTOR(dp, c) ((dp)->contents[c])
+extern Lisp_Object disp_char_vector P_ ((struct Lisp_Char_Table *, int));
+
+#define DISP_CHAR_VECTOR(dp, c) \
+ (ASCII_CHAR_P(c) \
+ ? (NILP ((dp)->ascii) \
+ ? (dp)->defalt \
+ : (SUB_CHAR_TABLE_P ((dp)->ascii) \
+ ? XSUB_CHAR_TABLE ((dp)->ascii)->contents[c] \
+ : (dp)->ascii)) \
+ : disp_char_vector ((dp), (c)))
/* Defined in window.c. */
-extern struct Lisp_Char_Table *window_display_table ();
+extern struct Lisp_Char_Table *window_display_table P_ ((struct window *));
/* Defined in indent.c. */
-extern struct Lisp_Char_Table *buffer_display_table ();
+extern struct Lisp_Char_Table *buffer_display_table P_ ((void));
/* Display table to use for vectors that don't specify their own. */
extern Lisp_Object Vstandard_display_table;
/* Follow all aliases for G in the glyph table given by (BASE,
LENGTH), and set G to the final glyph. */
-#define GLYPH_FOLLOW_ALIASES(base, length, g) \
- while (GLYPH_ALIAS_P ((base), (length), (g))) \
- (g) = GLYPH_ALIAS ((base), (g));
-
+#define GLYPH_FOLLOW_ALIASES(base, length, g) \
+ do { \
+ while (GLYPH_ALIAS_P ((base), (length), (g))) \
+ (g) = GLYPH_ALIAS ((base), (g)); \
+ if (!GLYPH_CHAR_VALID_P (FAST_GLYPH_CHAR (g))) \
+ g = FAST_MAKE_GLYPH (' ', FAST_GLYPH_FACE (g)); \
+ } while (0)
+
/* Assuming that GLYPH_SIMPLE_P (BASE, LEN, G) is 0,
return the length and the address of the character-sequence
used for outputting GLYPH G. */
#define NULL_GLYPH 00
#define GLYPH_FROM_CHAR(c) (c)
-
-extern int glyphlen ();
-extern void str_to_glyph_cpy ();
-extern void str_to_glyph_ncpy ();
-extern void glyph_to_str_cpy ();