X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/e6d2f1553635a746396f2f4261dde31e03e0fdd1..ce1d7b61f12dcc1b67535b68d9b0655b45fcadb6:/src/coding.h diff --git a/src/coding.h b/src/coding.h index d13fd42fe4..39f9d62462 100644 --- a/src/coding.h +++ b/src/coding.h @@ -76,6 +76,14 @@ enum define_coding_ccl_arg_index coding_arg_ccl_max }; +enum define_coding_undecided_arg_index + { + coding_arg_undecided_inhibit_null_byte_detection = coding_arg_max, + coding_arg_undecided_inhibit_iso_escape_detection, + coding_arg_undecided_prefer_utf_8, + coding_arg_undecided_max + }; + /* Hash table for all coding systems. Keys are coding system symbols and values are spec vectors of the corresponding coding system. A spec vector has the form [ ATTRS ALIASES EOL-TYPE ]. ATTRS is a @@ -158,6 +166,10 @@ enum coding_attr_index coding_attr_emacs_mule_full, + coding_attr_undecided_inhibit_null_byte_detection, + coding_attr_undecided_inhibit_iso_escape_detection, + coding_attr_undecided_prefer_utf_8, + coding_attr_last_index }; @@ -366,7 +378,18 @@ struct emacs_mule_spec struct composition_status cmp_status; }; -struct ccl_spec; +struct undecided_spec +{ + /* Inhibit null byte detection. 1 means always inhibit, + -1 means do not inhibit, 0 means rely on user variable. */ + int inhibit_nbd; + + /* Inhibit ISO escape detection. -1, 0, 1 as above. */ + int inhibit_ied; + + /* Prefer UTF-8 when the input could be other encodings. */ + bool prefer_utf_8; +}; enum utf_bom_type { @@ -425,6 +448,7 @@ struct coding_system struct utf_16_spec utf_16; enum utf_bom_type utf_8_bom; struct emacs_mule_spec emacs_mule; + struct undecided_spec undecided; } spec; int max_charset_id; @@ -488,6 +512,10 @@ struct coding_system `charbuf', but at `src_object'. */ unsigned chars_at_source : 1; + /* Nonzero if the result of conversion is in `destination' + buffer rather than in `dst_object'. */ + unsigned raw_destination : 1; + /* Set to 1 if charbuf contains an annotation. */ unsigned annotated : 1; @@ -644,23 +672,11 @@ struct coding_system /* Encode the file name NAME using the specified coding system for file names, if any. */ -#define ENCODE_FILE(name) \ - (! NILP (Vfile_name_coding_system) \ - ? code_convert_string_norecord (name, Vfile_name_coding_system, 1) \ - : (! NILP (Vdefault_file_name_coding_system) \ - ? code_convert_string_norecord (name, Vdefault_file_name_coding_system, 1) \ - : name)) - +#define ENCODE_FILE(NAME) encode_file_name (NAME) /* Decode the file name NAME using the specified coding system for file names, if any. */ -#define DECODE_FILE(name) \ - (! NILP (Vfile_name_coding_system) \ - ? code_convert_string_norecord (name, Vfile_name_coding_system, 0) \ - : (! NILP (Vdefault_file_name_coding_system) \ - ? code_convert_string_norecord (name, Vdefault_file_name_coding_system, 0) \ - : name)) - +#define DECODE_FILE(NAME) decode_file_name (NAME) /* Encode the string STR using the specified coding system for system functions, if any. */ @@ -688,6 +704,8 @@ extern Lisp_Object code_convert_string (Lisp_Object, Lisp_Object, Lisp_Object, bool, bool, bool); extern Lisp_Object code_convert_string_norecord (Lisp_Object, Lisp_Object, bool); +extern Lisp_Object encode_file_name (Lisp_Object); +extern Lisp_Object decode_file_name (Lisp_Object); 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);