(linenum→info "unix/slp.c:2238")

emacs/22.1/src/disptab.h

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