X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/08b3caa982199bd7939d9d6877203ada5d0083b5..0a20c80c9cee34a71b975bb37ac811bd339eaf9f:/src/coding.h?ds=sidebyside diff --git a/src/coding.h b/src/coding.h index a7196f91c8..85e153dcc3 100644 --- a/src/coding.h +++ b/src/coding.h @@ -1,8 +1,7 @@ /* 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 @@ -306,6 +305,37 @@ enum coding_result_code 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 @@ -327,6 +357,21 @@ 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; @@ -387,11 +432,11 @@ struct coding_system struct ccl_spec *ccl; /* Defined in ccl.h. */ struct utf_16_spec utf_16; enum utf_bom_type utf_8_bom; - int emacs_mule_full_support; + 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 @@ -404,7 +449,7 @@ struct coding_system -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; + EMACS_INT head_ascii; /* The following members are set by encoding/decoding routine. */ EMACS_INT produced, produced_char, consumed, consumed_char; @@ -453,10 +498,10 @@ struct coding_system 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 @@ -584,7 +629,7 @@ struct coding_system 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); \ } \ @@ -640,37 +685,32 @@ struct coding_system ? 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 *, + EMACS_INT, EMACS_INT); +extern void decode_coding_object (struct coding_system *, + Lisp_Object, EMACS_INT, EMACS_INT, + EMACS_INT, EMACS_INT, Lisp_Object); +extern void encode_coding_object (struct coding_system *, + Lisp_Object, EMACS_INT, EMACS_INT, + EMACS_INT, EMACS_INT, Lisp_Object); /* Macros for backward compatibility. */ @@ -687,13 +727,14 @@ extern void encode_coding_object P_ ((struct coding_system *, #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) \ @@ -705,15 +746,14 @@ extern void encode_coding_object P_ ((struct coding_system *, } 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; @@ -721,63 +761,24 @@ 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) */