1204
+ − 1 /* Definitions of marked slots in coding systems
+ − 2 Copyright (C) 1991, 1995 Free Software Foundation, Inc.
+ − 3 Copyright (C) 1995 Sun Microsystems, Inc.
+ − 4 Copyright (C) 2000, 2001, 2002 Ben Wing.
+ − 5
+ − 6 This file is part of XEmacs.
+ − 7
+ − 8 XEmacs is free software; you can redistribute it and/or modify it
+ − 9 under the terms of the GNU General Public License as published by the
+ − 10 Free Software Foundation; either version 2, or (at your option) any
+ − 11 later version.
+ − 12
+ − 13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ − 14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ − 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ − 16 for more details.
+ − 17
+ − 18 You should have received a copy of the GNU General Public License
+ − 19 along with XEmacs; see the file COPYING. If not, write to
+ − 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ − 21 Boston, MA 02111-1307, USA. */
+ − 22
+ − 23 /* Synched up with: ????. Split out of file-coding.h. */
+ − 24
+ − 25 /* We define the Lisp_Objects in the coding system structure in a separate
+ − 26 file because there are numerous places we want to iterate over them,
+ − 27 such as when defining them in the structure, initializing them, or
+ − 28 marking them.
+ − 29
+ − 30 To use, define MARKED_SLOT before including this file. In the structure
+ − 31 definition, you also need to define CODING_SYSTEM_SLOT_DECLARATION. No
+ − 32 need to undefine either value; that happens automatically. */
+ − 33
+ − 34 #ifndef MARKED_SLOT_ARRAY
+ − 35 #ifdef CODING_SYSTEM_SLOT_DECLARATION
+ − 36 #define MARKED_SLOT_ARRAY(slot, size) MARKED_SLOT(slot[size])
+ − 37 #else
+ − 38 #define MARKED_SLOT_ARRAY(slot, size) do { \
+ − 39 int mslotidx; \
+ − 40 for (mslotidx = 0; mslotidx < size; mslotidx++) \
+ − 41 { \
+ − 42 MARKED_SLOT (slot[mslotidx]) \
+ − 43 } \
+ − 44 } while (0);
+ − 45 #endif
+ − 46 #endif /* not MARKED_SLOT_ARRAY */
+ − 47
+ − 48 /* Name and description of this coding system. The description
+ − 49 should be suitable for a menu entry. */
+ − 50 MARKED_SLOT (name)
+ − 51 MARKED_SLOT (description)
+ − 52
+ − 53 /* Mnemonic string displayed in the modeline when this coding
+ − 54 system is active for a particular buffer. */
+ − 55 MARKED_SLOT (mnemonic)
+ − 56
+ − 57 /* Long documentation on the coding system. */
+ − 58 MARKED_SLOT (documentation)
+ − 59 /* Functions to handle additional conversion after reading or before
+ − 60 writing. #### This mechanism should be replaced by the ability to
+ − 61 simply create new coding system types. */
+ − 62 MARKED_SLOT (post_read_conversion)
+ − 63 MARKED_SLOT (pre_write_conversion)
+ − 64
+ − 65 /* If this coding system is not of the correct type for text file
+ − 66 conversion (i.e. decodes byte->char), we wrap it with appropriate
+ − 67 char<->byte converters. This is created dynamically, when it's
+ − 68 needed, and cached here. */
+ − 69 MARKED_SLOT (text_file_wrapper)
+ − 70
+ − 71 /* ------------------------ junk to handle EOL -------------------------
+ − 72 I had hoped that we could handle this without lots of special-case
+ − 73 code, but it appears not to be the case if we want to maintain
+ − 74 compatibility with the existing way. However, at least with the way
+ − 75 we do things now, we avoid EOL junk in most of the coding system
+ − 76 methods themselves, or in the decode/encode functions. The EOL
+ − 77 special-case code is limited to coding-system creation and to the
+ − 78 convert-eol and undecided coding system types. */
+ − 79
+ − 80 /* If this coding system wants autodetection of the EOL type, then at the
+ − 81 appropriate time we wrap this coding system with
+ − 82 convert-eol-autodetect. (We do NOT do this at creation time because
+ − 83 then we end up with multiple convert-eols wrapped into the final
+ − 84 result -- esp. with autodetection using `undecided' -- leading to a
+ − 85 big mess.) We cache the wrapped coding system here. */
+ − 86 MARKED_SLOT (auto_eol_wrapper)
+ − 87
+ − 88 /* Subsidiary coding systems that specify a particular type of EOL
+ − 89 marking, rather than autodetecting it. These will only be non-nil
+ − 90 if (eol_type == EOL_AUTODETECT). These are chains. */
+ − 91 MARKED_SLOT_ARRAY (eol, 3)
+ − 92 /* If this coding system is a subsidiary, this element points back to its
+ − 93 parent. */
+ − 94 MARKED_SLOT (subsidiary_parent)
+ − 95
+ − 96 /* At decoding or encoding time, we use the following coding system, if
+ − 97 it exists, in place of the coding system object. This is how we
+ − 98 handle coding systems with EOL types of CRLF or CR. Formerly, we did
+ − 99 the canonicalization at creation time, returning a chain in place of
+ − 100 the original coding system; but that interferes with
+ − 101 `coding-system-property' and causes other complications. CANONICAL is
+ − 102 used when determining the end types of a coding system.
+ − 103 canonicalize-after-coding also consults CANONICAL (it has to, because
+ − 104 the data in the lstream is based on CANONICAL, not on the original
+ − 105 coding system). */
+ − 106 MARKED_SLOT (canonical)
+ − 107
+ − 108 #undef MARKED_SLOT
+ − 109 #undef MARKED_SLOT_ARRAY
+ − 110 #undef CODING_SYSTEM_SLOT_DECLARATION