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
|