X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/5bc6ddff00c50acf546530ef0e08a27140614d27..41d579ce4a2a86428f200788df4b15b936aa5076:/src/coding.h diff --git a/src/coding.h b/src/coding.h index dae16a9ea8..6238a708e7 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 @@ -11,10 +10,10 @@ This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,9 +21,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ +along with GNU Emacs. If not, see . */ #ifndef EMACS_CODING_H #define EMACS_CODING_H @@ -58,6 +55,12 @@ enum define_coding_iso2022_arg_index 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, @@ -150,7 +153,7 @@ enum coding_attr_index 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, @@ -302,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 @@ -323,15 +357,30 @@ 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 @@ -342,7 +391,7 @@ 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; }; @@ -382,11 +431,12 @@ struct coding_system 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 @@ -448,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 @@ -579,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); \ } \ @@ -635,37 +685,38 @@ 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 void detect_coding (struct coding_system *); +extern Lisp_Object code_convert_region (Lisp_Object, Lisp_Object, + Lisp_Object, Lisp_Object, + int, int); +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 int encode_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. */ @@ -682,13 +733,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) \ @@ -700,7 +752,7 @@ 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; @@ -716,63 +768,25 @@ 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) */