comparison src/coding.c @ 110855:bec49af30c2f

Merge changes from emacs-23 branch.
author Juanma Barranquero <lekktu@gmail.com>
date Fri, 08 Oct 2010 12:14:47 +0200
parents 41bf9b6f3b91 c234b2db847c
children b8fde5ef9e14
comparison
equal deleted inserted replaced
110820:e60b0b3ed516 110855:bec49af30c2f
6014 : EQ (eol_type, Qdos) ? AREF (raw_text_eol_type, 1) 6014 : EQ (eol_type, Qdos) ? AREF (raw_text_eol_type, 1)
6015 : AREF (raw_text_eol_type, 2)); 6015 : AREF (raw_text_eol_type, 2));
6016 } 6016 }
6017 6017
6018 6018
6019 /* If CODING_SYSTEM doesn't specify end-of-line format but PARENT 6019 /* If CODING_SYSTEM doesn't specify end-of-line format, return one of
6020 does, return one of the subsidiary that has the same eol-spec as 6020 the subsidiary that has the same eol-spec as PARENT (if it is not
6021 PARENT. Otherwise, return CODING_SYSTEM. If PARENT is nil, 6021 nil and specifies end-of-line format) or the system's setting
6022 inherit end-of-line format from the system's setting
6023 (system_eol_type). */ 6022 (system_eol_type). */
6024 6023
6025 Lisp_Object 6024 Lisp_Object
6026 coding_inherit_eol_type (Lisp_Object coding_system, Lisp_Object parent) 6025 coding_inherit_eol_type (Lisp_Object coding_system, Lisp_Object parent)
6027 { 6026 {
6039 { 6038 {
6040 Lisp_Object parent_spec; 6039 Lisp_Object parent_spec;
6041 6040
6042 parent_spec = CODING_SYSTEM_SPEC (parent); 6041 parent_spec = CODING_SYSTEM_SPEC (parent);
6043 parent_eol_type = AREF (parent_spec, 2); 6042 parent_eol_type = AREF (parent_spec, 2);
6043 if (VECTORP (parent_eol_type))
6044 parent_eol_type = system_eol_type;
6044 } 6045 }
6045 else 6046 else
6046 parent_eol_type = system_eol_type; 6047 parent_eol_type = system_eol_type;
6047 if (EQ (parent_eol_type, Qunix)) 6048 if (EQ (parent_eol_type, Qunix))
6048 coding_system = AREF (eol_type, 0); 6049 coding_system = AREF (eol_type, 0);
6051 else if (EQ (parent_eol_type, Qmac)) 6052 else if (EQ (parent_eol_type, Qmac))
6052 coding_system = AREF (eol_type, 2); 6053 coding_system = AREF (eol_type, 2);
6053 } 6054 }
6054 return coding_system; 6055 return coding_system;
6055 } 6056 }
6057
6058
6059 /* Check if text-conversion and eol-conversion of CODING_SYSTEM are
6060 decided for writing to a process. If not, complement them, and
6061 return a new coding system. */
6062
6063 Lisp_Object
6064 complement_process_encoding_system (Lisp_Object coding_system)
6065 {
6066 Lisp_Object coding_base = Qnil, eol_base = Qnil;
6067 Lisp_Object spec, attrs;
6068 int i;
6069
6070 for (i = 0; i < 3; i++)
6071 {
6072 if (i == 1)
6073 coding_system = CDR_SAFE (Vdefault_process_coding_system);
6074 else if (i == 2)
6075 coding_system = preferred_coding_system ();
6076 spec = CODING_SYSTEM_SPEC (coding_system);
6077 if (NILP (spec))
6078 continue;
6079 attrs = AREF (spec, 0);
6080 if (NILP (coding_base) && ! EQ (CODING_ATTR_TYPE (attrs), Qundecided))
6081 coding_base = CODING_ATTR_BASE_NAME (attrs);
6082 if (NILP (eol_base) && ! VECTORP (AREF (spec, 2)))
6083 eol_base = coding_system;
6084 if (! NILP (coding_base) && ! NILP (eol_base))
6085 break;
6086 }
6087
6088 if (i > 0)
6089 /* The original CODING_SYSTEM didn't specify text-conversion or
6090 eol-conversion. Be sure that we return a fully complemented
6091 coding system. */
6092 coding_system = coding_inherit_eol_type (coding_base, eol_base);
6093 return coding_system;
6094 }
6095
6056 6096
6057 /* Emacs has a mechanism to automatically detect a coding system if it 6097 /* Emacs has a mechanism to automatically detect a coding system if it
6058 is one of Emacs' internal format, ISO2022, SJIS, and BIG5. But, 6098 is one of Emacs' internal format, ISO2022, SJIS, and BIG5. But,
6059 it's impossible to distinguish some coding systems accurately 6099 it's impossible to distinguish some coding systems accurately
6060 because they use the same range of codes. So, at first, coding 6100 because they use the same range of codes. So, at first, coding