Changeset 3498
- Timestamp:
- 10/10/04 17:35:15 (4 years ago)
- Files:
-
- branches/2.2/src/ChangeLog.Meadow (modified) (1 diff)
- branches/2.2/src/charset.c (modified) (4 diffs)
- branches/2.2/src/charset.h (modified) (15 diffs)
- branches/2.2/src/data.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/2.2/src/ChangeLog.Meadow
r3497 r3498 1 2004-10-10 MIYOSHI Masanori <miyoshi@meadowy.org> 2 3 * charset.h: Sync up with Emacs CVS HEAD. 4 5 * data.c (Faset): Ditto. 6 7 * charset.c: Merge codes related with the changes in coding.h. 8 1 9 2004-10-10 MIYOSHI Masanori <miyoshi@meadowy.org> 2 10 branches/2.2/src/charset.c
r3472 r3498 800 800 int 801 801 find_charset_in_text (ptr, nchars, nbytes, charsets, table) 802 unsigned char *ptr;802 const unsigned char *ptr; 803 803 int nchars, nbytes, *charsets; 804 804 Lisp_Object table; … … 808 808 if (charsets && nbytes > 0) 809 809 { 810 unsigned char *endp = ptr + nbytes;810 const unsigned char *endp = ptr + nbytes; 811 811 int maskbits = 0; 812 812 … … 875 875 If the current buffer is unibyte, the returned list may contain 876 876 only `ascii', `eight-bit-control', and `eight-bit-graphic'. */) 877 (beg, end, table)877 (beg, end, table) 878 878 Lisp_Object beg, end, table; 879 879 { … … 1493 1493 void 1494 1494 parse_str_as_multibyte (str, len, nchars, nbytes) 1495 unsigned char *str;1495 const unsigned char *str; 1496 1496 int len, *nchars, *nbytes; 1497 1497 { 1498 unsigned char *endp = str + len;1498 const unsigned char *endp = str + len; 1499 1499 int n, chars = 0, bytes = 0; 1500 1500 branches/2.2/src/charset.h
r3496 r3498 217 217 218 218 /* 1 if C is a single byte character, else 0. */ 219 #define SINGLE_BYTE_CHAR_P(c) (( unsigned) (c) < 0x100)219 #define SINGLE_BYTE_CHAR_P(c) (((unsigned)(c) & 0xFF) == (c)) 220 220 221 221 /* 1 if BYTE is an ASCII character in itself, in multibyte mode. */ … … 438 438 439 439 #define PARSE_MULTIBYTE_SEQ(str, length, bytes) \ 440 ( bytes) = BYTES_BY_CHAR_HEAD ((str)[0])440 ((void)(length), (bytes) = BYTES_BY_CHAR_HEAD ((str)[0])) 441 441 442 442 #endif /* not BYTE_COMBINING_DEBUG */ 443 444 #define VALID_LEADING_CODE_P(code) \ 445 (! NILP (CHARSET_TABLE_ENTRY (code))) 443 446 444 447 /* Return 1 iff the byte sequence at unibyte string STR (LENGTH bytes) … … 446 449 set to the byte length of the multibyte form. */ 447 450 448 #define UNIBYTE_STR_AS_MULTIBYTE_P(str, length, bytes) \ 449 (((str)[0] < 0x80 || (str)[0] >= 0xA0) \ 450 ? (bytes) = 1 \ 451 : (((bytes) = BYTES_BY_CHAR_HEAD ((str)[0])), \ 452 ((bytes) > 1 && (bytes) <= (length) \ 453 && (str)[0] != LEADING_CODE_8_BIT_CONTROL \ 454 && !CHAR_HEAD_P ((str)[1]) \ 455 && ((bytes) == 2 \ 456 || (!CHAR_HEAD_P ((str)[2]) \ 457 && ((bytes) == 3 \ 458 || !CHAR_HEAD_P ((str)[3]))))))) 451 #define UNIBYTE_STR_AS_MULTIBYTE_P(str, length, bytes) \ 452 (((str)[0] < 0x80 || (str)[0] >= 0xA0) \ 453 ? ((bytes) = 1) \ 454 : (((bytes) = BYTES_BY_CHAR_HEAD ((str)[0])), \ 455 ((bytes) <= (length) \ 456 && !CHAR_HEAD_P ((str)[1]) \ 457 && ((bytes) == 2 \ 458 ? (str)[0] != LEADING_CODE_8_BIT_CONTROL \ 459 : (!CHAR_HEAD_P ((str)[2]) \ 460 && ((bytes) == 3 \ 461 ? (((str)[0] != LEADING_CODE_PRIVATE_11 \ 462 && (str)[0] != LEADING_CODE_PRIVATE_12) \ 463 || VALID_LEADING_CODE_P (str[1])) \ 464 : (!CHAR_HEAD_P ((str)[3]) \ 465 && VALID_LEADING_CODE_P (str[1])))))))) 466 459 467 460 468 /* Return 1 iff the byte sequence at multibyte string STR is valid as … … 528 536 #define CHAR_STRING(c, str) \ 529 537 (SINGLE_BYTE_CHAR_P (c) \ 530 ? ((ASCII_BYTE_P (c) || c >= 0xA0) \538 ? ((ASCII_BYTE_P (c) || c >= 0xA0) \ 531 539 ? (*(str) = (unsigned char)(c), 1) \ 532 : (*(str) = (unsigned char)LEADING_CODE_8_BIT_CONTROL, \ 533 *((str)+ 1) = c + 0x20, 2)) \ 540 : (*(str) = (unsigned char)LEADING_CODE_8_BIT_CONTROL, *((str)+ 1) = c + 0x20, 2)) \ 534 541 : char_to_string (c, (unsigned char *) str)) 535 542 … … 575 582 if (STRING_MULTIBYTE (STRING)) \ 576 583 { \ 577 unsigned char *ptr = &XSTRING (STRING)->data[BYTEIDX]; \578 int space_left = XSTRING (STRING)->size_byte - BYTEIDX;\584 const unsigned char *ptr = SDATA (STRING) + BYTEIDX; \ 585 int space_left = SBYTES (STRING) - BYTEIDX; \ 579 586 int actual_len; \ 580 587 \ … … 583 590 } \ 584 591 else \ 585 OUTPUT = XSTRING (STRING)->data[BYTEIDX++];\592 OUTPUT = SREF (STRING, BYTEIDX++); \ 586 593 } \ 587 594 else … … 592 599 if (1) \ 593 600 { \ 594 unsigned char *fetch_string_char_ptr = &XSTRING (STRING)->data[BYTEIDX];\595 int fetch_string_char_space_left = XSTRING (STRING)->size_byte - BYTEIDX;\601 const unsigned char *fetch_string_char_ptr = SDATA (STRING) + BYTEIDX; \ 602 int fetch_string_char_space_left = SBYTES (STRING) - BYTEIDX; \ 596 603 int actual_len; \ 597 604 \ … … 636 643 : multibyte_form_length (str, len)) 637 644 645 /* If P is before LIMIT, advance P to the next character boundary. It 646 assumes that P is already at a character boundary of the sane 647 mulitbyte form whose end address is LIMIT. */ 648 649 #define NEXT_CHAR_BOUNDARY(p, limit) \ 650 do { \ 651 if ((p) < (limit)) \ 652 (p) += BYTES_BY_CHAR_HEAD (*(p)); \ 653 } while (0) 654 655 656 /* If P is after LIMIT, advance P to the previous character boundary. 657 It assumes that P is already at a character boundary of the sane 658 mulitbyte form whose beginning address is LIMIT. */ 659 660 #define PREV_CHAR_BOUNDARY(p, limit) \ 661 do { \ 662 if ((p) > (limit)) \ 663 { \ 664 const unsigned char *p0 = (p); \ 665 do { \ 666 p0--; \ 667 } while (p0 >= limit && ! CHAR_HEAD_P (*p0)); \ 668 (p) = (BYTES_BY_CHAR_HEAD (*p0) == (p) - p0) ? p0 : (p) - 1; \ 669 } \ 670 } while (0) 671 672 638 673 #ifdef emacs 639 674 … … 677 712 pos_byte--; \ 678 713 if (pos_byte < GPT_BYTE) \ 679 p = BEG_ADDR + pos_byte - 1, p_min = BEG_ADDR;\714 p = BEG_ADDR + pos_byte - BEG_BYTE, p_min = BEG_ADDR; \ 680 715 else \ 681 p = BEG_ADDR + GAP_SIZE + pos_byte - 1, p_min = GAP_END_ADDR;\716 p = BEG_ADDR + GAP_SIZE + pos_byte - BEG_BYTE, p_min = GAP_END_ADDR;\ 682 717 if (p > p_min && !CHAR_HEAD_P (*p)) \ 683 718 { \ 684 719 unsigned char *pend = p--; \ 685 720 int len, bytes; \ 721 if (p_min < p - MAX_MULTIBYTE_LENGTH) \ 722 p_min = p - MAX_MULTIBYTE_LENGTH; \ 686 723 while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ 687 724 len = pend + 1 - p; \ … … 757 794 if (pos_byte < BUF_GPT_BYTE (buf)) \ 758 795 { \ 759 p = BUF_BEG_ADDR (buf) + pos_byte - 1;\796 p = BUF_BEG_ADDR (buf) + pos_byte - BEG_BYTE; \ 760 797 p_min = BUF_BEG_ADDR (buf); \ 761 798 } \ 762 799 else \ 763 800 { \ 764 p = BUF_BEG_ADDR (buf) + BUF_GAP_SIZE (buf) + pos_byte - 1;\801 p = BUF_BEG_ADDR (buf) + BUF_GAP_SIZE (buf) + pos_byte - BEG_BYTE;\ 765 802 p_min = BUF_GAP_END_ADDR (buf); \ 766 803 } \ … … 769 806 unsigned char *pend = p--; \ 770 807 int len, bytes; \ 808 if (p_min < p - MAX_MULTIBYTE_LENGTH) \ 809 p_min = p - MAX_MULTIBYTE_LENGTH; \ 771 810 while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ 772 811 len = pend + 1 - p; \ … … 792 831 extern int char_printable_p P_ ((int c)); 793 832 extern int multibyte_form_length P_ ((const unsigned char *, int)); 794 extern void parse_str_as_multibyte P_ ((unsigned char *, int, int *, int *)); 833 extern void parse_str_as_multibyte P_ ((const unsigned char *, int, int *, 834 int *)); 795 835 extern int str_as_multibyte P_ ((unsigned char *, int, int, int *)); 796 836 extern int parse_str_to_multibyte P_ ((unsigned char *, int)); … … 798 838 extern int str_as_unibyte P_ ((unsigned char *, int)); 799 839 extern int get_charset_id P_ ((Lisp_Object)); 800 extern int find_charset_in_text P_ (( unsigned char *, int, int, int *,840 extern int find_charset_in_text P_ ((const unsigned char *, int, int, int *, 801 841 Lisp_Object)); 802 842 extern int strwidth P_ ((unsigned char *, int)); … … 806 846 extern int char_valid_p P_ ((int, int)); 807 847 848 EXFUN (Funibyte_char_to_multibyte, 1); 849 808 850 extern Lisp_Object Vtranslation_table_vector; 809 851 … … 829 871 830 872 #endif /* EMACS_CHARSET_H */ 873 874 /* arch-tag: 3b96db55-4961-481d-ac3e-219f46a2b3aa 875 (do not change this comment) */ branches/2.2/src/data.c
r3488 r3498 2014 2014 else if (STRING_MULTIBYTE (array)) 2015 2015 { 2016 int idxval_byte, prev_bytes, new_bytes ;2016 int idxval_byte, prev_bytes, new_bytes, nbytes; 2017 2017 unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *p0 = workbuf, *p1; 2018 2018 … … 2020 2020 args_out_of_range (array, idx); 2021 2021 CHECK_NUMBER (newelt); 2022 2023 nbytes = SBYTES (array); 2022 2024 2023 2025 idxval_byte = string_char_to_byte (array, idxval);
