Commit bf9cdd4e authored by Kenichi Handa's avatar Kenichi Handa

(detect_coding_iso2022): Do not exclude posibility of

7-bit encoding when designation to G1 occurs.  If CSI, SS2, or SS3
is found, return CODING_CATEGORY_MASK_ISO_8_ELSE.
(Fdetect_coding_region): Doc-string modified.
parent a95c35f6
...@@ -623,38 +623,59 @@ detect_coding_iso2022 (src, src_end) ...@@ -623,38 +623,59 @@ detect_coding_iso2022 (src, src_end)
if (src >= src_end) if (src >= src_end)
break; break;
c = *src++; c = *src++;
if (src < src_end if ((c >= '(' && c <= '/'))
&& ((c >= '(' && c <= '/')
|| c == '$' && ((*src >= '(' && *src <= '/')
|| (*src >= '@' && *src <= 'B'))))
{ {
/* Valid designation sequence. */ /* Designation sequence for a charset of dimension 1. */
if (c == ')' || (c == '$' && *src == ')')) if (src >= src_end)
break;
c = *src++;
if (c < ' ' || c >= 0x80)
/* Invalid designation sequence. */
return 0;
}
else if (c == '$')
{
/* Designation sequence for a charset of dimension 2. */
if (src >= src_end)
break;
c = *src++;
if (c >= '@' && c <= 'B')
/* Designation for JISX0208.1978, GB2312, or JISX0208. */
;
else if (c >= '(' && c <= '/')
{ {
g1 = 1; if (src >= src_end)
mask &= ~(CODING_CATEGORY_MASK_ISO_7 break;
| CODING_CATEGORY_MASK_ISO_7_ELSE); c = *src++;
if (c < ' ' || c >= 0x80)
/* Invalid designation sequence. */
return 0;
} }
src++; else
break; /* Invalid designation sequence. */
return 0;
} }
else if (c == 'N' || c == 'O' || c == 'n' || c == 'o') else if (c == 'N' || c == 'O' || c == 'n' || c == 'o')
/* Locking shift. */
mask &= (CODING_CATEGORY_MASK_ISO_7_ELSE mask &= (CODING_CATEGORY_MASK_ISO_7_ELSE
| CODING_CATEGORY_MASK_ISO_8_ELSE); | CODING_CATEGORY_MASK_ISO_8_ELSE);
else if (c == '0' || c == '1' || c == '2')
/* Start/end composition. */
;
else
/* Invalid escape sequence. */
return 0;
break; break;
case ISO_CODE_SO: case ISO_CODE_SO:
if (g1) mask &= (CODING_CATEGORY_MASK_ISO_7_ELSE
mask &= (CODING_CATEGORY_MASK_ISO_7_ELSE | CODING_CATEGORY_MASK_ISO_8_ELSE);
| CODING_CATEGORY_MASK_ISO_8_ELSE);
break; break;
case ISO_CODE_CSI: case ISO_CODE_CSI:
case ISO_CODE_SS2: case ISO_CODE_SS2:
case ISO_CODE_SS3: case ISO_CODE_SS3:
mask &= ~(CODING_CATEGORY_MASK_ISO_7 return CODING_CATEGORY_MASK_ISO_8_ELSE;
| CODING_CATEGORY_MASK_ISO_7_ELSE);
break;
default: default:
if (c < 0x80) if (c < 0x80)
...@@ -3001,10 +3022,10 @@ The value of property should be a vector of length 5.") ...@@ -3001,10 +3022,10 @@ The value of property should be a vector of length 5.")
DEFUN ("detect-coding-region", Fdetect_coding_region, Sdetect_coding_region, DEFUN ("detect-coding-region", Fdetect_coding_region, Sdetect_coding_region,
2, 2, 0, 2, 2, 0,
"Detect coding-system of the text in the region between START and END.\n\ "Detect coding system of the text in the region between START and END.\n\
Return a list of possible coding-systems ordered by priority.\n\ Return a list of possible coding systems ordered by priority.\n\
If only ASCII characters are found, it returns `undecided'\n\ If only ASCII characters are found, it returns `undecided'\n\
or its subsidiary coding-system according to a detected end-of-line format.") or its subsidiary coding system according to a detected end-of-line format.")
(b, e) (b, e)
Lisp_Object b, e; Lisp_Object b, e;
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment