X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/db4613576d3115aa320f0293d081ce98baa06acd..9792a944dcf08a246bf2618b2a5bee906a888069:/src/coding.c diff --git a/src/coding.c b/src/coding.c index f3f8dc1887..4b41355595 100644 --- a/src/coding.c +++ b/src/coding.c @@ -303,35 +303,6 @@ encode_coding_XXX (struct coding_system *coding) Lisp_Object Vcoding_system_hash_table; -static Lisp_Object Qcoding_system, Qeol_type; -static Lisp_Object Qcoding_aliases; -Lisp_Object Qunix, Qdos; -static Lisp_Object Qmac; -Lisp_Object Qbuffer_file_coding_system; -static Lisp_Object Qpost_read_conversion, Qpre_write_conversion; -static Lisp_Object Qdefault_char; -Lisp_Object Qno_conversion, Qundecided; -Lisp_Object Qcharset, Qutf_8; -static Lisp_Object Qiso_2022; -static Lisp_Object Qutf_16, Qshift_jis, Qbig5; -static Lisp_Object Qbig, Qlittle; -static Lisp_Object Qcoding_system_history; -static Lisp_Object Qvalid_codes; -static Lisp_Object QCcategory, QCmnemonic, QCdefault_char; -static Lisp_Object QCdecode_translation_table, QCencode_translation_table; -static Lisp_Object QCpost_read_conversion, QCpre_write_conversion; -static Lisp_Object QCascii_compatible_p; - -Lisp_Object Qcall_process, Qcall_process_region; -Lisp_Object Qstart_process, Qopen_network_stream; -static Lisp_Object Qtarget_idx; - -static Lisp_Object Qinsufficient_source, Qinvalid_source, Qinterrupted; - -/* If a symbol has this property, evaluate the value to define the - symbol as a coding system. */ -static Lisp_Object Qcoding_system_define_form; - /* Format of end-of-line decided by system. This is Qunix on Unix and Mac, Qdos on DOS/Windows. This has an effect only for external encoding (i.e. for output to @@ -340,17 +311,6 @@ static Lisp_Object system_eol_type; #ifdef emacs -Lisp_Object Qcoding_system_p, Qcoding_system_error; - -/* Coding system emacs-mule and raw-text are for converting only - end-of-line format. */ -Lisp_Object Qemacs_mule, Qraw_text; -Lisp_Object Qutf_8_emacs; - -#if defined (WINDOWSNT) || defined (CYGWIN) -static Lisp_Object Qutf_16le; -#endif - /* Coding-systems are handed between Emacs Lisp programs and C internal routines by the following three variables. */ /* Coding system to be used to encode text for terminal display when @@ -359,11 +319,6 @@ struct coding_system safe_terminal_coding; #endif /* emacs */ -Lisp_Object Qtranslation_table; -Lisp_Object Qtranslation_table_id; -static Lisp_Object Qtranslation_table_for_decode; -static Lisp_Object Qtranslation_table_for_encode; - /* Two special coding systems. */ static Lisp_Object Vsjis_coding_system; static Lisp_Object Vbig5_coding_system; @@ -395,7 +350,8 @@ static Lisp_Object Vbig5_coding_system; #define CODING_ISO_BOL(coding) \ ((coding)->spec.iso_2022.bol) #define CODING_ISO_INVOKED_CHARSET(coding, plane) \ - CODING_ISO_DESIGNATION ((coding), CODING_ISO_INVOCATION ((coding), (plane))) + (CODING_ISO_INVOCATION (coding, plane) < 0 ? -1 \ + : CODING_ISO_DESIGNATION (coding, CODING_ISO_INVOCATION (coding, plane))) #define CODING_ISO_CMP_STATUS(coding) \ (&(coding)->spec.iso_2022.cmp_status) #define CODING_ISO_EXTSEGMENT_LEN(coding) \ @@ -6023,6 +5979,15 @@ raw_text_coding_system (Lisp_Object coding_system) : AREF (raw_text_eol_type, 2)); } +/* Return true if CODING corresponds to raw-text coding-system. */ + +bool +raw_text_coding_system_p (struct coding_system *coding) +{ + return (coding->decoder == decode_coding_raw_text + && coding->encoder == encode_coding_raw_text) ? true : false; +} + /* If CODING_SYSTEM doesn't specify end-of-line format, return one of the subsidiary that has the same eol-spec as PARENT (if it is not @@ -10716,7 +10681,7 @@ Any alias or subsidiary coding system is not a base coding system. */) DEFUN ("coding-system-plist", Fcoding_system_plist, Scoding_system_plist, 1, 1, 0, - doc: "Return the property list of CODING-SYSTEM.") + doc: /* Return the property list of CODING-SYSTEM. */) (Lisp_Object coding_system) { Lisp_Object spec, attrs; @@ -10821,12 +10786,7 @@ void syms_of_coding (void) { staticpro (&Vcoding_system_hash_table); - { - Lisp_Object args[2]; - args[0] = QCtest; - args[1] = Qeq; - Vcoding_system_hash_table = Fmake_hash_table (2, args); - } + Vcoding_system_hash_table = CALLN (Fmake_hash_table, QCtest, Qeq); staticpro (&Vsjis_coding_system); Vsjis_coding_system = Qnil; @@ -10903,6 +10863,7 @@ syms_of_coding (void) DEFSYM (Qcoding_system_p, "coding-system-p"); + /* Error signaled when there's a problem with detecting a coding system. */ DEFSYM (Qcoding_system_error, "coding-system-error"); Fput (Qcoding_system_error, Qerror_conditions, listn (CONSTYPE_PURE, 2, Qcoding_system_error, Qerror)); @@ -10917,6 +10878,8 @@ syms_of_coding (void) DEFSYM (Qvalid_codes, "valid-codes"); + /* Coding system emacs-mule and raw-text are for converting only + end-of-line format. */ DEFSYM (Qemacs_mule, "emacs-mule"); DEFSYM (QCcategory, ":category"); @@ -10979,6 +10942,9 @@ syms_of_coding (void) DEFSYM (Qinsufficient_source, "insufficient-source"); DEFSYM (Qinvalid_source, "invalid-source"); DEFSYM (Qinterrupted, "interrupted"); + + /* If a symbol has this property, evaluate the value to define the + symbol as a coding system. */ DEFSYM (Qcoding_system_define_form, "coding-system-define-form"); defsubr (&Scoding_system_p); @@ -11308,63 +11274,59 @@ See also `keyboard-translate-table'. Use of this variable for character code unification was rendered obsolete in Emacs 23.1 and later, since Unicode is now the basis of internal character representation. */); - Vtranslation_table_for_input = Qnil; - - { - Lisp_Object args[coding_arg_undecided_max]; - Lisp_Object plist[16]; - int i; - - for (i = 0; i < coding_arg_undecided_max; i++) - args[i] = Qnil; - - plist[0] = intern_c_string (":name"); - plist[1] = args[coding_arg_name] = Qno_conversion; - plist[2] = intern_c_string (":mnemonic"); - plist[3] = args[coding_arg_mnemonic] = make_number ('='); - plist[4] = intern_c_string (":coding-type"); - plist[5] = args[coding_arg_coding_type] = Qraw_text; - plist[6] = intern_c_string (":ascii-compatible-p"); - plist[7] = args[coding_arg_ascii_compatible_p] = Qt; - plist[8] = intern_c_string (":default-char"); - plist[9] = args[coding_arg_default_char] = make_number (0); - plist[10] = intern_c_string (":for-unibyte"); - plist[11] = args[coding_arg_for_unibyte] = Qt; - plist[12] = intern_c_string (":docstring"); - plist[13] = build_pure_c_string ("Do no conversion.\n\ -\n\ -When you visit a file with this coding, the file is read into a\n\ -unibyte buffer as is, thus each byte of a file is treated as a\n\ -character."); - plist[14] = intern_c_string (":eol-type"); - plist[15] = args[coding_arg_eol_type] = Qunix; - args[coding_arg_plist] = Flist (16, plist); - Fdefine_coding_system_internal (coding_arg_max, args); - - plist[1] = args[coding_arg_name] = Qundecided; - plist[3] = args[coding_arg_mnemonic] = make_number ('-'); - plist[5] = args[coding_arg_coding_type] = Qundecided; - /* This is already set. - plist[7] = args[coding_arg_ascii_compatible_p] = Qt; */ - plist[8] = intern_c_string (":charset-list"); - plist[9] = args[coding_arg_charset_list] = Fcons (Qascii, Qnil); - plist[11] = args[coding_arg_for_unibyte] = Qnil; - plist[13] = build_pure_c_string ("No conversion on encoding, automatic conversion on decoding."); - plist[15] = args[coding_arg_eol_type] = Qnil; - args[coding_arg_plist] = Flist (16, plist); - args[coding_arg_undecided_inhibit_null_byte_detection] = make_number (0); - args[coding_arg_undecided_inhibit_iso_escape_detection] = make_number (0); - Fdefine_coding_system_internal (coding_arg_undecided_max, args); - } + Vtranslation_table_for_input = Qnil; + + Lisp_Object args[coding_arg_undecided_max]; + memclear (args, sizeof args); + + Lisp_Object plist[] = + { + QCname, + args[coding_arg_name] = Qno_conversion, + QCmnemonic, + args[coding_arg_mnemonic] = make_number ('='), + intern_c_string (":coding-type"), + args[coding_arg_coding_type] = Qraw_text, + QCascii_compatible_p, + args[coding_arg_ascii_compatible_p] = Qt, + QCdefault_char, + args[coding_arg_default_char] = make_number (0), + intern_c_string (":for-unibyte"), + args[coding_arg_for_unibyte] = Qt, + intern_c_string (":docstring"), + (build_pure_c_string + ("Do no conversion.\n" + "\n" + "When you visit a file with this coding, the file is read into a\n" + "unibyte buffer as is, thus each byte of a file is treated as a\n" + "character.")), + intern_c_string (":eol-type"), + args[coding_arg_eol_type] = Qunix, + }; + args[coding_arg_plist] = CALLMANY (Flist, plist); + Fdefine_coding_system_internal (coding_arg_max, args); + + plist[1] = args[coding_arg_name] = Qundecided; + plist[3] = args[coding_arg_mnemonic] = make_number ('-'); + plist[5] = args[coding_arg_coding_type] = Qundecided; + /* This is already set. + plist[7] = args[coding_arg_ascii_compatible_p] = Qt; */ + plist[8] = intern_c_string (":charset-list"); + plist[9] = args[coding_arg_charset_list] = Fcons (Qascii, Qnil); + plist[11] = args[coding_arg_for_unibyte] = Qnil; + plist[13] = build_pure_c_string ("No conversion on encoding, " + "automatic conversion on decoding."); + plist[15] = args[coding_arg_eol_type] = Qnil; + args[coding_arg_plist] = CALLMANY (Flist, plist); + args[coding_arg_undecided_inhibit_null_byte_detection] = make_number (0); + args[coding_arg_undecided_inhibit_iso_escape_detection] = make_number (0); + Fdefine_coding_system_internal (coding_arg_undecided_max, args); setup_coding_system (Qno_conversion, &safe_terminal_coding); - { - int i; + for (int i = 0; i < coding_category_max; i++) + Fset (AREF (Vcoding_category_table, i), Qno_conversion); - for (i = 0; i < coding_category_max; i++) - Fset (AREF (Vcoding_category_table, i), Qno_conversion); - } #if defined (DOS_NT) system_eol_type = Qdos; #else