/[emacs]/emacs/src/coding.h
ViewVC logotype

Diff of /emacs/src/coding.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.63 by eliz, Sat Feb 23 18:38:25 2002 UTC revision 1.63.2.1 by handa, Fri Mar 1 01:17:24 2002 UTC
# Line 1  Line 1 
1  /* Header for coding system handler.  /* Header for coding system handler.
2     Copyright (C) 1995, 1997 Electrotechnical Laboratory, JAPAN.     Copyright (C) 1995, 1997 Electrotechnical Laboratory, JAPAN.
3     Licensed to the Free Software Foundation.     Licensed to the Free Software Foundation.
4       Copyright (C) 2001, 2002
5         National Institute of Advanced Industrial Science and Technology (AIST)
6         Registration Number H13PRO009
7    
8  This file is part of GNU Emacs.  This file is part of GNU Emacs.
9    
# Line 22  Boston, MA 02111-1307, USA.  */ Line 25  Boston, MA 02111-1307, USA.  */
25  #ifndef EMACS_CODING_H  #ifndef EMACS_CODING_H
26  #define EMACS_CODING_H  #define EMACS_CODING_H
27    
28  #include "ccl.h"  /* Index to arguments of Fdefine_coding_system_internal.  */
29    
30  /*** EMACS' INTERNAL FORMAT (emacs-mule) section ***/  enum define_coding_system_arg_index
   
 /* All code (1-byte) of Emacs' internal format is classified into one  
    of the followings.  See also `charset.h'.  */  
 enum emacs_code_class_type  
31    {    {
32      EMACS_control_code,         /* Control codes in the range      coding_arg_name,
33                                     0x00..0x1F and 0x7F except for the      coding_arg_mnemonic,
34                                     following two codes.  */      coding_arg_coding_type,
35      EMACS_linefeed_code,        /* 0x0A (linefeed) to denote      coding_arg_charset_list,
36                                     end-of-line.  */      coding_arg_ascii_compatible_p,
37      EMACS_carriage_return_code, /* 0x0D (carriage-return) to be used      coding_arg_decode_translation_table,
38                                     in selective display mode.  */      coding_arg_encode_translation_table,
39      EMACS_ascii_code,           /* ASCII characters.  */      coding_arg_post_read_conversion,
40      EMACS_leading_code_2,       /* Base leading code of official      coding_arg_pre_write_conversion,
41                                     TYPE9N character.  */      coding_arg_default_char,
42      EMACS_leading_code_3,       /* Base leading code of private TYPE9N      coding_arg_plist,
43                                     or official TYPE9Nx9N character.  */      coding_arg_eol_type,
44      EMACS_leading_code_4,       /* Base leading code of private      coding_arg_max
                                    TYPE9Nx9N character.  */  
     EMACS_invalid_code          /* Invalid code, i.e. a base leading  
                                    code not yet assigned to any  
                                    charset, or a code of the range  
                                    0xA0..0xFF.  */  
45    };    };
46    
47  extern enum emacs_code_class_type emacs_code_class[256];  enum define_coding_iso2022_arg_index
   
 /*** ISO2022 section ***/  
   
 /* Macros to define code of control characters for ISO2022's functions.  */  
                         /* code */      /* function */  
 #define ISO_CODE_LF     0x0A            /* line-feed */  
 #define ISO_CODE_CR     0x0D            /* carriage-return */  
 #define ISO_CODE_SO     0x0E            /* shift-out */  
 #define ISO_CODE_SI     0x0F            /* shift-in */  
 #define ISO_CODE_SS2_7  0x19            /* single-shift-2 for 7-bit code */  
 #define ISO_CODE_ESC    0x1B            /* escape */  
 #define ISO_CODE_SS2    0x8E            /* single-shift-2 */  
 #define ISO_CODE_SS3    0x8F            /* single-shift-3 */  
 #define ISO_CODE_CSI    0x9B            /* control-sequence-introduce */  
   
 /* All code (1-byte) of ISO2022 is classified into one of the  
    followings.  */  
 enum iso_code_class_type  
48    {    {
49      ISO_control_0,              /* Control codes in the range      coding_arg_iso2022_initial = coding_arg_max,
50                                     0x00..0x1F and 0x7F, except for the      coding_arg_iso2022_reg_usage,
51                                     following 5 codes.  */      coding_arg_iso2022_request,
52      ISO_carriage_return,        /* ISO_CODE_CR (0x0D) */      coding_arg_iso2022_flags,
53      ISO_shift_out,              /* ISO_CODE_SO (0x0E) */      coding_arg_iso2022_max
     ISO_shift_in,               /* ISO_CODE_SI (0x0F) */  
     ISO_single_shift_2_7,       /* ISO_CODE_SS2_7 (0x19) */  
     ISO_escape,                 /* ISO_CODE_SO (0x1B) */  
     ISO_control_1,              /* Control codes in the range  
                                    0x80..0x9F, except for the  
                                    following 3 codes.  */  
     ISO_single_shift_2,         /* ISO_CODE_SS2 (0x8E) */  
     ISO_single_shift_3,         /* ISO_CODE_SS3 (0x8F) */  
     ISO_control_sequence_introducer, /* ISO_CODE_CSI (0x9B) */  
     ISO_0x20_or_0x7F,           /* Codes of the values 0x20 or 0x7F.  */  
     ISO_graphic_plane_0,        /* Graphic codes in the range 0x21..0x7E.  */  
     ISO_0xA0_or_0xFF,           /* Codes of the values 0xA0 or 0xFF.  */  
     ISO_graphic_plane_1         /* Graphic codes in the range 0xA1..0xFE.  */  
54    };    };
55    
56  /** The macros CODING_FLAG_ISO_XXX defines a flag bit of the `flags'  enum define_coding_utf16_arg_index
57    element in the structure `coding_system'.  This information is used    {
58    while encoding a text to ISO2022.  **/      coding_arg_utf16_bom = coding_arg_max,
59        coding_arg_utf16_endian,
60  /* If set, produce short-form designation sequence (e.g. ESC $ A)      coding_arg_utf16_max
61     instead of long-form sequence (e.g. ESC $ ( A).  */    };
 #define CODING_FLAG_ISO_SHORT_FORM      0x0001  
62    
63  /* If set, reset graphic planes and registers at end-of-line to the  enum define_coding_ccl_arg_index
64     initial state.  */    {
65  #define CODING_FLAG_ISO_RESET_AT_EOL    0x0002      coding_arg_ccl_decoder,
66        coding_arg_ccl_encoder,
67        coding_arg_ccl_valids,
68        coding_arg_ccl_max
69      };
70    
71  /* If set, reset graphic planes and registers before any control  extern Lisp_Object Vcoding_system_hash_table;
    characters to the initial state.  */  
 #define CODING_FLAG_ISO_RESET_AT_CNTL   0x0004  
72    
73  /* If set, encode by 7-bit environment.  */  /* Enumeration of coding system type.  */
 #define CODING_FLAG_ISO_SEVEN_BITS      0x0008  
74    
75  /* If set, use locking-shift function.  */  enum coding_system_type
76  #define CODING_FLAG_ISO_LOCKING_SHIFT   0x0010    {
77        coding_type_charset,
78        coding_type_utf_8,
79        coding_type_utf_16,
80        coding_type_iso_2022,
81        coding_type_emacs_mule,
82        coding_type_sjis,
83        coding_type_ccl,
84        coding_type_raw_text,
85        coding_type_undecided,
86        coding_type_max
87      };
88    
 /* If set, use single-shift function.  Overwrite  
    CODING_FLAG_ISO_LOCKING_SHIFT.  */  
 #define CODING_FLAG_ISO_SINGLE_SHIFT    0x0020  
89    
90  /* If set, designate JISX0201-Roman instead of ASCII.  */  /* Enumeration of end-of-line format type.  */
 #define CODING_FLAG_ISO_USE_ROMAN       0x0040  
91    
92  /* If set, designate JISX0208-1978 instead of JISX0208-1983.  */  enum end_of_line_type
93  #define CODING_FLAG_ISO_USE_OLDJIS      0x0080    {
94        eol_lf,             /* Line-feed only, same as Emacs' internal
95                               format.  */
96        eol_crlf,           /* Sequence of carriage-return and
97                               line-feed.  */
98        eol_cr,             /* Carriage-return only.  */
99        eol_any,            /* Accept any of above.  Produce line-feed
100                               only.  */
101        eol_undecided,      /* This value is used to denote that the
102                               eol-type is not yet undecided.  */
103        eol_type_max
104      };
105    
106  /* If set, do not produce ISO6429's direction specifying sequence.  */  /* Enumeration of index to an attribute vector of a coding system.  */
 #define CODING_FLAG_ISO_NO_DIRECTION    0x0100  
107    
108  /* If set, assume designation states are reset at beginning of line on  enum coding_attr_index
109     output.  */    {
110  #define CODING_FLAG_ISO_INIT_AT_BOL     0x0200      coding_attr_base_name,
111        coding_attr_docstring,
112        coding_attr_mnemonic,
113        coding_attr_type,
114        coding_attr_charset_list,
115        coding_attr_ascii_compat,
116        coding_attr_decode_tbl,
117        coding_attr_encode_tbl,
118        coding_attr_post_read,
119        coding_attr_pre_write,
120        coding_attr_default_char,
121        coding_attr_plist,
122    
123        coding_attr_category,
124        coding_attr_safe_charsets,
125    
126        /* The followings are extra attributes for each type.  */
127        coding_attr_charset_valids,
128    
129        coding_attr_ccl_decoder,
130        coding_attr_ccl_encoder,
131        coding_attr_ccl_valids,
132    
133        coding_attr_iso_initial,
134        coding_attr_iso_usage,
135        coding_attr_iso_request,
136        coding_attr_iso_flags,
137    
138  /* If set, designation sequence should be placed at beginning of line      coding_attr_utf_16_bom,
139     on output.  */      coding_attr_utf_16_endian,
 #define CODING_FLAG_ISO_DESIGNATE_AT_BOL 0x0400  
140    
141  /* If set, do not encode unsafe characters on output.  */      coding_attr_emacs_mule_full,
 #define CODING_FLAG_ISO_SAFE            0x0800  
142    
143  /* If set, extra latin codes (128..159) are accepted as a valid code      coding_attr_last_index
144     on input.  */    };
 #define CODING_FLAG_ISO_LATIN_EXTRA     0x1000  
145    
 /* If set, use designation escape sequence.  */  
 #define CODING_FLAG_ISO_DESIGNATION     0x10000  
146    
147  /* A character to be produced on output if encoding of the original  #define CODING_ATTR_BASE_NAME(attrs)    AREF (attrs, coding_attr_base_name)
148     character is prohibited by CODING_FLAG_ISO_SAFE.  */  #define CODING_ATTR_TYPE(attrs)         AREF (attrs, coding_attr_type)
149  #define CODING_INHIBIT_CHARACTER_SUBSTITUTION  077 /* 077 == `?' */  #define CODING_ATTR_CHARSET_LIST(attrs) AREF (attrs, coding_attr_charset_list)
150    #define CODING_ATTR_MNEMONIC(attrs)     AREF (attrs, coding_attr_mnemonic)
151    #define CODING_ATTR_DOCSTRING(attrs)    AREF (attrs, coding_attr_docstring)
152    #define CODING_ATTR_ASCII_COMPAT(attrs) AREF (attrs, coding_attr_ascii_compat)
153    #define CODING_ATTR_DECODE_TBL(attrs)   AREF (attrs, coding_attr_decode_tbl)
154    #define CODING_ATTR_ENCODE_TBL(attrs)   AREF (attrs, coding_attr_encode_tbl)
155    #define CODING_ATTR_POST_READ(attrs)    AREF (attrs, coding_attr_post_read)
156    #define CODING_ATTR_PRE_WRITE(attrs)    AREF (attrs, coding_attr_pre_write)
157    #define CODING_ATTR_DEFAULT_CHAR(attrs) AREF (attrs, coding_attr_default_char)
158    #define CODING_ATTR_DIRECTION(attrs)    AREF (attrs, coding_attr_direction)
159    #define CODING_ATTR_FLUSHING(attrs)     AREF (attrs, coding_attr_flushing)
160    #define CODING_ATTR_PLIST(attrs)        AREF (attrs, coding_attr_plist)
161    #define CODING_ATTR_CATEGORY(attrs)     AREF (attrs, coding_attr_category)
162    #define CODING_ATTR_SAFE_CHARSETS(attrs)AREF (attrs, coding_attr_safe_charsets)
163    
164    
165    #define CODING_ID_ATTRS(id)     \
166      (AREF (HASH_VALUE (XHASH_TABLE (Vcoding_system_hash_table), id), 0))
167    
168    #define CODING_ID_ALIASES(id)   \
169      (AREF (HASH_VALUE (XHASH_TABLE (Vcoding_system_hash_table), id), 1))
170    
171    #define CODING_ID_EOL_TYPE(id)  \
172      (AREF (HASH_VALUE (XHASH_TABLE (Vcoding_system_hash_table), id), 2))
173    
174    #define CODING_ID_NAME(id) \
175      (HASH_KEY (XHASH_TABLE (Vcoding_system_hash_table), id))
176    
177    #define CODING_SYSTEM_SPEC(coding_system_symbol)        \
178      (Fgethash (coding_system_symbol, Vcoding_system_hash_table, Qnil))
179    
180    #define CODING_SYSTEM_ID(coding_system_symbol)                  \
181      hash_lookup (XHASH_TABLE (Vcoding_system_hash_table),         \
182                   coding_system_symbol, NULL)
183    
184  /* Structure of the field `spec.iso2022' in the structure `coding_system'.  */  #define CODING_SYSTEM_P(coding_system_symbol)   \
185  struct iso2022_spec    (! NILP (CODING_SYSTEM_SPEC (coding_system_symbol)))
 {  
   /* The current graphic register invoked to each graphic plane.  */  
   int current_invocation[2];  
186    
187    /* The current charset designated to each graphic register.  */  #define  CHECK_CODING_SYSTEM(x)                         \
188    int current_designation[4];    do {                                                  \
189        if (!CODING_SYSTEM_P (x))                           \
190          x = wrong_type_argument (Qcoding_system_p, (x));  \
191      } while (0)
192    
   /* A charset initially designated to each graphic register.  */  
   int initial_designation[4];  
193    
194    /* If not -1, it is a graphic register specified in an invalid  #define CHECK_CODING_SYSTEM_GET_SPEC(x, spec)           \
195       designation sequence.  */    do {                                                  \
196    int last_invalid_designation_register;      spec = CODING_SYSTEM_SPEC (x);                      \
197        if (NILP (spec))                                    \
198    /* A graphic register to which each charset should be designated.  */        x = wrong_type_argument (Qcoding_system_p, (x));  \
199    unsigned char requested_designation[MAX_CHARSET + 1];    } while (0)
   
   /* A revision number to be specified for each charset on encoding.  
      The value 255 means no revision number for the corresponding  
      charset.  */  
   unsigned char charset_revision_number[MAX_CHARSET + 1];  
200    
   /* Set to 1 temporarily only when graphic register 2 or 3 is invoked  
      by single-shift while encoding.  */  
   int single_shifting;  
201    
202    /* Set to 1 temporarily only when processing at beginning of line.  */  #define CHECK_CODING_SYSTEM_GET_ID(x, id)                       \
203    int bol;    do                                                            \
204  };      {                                                           \
205          id = CODING_SYSTEM_ID (x);                                \
206          if (id < 0)                                               \
207            x = wrong_type_argument (Qcoding_system_p, (x));        \
208        } while (0)
209    
 /* Macros to access each field in the structure `spec.iso2022'.  */  
 #define CODING_SPEC_ISO_INVOCATION(coding, plane) \  
   (coding)->spec.iso2022.current_invocation[plane]  
 #define CODING_SPEC_ISO_DESIGNATION(coding, reg) \  
   (coding)->spec.iso2022.current_designation[reg]  
 #define CODING_SPEC_ISO_INITIAL_DESIGNATION(coding, reg) \  
   (coding)->spec.iso2022.initial_designation[reg]  
 #define CODING_SPEC_ISO_REQUESTED_DESIGNATION(coding, charset) \  
   (coding)->spec.iso2022.requested_designation[charset]  
 #define CODING_SPEC_ISO_REVISION_NUMBER(coding, charset) \  
   (coding)->spec.iso2022.charset_revision_number[charset]  
 #define CODING_SPEC_ISO_SINGLE_SHIFTING(coding) \  
   (coding)->spec.iso2022.single_shifting  
 #define CODING_SPEC_ISO_BOL(coding) \  
   (coding)->spec.iso2022.bol  
   
 /* A value which may appear in  
    coding->spec.iso2022.requested_designation indicating that the  
    corresponding charset does not request any graphic register to be  
    designated.  */  
 #define CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION 4  
   
 /* Return a charset which is currently designated to the graphic plane  
    PLANE in the coding-system CODING.  */  
 #define CODING_SPEC_ISO_PLANE_CHARSET(coding, plane)    \  
   ((CODING_SPEC_ISO_INVOCATION (coding, plane) < 0)     \  
    ? -1                                                 \  
    : CODING_SPEC_ISO_DESIGNATION (coding,               \  
                                   CODING_SPEC_ISO_INVOCATION (coding, plane)))  
   
 /*** BIG5 section ***/  
   
 /* Macros to denote each type of BIG5 coding system.  */  
 #define CODING_FLAG_BIG5_HKU    0x00 /* BIG5-HKU is one of variants of  
                                         BIG5 developed by Hong Kong  
                                         University.  */  
 #define CODING_FLAG_BIG5_ETEN   0x01 /* BIG5_ETen is one of variants  
                                         of BIG5 developed by the  
                                         company ETen in Taiwan.  */  
210    
211  /*** GENERAL section ***/  /*** GENERAL section ***/
212    
213  /* Types of coding system.  */  /* Enumeration of result code of code conversion.  */
214  enum coding_type  enum coding_result_code
215    {    {
216      coding_type_no_conversion,  /* A coding system which requires no      CODING_RESULT_SUCCESS,
217                                     conversion for reading and writing      CODING_RESULT_INSUFFICIENT_SRC,
218                                     including end-of-line format.  */      CODING_RESULT_INSUFFICIENT_DST,
219      coding_type_emacs_mule,     /* A coding system used in Emacs'      CODING_RESULT_INCONSISTENT_EOL,
220                                     buffer and string.  Requires no      CODING_RESULT_INSUFFICIENT_CMP,
221                                     conversion for reading and writing      CODING_RESULT_INTERRUPT,
222                                     except for end-of-line format.  */      CODING_RESULT_INSUFFICIENT_MEM
     coding_type_undecided,      /* A coding system which requires  
                                    automatic detection of a real  
                                    coding system.  */  
     coding_type_sjis,           /* SJIS coding system for Japanese.  */  
     coding_type_iso2022,        /* Any coding system of ISO2022  
                                    variants.  */  
     coding_type_big5,           /* BIG5 coding system for Chinese.  */  
     coding_type_ccl,            /* The coding system of which decoder  
                                    and encoder are written in CCL.  */  
     coding_type_raw_text        /* A coding system for a text  
                                    containing random 8-bit code which  
                                    does not require code conversion  
                                    except for end-of-line format. */  
223    };    };
224    
 /* Formats of end-of-line.  */  
 #define CODING_EOL_LF   0       /* Line-feed only, same as Emacs'  
                                    internal format.  */  
 #define CODING_EOL_CRLF 1       /* Sequence of carriage-return and  
                                    line-feed.  */  
 #define CODING_EOL_CR   2       /* Carriage-return only.  */  
 #define CODING_EOL_UNDECIDED 3  /* This value is used to denote the  
                                    eol-type is not yet decided.  */  
 #define CODING_EOL_INCONSISTENT 4 /* This value is used to denote the  
                                      eol-type is not consistent  
                                      through the file.  */  
   
 /* 1 iff composing.  */  
 #define COMPOSING_P(coding) ((int) coding->composing > (int) COMPOSITION_NO)  
   
 #define COMPOSITION_DATA_SIZE 4080  
 #define COMPOSITION_DATA_MAX_BUNCH_LENGTH (4 + MAX_COMPOSITION_COMPONENTS*2)  
   
 /* Data structure to hold information about compositions of text that  
    is being decoded or encode.  ISO 2022 base code conversion routines  
    handle special ESC sequences for composition specification.  But,  
    they can't get/put such information directly from/to a buffer in  
    the deepest place.  So, they store or retrieve the information  
    through this structure.  
   
    The encoder stores the information in this structure when it meets  
    ESC sequences for composition while encoding codes, then, after all  
    text codes are encoded, puts `composition' properties on the text  
    by referring to the structure.  
   
    The decoder at first stores the information of a text to be  
    decoded, then, while decoding codes, generates ESC sequences for  
    composition at proper places by referring to the structure.  */  
   
 struct composition_data  
 {  
   /* The character position of the first character to be encoded or  
      decoded.  START and END (see below) are relative to this  
      position.  */  
   int char_offset;  
   
   /* The composition data.  These elements are repeated for each  
      composition:  
         LENGTH START END METHOD [ COMPONENT ... ]  
      where,  
         LENGTH is the number of elements for this composition.  
   
         START and END are starting and ending character positions of  
         the composition relative to `char_offset'.  
   
         METHOD is one of `enum composing_status' specifying the way of  
         composition.  
   
         COMPONENT is a character or an encoded composition rule.  */  
   int data[COMPOSITION_DATA_SIZE];  
   
   /* The number of elements in `data' currently used.  */  
   int used;  
   
   /* Pointers to the previous and next structures.  When `data' is  
      filled up, another structure is allocated and linked in `next'.  
      The new structure has backward link to this structure in `prev'.  
      The number of chained structures depends on how many compositions  
      the text being encoded or decoded contains.  */  
   struct composition_data *prev, *next;  
 };  
   
 /* Macros used for the member `result' of the struct  
    coding_system.  */  
 #define CODING_FINISH_NORMAL            0  
 #define CODING_FINISH_INSUFFICIENT_SRC  1  
 #define CODING_FINISH_INSUFFICIENT_DST  2  
 #define CODING_FINISH_INCONSISTENT_EOL  3  
 #define CODING_FINISH_INSUFFICIENT_CMP  4  
 #define CODING_FINISH_INTERRUPT         5  
225    
226  /* Macros used for the member `mode' of the struct coding_system.  */  /* Macros used for the member `mode' of the struct coding_system.  */
227    
# Line 330  struct composition_data Line 231  struct composition_data
231    
232  /* If set, the decoding/encoding routines treat the current data as  /* If set, the decoding/encoding routines treat the current data as
233     the last block of the whole text to be converted, and do     the last block of the whole text to be converted, and do
234     appropriate finishing job.  */     appropriate fisishing job.  */
235  #define CODING_MODE_LAST_BLOCK                  0x02  #define CODING_MODE_LAST_BLOCK                  0x02
236    
237  /* If set, it means that the current source text is in a buffer which  /* If set, it means that the current source text is in a buffer which
# Line 341  struct composition_data Line 242  struct composition_data
242     set, it means that right-to-left text is being processed.  */     set, it means that right-to-left text is being processed.  */
243  #define CODING_MODE_DIRECTION                   0x08  #define CODING_MODE_DIRECTION                   0x08
244    
245  struct coding_system  #define CODING_MODE_FIXED_DESTINATION           0x10
246    
247    #define CODING_MODE_SAFE_ENCODING               0x20
248    
249    /* Structure of the field `spec.iso_2022' in the structure
250       `coding_system'.  */
251    struct iso_2022_spec
252    {
253      /*  */
254      unsigned flags;
255    
256      /* The current graphic register invoked to each graphic plane.  */
257      int current_invocation[2];
258    
259      /* The current charset designated to each graphic register.  The
260         value -1 means that not charset is designated, -2 means that
261         there was an invalid designation previously.  */
262      int current_designation[4];
263    
264      /* Set to 1 temporarily only when graphic register 2 or 3 is invoked
265         by single-shift while encoding.  */
266      int single_shifting;
267    
268      /* Set to 1 temporarily only when processing at beginning of line.  */
269      int bol;
270    };
271    
272    struct ccl_spec;
273    
274    enum utf_16_bom_type
275      {
276        utf_16_detect_bom,
277        utf_16_without_bom,
278        utf_16_with_bom
279      };
280    
281    enum utf_16_endian_type
282      {
283        utf_16_big_endian,
284        utf_16_little_endian
285      };
286    
287    struct utf_16_spec
288  {  {
289    /* Type of the coding system.  */    enum utf_16_bom_type bom;
290    enum coding_type type;    enum utf_16_endian_type endian;
291      int surrogate;
292    };
293    
294    /* Type of end-of-line format (LF, CRLF, or CR) of the coding system.  */  struct coding_system
295    int eol_type;  {
296      /* ID number of the coding system.  This is an index to
297         Vcoding_system_hash_table.  This value is set by
298         setup_coding_system.  At the early stage of building time, this
299         value is -1 in the array coding_categories to indicate that no
300         coding-system of that category is yet defined.  */
301      int id;
302    
303    /* Flag bits of the coding system.  The meaning of each bit is common    /* Flag bits of the coding system.  The meaning of each bit is common
304       to all types of coding systems.  */       to all types of coding systems.  */
305    unsigned int common_flags;    int common_flags;
   
   /* Flag bits of the coding system.  The meaning of each bit depends  
      on the type of the coding system.  */  
   unsigned int flags;  
306    
307    /* Mode bits of the coding system.  See the comments of the macros    /* Mode bits of the coding system.  See the comments of the macros
308       CODING_MODE_XXX.  */       CODING_MODE_XXX.  */
309    unsigned int mode;    unsigned int mode;
310    
   /* The current status of composition handling.  */  
   int composing;  
   
   /* 1 iff the next character is a composition rule.  */  
   int composition_rule_follows;  
   
   /* Information of compositions are stored here on decoding and set  
      in advance on encoding.  */  
   struct composition_data *cmp_data;  
   
   /* Index to cmp_data->data for the first element for the current  
      composition.  */  
   int cmp_data_start;  
   
   /* Index to cmp_data->data for the current element for the current  
      composition.  */  
   int cmp_data_index;  
   
311    /* Detailed information specific to each type of coding system.  */    /* Detailed information specific to each type of coding system.  */
312    union spec    union
313      {      {
314        struct iso2022_spec iso2022;        struct iso_2022_spec iso_2022;
315        struct ccl_spec ccl;      /* Defined in ccl.h.  */        struct ccl_spec *ccl;     /* Defined in ccl.h.  */
316          struct utf_16_spec utf_16;
317          int emacs_mule_full_support;
318      } spec;      } spec;
319    
320    /* Index number of coding category of the coding system.  */    int max_charset_id;
321    int category_idx;    char *safe_charsets;
322    
323    /* The following two members specify how characters 128..159 are    /* The following two members specify how binary 8-bit code 128..255
324       represented in source and destination text respectively.  1 means       are represented in source and destination text respectively.  1
325       they are represented by 2-byte sequence, 0 means they are       means they are represented by 2-byte sequence, 0 means they are
326       represented by 1-byte as is (see the comment in charset.h).  */       represented by 1-byte as is (see the comment in character.h).  */
327    unsigned src_multibyte : 1;    unsigned src_multibyte : 1;
328    unsigned dst_multibyte : 1;    unsigned dst_multibyte : 1;
329    
# Line 400  struct coding_system Line 331  struct coding_system
331       -1 in setup_coding_system, and updated by detect_coding.  So,       -1 in setup_coding_system, and updated by detect_coding.  So,
332       when this is equal to the byte length of the text being       when this is equal to the byte length of the text being
333       converted, we can skip the actual conversion process.  */       converted, we can skip the actual conversion process.  */
334    int heading_ascii;    int head_ascii;
335    
336    /* The following members are set by encoding/decoding routine.  */    /* The following members are set by encoding/decoding routine.  */
337    int produced, produced_char, consumed, consumed_char;    EMACS_INT produced, produced_char, consumed, consumed_char;
338    
339    /* Number of error source data found in a decoding routine.  */    /* Number of error source data found in a decoding routine.  */
340    int errors;    int errors;
341    
342    /* Finish status of code conversion.  It should be one of macros    /* Store the positions of error source data. */
343       CODING_FINISH_XXXX.  */    EMACS_INT *error_positions;
   int result;  
344    
345    /* If nonzero, suppress error notification.  */    /* Finish status of code conversion.  */
346    int suppress_error;    enum coding_result_code result;
347    
348    /* The following members are all Lisp symbols.  We don't have to    /* The following members are all Lisp symbols.  We don't have to
349       protect them from GC because the current garbage collection       protect them from GC because the current garbage collection
350       doesn't relocate Lisp symbols.  But, when it is changed, we must       doesn't relocate Lisp symbols.  But, when it is changed, we must
351       find a way to protect them.  */       find a way to protect them.  */
352    
353    /* Backward pointer to the Lisp symbol of the coding system.  */    EMACS_INT src_pos, src_pos_byte, src_chars, src_bytes;
354    Lisp_Object symbol;    Lisp_Object src_object;
355      unsigned char *source;
356    /* Lisp function (symbol) to be called after decoding to do  
357       additional conversion, or nil.  */    EMACS_INT dst_pos, dst_pos_byte, dst_bytes;
358    Lisp_Object post_read_conversion;    Lisp_Object dst_object;
359      unsigned char *destination;
360    /* Lisp function (symbol) to be called before encoding to do  
361       additional conversion, or nil.  */    int chars_at_source;
362    Lisp_Object pre_write_conversion;  
363      /* If an element is non-negative, it is a character code.
364    /* Character translation tables to look up, or nil.  */  
365    Lisp_Object translation_table_for_decode;       If it is in the range -128..-1, it is a 8-bit character code
366    Lisp_Object translation_table_for_encode;       minus 256.
367    
368         If it is less than -128, it specifies the start of an annotation
369         chunk.  The length of the chunk is -128 minus the value of the
370         element.  The following elements are OFFSET, ANNOTATION-TYPE, and
371         a sequence of actual data for the annotation.  OFFSET is a
372         character position offset from dst_pos or src_pos,
373         ANNOTATION-TYPE specfies the meaning of the annotation and how to
374         handle the following data..  */
375      int *charbuf;
376      int charbuf_size, charbuf_used;
377    
378      /* Set to 1 if charbuf contains an annotation.  */
379      int annotated;
380    
381      unsigned char carryover[64];
382      int carryover_bytes;
383    
384      int default_char;
385    
386      int (*detector) P_ ((struct coding_system *, int *));
387      void (*decoder) P_ ((struct coding_system *));
388      int (*encoder) P_ ((struct coding_system *));
389  };  };
390    
391  #define CODING_REQUIRE_FLUSHING_MASK    1  /* Meanings of bits in the member `common_flags' of the structure
392  #define CODING_REQUIRE_DECODING_MASK    2     coding_system.  The lowest 8 bits are reserved for various kind of
393  #define CODING_REQUIRE_ENCODING_MASK    4     annotations (currently two of them are used).  */
394  #define CODING_REQUIRE_DETECTION_MASK   8  #define CODING_ANNOTATION_MASK                  0x00FF
395    #define CODING_ANNOTATE_COMPOSITION_MASK        0x0001
396    #define CODING_ANNOTATE_DIRECTION_MASK          0x0002
397    #define CODING_FOR_UNIBYTE_MASK                 0x0100
398    #define CODING_REQUIRE_FLUSHING_MASK            0x0200
399    #define CODING_REQUIRE_DECODING_MASK            0x0400
400    #define CODING_REQUIRE_ENCODING_MASK            0x0800
401    #define CODING_REQUIRE_DETECTION_MASK           0x1000
402    #define CODING_RESET_AT_BOL_MASK                0x2000
403    
404    /* Return 1 if the coding context CODING requires annotaion
405       handling.  */
406    #define CODING_REQUIRE_ANNOTATION(coding) \
407      ((coding)->common_flags & CODING_ANNOTATION_MASK)
408    
409    /* Return 1 if the coding context CODING prefers decoding into unibyte.  */
410    #define CODING_FOR_UNIBYTE(coding) \
411      ((coding)->common_flags & CODING_FOR_UNIBYTE_MASK)
412    
413  /* Return 1 if the coding system CODING requires specific code to be  /* Return 1 if the coding context CODING requires specific code to be
414     attached at the tail of converted text.  */     attached at the tail of converted text.  */
415  #define CODING_REQUIRE_FLUSHING(coding) \  #define CODING_REQUIRE_FLUSHING(coding) \
416    ((coding)->common_flags & CODING_REQUIRE_FLUSHING_MASK)    ((coding)->common_flags & CODING_REQUIRE_FLUSHING_MASK)
417    
418  /* Return 1 if the coding system CODING requires code conversion on  /* Return 1 if the coding context CODING requires code conversion on
419     decoding.  */     decoding.  */
420  #define CODING_REQUIRE_DECODING(coding) \  #define CODING_REQUIRE_DECODING(coding) \
421    ((coding)->dst_multibyte              \    ((coding)->dst_multibyte              \
422     || (coding)->common_flags & CODING_REQUIRE_DECODING_MASK)     || (coding)->common_flags & CODING_REQUIRE_DECODING_MASK)
423    
424  /* Return 1 if the coding system CODING requires code conversion on  
425    /* Return 1 if the coding context CODING requires code conversion on
426     encoding.  */     encoding.  */
427  #define CODING_REQUIRE_ENCODING(coding) \  #define CODING_REQUIRE_ENCODING(coding)                         \
428    ((coding)->src_multibyte              \    ((coding)->src_multibyte                                      \
429     || (coding)->common_flags & CODING_REQUIRE_ENCODING_MASK)     || (coding)->common_flags & CODING_REQUIRE_ENCODING_MASK     \
430       || (coding)->mode & CODING_MODE_SELECTIVE_DISPLAY)
431    
432  /* Return 1 if the coding system CODING requires some kind of code  
433    /* Return 1 if the coding context CODING requires some kind of code
434     detection.  */     detection.  */
435  #define CODING_REQUIRE_DETECTION(coding) \  #define CODING_REQUIRE_DETECTION(coding) \
436    ((coding)->common_flags & CODING_REQUIRE_DETECTION_MASK)    ((coding)->common_flags & CODING_REQUIRE_DETECTION_MASK)
437    
438  /* Return 1 if the coding system CODING requires code conversion on  /* Return 1 if the coding context CODING requires code conversion on
439     decoding or some kind of code detection.  */     decoding or some kind of code detection.  */
440  #define CODING_MAY_REQUIRE_DECODING(coding)     \  #define CODING_MAY_REQUIRE_DECODING(coding)     \
441    (CODING_REQUIRE_DECODING (coding)             \    (CODING_REQUIRE_DECODING (coding)             \
442     || CODING_REQUIRE_DETECTION (coding))     || CODING_REQUIRE_DETECTION (coding))
443    
 /* Index for each coding category in `coding_category_table' */  
 #define CODING_CATEGORY_IDX_EMACS_MULE  0  
 #define CODING_CATEGORY_IDX_SJIS        1  
 #define CODING_CATEGORY_IDX_ISO_7       2  
 #define CODING_CATEGORY_IDX_ISO_7_TIGHT 3  
 #define CODING_CATEGORY_IDX_ISO_8_1     4  
 #define CODING_CATEGORY_IDX_ISO_8_2     5  
 #define CODING_CATEGORY_IDX_ISO_7_ELSE  6  
 #define CODING_CATEGORY_IDX_ISO_8_ELSE  7  
 #define CODING_CATEGORY_IDX_CCL         8  
 #define CODING_CATEGORY_IDX_BIG5        9  
 #define CODING_CATEGORY_IDX_UTF_8       10  
 #define CODING_CATEGORY_IDX_UTF_16_BE   11  
 #define CODING_CATEGORY_IDX_UTF_16_LE   12  
 #define CODING_CATEGORY_IDX_RAW_TEXT    13  
 #define CODING_CATEGORY_IDX_BINARY      14  
 #define CODING_CATEGORY_IDX_MAX         15  
   
 /* Definitions of flag bits returned by the function  
    detect_coding_mask ().  */  
 #define CODING_CATEGORY_MASK_EMACS_MULE (1 << CODING_CATEGORY_IDX_EMACS_MULE)  
 #define CODING_CATEGORY_MASK_SJIS       (1 << CODING_CATEGORY_IDX_SJIS)  
 #define CODING_CATEGORY_MASK_ISO_7      (1 << CODING_CATEGORY_IDX_ISO_7)  
 #define CODING_CATEGORY_MASK_ISO_7_TIGHT (1 << CODING_CATEGORY_IDX_ISO_7_TIGHT)  
 #define CODING_CATEGORY_MASK_ISO_8_1    (1 << CODING_CATEGORY_IDX_ISO_8_1)  
 #define CODING_CATEGORY_MASK_ISO_8_2    (1 << CODING_CATEGORY_IDX_ISO_8_2)  
 #define CODING_CATEGORY_MASK_ISO_7_ELSE (1 << CODING_CATEGORY_IDX_ISO_7_ELSE)  
 #define CODING_CATEGORY_MASK_ISO_8_ELSE (1 << CODING_CATEGORY_IDX_ISO_8_ELSE)  
 #define CODING_CATEGORY_MASK_CCL        (1 << CODING_CATEGORY_IDX_CCL)  
 #define CODING_CATEGORY_MASK_BIG5       (1 << CODING_CATEGORY_IDX_BIG5)  
 #define CODING_CATEGORY_MASK_UTF_8      (1 << CODING_CATEGORY_IDX_UTF_8)  
 #define CODING_CATEGORY_MASK_UTF_16_BE  (1 << CODING_CATEGORY_IDX_UTF_16_BE)  
 #define CODING_CATEGORY_MASK_UTF_16_LE  (1 << CODING_CATEGORY_IDX_UTF_16_LE)  
 #define CODING_CATEGORY_MASK_RAW_TEXT   (1 << CODING_CATEGORY_IDX_RAW_TEXT)  
 #define CODING_CATEGORY_MASK_BINARY     (1 << CODING_CATEGORY_IDX_BINARY)  
   
 /* This value is returned if detect_coding_mask () find nothing other  
    than ASCII characters.  */  
 #define CODING_CATEGORY_MASK_ANY        \  
   (  CODING_CATEGORY_MASK_EMACS_MULE    \  
    | CODING_CATEGORY_MASK_SJIS          \  
    | CODING_CATEGORY_MASK_ISO_7         \  
    | CODING_CATEGORY_MASK_ISO_7_TIGHT   \  
    | CODING_CATEGORY_MASK_ISO_8_1       \  
    | CODING_CATEGORY_MASK_ISO_8_2       \  
    | CODING_CATEGORY_MASK_ISO_7_ELSE    \  
    | CODING_CATEGORY_MASK_ISO_8_ELSE    \  
    | CODING_CATEGORY_MASK_CCL           \  
    | CODING_CATEGORY_MASK_BIG5          \  
    | CODING_CATEGORY_MASK_UTF_8         \  
    | CODING_CATEGORY_MASK_UTF_16_BE     \  
    | CODING_CATEGORY_MASK_UTF_16_LE)  
   
 #define CODING_CATEGORY_MASK_ISO_7BIT \  
   (CODING_CATEGORY_MASK_ISO_7 | CODING_CATEGORY_MASK_ISO_7_TIGHT)  
   
 #define CODING_CATEGORY_MASK_ISO_8BIT \  
   (CODING_CATEGORY_MASK_ISO_8_1 | CODING_CATEGORY_MASK_ISO_8_2)  
   
 #define CODING_CATEGORY_MASK_ISO_SHIFT \  
   (CODING_CATEGORY_MASK_ISO_7_ELSE | CODING_CATEGORY_MASK_ISO_8_ELSE)  
   
 #define CODING_CATEGORY_MASK_ISO        \  
   (  CODING_CATEGORY_MASK_ISO_7BIT      \  
    | CODING_CATEGORY_MASK_ISO_SHIFT     \  
    | CODING_CATEGORY_MASK_ISO_8BIT)  
   
 #define CODING_CATEGORY_MASK_UTF_16_BE_LE \  
    (CODING_CATEGORY_MASK_UTF_16_BE | CODING_CATEGORY_MASK_UTF_16_LE)  
   
444  /* Macros to decode or encode a character of JISX0208 in SJIS.  S1 and  /* Macros to decode or encode a character of JISX0208 in SJIS.  S1 and
445     S2 are the 1st and 2nd position-codes of JISX0208 in SJIS coding     S2 are the 1st and 2nd position-codes of JISX0208 in SJIS coding
446     system.  C1 and C2 are the 1st and 2nd position codes of Emacs'     system.  C1 and C2 are the 1st and 2nd position codes of Emacs'
447     internal format.  */     internal format.  */
448    
449  #define DECODE_SJIS(s1, s2, c1, c2)                     \  #define SJIS_TO_JIS(code)                               \
450    do {                                                  \    do {                                                  \
451      if (s2 >= 0x9F)                                     \      int s1, s2, j1, j2;                                 \
452        c1 = s1 * 2 - (s1 >= 0xE0 ? 0x160 : 0xE0),        \                                                          \
453        c2 = s2 - 0x7E;                                   \      s1 = (code) >> 8, s2 = (code) & 0xFF;               \
454      else                                                \                                                          \
455        c1 = s1 * 2 - ((s1 >= 0xE0) ? 0x161 : 0xE1),      \      if (s2 >= 0x9F)                                     \
456        c2 = s2 - ((s2 >= 0x7F) ? 0x20 : 0x1F);           \        (j1 = s1 * 2 - (s1 >= 0xE0 ? 0x160 : 0xE0),       \
457           j2 = s2 - 0x7E);                                 \
458        else                                                \
459          (j1 = s1 * 2 - ((s1 >= 0xE0) ? 0x161 : 0xE1),     \
460           j2 = s2 - ((s2 >= 0x7F) ? 0x20 : 0x1F));         \
461        (code) = (j1 << 8) | j2;                            \
462    } while (0)    } while (0)
463    
464  #define ENCODE_SJIS(c1, c2, s1, s2)                     \  
465    #define JIS_TO_SJIS(code)                               \
466    do {                                                  \    do {                                                  \
467      if (c1 & 1)                                         \      int s1, s2, j1, j2;                                 \
468        s1 = c1 / 2 + ((c1 < 0x5F) ? 0x71 : 0xB1),        \                                                          \
469        s2 = c2 + ((c2 >= 0x60) ? 0x20 : 0x1F);           \      j1 = (code) >> 8, j2 = (code) & 0xFF;               \
470        if (j1 & 1)                                         \
471          (s1 = j1 / 2 + ((j1 < 0x5F) ? 0x71 : 0xB1),       \
472           s2 = j2 + ((j2 >= 0x60) ? 0x20 : 0x1F));         \
473      else                                                \      else                                                \
474        s1 = c1 / 2 + ((c1 < 0x5F) ? 0x70 : 0xB0),        \        (s1 = j1 / 2 + ((j1 < 0x5F) ? 0x70 : 0xB0),       \
475        s2 = c2 + 0x7E;                                   \         s2 = j2 + 0x7E);                                 \
476        (code) = (j1 << 8) | j2;                            \
477    } while (0)    } while (0)
478    
479    
480  /* Encode the file name NAME using the specified coding system  /* Encode the file name NAME using the specified coding system
481     for file names, if any.  */     for file names, if any.  */
482  #define ENCODE_FILE(name)                                                  \  #define ENCODE_FILE(name)                                                  \
# Line 575  struct coding_system Line 488  struct coding_system
488        ? code_convert_string_norecord (name, Vdefault_file_name_coding_system, 1) \        ? code_convert_string_norecord (name, Vdefault_file_name_coding_system, 1) \
489        : name))        : name))
490    
491    
492  /* Decode the file name NAME using the specified coding system  /* Decode the file name NAME using the specified coding system
493     for file names, if any.  */     for file names, if any.  */
494  #define DECODE_FILE(name)                                                  \  #define DECODE_FILE(name)                                                  \
# Line 586  struct coding_system Line 500  struct coding_system
500        ? code_convert_string_norecord (name, Vdefault_file_name_coding_system, 0) \        ? code_convert_string_norecord (name, Vdefault_file_name_coding_system, 0) \
501        : name))        : name))
502    
503    
504  #ifdef WINDOWSNT  #ifdef WINDOWSNT
505  /* Encode the string STR using the specified coding system  /* Encode the string STR using the specified coding system
506     for w32 system functions, if any.  */     for w32 system functions, if any.  */
507  #define ENCODE_SYSTEM(str)                                                 \  #define ENCODE_SYSTEM(str)                                              \
508    (! NILP (Vlocale_coding_system)                                          \    (! NILP (Vlocale_coding_system)                                       \
509     && XFASTINT (Vlocale_coding_system) != 0                                \     && XFASTINT (Vlocale_coding_system) != 0                             \
510     ? code_convert_string_norecord (str, Vlocale_coding_system, 1)          \     ? code_convert_string_norecord (str, Vlocale_coding_system, 1)       \
511     : str)     : str)
512    
513  /* Decode the string STR using the specified coding system  /* Decode the string STR using the specified coding system
514     for w32 system functions, if any.  */     for w32 system functions, if any.  */
515  #define DECODE_SYSTEM(name)                                                \  #define DECODE_SYSTEM(name)                                             \
516    (! NILP (Vlocale_coding_system)                                          \    (! NILP (Vlocale_coding_system)                                       \
517     && XFASTINT (Vlocale_coding_system) != 0                                \     && XFASTINT (Vlocale_coding_system) != 0                             \
518     ? code_convert_string_norecord (str, Vlocale_coding_system, 0)          \     ? code_convert_string_norecord (str, Vlocale_coding_system, 0)       \
519     : str)     : str)
520    
521  #else /* WINDOWSNT */  #else /* WINDOWSNT */
# Line 611  struct coding_system Line 526  struct coding_system
526  #endif /* !WINDOWSNT */  #endif /* !WINDOWSNT */
527    
528  /* Extern declarations.  */  /* Extern declarations.  */
529  extern int decode_coding P_ ((struct coding_system *, unsigned char *,  extern Lisp_Object make_conversion_work_buffer P_ ((int));
530                                unsigned char *, int, int));  extern Lisp_Object code_conversion_restore P_ ((Lisp_Object));
 extern int encode_coding P_ ((struct coding_system *, unsigned char *,  
                               unsigned char *, int, int));  
 extern void coding_save_composition P_ ((struct coding_system *, int, int,  
                                          Lisp_Object));  
 extern void coding_free_composition_data P_ ((struct coding_system *));  
 extern void coding_adjust_composition_offset P_ ((struct coding_system *,  
                                                   int));  
 extern void coding_allocate_composition_data P_ ((struct coding_system *,  
                                                   int));  
 extern void coding_restore_composition P_ ((struct coding_system *,  
                                             Lisp_Object));  
 extern int code_convert_region P_ ((int, int, int, int, struct coding_system *,  
                                     int, int));  
 extern Lisp_Object run_pre_post_conversion_on_str P_ ((Lisp_Object,  
                                                        struct coding_system *,  
                                                        int));  
531  extern int decoding_buffer_size P_ ((struct coding_system *, int));  extern int decoding_buffer_size P_ ((struct coding_system *, int));
532  extern int encoding_buffer_size P_ ((struct coding_system *, int));  extern int encoding_buffer_size P_ ((struct coding_system *, int));
533  extern void detect_coding P_ ((struct coding_system *, unsigned char *, int));  extern void setup_coding_system P_ ((Lisp_Object, struct coding_system *));
534  extern void detect_eol P_ ((struct coding_system *, unsigned char *, int));  extern void detect_coding P_ ((struct coding_system *));
535  extern int setup_coding_system P_ ((Lisp_Object, struct coding_system *));  extern Lisp_Object code_convert_region P_ ((EMACS_INT, EMACS_INT,
536  extern Lisp_Object code_convert_string P_ ((Lisp_Object,                                              Lisp_Object, Lisp_Object,
537                                              struct coding_system *, int, int));                                              int, int));
538  extern Lisp_Object code_convert_string1 P_ ((Lisp_Object, Lisp_Object,  extern Lisp_Object code_convert_string P_ ((Lisp_Object, Lisp_Object,
539                                               Lisp_Object, int));                                              Lisp_Object, int, int, int));
540  extern Lisp_Object code_convert_string_norecord P_ ((Lisp_Object, Lisp_Object,  extern Lisp_Object code_convert_string_norecord P_ ((Lisp_Object, Lisp_Object,
541                                                       int));                                                       int));
542  extern void setup_raw_text_coding_system P_ ((struct coding_system *));  extern Lisp_Object raw_text_coding_system P_ ((Lisp_Object));
543  extern Lisp_Object encode_coding_string P_ ((Lisp_Object,  extern Lisp_Object coding_inherit_eol_type P_ ((Lisp_Object, Lisp_Object));
544                                               struct coding_system *, int));  
545  extern Lisp_Object decode_coding_string P_ ((Lisp_Object,  extern int decode_coding_gap P_ ((struct coding_system *,
546                                               struct coding_system *, int));                                    EMACS_INT, EMACS_INT));
547    extern int encode_coding_gap P_ ((struct coding_system *,
548                                      EMACS_INT, EMACS_INT));
549    extern void decode_coding_object P_ ((struct coding_system *,
550                                          Lisp_Object, EMACS_INT, EMACS_INT,
551                                          EMACS_INT, EMACS_INT, Lisp_Object));
552    extern void encode_coding_object P_ ((struct coding_system *,
553                                          Lisp_Object, EMACS_INT, EMACS_INT,
554                                          EMACS_INT, EMACS_INT, Lisp_Object));
555    
556    #define decode_coding_region(coding, from, to)          \
557      decode_coding_object (coding, Fcurrent_buffer (),     \
558                            from, CHAR_TO_BYTE (from),      \
559                            to, CHAR_TO_BYTE (to), Fcurrent_buffer ())
560    
561    
562    #define encode_coding_region(coding, from, to)          \
563      encode_coding_object (coding, Fcurrent_buffer (),     \
564                            from, CHAR_TO_BYTE (from),      \
565                            to, CHAR_TO_BYTE (to), Fcurrent_buffer ())
566    
567    
568    #define decode_coding_string(coding, string, nocopy)                    \
569      decode_coding_object (coding, string, 0, 0, XSTRING (string)->size,   \
570                            STRING_BYTES (XSTRING (string)), Qt)
571    
572    #define encode_coding_string(coding, string, nocopy)                    \
573      (encode_coding_object (coding, string, 0, 0, XSTRING (string)->size,  \
574                             STRING_BYTES (XSTRING (string)), Qt),          \
575       (coding)->dst_object)
576    
577    
578    #define decode_coding_c_string(coding, src, bytes, dst_object)          \
579      do {                                                                  \
580        (coding)->source = (src);                                           \
581        (coding)->src_chars = (coding)->src_bytes = (bytes);                \
582        decode_coding_object ((coding), Qnil, 0, 0, (bytes), (bytes),       \
583                              (dst_object));                                \
584      } while (0)
585    
586    
587    extern Lisp_Object preferred_coding_system P_ (());
588    
589    
590  extern Lisp_Object Qcoding_system, Qeol_type, Qcoding_category_index;  extern Lisp_Object Qcoding_system, Qeol_type, Qcoding_category_index;
591  extern Lisp_Object Qraw_text, Qemacs_mule;  extern Lisp_Object Qcoding_system_p;
592    extern Lisp_Object Qraw_text, Qemacs_mule, Qno_conversion, Qundecided;
593    extern Lisp_Object Qiso_2022;
594  extern Lisp_Object Qbuffer_file_coding_system;  extern Lisp_Object Qbuffer_file_coding_system;
595  extern Lisp_Object Vcoding_category_list;  
596    extern Lisp_Object Qunix, Qdos, Qmac;
597    
598  extern Lisp_Object Qtranslation_table;  extern Lisp_Object Qtranslation_table;
599  extern Lisp_Object Qtranslation_table_id;  extern Lisp_Object Qtranslation_table_id;
# Line 693  extern struct coding_system safe_termina Line 638  extern struct coding_system safe_termina
638     function `set-keyboard-coding-system'.  */     function `set-keyboard-coding-system'.  */
639  extern struct coding_system keyboard_coding;  extern struct coding_system keyboard_coding;
640    
 /* Default coding system to be used to write a file.  */  
 extern struct coding_system default_buffer_file_coding;  
   
641  /* Default coding systems used for process I/O.  */  /* Default coding systems used for process I/O.  */
642  extern Lisp_Object Vdefault_process_coding_system;  extern Lisp_Object Vdefault_process_coding_system;
643    
644  /* Function to call to force a user to force select a proper coding  /* Function to call to force a user to force select a propert coding
645     system.  */     system.  */
646  extern Lisp_Object Vselect_safe_coding_system_function;  extern Lisp_Object Vselect_safe_coding_system_function;
647    
# Line 715  extern Lisp_Object Vdefault_file_name_co Line 657  extern Lisp_Object Vdefault_file_name_co
657  /* Error signaled when there's a problem with detecting coding system */  /* Error signaled when there's a problem with detecting coding system */
658  extern Lisp_Object Qcoding_system_error;  extern Lisp_Object Qcoding_system_error;
659    
660    extern char emacs_mule_bytes[256];
661    extern int emacs_mule_string_char P_ ((unsigned char *));
662    
663  #endif /* EMACS_CODING_H */  #endif /* EMACS_CODING_H */

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.63.2.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26