comparison src/coding.c @ 19052:302a7b2a6948

(encode_coding_iso2022): Write out invalid multibyte forms in a buffer as is. (detect_coding_mask): If ISO_CODE_CSI appears in an invalid sequence, ignore it.
author Kenichi Handa <handa@m17n.org>
date Thu, 31 Jul 1997 05:55:12 +0000
parents 50c89868f8c7
children 36b06087dc31
comparison
equal deleted inserted replaced
19051:4572e0e4aef1 19052:302a7b2a6948
1493 CODING_SPEC_ISO_BOL (coding) = 1; 1493 CODING_SPEC_ISO_BOL (coding) = 1;
1494 break; 1494 break;
1495 1495
1496 case EMACS_leading_code_2: 1496 case EMACS_leading_code_2:
1497 ONE_MORE_BYTE (c2); 1497 ONE_MORE_BYTE (c2);
1498 ENCODE_ISO_CHARACTER (c1, c2, /* dummy */ c3); 1498 if (c2 < 0xA0)
1499 {
1500 /* invalid sequence */
1501 *dst++ = c1;
1502 *dst++ = c2;
1503 }
1504 else
1505 ENCODE_ISO_CHARACTER (c1, c2, /* dummy */ c3);
1499 break; 1506 break;
1500 1507
1501 case EMACS_leading_code_3: 1508 case EMACS_leading_code_3:
1502 TWO_MORE_BYTES (c2, c3); 1509 TWO_MORE_BYTES (c2, c3);
1503 if (c1 < LEADING_CODE_PRIVATE_11) 1510 if (c2 < 0xA0 || c3 < 0xA0)
1511 {
1512 /* invalid sequence */
1513 *dst++ = c1;
1514 *dst++ = c2;
1515 *dst++ = c3;
1516 }
1517 else if (c1 < LEADING_CODE_PRIVATE_11)
1504 ENCODE_ISO_CHARACTER (c1, c2, c3); 1518 ENCODE_ISO_CHARACTER (c1, c2, c3);
1505 else 1519 else
1506 ENCODE_ISO_CHARACTER (c2, c3, /* dummy */ c4); 1520 ENCODE_ISO_CHARACTER (c2, c3, /* dummy */ c4);
1507 break; 1521 break;
1508 1522
1509 case EMACS_leading_code_4: 1523 case EMACS_leading_code_4:
1510 THREE_MORE_BYTES (c2, c3, c4); 1524 THREE_MORE_BYTES (c2, c3, c4);
1511 ENCODE_ISO_CHARACTER (c2, c3, c4); 1525 if (c2 < 0xA0 || c3 < 0xA0 || c4 < 0xA0)
1526 {
1527 /* invalid sequence */
1528 *dst++ = c1;
1529 *dst++ = c2;
1530 *dst++ = c3;
1531 *dst++ = c4;
1532 }
1533 else
1534 ENCODE_ISO_CHARACTER (c2, c3, c4);
1512 break; 1535 break;
1513 1536
1514 case EMACS_leading_code_composition: 1537 case EMACS_leading_code_composition:
1515 ONE_MORE_BYTE (c1); 1538 ONE_MORE_BYTE (c2);
1516 if (c1 == 0xFF) 1539 if (c2 < 0xA0)
1540 {
1541 /* invalid sequence */
1542 *dst++ = c1;
1543 *dst++ = c2;
1544 }
1545 else if (c2 == 0xFF)
1517 { 1546 {
1518 coding->composing = COMPOSING_WITH_RULE_HEAD; 1547 coding->composing = COMPOSING_WITH_RULE_HEAD;
1519 ENCODE_COMPOSITION_WITH_RULE_START; 1548 ENCODE_COMPOSITION_WITH_RULE_START;
1520 } 1549 }
1521 else 1550 else
2553 src++; 2582 src++;
2554 if (mask == CODING_CATEGORY_MASK_ANY) 2583 if (mask == CODING_CATEGORY_MASK_ANY)
2555 /* No valid ISO2022 code follows C. Try again. */ 2584 /* No valid ISO2022 code follows C. Try again. */
2556 goto label_loop_detect_coding; 2585 goto label_loop_detect_coding;
2557 } 2586 }
2558 else if (c == ISO_CODE_SS2 || c == ISO_CODE_SS3 || c == ISO_CODE_CSI) 2587 else if (c == ISO_CODE_SS2 || c == ISO_CODE_SS3)
2559 /* C is an ISO2022 specific control code of C1, 2588 /* C is an ISO2022 specific control code of C1,
2560 or the first byte of SJIS's 2-byte character code, 2589 or the first byte of SJIS's 2-byte character code,
2561 or a leading code of Emacs. */ 2590 or a leading code of Emacs. */
2562 mask = (detect_coding_iso2022 (src, src_end) 2591 mask = (detect_coding_iso2022 (src, src_end)
2563 | detect_coding_sjis (src, src_end) 2592 | detect_coding_sjis (src, src_end)
2564 | detect_coding_emacs_mule (src, src_end)); 2593 | detect_coding_emacs_mule (src, src_end));
2565 2594
2595 else if (c == ISO_CODE_CSI
2596 && (src < src_end
2597 && (*src == ']'
2598 || (src + 1 < src_end
2599 && src[1] == ']'
2600 && (*src == '0' || *src == '1' || *src == '2')))))
2601 /* C is an ISO2022's control-sequence-introducer. */
2602 mask = (detect_coding_iso2022 (src, src_end)
2603 | detect_coding_sjis (src, src_end)
2604 | detect_coding_emacs_mule (src, src_end));
2605
2566 else if (c < 0xA0) 2606 else if (c < 0xA0)
2567 /* C is the first byte of SJIS character code, 2607 /* C is the first byte of SJIS character code,
2568 or a leading-code of Emacs. */ 2608 or a leading-code of Emacs. */
2569 mask = (detect_coding_sjis (src, src_end) 2609 mask = (detect_coding_sjis (src, src_end)
2570 | detect_coding_emacs_mule (src, src_end)); 2610 | detect_coding_emacs_mule (src, src_end));