(decode_coding): Set a flag for inhibiting
inconsistent eol. (code_convert_region): Always set saved_coding_symbol. (decode_coding_string): Likewise. Update coding->symbol when we encounter a inconsistent eol by the same way as code_convert_region.
This commit is contained in:
parent
73df2b1e65
commit
8844fa83d3
1 changed files with 22 additions and 5 deletions
27
src/coding.c
27
src/coding.c
|
@ -4679,7 +4679,12 @@ decode_coding (coding, source, destination, src_bytes, dst_bytes)
|
|||
|
||||
if (coding->eol_type == CODING_EOL_UNDECIDED
|
||||
&& coding->type != coding_type_ccl)
|
||||
detect_eol (coding, source, src_bytes);
|
||||
{
|
||||
detect_eol (coding, source, src_bytes);
|
||||
/* We had better recover the original eol format if we
|
||||
encounter an inconsitent eol format while decoding. */
|
||||
coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL;
|
||||
}
|
||||
|
||||
coding->produced = coding->produced_char = 0;
|
||||
coding->consumed = coding->consumed_char = 0;
|
||||
|
@ -5304,7 +5309,7 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
|
|||
int multibyte_p = !NILP (current_buffer->enable_multibyte_characters);
|
||||
|
||||
deletion = Qnil;
|
||||
saved_coding_symbol = Qnil;
|
||||
saved_coding_symbol = coding->symbol;
|
||||
|
||||
if (from < PT && PT < to)
|
||||
{
|
||||
|
@ -5356,7 +5361,6 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
|
|||
if (coding->eol_type == CODING_EOL_UNDECIDED
|
||||
&& coding->type != coding_type_ccl)
|
||||
{
|
||||
saved_coding_symbol = coding->symbol;
|
||||
detect_eol (coding, BYTE_POS_ADDR (from_byte), len_byte);
|
||||
if (coding->eol_type == CODING_EOL_UNDECIDED)
|
||||
coding->eol_type = CODING_EOL_LF;
|
||||
|
@ -5794,7 +5798,7 @@ decode_coding_string (str, coding, nocopy)
|
|||
from = 0;
|
||||
to_byte = STRING_BYTES (XSTRING (str));
|
||||
|
||||
saved_coding_symbol = Qnil;
|
||||
saved_coding_symbol = coding->symbol;
|
||||
coding->src_multibyte = STRING_MULTIBYTE (str);
|
||||
coding->dst_multibyte = 1;
|
||||
if (CODING_REQUIRE_DETECTION (coding))
|
||||
|
@ -5883,6 +5887,8 @@ decode_coding_string (str, coding, nocopy)
|
|||
extend_conversion_buffer (&buf);
|
||||
else if (result == CODING_FINISH_INCONSISTENT_EOL)
|
||||
{
|
||||
Lisp_Object eol_type;
|
||||
|
||||
/* Recover the original EOL format. */
|
||||
if (coding->eol_type == CODING_EOL_CR)
|
||||
{
|
||||
|
@ -5906,8 +5912,19 @@ decode_coding_string (str, coding, nocopy)
|
|||
produced += num_eol;
|
||||
produced_char += num_eol;
|
||||
}
|
||||
/* Suppress eol-format conversion in the further conversion. */
|
||||
coding->eol_type = CODING_EOL_LF;
|
||||
coding->symbol = saved_coding_symbol;
|
||||
|
||||
/* Set the coding system symbol to that for Unix-like EOL. */
|
||||
eol_type = Fget (saved_coding_symbol, Qeol_type);
|
||||
if (VECTORP (eol_type)
|
||||
&& XVECTOR (eol_type)->size == 3
|
||||
&& SYMBOLP (XVECTOR (eol_type)->contents[CODING_EOL_LF]))
|
||||
coding->symbol = XVECTOR (eol_type)->contents[CODING_EOL_LF];
|
||||
else
|
||||
coding->symbol = saved_coding_symbol;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue