home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / e20313sr.zip / emacs / 20.3.1 / src / disptab.h < prev    next >
C/C++ Source or Header  |  1999-07-31  |  4KB  |  102 lines

  1. /* Things for GLYPHS and glyph tables.
  2.    Copyright (C) 1993 Free Software Foundation, Inc.
  3.  
  4. This file is part of GNU Emacs.
  5.  
  6. GNU Emacs is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU Emacs is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU Emacs; see the file COPYING.  If not, write to
  18. the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  19. Boston, MA 02111-1307, USA.  */
  20.  
  21. /* Access the slots of a display-table, according to their purpose.  */
  22.  
  23. #define DISP_TABLE_P(obj)                            \
  24.   (CHAR_TABLE_P (obj)                                \
  25.    && EQ (XCHAR_TABLE (obj)->purpose, Qdisplay_table)                \
  26.    && CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (obj)) == DISP_TABLE_EXTRA_SLOTS)
  27.  
  28. #define DISP_TABLE_EXTRA_SLOTS 6
  29. #define DISP_TRUNC_GLYPH(dp) ((dp)->extras[0])
  30. #define DISP_CONTINUE_GLYPH(dp) ((dp)->extras[1])
  31. #define DISP_ESCAPE_GLYPH(dp) ((dp)->extras[2])
  32. #define DISP_CTRL_GLYPH(dp) ((dp)->extras[3])
  33. #define DISP_INVIS_VECTOR(dp) ((dp)->extras[4])
  34. #define DISP_BORDER_GLYPH(dp) ((dp)->extras[5])
  35.  
  36. extern Lisp_Object disp_char_vector P_ ((struct Lisp_Char_Table *, int));
  37.  
  38. #define DISP_CHAR_VECTOR(dp, c) \
  39.   (SINGLE_BYTE_CHAR_P(c) ? (dp)->contents[c] : disp_char_vector ((dp), (c)))
  40.  
  41. /* Defined in window.c.  */
  42. extern struct Lisp_Char_Table *window_display_table P_ ((struct window *));
  43.  
  44. /* Defined in indent.c.  */
  45. extern struct Lisp_Char_Table *buffer_display_table P_ ((void));
  46.  
  47. /* Display table to use for vectors that don't specify their own.  */
  48. extern Lisp_Object Vstandard_display_table;
  49.  
  50. /* This is the `purpose' slot of a display table.  */
  51. extern Lisp_Object Qdisplay_table;
  52.  
  53. /* Vector of GLYPH definitions.  Indexed by GLYPH number,
  54.    the contents are a string which is how to output the GLYPH.  */
  55. extern Lisp_Object Vglyph_table;
  56.  
  57. /* Return the current length of the GLYPH table,
  58.    or 0 if the table isn't currently valid.  */
  59. #define GLYPH_TABLE_LENGTH  \
  60.   ((VECTORP (Vglyph_table)) ? XVECTOR (Vglyph_table)->size : 0)
  61.  
  62. /* Return the current base (for indexing) of the GLYPH table,
  63.    or 0 if the table isn't currently valid.  */
  64. #define GLYPH_TABLE_BASE  \
  65.   ((VECTORP (Vglyph_table)) ? XVECTOR (Vglyph_table)->contents : 0)
  66.  
  67. /* Given BASE and LEN returned by the two previous macros,
  68.    return nonzero if the GLYPH code G should be output as a single
  69.    character with code G.  Return zero if G has a string in the table.  */
  70. #define GLYPH_SIMPLE_P(base,len,g) ((g) >= (len) || !STRINGP (base[g]))
  71.  
  72. /* Given BASE and LEN returned by the two previous macros,
  73.    return nonzero if GLYPH code G is aliased to a different code.  */
  74. #define GLYPH_ALIAS_P(base,len,g) ((g) < (len) && INTEGERP (base[g]))
  75.  
  76. /* Assuming that GLYPH_SIMPLE_P (BASE, LEN, G) is 1,
  77.    return the alias for G.  */
  78. #define GLYPH_ALIAS(base, g) XINT (base[g])
  79.  
  80. /* Follow all aliases for G in the glyph table given by (BASE,
  81.    LENGTH), and set G to the final glyph.  */
  82. #define GLYPH_FOLLOW_ALIASES(base, length, g)        \
  83.   do {                            \
  84.     while (GLYPH_ALIAS_P ((base), (length), (g)))    \
  85.       (g) = GLYPH_ALIAS ((base), (g));            \
  86.     if (!GLYPH_CHAR_VALID_P (FAST_GLYPH_CHAR (g)))    \
  87.       g = FAST_MAKE_GLYPH (' ', FAST_GLYPH_FACE (g));    \
  88.   } while (0)
  89.  
  90. /* Assuming that GLYPH_SIMPLE_P (BASE, LEN, G) is 0,
  91.    return the length and the address of the character-sequence
  92.    used for outputting GLYPH G.  */
  93. #define GLYPH_LENGTH(base,g)   XSTRING (base[g])->size
  94. #define GLYPH_STRING(base,g)   XSTRING (base[g])->data
  95.  
  96. /* GLYPH for a space character.  */
  97.  
  98. #define SPACEGLYPH 040
  99. #define NULL_GLYPH 00
  100.  
  101. #define GLYPH_FROM_CHAR(c) (c)
  102.