/* Header for coding system handler.
- Copyright (C) 2001, 2002, 2003, 2004, 2005,
- 2006, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2001-2011 Free Software Foundation, Inc.
Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008
+ 2005, 2006, 2007, 2008, 2009, 2010, 2011
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H14PRO021
Copyright (C) 2003
coding_arg_iso2022_max
};
+enum define_coding_utf8_arg_index
+ {
+ coding_arg_utf8_bom = coding_arg_max,
+ coding_arg_utf8_max
+ };
+
enum define_coding_utf16_arg_index
{
coding_arg_utf16_bom = coding_arg_max,
coding_attr_iso_request,
coding_attr_iso_flags,
- coding_attr_utf_16_bom,
+ coding_attr_utf_bom,
coding_attr_utf_16_endian,
coding_attr_emacs_mule_full,
ASCII characters (usually '?') for unsupported characters. */
#define CODING_MODE_SAFE_ENCODING 0x20
+ /* For handling composition sequence. */
+#include "composite.h"
+
+enum composition_state
+ {
+ COMPOSING_NO,
+ COMPOSING_CHAR,
+ COMPOSING_RULE,
+ COMPOSING_COMPONENT_CHAR,
+ COMPOSING_COMPONENT_RULE
+ };
+
+/* Structure for the current composition status. */
+struct composition_status
+{
+ enum composition_state state;
+ enum composition_method method;
+ int old_form; /* 0:pre-21 form, 1:post-21 form */
+ int length; /* number of elements produced in charbuf */
+ int nchars; /* number of characters composed */
+ int ncomps; /* number of composition components */
+ /* Maximum carryover is for the case of COMPOSITION_WITH_RULE_ALTCHARS.
+ See the comment in coding.c. */
+ int carryover[4 /* annotation header */
+ + MAX_COMPOSITION_COMPONENTS * 3 - 2 /* ALTs and RULEs */
+ + 2 /* intermediate -1 -1 */
+ + MAX_COMPOSITION_COMPONENTS /* CHARs */
+ ];
+};
+
+
/* Structure of the field `spec.iso_2022' in the structure
`coding_system'. */
struct iso_2022_spec
/* Set to 1 temporarily only when processing at beginning of line. */
int bol;
+
+ /* If positive, we are now scanning CTEXT extended segment. */
+ int ctext_extended_segment_len;
+
+ /* If nonzero, we are now scanning embedded UTF-8 sequence. */
+ int embedded_utf_8;
+
+ /* The current composition. */
+ struct composition_status cmp_status;
+};
+
+struct emacs_mule_spec
+{
+ int full_support;
+ struct composition_status cmp_status;
};
struct ccl_spec;
-enum utf_16_bom_type
+enum utf_bom_type
{
- utf_16_detect_bom,
- utf_16_without_bom,
- utf_16_with_bom
+ utf_detect_bom,
+ utf_without_bom,
+ utf_with_bom
};
enum utf_16_endian_type
struct utf_16_spec
{
- enum utf_16_bom_type bom;
+ enum utf_bom_type bom;
enum utf_16_endian_type endian;
int surrogate;
};
setup_coding_system. At the early stage of building time, this
value is -1 in the array coding_categories to indicate that no
coding-system of that category is yet defined. */
- int id;
+ ptrdiff_t id;
/* Flag bits of the coding system. The meaning of each bit is common
to all types of coding systems. */
struct iso_2022_spec iso_2022;
struct ccl_spec *ccl; /* Defined in ccl.h. */
struct utf_16_spec utf_16;
- int emacs_mule_full_support;
+ enum utf_bom_type utf_8_bom;
+ struct emacs_mule_spec emacs_mule;
} spec;
int max_charset_id;
- char *safe_charsets;
+ unsigned char *safe_charsets;
/* The following two members specify how binary 8-bit code 128..255
are represented in source and destination text respectively. 1
-1 in setup_coding_system, and updated by detect_coding. So,
when this is equal to the byte length of the text being
converted, we can skip the actual conversion process. */
- int head_ascii;
+ ptrdiff_t head_ascii;
/* The following members are set by encoding/decoding routine. */
- EMACS_INT produced, produced_char, consumed, consumed_char;
+ ptrdiff_t produced, produced_char, consumed, consumed_char;
/* Number of error source data found in a decoding routine. */
int errors;
- /* Store the positions of error source data. */
- EMACS_INT *error_positions;
+ /* Store the positions of error source data. */
+ ptrdiff_t *error_positions;
/* Finish status of code conversion. */
enum coding_result_code result;
- EMACS_INT src_pos, src_pos_byte, src_chars, src_bytes;
+ ptrdiff_t src_pos, src_pos_byte, src_chars, src_bytes;
Lisp_Object src_object;
const unsigned char *source;
- EMACS_INT dst_pos, dst_pos_byte, dst_bytes;
+ ptrdiff_t dst_pos, dst_pos_byte, dst_bytes;
Lisp_Object dst_object;
unsigned char *destination;
int default_char;
- int (*detector) P_ ((struct coding_system *,
- struct coding_detection_info *));
- void (*decoder) P_ ((struct coding_system *));
- int (*encoder) P_ ((struct coding_system *));
+ int (*detector) (struct coding_system *,
+ struct coding_detection_info *);
+ void (*decoder) (struct coding_system *);
+ int (*encoder) (struct coding_system *);
};
/* Meanings of bits in the member `common_flags' of the structure
#define CODING_REQUIRE_DETECTION_MASK 0x1000
#define CODING_RESET_AT_BOL_MASK 0x2000
-/* Return 1 if the coding context CODING requires annotaion
+/* Return 1 if the coding context CODING requires annotation
handling. */
#define CODING_REQUIRE_ANNOTATION(coding) \
((coding)->common_flags & CODING_ANNOTATION_MASK)
if (j1 & 1) \
{ \
s1 = (j1 <= 0x25 ? 0xF0 + (j1 - 0x21) / 2 \
- : j1 <= 0x27 ? 0xF3 + (j1 - 0x2D) / 2 \
+ : j1 <= 0x2F ? 0xF3 + (j1 - 0x2D) / 2 \
: 0xF5 + (j1 - 0x6F) / 2); \
s2 = j2 + ((j2 >= 0x60) ? 0x20 : 0x1F); \
} \
? code_convert_string_norecord (str, Vlocale_coding_system, 0) \
: str)
-/* Used by the gtk menu code. Note that this encodes utf-8, not
- utf-8-emacs, so it's not a no-op. */
+/* Note that this encodes utf-8, not utf-8-emacs, so it's not a no-op. */
#define ENCODE_UTF_8(str) code_convert_string_norecord (str, Qutf_8, 1)
/* Extern declarations. */
-extern Lisp_Object code_conversion_save P_ ((int, int));
-extern int decoding_buffer_size P_ ((struct coding_system *, int));
-extern int encoding_buffer_size P_ ((struct coding_system *, int));
-extern void setup_coding_system P_ ((Lisp_Object, struct coding_system *));
-extern Lisp_Object coding_charset_list P_ ((struct coding_system *));
-extern void detect_coding P_ ((struct coding_system *));
-extern Lisp_Object code_convert_region P_ ((Lisp_Object, Lisp_Object,
- Lisp_Object, Lisp_Object,
- int, int));
-extern Lisp_Object code_convert_string P_ ((Lisp_Object, Lisp_Object,
- Lisp_Object, int, int, int));
-extern Lisp_Object code_convert_string_norecord P_ ((Lisp_Object, Lisp_Object,
- int));
-extern Lisp_Object raw_text_coding_system P_ ((Lisp_Object));
-extern Lisp_Object coding_inherit_eol_type P_ ((Lisp_Object, Lisp_Object));
-
-extern int decode_coding_gap P_ ((struct coding_system *,
- EMACS_INT, EMACS_INT));
-extern int encode_coding_gap P_ ((struct coding_system *,
- EMACS_INT, EMACS_INT));
-extern void decode_coding_object P_ ((struct coding_system *,
- Lisp_Object, EMACS_INT, EMACS_INT,
- EMACS_INT, EMACS_INT, Lisp_Object));
-extern void encode_coding_object P_ ((struct coding_system *,
- Lisp_Object, EMACS_INT, EMACS_INT,
- EMACS_INT, EMACS_INT, Lisp_Object));
+extern Lisp_Object code_conversion_save (int, int);
+extern int decoding_buffer_size (struct coding_system *, int);
+extern int encoding_buffer_size (struct coding_system *, int);
+extern void setup_coding_system (Lisp_Object, struct coding_system *);
+extern Lisp_Object coding_charset_list (struct coding_system *);
+extern Lisp_Object coding_system_charset_list (Lisp_Object);
+extern Lisp_Object code_convert_string (Lisp_Object, Lisp_Object,
+ Lisp_Object, int, int, int);
+extern Lisp_Object code_convert_string_norecord (Lisp_Object, Lisp_Object,
+ int);
+extern Lisp_Object raw_text_coding_system (Lisp_Object);
+extern Lisp_Object coding_inherit_eol_type (Lisp_Object, Lisp_Object);
+extern Lisp_Object complement_process_encoding_system (Lisp_Object);
+
+extern int decode_coding_gap (struct coding_system *,
+ ptrdiff_t, ptrdiff_t);
+extern void decode_coding_object (struct coding_system *,
+ Lisp_Object, ptrdiff_t, ptrdiff_t,
+ ptrdiff_t, ptrdiff_t, Lisp_Object);
+extern void encode_coding_object (struct coding_system *,
+ Lisp_Object, ptrdiff_t, ptrdiff_t,
+ ptrdiff_t, ptrdiff_t, Lisp_Object);
/* Macros for backward compatibility. */
#define decode_coding_string(coding, string, nocopy) \
- decode_coding_object (coding, string, 0, 0, XSTRING (string)->size, \
- STRING_BYTES (XSTRING (string)), Qt)
+ decode_coding_object (coding, string, 0, 0, SCHARS (string), \
+ SBYTES (string), Qt)
#define encode_coding_string(coding, string, nocopy) \
- (encode_coding_object (coding, string, 0, 0, XSTRING (string)->size, \
- STRING_BYTES (XSTRING (string)), Qt), \
- (coding)->dst_object)
+ (STRING_MULTIBYTE(string) ? \
+ (encode_coding_object (coding, string, 0, 0, SCHARS (string), \
+ SBYTES (string), Qt), \
+ (coding)->dst_object) : (string))
#define decode_coding_c_string(coding, src, bytes, dst_object) \
} while (0)
-extern Lisp_Object preferred_coding_system P_ (());
+extern Lisp_Object preferred_coding_system (void);
extern Lisp_Object Qutf_8, Qutf_8_emacs;
-extern Lisp_Object Qcoding_system, Qeol_type, Qcoding_category_index;
+extern Lisp_Object Qcoding_category_index;
extern Lisp_Object Qcoding_system_p;
extern Lisp_Object Qraw_text, Qemacs_mule, Qno_conversion, Qundecided;
-extern Lisp_Object Qiso_2022;
extern Lisp_Object Qbuffer_file_coding_system;
extern Lisp_Object Qunix, Qdos, Qmac;
extern Lisp_Object Qtranslation_table;
extern Lisp_Object Qtranslation_table_id;
-/* Mnemonic strings to indicate each type of end-of-line. */
-extern Lisp_Object eol_mnemonic_unix, eol_mnemonic_dos, eol_mnemonic_mac;
-/* Mnemonic string to indicate type of end-of-line is not yet decided. */
-extern Lisp_Object eol_mnemonic_undecided;
-
#ifdef emacs
extern Lisp_Object Qfile_coding_system;
extern Lisp_Object Qcall_process, Qcall_process_region;
extern Lisp_Object Qstart_process, Qopen_network_stream;
extern Lisp_Object Qwrite_region;
-extern char *emacs_strerror P_ ((int));
-
-/* Coding-system for reading files and receiving data from process. */
-extern Lisp_Object Vcoding_system_for_read;
-/* Coding-system for writing files and sending data to process. */
-extern Lisp_Object Vcoding_system_for_write;
-/* Coding-system actually used in the latest I/O. */
-extern Lisp_Object Vlast_coding_system_used;
-/* Coding-system to use with system messages (e.g. strerror). */
-extern Lisp_Object Vlocale_coding_system;
-
-/* If non-zero, process buffer inherits the coding system used to decode
- the subprocess output. */
-extern int inherit_process_coding_system;
+extern char *emacs_strerror (int);
/* Coding system to be used to encode text for terminal display when
terminal coding system is nil. */
extern struct coding_system safe_terminal_coding;
-/* Default coding systems used for process I/O. */
-extern Lisp_Object Vdefault_process_coding_system;
-
-/* Function to call to force a user to force select a propert coding
- system. */
-extern Lisp_Object Vselect_safe_coding_system_function;
-
-/* If nonzero, on writing a file, Vselect_safe_coding_system_function
- is called even if Vcoding_system_for_write is non-nil. */
-extern int coding_system_require_warning;
-
-/* Coding system for file names, or nil if none. */
-extern Lisp_Object Vfile_name_coding_system;
-
-/* Coding system for file names used only when
- Vfile_name_coding_system is nil. */
-extern Lisp_Object Vdefault_file_name_coding_system;
-
#endif
/* Error signaled when there's a problem with detecting coding system */
extern Lisp_Object Qcoding_system_error;
extern char emacs_mule_bytes[256];
-extern int emacs_mule_string_char P_ ((unsigned char *));
+extern int emacs_mule_string_char (unsigned char *);
#endif /* EMACS_CODING_H */
-
-/* arch-tag: 2bc3b4fa-6870-4f64-8135-b962b2d290e4
- (do not change this comment) */