GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 1, or (at your option)
+the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
/* Access the slots of a display-table, according to their purpose. */
-#define DISP_TABLE_SIZE 262
-#define DISP_TRUNC_GLYPH(dp) ((dp)->contents[256])
-#define DISP_CONTINUE_GLYPH(dp) ((dp)->contents[257])
-#define DISP_ESCAPE_GLYPH(dp) ((dp)->contents[258])
-#define DISP_CTRL_GLYPH(dp) ((dp)->contents[259])
-#define DISP_INVIS_VECTOR(dp) ((dp)->contents[260])
-#define DISP_BORDER_GLYPH(dp) ((dp)->contents[261])
-#define DISP_CHAR_VECTOR(dp, c) ((dp)->contents[c])
+#define DISP_TABLE_P(obj) \
+ (CHAR_TABLE_P (obj) \
+ && 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_TRUNC_GLYPH(dp) ((dp)->extras[0])
+#define DISP_CONTINUE_GLYPH(dp) ((dp)->extras[1])
+#define DISP_ESCAPE_GLYPH(dp) ((dp)->extras[2])
+#define DISP_CTRL_GLYPH(dp) ((dp)->extras[3])
+#define DISP_INVIS_VECTOR(dp) ((dp)->extras[4])
+#define DISP_BORDER_GLYPH(dp) ((dp)->extras[5])
+
+extern Lisp_Object disp_char_vector P_ ((struct Lisp_Char_Table *, int));
+
+#define DISP_CHAR_VECTOR(dp, c) \
+ (SINGLE_BYTE_CHAR_P(c) ? (dp)->contents[c] : disp_char_vector ((dp), (c)))
/* Defined in window.c. */
-extern struct Lisp_Vector *window_display_table ();
+extern struct Lisp_Char_Table *window_display_table P_ ((struct window *));
/* Defined in indent.c. */
-extern struct Lisp_Vector *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;
+/* This is the `purpose' slot of a display table. */
+extern Lisp_Object Qdisplay_table;
+
/* Vector of GLYPH definitions. Indexed by GLYPH number,
the contents are a string which is how to output the GLYPH. */
extern Lisp_Object Vglyph_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 ();