Mercurial > emacs
comparison src/coding.c @ 83150:cf8f0a3b5cb4
Merged in changes from CVS trunk.
Patches applied:
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-376
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-377
(Fdisplay_supports_face_attributes_p): Work around bootstrapping problem
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-378
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-379
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-380
Update from CVS
* miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-381
Face merging cleanups
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-190
| author | Karoly Lorentey <lorentey@elte.hu> |
|---|---|
| date | Mon, 07 Jun 2004 08:00:27 +0000 |
| parents | 5182815e0ee1 49894995b543 |
| children | 38500c0c86ab |
comparison
equal
deleted
inserted
replaced
| 83149:f004099bad61 | 83150:cf8f0a3b5cb4 |
|---|---|
| 6564 Return a list of coding systems that safely encode the multibyte | 6564 Return a list of coding systems that safely encode the multibyte |
| 6565 text between P and PEND. SAFE_CODINGS, if non-nil, is an alist of | 6565 text between P and PEND. SAFE_CODINGS, if non-nil, is an alist of |
| 6566 possible coding systems. If it is nil, it means that we have not | 6566 possible coding systems. If it is nil, it means that we have not |
| 6567 yet found any coding systems. | 6567 yet found any coding systems. |
| 6568 | 6568 |
| 6569 WORK_TABLE is a copy of the char-table Vchar_coding_system_table. An | 6569 WORK_TABLE a char-table of which element is set to t once the |
| 6570 element of WORK_TABLE is set to t once the element is looked up. | 6570 element is looked up. |
| 6571 | 6571 |
| 6572 If a non-ASCII single byte char is found, set | 6572 If a non-ASCII single byte char is found, set |
| 6573 *single_byte_char_found to 1. */ | 6573 *single_byte_char_found to 1. */ |
| 6574 | 6574 |
| 6575 static Lisp_Object | 6575 static Lisp_Object |
| 6580 { | 6580 { |
| 6581 int c, len; | 6581 int c, len; |
| 6582 Lisp_Object val, ch; | 6582 Lisp_Object val, ch; |
| 6583 Lisp_Object prev, tail; | 6583 Lisp_Object prev, tail; |
| 6584 | 6584 |
| 6585 if (NILP (safe_codings)) | |
| 6586 goto done_safe_codings; | |
| 6585 while (p < pend) | 6587 while (p < pend) |
| 6586 { | 6588 { |
| 6587 c = STRING_CHAR_AND_LENGTH (p, pend - p, len); | 6589 c = STRING_CHAR_AND_LENGTH (p, pend - p, len); |
| 6588 p += len; | 6590 p += len; |
| 6589 if (ASCII_BYTE_P (c)) | 6591 if (ASCII_BYTE_P (c)) |
| 6590 /* We can ignore ASCII characters here. */ | 6592 /* We can ignore ASCII characters here. */ |
| 6591 continue; | 6593 continue; |
| 6592 if (SINGLE_BYTE_CHAR_P (c)) | 6594 if (SINGLE_BYTE_CHAR_P (c)) |
| 6593 *single_byte_char_found = 1; | 6595 *single_byte_char_found = 1; |
| 6594 if (NILP (safe_codings)) | |
| 6595 /* Already all coding systems are excluded. But, we can't | |
| 6596 terminate the loop here because non-ASCII single-byte char | |
| 6597 must be found. */ | |
| 6598 continue; | |
| 6599 /* Check the safe coding systems for C. */ | 6596 /* Check the safe coding systems for C. */ |
| 6600 ch = make_number (c); | 6597 ch = make_number (c); |
| 6601 val = Faref (work_table, ch); | 6598 val = Faref (work_table, ch); |
| 6602 if (EQ (val, Qt)) | 6599 if (EQ (val, Qt)) |
| 6603 /* This element was already checked. Ignore it. */ | 6600 /* This element was already checked. Ignore it. */ |
| 6671 prev = tail; | 6668 prev = tail; |
| 6672 else | 6669 else |
| 6673 { | 6670 { |
| 6674 /* Exclude this coding system from SAFE_CODINGS. */ | 6671 /* Exclude this coding system from SAFE_CODINGS. */ |
| 6675 if (EQ (tail, safe_codings)) | 6672 if (EQ (tail, safe_codings)) |
| 6676 safe_codings = XCDR (safe_codings); | 6673 { |
| 6674 safe_codings = XCDR (safe_codings); | |
| 6675 if (NILP (safe_codings)) | |
| 6676 goto done_safe_codings; | |
| 6677 } | |
| 6677 else | 6678 else |
| 6678 XSETCDR (prev, XCDR (tail)); | 6679 XSETCDR (prev, XCDR (tail)); |
| 6679 } | 6680 } |
| 6680 } | 6681 } |
| 6681 } | 6682 } |
| 6683 | |
| 6684 done_safe_codings: | |
| 6685 /* If the above loop was terminated before P reaches PEND, it means | |
| 6686 SAFE_CODINGS was set to nil. If we have not yet found an | |
| 6687 non-ASCII single-byte char, check it now. */ | |
| 6688 if (! *single_byte_char_found) | |
| 6689 while (p < pend) | |
| 6690 { | |
| 6691 c = STRING_CHAR_AND_LENGTH (p, pend - p, len); | |
| 6692 p += len; | |
| 6693 if (! ASCII_BYTE_P (c) | |
| 6694 && SINGLE_BYTE_CHAR_P (c)) | |
| 6695 { | |
| 6696 *single_byte_char_found = 1; | |
| 6697 break; | |
| 6698 } | |
| 6699 } | |
| 6682 return safe_codings; | 6700 return safe_codings; |
| 6683 } | 6701 } |
| 6684 | 6702 |
| 6685 DEFUN ("find-coding-systems-region-internal", | 6703 DEFUN ("find-coding-systems-region-internal", |
| 6686 Ffind_coding_systems_region_internal, | 6704 Ffind_coding_systems_region_internal, |
