X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d76bf86f438d4f5f9fe493ab76f02ffc78f3ae2e..4ec52e2f8c1697994618b4bdfd013659f6defb1b:/src/coding.h diff --git a/src/coding.h b/src/coding.h index d40209be68..5a921e4495 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; @@ -444,6 +468,8 @@ struct coding_system the eol format. */ ptrdiff_t head_ascii; + ptrdiff_t detected_utf8_chars; + /* Used internally in coding.c. See the comment of detect_ascii. */ int eol_seen; @@ -486,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; @@ -640,14 +670,16 @@ struct coding_system (code) = (s1 << 8) | s2; \ } while (0) -/* 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)) +/* Encode the file name NAME using the specified coding system for + file names, if any. If NAME is a unibyte string, return NAME. */ +#define ENCODE_FILE(name) \ + (! STRING_MULTIBYTE (name) \ + ? 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))) /* Decode the file name NAME using the specified coding system