diff options
| author | Juanma Barranquero <lekktu@gmail.com> | 2010-10-08 12:14:47 +0200 |
|---|---|---|
| committer | Juanma Barranquero <lekktu@gmail.com> | 2010-10-08 12:14:47 +0200 |
| commit | 4628bef1eea0f60e846fe6b6591725aa92952de9 (patch) | |
| tree | 9d137b8e0964c0b1ebc4afb4e743e35b807d048d /src/coding.c | |
| parent | 24ac444fbe5d76a7cf09a62b741b9e956ab90d3e (diff) | |
| parent | 2b7c934285417d2eac7a3c603231d22ce7e212d8 (diff) | |
| download | emacs-4628bef1eea0f60e846fe6b6591725aa92952de9.tar.gz | |
Merge changes from emacs-23 branch.
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/src/coding.c b/src/coding.c index d6285ed9245..2cf32360096 100644 --- a/src/coding.c +++ b/src/coding.c @@ -6016,10 +6016,9 @@ raw_text_coding_system (Lisp_Object coding_system) } -/* If CODING_SYSTEM doesn't specify end-of-line format but PARENT - does, return one of the subsidiary that has the same eol-spec as - PARENT. Otherwise, return CODING_SYSTEM. If PARENT is nil, - inherit end-of-line format from the system's setting +/* 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 + nil and specifies end-of-line format) or the system's setting (system_eol_type). */ Lisp_Object @@ -6041,6 +6040,8 @@ coding_inherit_eol_type (Lisp_Object coding_system, Lisp_Object parent) parent_spec = CODING_SYSTEM_SPEC (parent); parent_eol_type = AREF (parent_spec, 2); + if (VECTORP (parent_eol_type)) + parent_eol_type = system_eol_type; } else parent_eol_type = system_eol_type; @@ -6054,6 +6055,45 @@ coding_inherit_eol_type (Lisp_Object coding_system, Lisp_Object parent) return coding_system; } + +/* Check if text-conversion and eol-conversion of CODING_SYSTEM are + decided for writing to a process. If not, complement them, and + return a new coding system. */ + +Lisp_Object +complement_process_encoding_system (Lisp_Object coding_system) +{ + Lisp_Object coding_base = Qnil, eol_base = Qnil; + Lisp_Object spec, attrs; + int i; + + for (i = 0; i < 3; i++) + { + if (i == 1) + coding_system = CDR_SAFE (Vdefault_process_coding_system); + else if (i == 2) + coding_system = preferred_coding_system (); + spec = CODING_SYSTEM_SPEC (coding_system); + if (NILP (spec)) + continue; + attrs = AREF (spec, 0); + if (NILP (coding_base) && ! EQ (CODING_ATTR_TYPE (attrs), Qundecided)) + coding_base = CODING_ATTR_BASE_NAME (attrs); + if (NILP (eol_base) && ! VECTORP (AREF (spec, 2))) + eol_base = coding_system; + if (! NILP (coding_base) && ! NILP (eol_base)) + break; + } + + if (i > 0) + /* The original CODING_SYSTEM didn't specify text-conversion or + eol-conversion. Be sure that we return a fully complemented + coding system. */ + coding_system = coding_inherit_eol_type (coding_base, eol_base); + return coding_system; +} + + /* Emacs has a mechanism to automatically detect a coding system if it is one of Emacs' internal format, ISO2022, SJIS, and BIG5. But, it's impossible to distinguish some coding systems accurately |
