Mercurial > emacs
annotate src/coding.c @ 23323:0800a4f84757
(underlying_strftime):
Set the buffer to a nonzero value before calling
strftime, and check to see whether strftime has set the buffer to zero.
This lets us distinguish between an empty buffer and an error.
I'm installing this patch by hand now; it will be superseded whenever
the glibc sources are propagated back to fsf.org.
| author | Paul Eggert <eggert@twinsun.com> |
|---|---|
| date | Fri, 25 Sep 1998 21:40:23 +0000 |
| parents | 86a8b8566369 |
| children | bbd06336cd0c |
| rev | line source |
|---|---|
| 17052 | 1 /* Coding system handler (conversion, detection, and etc). |
| 20708 | 2 Copyright (C) 1995, 1997, 1998 Electrotechnical Laboratory, JAPAN. |
|
18269
888bfd80db2c
Change copyright notices.
Richard M. Stallman <rms@gnu.org>
parents:
18180
diff
changeset
|
3 Licensed to the Free Software Foundation. |
| 17052 | 4 |
| 17071 | 5 This file is part of GNU Emacs. |
| 6 | |
| 7 GNU Emacs is free software; you can redistribute it and/or modify | |
| 8 it under the terms of the GNU General Public License as published by | |
| 9 the Free Software Foundation; either version 2, or (at your option) | |
| 10 any later version. | |
| 11 | |
| 12 GNU Emacs is distributed in the hope that it will be useful, | |
| 13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 GNU General Public License for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU General Public License | |
| 18 along with GNU Emacs; see the file COPYING. If not, write to | |
| 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 20 Boston, MA 02111-1307, USA. */ | |
| 17052 | 21 |
| 22 /*** TABLE OF CONTENTS *** | |
| 23 | |
| 24 1. Preamble | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
25 2. Emacs' internal format (emacs-mule) handlers |
| 17052 | 26 3. ISO2022 handlers |
| 27 4. Shift-JIS and BIG5 handlers | |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
28 5. CCL handlers |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
29 6. End-of-line handlers |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
30 7. C library functions |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
31 8. Emacs Lisp library functions |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
32 9. Post-amble |
| 17052 | 33 |
| 34 */ | |
| 35 | |
| 36 /*** GENERAL NOTE on CODING SYSTEM *** | |
| 37 | |
| 38 Coding system is an encoding mechanism of one or more character | |
| 39 sets. Here's a list of coding systems which Emacs can handle. When | |
| 40 we say "decode", it means converting some other coding system to | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
41 Emacs' internal format (emacs-internal), and when we say "encode", |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
42 it means converting the coding system emacs-mule to some other |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
43 coding system. |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
44 |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
45 0. Emacs' internal format (emacs-mule) |
| 17052 | 46 |
| 47 Emacs itself holds a multi-lingual character in a buffer and a string | |
| 18766 | 48 in a special format. Details are described in section 2. |
| 17052 | 49 |
| 50 1. ISO2022 | |
| 51 | |
| 52 The most famous coding system for multiple character sets. X's | |
| 18766 | 53 Compound Text, various EUCs (Extended Unix Code), and coding |
| 54 systems used in Internet communication such as ISO-2022-JP are | |
| 55 all variants of ISO2022. Details are described in section 3. | |
| 17052 | 56 |
| 57 2. SJIS (or Shift-JIS or MS-Kanji-Code) | |
| 58 | |
| 59 A coding system to encode character sets: ASCII, JISX0201, and | |
| 60 JISX0208. Widely used for PC's in Japan. Details are described in | |
| 18766 | 61 section 4. |
| 17052 | 62 |
| 63 3. BIG5 | |
| 64 | |
| 65 A coding system to encode character sets: ASCII and Big5. Widely | |
| 66 used by Chinese (mainly in Taiwan and Hong Kong). Details are | |
| 18766 | 67 described in section 4. In this file, when we write "BIG5" |
| 68 (all uppercase), we mean the coding system, and when we write | |
| 69 "Big5" (capitalized), we mean the character set. | |
| 70 | |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
71 4. Raw text |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
72 |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
73 A coding system for a text containing random 8-bit code. Emacs does |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
74 no code conversion on such a text except for end-of-line format. |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
75 |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
76 5. Other |
| 18766 | 77 |
| 78 If a user wants to read/write a text encoded in a coding system not | |
| 17052 | 79 listed above, he can supply a decoder and an encoder for it in CCL |
| 80 (Code Conversion Language) programs. Emacs executes the CCL program | |
| 81 while reading/writing. | |
| 82 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
83 Emacs represents a coding system by a Lisp symbol that has a property |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
84 `coding-system'. But, before actually using the coding system, the |
| 17052 | 85 information about it is set in a structure of type `struct |
| 18766 | 86 coding_system' for rapid processing. See section 6 for more details. |
| 17052 | 87 |
| 88 */ | |
| 89 | |
| 90 /*** GENERAL NOTES on END-OF-LINE FORMAT *** | |
| 91 | |
| 92 How end-of-line of a text is encoded depends on a system. For | |
| 93 instance, Unix's format is just one byte of `line-feed' code, | |
| 18766 | 94 whereas DOS's format is two-byte sequence of `carriage-return' and |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
95 `line-feed' codes. MacOS's format is usually one byte of |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
96 `carriage-return'. |
| 17052 | 97 |
| 18766 | 98 Since text characters encoding and end-of-line encoding are |
| 99 independent, any coding system described above can take | |
| 17052 | 100 any format of end-of-line. So, Emacs has information of format of |
| 18766 | 101 end-of-line in each coding-system. See section 6 for more details. |
| 17052 | 102 |
| 103 */ | |
| 104 | |
| 105 /*** GENERAL NOTES on `detect_coding_XXX ()' functions *** | |
| 106 | |
| 107 These functions check if a text between SRC and SRC_END is encoded | |
| 108 in the coding system category XXX. Each returns an integer value in | |
| 109 which appropriate flag bits for the category XXX is set. The flag | |
| 110 bits are defined in macros CODING_CATEGORY_MASK_XXX. Below is the | |
| 111 template of these functions. */ | |
| 112 #if 0 | |
| 113 int | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
114 detect_coding_emacs_mule (src, src_end) |
| 17052 | 115 unsigned char *src, *src_end; |
| 116 { | |
| 117 ... | |
| 118 } | |
| 119 #endif | |
| 120 | |
| 121 /*** GENERAL NOTES on `decode_coding_XXX ()' functions *** | |
| 122 | |
| 123 These functions decode SRC_BYTES length text at SOURCE encoded in | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
124 CODING to Emacs' internal format (emacs-mule). The resulting text |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
125 goes to a place pointed to by DESTINATION, the length of which |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
126 should not exceed DST_BYTES. These functions set the information of |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
127 original and decoded texts in the members produced, produced_char, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
128 consumed, and consumed_char of the structure *CODING. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
129 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
130 The return value is an integer (CODING_FINISH_XXX) indicating how |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
131 the decoding finished. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
132 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
133 DST_BYTES zero means that source area and destination area are |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
134 overlapped, which means that we can produce a decoded text until it |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
135 reaches at the head of not-yet-decoded source text. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
136 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
137 Below is a template of these functions. */ |
| 17052 | 138 #if 0 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
139 decode_coding_XXX (coding, source, destination, src_bytes, dst_bytes) |
| 17052 | 140 struct coding_system *coding; |
| 141 unsigned char *source, *destination; | |
| 142 int src_bytes, dst_bytes; | |
| 143 { | |
| 144 ... | |
| 145 } | |
| 146 #endif | |
| 147 | |
| 148 /*** GENERAL NOTES on `encode_coding_XXX ()' functions *** | |
| 149 | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
150 These functions encode SRC_BYTES length text at SOURCE of Emacs' |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
151 internal format (emacs-mule) to CODING. The resulting text goes to |
| 18766 | 152 a place pointed to by DESTINATION, the length of which should not |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
153 exceed DST_BYTES. These functions set the information of |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
154 original and encoded texts in the members produced, produced_char, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
155 consumed, and consumed_char of the structure *CODING. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
156 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
157 The return value is an integer (CODING_FINISH_XXX) indicating how |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
158 the encoding finished. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
159 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
160 DST_BYTES zero means that source area and destination area are |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
161 overlapped, which means that we can produce a decoded text until it |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
162 reaches at the head of not-yet-decoded source text. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
163 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
164 Below is a template of these functions. */ |
| 17052 | 165 #if 0 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
166 encode_coding_XXX (coding, source, destination, src_bytes, dst_bytes) |
| 17052 | 167 struct coding_system *coding; |
| 168 unsigned char *source, *destination; | |
| 169 int src_bytes, dst_bytes; | |
| 170 { | |
| 171 ... | |
| 172 } | |
| 173 #endif | |
| 174 | |
| 175 /*** COMMONLY USED MACROS ***/ | |
| 176 | |
| 177 /* The following three macros ONE_MORE_BYTE, TWO_MORE_BYTES, and | |
| 178 THREE_MORE_BYTES safely get one, two, and three bytes from the | |
| 179 source text respectively. If there are not enough bytes in the | |
| 180 source, they jump to `label_end_of_loop'. The caller should set | |
| 181 variables `src' and `src_end' to appropriate areas in advance. */ | |
| 182 | |
| 183 #define ONE_MORE_BYTE(c1) \ | |
| 184 do { \ | |
| 185 if (src < src_end) \ | |
| 186 c1 = *src++; \ | |
| 187 else \ | |
| 188 goto label_end_of_loop; \ | |
| 189 } while (0) | |
| 190 | |
| 191 #define TWO_MORE_BYTES(c1, c2) \ | |
| 192 do { \ | |
| 193 if (src + 1 < src_end) \ | |
| 194 c1 = *src++, c2 = *src++; \ | |
| 195 else \ | |
| 196 goto label_end_of_loop; \ | |
| 197 } while (0) | |
| 198 | |
| 199 #define THREE_MORE_BYTES(c1, c2, c3) \ | |
| 200 do { \ | |
| 201 if (src + 2 < src_end) \ | |
| 202 c1 = *src++, c2 = *src++, c3 = *src++; \ | |
| 203 else \ | |
| 204 goto label_end_of_loop; \ | |
| 205 } while (0) | |
| 206 | |
| 207 /* The following three macros DECODE_CHARACTER_ASCII, | |
| 208 DECODE_CHARACTER_DIMENSION1, and DECODE_CHARACTER_DIMENSION2 put | |
| 209 the multi-byte form of a character of each class at the place | |
| 210 pointed by `dst'. The caller should set the variable `dst' to | |
| 211 point to an appropriate area and the variable `coding' to point to | |
| 212 the coding-system of the currently decoding text in advance. */ | |
| 213 | |
| 214 /* Decode one ASCII character C. */ | |
| 215 | |
| 216 #define DECODE_CHARACTER_ASCII(c) \ | |
| 217 do { \ | |
| 218 if (COMPOSING_P (coding->composing)) \ | |
| 219 *dst++ = 0xA0, *dst++ = (c) | 0x80; \ | |
| 220 else \ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
221 { \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
222 *dst++ = (c); \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
223 coding->produced_char++; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
224 } \ |
| 17052 | 225 } while (0) |
| 226 | |
| 18766 | 227 /* Decode one DIMENSION1 character whose charset is CHARSET and whose |
| 17052 | 228 position-code is C. */ |
| 229 | |
| 230 #define DECODE_CHARACTER_DIMENSION1(charset, c) \ | |
| 231 do { \ | |
| 232 unsigned char leading_code = CHARSET_LEADING_CODE_BASE (charset); \ | |
| 233 if (COMPOSING_P (coding->composing)) \ | |
| 234 *dst++ = leading_code + 0x20; \ | |
| 235 else \ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
236 { \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
237 *dst++ = leading_code; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
238 coding->produced_char++; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
239 } \ |
| 17052 | 240 if (leading_code = CHARSET_LEADING_CODE_EXT (charset)) \ |
| 241 *dst++ = leading_code; \ | |
| 242 *dst++ = (c) | 0x80; \ | |
| 243 } while (0) | |
| 244 | |
| 18766 | 245 /* Decode one DIMENSION2 character whose charset is CHARSET and whose |
| 17052 | 246 position-codes are C1 and C2. */ |
| 247 | |
| 248 #define DECODE_CHARACTER_DIMENSION2(charset, c1, c2) \ | |
| 249 do { \ | |
| 250 DECODE_CHARACTER_DIMENSION1 (charset, c1); \ | |
| 251 *dst++ = (c2) | 0x80; \ | |
| 252 } while (0) | |
| 253 | |
| 254 | |
| 255 /*** 1. Preamble ***/ | |
| 256 | |
| 257 #include <stdio.h> | |
| 258 | |
| 259 #ifdef emacs | |
| 260 | |
| 261 #include <config.h> | |
| 262 #include "lisp.h" | |
| 263 #include "buffer.h" | |
| 264 #include "charset.h" | |
| 265 #include "ccl.h" | |
| 266 #include "coding.h" | |
| 267 #include "window.h" | |
| 268 | |
| 269 #else /* not emacs */ | |
| 270 | |
| 271 #include "mulelib.h" | |
| 272 | |
| 273 #endif /* not emacs */ | |
| 274 | |
| 275 Lisp_Object Qcoding_system, Qeol_type; | |
| 276 Lisp_Object Qbuffer_file_coding_system; | |
| 277 Lisp_Object Qpost_read_conversion, Qpre_write_conversion; | |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
278 Lisp_Object Qno_conversion, Qundecided; |
|
19750
95e4e1cba6ac
(Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19747
diff
changeset
|
279 Lisp_Object Qcoding_system_history; |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
280 Lisp_Object Qsafe_charsets; |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
281 Lisp_Object Qvalid_codes; |
| 17052 | 282 |
| 283 extern Lisp_Object Qinsert_file_contents, Qwrite_region; | |
| 284 Lisp_Object Qcall_process, Qcall_process_region, Qprocess_argument; | |
| 285 Lisp_Object Qstart_process, Qopen_network_stream; | |
| 286 Lisp_Object Qtarget_idx; | |
| 287 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
288 Lisp_Object Vselect_safe_coding_system_function; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
289 |
| 17052 | 290 /* Mnemonic character of each format of end-of-line. */ |
| 291 int eol_mnemonic_unix, eol_mnemonic_dos, eol_mnemonic_mac; | |
| 292 /* Mnemonic character to indicate format of end-of-line is not yet | |
| 293 decided. */ | |
| 294 int eol_mnemonic_undecided; | |
| 295 | |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
296 /* Format of end-of-line decided by system. This is CODING_EOL_LF on |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
297 Unix, CODING_EOL_CRLF on DOS/Windows, and CODING_EOL_CR on Mac. */ |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
298 int system_eol_type; |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
299 |
| 17052 | 300 #ifdef emacs |
| 301 | |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
302 Lisp_Object Vcoding_system_list, Vcoding_system_alist; |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
303 |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
304 Lisp_Object Qcoding_system_p, Qcoding_system_error; |
| 17052 | 305 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
306 /* Coding system emacs-mule and raw-text are for converting only |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
307 end-of-line format. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
308 Lisp_Object Qemacs_mule, Qraw_text; |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
309 |
| 17052 | 310 /* Coding-systems are handed between Emacs Lisp programs and C internal |
| 311 routines by the following three variables. */ | |
| 312 /* Coding-system for reading files and receiving data from process. */ | |
| 313 Lisp_Object Vcoding_system_for_read; | |
| 314 /* Coding-system for writing files and sending data to process. */ | |
| 315 Lisp_Object Vcoding_system_for_write; | |
| 316 /* Coding-system actually used in the latest I/O. */ | |
| 317 Lisp_Object Vlast_coding_system_used; | |
| 318 | |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
319 /* A vector of length 256 which contains information about special |
| 22529 | 320 Latin codes (especially for dealing with Microsoft codes). */ |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
321 Lisp_Object Vlatin_extra_code_table; |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
322 |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
323 /* Flag to inhibit code conversion of end-of-line format. */ |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
324 int inhibit_eol_conversion; |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
325 |
|
21574
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
326 /* Flag to make buffer-file-coding-system inherit from process-coding. */ |
|
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
327 int inherit_process_coding_system; |
|
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
328 |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
329 /* Coding system to be used to encode text for terminal display. */ |
| 17052 | 330 struct coding_system terminal_coding; |
| 331 | |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
332 /* Coding system to be used to encode text for terminal display when |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
333 terminal coding system is nil. */ |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
334 struct coding_system safe_terminal_coding; |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
335 |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
336 /* Coding system of what is sent from terminal keyboard. */ |
| 17052 | 337 struct coding_system keyboard_coding; |
| 338 | |
|
22979
ceb8e4a89a32
(default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22964
diff
changeset
|
339 /* Default coding system to be used to write a file. */ |
|
ceb8e4a89a32
(default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22964
diff
changeset
|
340 struct coding_system default_buffer_file_coding; |
|
ceb8e4a89a32
(default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22964
diff
changeset
|
341 |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
342 Lisp_Object Vfile_coding_system_alist; |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
343 Lisp_Object Vprocess_coding_system_alist; |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
344 Lisp_Object Vnetwork_coding_system_alist; |
| 17052 | 345 |
| 346 #endif /* emacs */ | |
| 347 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
348 Lisp_Object Qcoding_category, Qcoding_category_index; |
| 17052 | 349 |
| 350 /* List of symbols `coding-category-xxx' ordered by priority. */ | |
| 351 Lisp_Object Vcoding_category_list; | |
| 352 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
353 /* Table of coding categories (Lisp symbols). */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
354 Lisp_Object Vcoding_category_table; |
| 17052 | 355 |
| 356 /* Table of names of symbol for each coding-category. */ | |
| 357 char *coding_category_name[CODING_CATEGORY_IDX_MAX] = { | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
358 "coding-category-emacs-mule", |
| 17052 | 359 "coding-category-sjis", |
| 360 "coding-category-iso-7", | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
361 "coding-category-iso-7-tight", |
| 17052 | 362 "coding-category-iso-8-1", |
| 363 "coding-category-iso-8-2", | |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
364 "coding-category-iso-7-else", |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
365 "coding-category-iso-8-else", |
|
23027
0dc823b2335f
(coding_category_name): Fix the order of initial
Kenichi Handa <handa@m17n.org>
parents:
22979
diff
changeset
|
366 "coding-category-ccl", |
| 17052 | 367 "coding-category-big5", |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
368 "coding-category-raw-text", |
|
23027
0dc823b2335f
(coding_category_name): Fix the order of initial
Kenichi Handa <handa@m17n.org>
parents:
22979
diff
changeset
|
369 "coding-category-binary" |
| 17052 | 370 }; |
| 371 | |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
372 /* Table of pointers to coding systems corresponding to each coding |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
373 categories. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
374 struct coding_system *coding_system_table[CODING_CATEGORY_IDX_MAX]; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
375 |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
376 /* Table of coding category masks. Nth element is a mask for a coding |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
377 cateogry of which priority is Nth. */ |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
378 static |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
379 int coding_priorities[CODING_CATEGORY_IDX_MAX]; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
380 |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
381 /* Flag to tell if we look up translation table on character code |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
382 conversion. */ |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
383 Lisp_Object Venable_character_translation; |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
384 /* Standard translation table to look up on decoding (reading). */ |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
385 Lisp_Object Vstandard_translation_table_for_decode; |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
386 /* Standard translation table to look up on encoding (writing). */ |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
387 Lisp_Object Vstandard_translation_table_for_encode; |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
388 |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
389 Lisp_Object Qtranslation_table; |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
390 Lisp_Object Qtranslation_table_id; |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
391 Lisp_Object Qtranslation_table_for_decode; |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
392 Lisp_Object Qtranslation_table_for_encode; |
| 17052 | 393 |
| 394 /* Alist of charsets vs revision number. */ | |
| 395 Lisp_Object Vcharset_revision_alist; | |
| 396 | |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
397 /* Default coding systems used for process I/O. */ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
398 Lisp_Object Vdefault_process_coding_system; |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
399 |
| 17052 | 400 |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
401 /*** 2. Emacs internal format (emacs-mule) handlers ***/ |
| 17052 | 402 |
| 403 /* Emacs' internal format for encoding multiple character sets is a | |
| 18766 | 404 kind of multi-byte encoding, i.e. characters are encoded by |
| 405 variable-length sequences of one-byte codes. ASCII characters | |
| 406 and control characters (e.g. `tab', `newline') are represented by | |
| 407 one-byte sequences which are their ASCII codes, in the range 0x00 | |
| 408 through 0x7F. The other characters are represented by a sequence | |
| 409 of `base leading-code', optional `extended leading-code', and one | |
| 410 or two `position-code's. The length of the sequence is determined | |
| 411 by the base leading-code. Leading-code takes the range 0x80 | |
| 412 through 0x9F, whereas extended leading-code and position-code take | |
| 413 the range 0xA0 through 0xFF. See `charset.h' for more details | |
| 414 about leading-code and position-code. | |
| 415 | |
| 416 There's one exception to this rule. Special leading-code | |
| 17052 | 417 `leading-code-composition' denotes that the following several |
| 418 characters should be composed into one character. Leading-codes of | |
| 419 components (except for ASCII) are added 0x20. An ASCII character | |
| 420 component is represented by a 2-byte sequence of `0xA0' and | |
| 18766 | 421 `ASCII-code + 0x80'. See also the comments in `charset.h' for the |
| 422 details of composite character. Hence, we can summarize the code | |
| 17052 | 423 range as follows: |
| 424 | |
| 425 --- CODE RANGE of Emacs' internal format --- | |
| 426 (character set) (range) | |
| 427 ASCII 0x00 .. 0x7F | |
| 428 ELSE (1st byte) 0x80 .. 0x9F | |
| 429 (rest bytes) 0xA0 .. 0xFF | |
| 430 --------------------------------------------- | |
| 431 | |
| 432 */ | |
| 433 | |
| 434 enum emacs_code_class_type emacs_code_class[256]; | |
| 435 | |
| 436 /* Go to the next statement only if *SRC is accessible and the code is | |
| 437 greater than 0xA0. */ | |
| 438 #define CHECK_CODE_RANGE_A0_FF \ | |
| 439 do { \ | |
| 440 if (src >= src_end) \ | |
| 441 goto label_end_of_switch; \ | |
| 442 else if (*src++ < 0xA0) \ | |
| 443 return 0; \ | |
| 444 } while (0) | |
| 445 | |
| 446 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions". | |
| 447 Check if a text is encoded in Emacs' internal format. If it is, | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
448 return CODING_CATEGORY_MASK_EMACS_MULE, else return 0. */ |
| 17052 | 449 |
| 450 int | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
451 detect_coding_emacs_mule (src, src_end) |
| 17052 | 452 unsigned char *src, *src_end; |
| 453 { | |
| 454 unsigned char c; | |
| 455 int composing = 0; | |
| 456 | |
| 457 while (src < src_end) | |
| 458 { | |
| 459 c = *src++; | |
| 460 | |
| 461 if (composing) | |
| 462 { | |
| 463 if (c < 0xA0) | |
| 464 composing = 0; | |
| 465 else | |
| 466 c -= 0x20; | |
| 467 } | |
| 468 | |
| 469 switch (emacs_code_class[c]) | |
| 470 { | |
| 471 case EMACS_ascii_code: | |
| 472 case EMACS_linefeed_code: | |
| 473 break; | |
| 474 | |
| 475 case EMACS_control_code: | |
| 476 if (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO) | |
| 477 return 0; | |
| 478 break; | |
| 479 | |
| 480 case EMACS_invalid_code: | |
| 481 return 0; | |
| 482 | |
| 483 case EMACS_leading_code_composition: /* c == 0x80 */ | |
| 484 if (composing) | |
| 485 CHECK_CODE_RANGE_A0_FF; | |
| 486 else | |
| 487 composing = 1; | |
| 488 break; | |
| 489 | |
| 490 case EMACS_leading_code_4: | |
| 491 CHECK_CODE_RANGE_A0_FF; | |
| 492 /* fall down to check it two more times ... */ | |
| 493 | |
| 494 case EMACS_leading_code_3: | |
| 495 CHECK_CODE_RANGE_A0_FF; | |
| 496 /* fall down to check it one more time ... */ | |
| 497 | |
| 498 case EMACS_leading_code_2: | |
| 499 CHECK_CODE_RANGE_A0_FF; | |
| 500 break; | |
| 501 | |
| 502 default: | |
| 503 label_end_of_switch: | |
| 504 break; | |
| 505 } | |
| 506 } | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
507 return CODING_CATEGORY_MASK_EMACS_MULE; |
| 17052 | 508 } |
| 509 | |
| 510 | |
| 511 /*** 3. ISO2022 handlers ***/ | |
| 512 | |
| 513 /* The following note describes the coding system ISO2022 briefly. | |
| 18766 | 514 Since the intention of this note is to help in understanding of |
| 515 the programs in this file, some parts are NOT ACCURATE or OVERLY | |
| 17052 | 516 SIMPLIFIED. For the thorough understanding, please refer to the |
| 517 original document of ISO2022. | |
| 518 | |
| 519 ISO2022 provides many mechanisms to encode several character sets | |
| 18766 | 520 in 7-bit and 8-bit environment. If one chooses 7-bite environment, |
| 17052 | 521 all text is encoded by codes of less than 128. This may make the |
| 18766 | 522 encoded text a little bit longer, but the text gets more stability |
| 523 to pass through several gateways (some of them strip off the MSB). | |
| 524 | |
| 525 There are two kinds of character set: control character set and | |
| 17052 | 526 graphic character set. The former contains control characters such |
| 527 as `newline' and `escape' to provide control functions (control | |
| 18766 | 528 functions are provided also by escape sequences). The latter |
| 17052 | 529 contains graphic characters such as ' A' and '-'. Emacs recognizes |
| 530 two control character sets and many graphic character sets. | |
| 531 | |
| 532 Graphic character sets are classified into one of the following | |
| 533 four classes, DIMENSION1_CHARS94, DIMENSION1_CHARS96, | |
| 534 DIMENSION2_CHARS94, DIMENSION2_CHARS96 according to the number of | |
| 535 bytes (DIMENSION) and the number of characters in one dimension | |
| 536 (CHARS) of the set. In addition, each character set is assigned an | |
| 537 identification tag (called "final character" and denoted as <F> | |
| 538 here after) which is unique in each class. <F> of each character | |
| 539 set is decided by ECMA(*) when it is registered in ISO. Code range | |
| 540 of <F> is 0x30..0x7F (0x30..0x3F are for private use only). | |
| 541 | |
| 542 Note (*): ECMA = European Computer Manufacturers Association | |
| 543 | |
| 544 Here are examples of graphic character set [NAME(<F>)]: | |
| 545 o DIMENSION1_CHARS94 -- ASCII('B'), right-half-of-JISX0201('I'), ... | |
| 546 o DIMENSION1_CHARS96 -- right-half-of-ISO8859-1('A'), ... | |
| 547 o DIMENSION2_CHARS94 -- GB2312('A'), JISX0208('B'), ... | |
| 548 o DIMENSION2_CHARS96 -- none for the moment | |
| 549 | |
| 550 A code area (1byte=8bits) is divided into 4 areas, C0, GL, C1, and GR. | |
| 551 C0 [0x00..0x1F] -- control character plane 0 | |
| 552 GL [0x20..0x7F] -- graphic character plane 0 | |
| 553 C1 [0x80..0x9F] -- control character plane 1 | |
| 554 GR [0xA0..0xFF] -- graphic character plane 1 | |
| 555 | |
| 556 A control character set is directly designated and invoked to C0 or | |
| 557 C1 by an escape sequence. The most common case is that ISO646's | |
| 558 control character set is designated/invoked to C0 and ISO6429's | |
| 559 control character set is designated/invoked to C1, and usually | |
| 560 these designations/invocations are omitted in a coded text. With | |
| 561 7-bit environment, only C0 can be used, and a control character for | |
| 562 C1 is encoded by an appropriate escape sequence to fit in the | |
| 563 environment. All control characters for C1 are defined the | |
| 564 corresponding escape sequences. | |
| 565 | |
| 566 A graphic character set is at first designated to one of four | |
| 567 graphic registers (G0 through G3), then these graphic registers are | |
| 568 invoked to GL or GR. These designations and invocations can be | |
| 569 done independently. The most common case is that G0 is invoked to | |
| 570 GL, G1 is invoked to GR, and ASCII is designated to G0, and usually | |
| 571 these invocations and designations are omitted in a coded text. | |
| 572 With 7-bit environment, only GL can be used. | |
| 573 | |
| 574 When a graphic character set of CHARS94 is invoked to GL, code 0x20 | |
| 575 and 0x7F of GL area work as control characters SPACE and DEL | |
| 576 respectively, and code 0xA0 and 0xFF of GR area should not be used. | |
| 577 | |
| 578 There are two ways of invocation: locking-shift and single-shift. | |
| 579 With locking-shift, the invocation lasts until the next different | |
| 580 invocation, whereas with single-shift, the invocation works only | |
| 581 for the following character and doesn't affect locking-shift. | |
| 582 Invocations are done by the following control characters or escape | |
| 583 sequences. | |
| 584 | |
| 585 ---------------------------------------------------------------------- | |
| 586 function control char escape sequence description | |
| 587 ---------------------------------------------------------------------- | |
| 588 SI (shift-in) 0x0F none invoke G0 to GL | |
|
19118
16ef8c28e4e0
(detect_coding_mask): Include CODING_CATEGORY_MASK_BINARY in the
Richard M. Stallman <rms@gnu.org>
parents:
19068
diff
changeset
|
589 SO (shift-out) 0x0E none invoke G1 to GL |
| 17052 | 590 LS2 (locking-shift-2) none ESC 'n' invoke G2 into GL |
| 591 LS3 (locking-shift-3) none ESC 'o' invoke G3 into GL | |
| 592 SS2 (single-shift-2) 0x8E ESC 'N' invoke G2 into GL | |
| 593 SS3 (single-shift-3) 0x8F ESC 'O' invoke G3 into GL | |
| 594 ---------------------------------------------------------------------- | |
| 595 The first four are for locking-shift. Control characters for these | |
| 596 functions are defined by macros ISO_CODE_XXX in `coding.h'. | |
| 597 | |
| 598 Designations are done by the following escape sequences. | |
| 599 ---------------------------------------------------------------------- | |
| 600 escape sequence description | |
| 601 ---------------------------------------------------------------------- | |
| 602 ESC '(' <F> designate DIMENSION1_CHARS94<F> to G0 | |
| 603 ESC ')' <F> designate DIMENSION1_CHARS94<F> to G1 | |
| 604 ESC '*' <F> designate DIMENSION1_CHARS94<F> to G2 | |
| 605 ESC '+' <F> designate DIMENSION1_CHARS94<F> to G3 | |
| 606 ESC ',' <F> designate DIMENSION1_CHARS96<F> to G0 (*) | |
| 607 ESC '-' <F> designate DIMENSION1_CHARS96<F> to G1 | |
| 608 ESC '.' <F> designate DIMENSION1_CHARS96<F> to G2 | |
| 609 ESC '/' <F> designate DIMENSION1_CHARS96<F> to G3 | |
| 610 ESC '$' '(' <F> designate DIMENSION2_CHARS94<F> to G0 (**) | |
| 611 ESC '$' ')' <F> designate DIMENSION2_CHARS94<F> to G1 | |
| 612 ESC '$' '*' <F> designate DIMENSION2_CHARS94<F> to G2 | |
| 613 ESC '$' '+' <F> designate DIMENSION2_CHARS94<F> to G3 | |
| 614 ESC '$' ',' <F> designate DIMENSION2_CHARS96<F> to G0 (*) | |
| 615 ESC '$' '-' <F> designate DIMENSION2_CHARS96<F> to G1 | |
| 616 ESC '$' '.' <F> designate DIMENSION2_CHARS96<F> to G2 | |
| 617 ESC '$' '/' <F> designate DIMENSION2_CHARS96<F> to G3 | |
| 618 ---------------------------------------------------------------------- | |
| 619 | |
| 620 In this list, "DIMENSION1_CHARS94<F>" means a graphic character set | |
| 621 of dimension 1, chars 94, and final character <F>, and etc. | |
| 622 | |
| 623 Note (*): Although these designations are not allowed in ISO2022, | |
| 624 Emacs accepts them on decoding, and produces them on encoding | |
| 625 CHARS96 character set in a coding system which is characterized as | |
| 626 7-bit environment, non-locking-shift, and non-single-shift. | |
| 627 | |
| 628 Note (**): If <F> is '@', 'A', or 'B', the intermediate character | |
| 629 '(' can be omitted. We call this as "short-form" here after. | |
| 630 | |
| 631 Now you may notice that there are a lot of ways for encoding the | |
| 18766 | 632 same multilingual text in ISO2022. Actually, there exists many |
| 17052 | 633 coding systems such as Compound Text (used in X's inter client |
| 634 communication, ISO-2022-JP (used in Japanese Internet), ISO-2022-KR | |
| 635 (used in Korean Internet), EUC (Extended UNIX Code, used in Asian | |
| 636 localized platforms), and all of these are variants of ISO2022. | |
| 637 | |
| 638 In addition to the above, Emacs handles two more kinds of escape | |
| 639 sequences: ISO6429's direction specification and Emacs' private | |
| 640 sequence for specifying character composition. | |
| 641 | |
| 642 ISO6429's direction specification takes the following format: | |
| 643 o CSI ']' -- end of the current direction | |
| 644 o CSI '0' ']' -- end of the current direction | |
| 645 o CSI '1' ']' -- start of left-to-right text | |
| 646 o CSI '2' ']' -- start of right-to-left text | |
| 647 The control character CSI (0x9B: control sequence introducer) is | |
| 648 abbreviated to the escape sequence ESC '[' in 7-bit environment. | |
| 649 | |
| 650 Character composition specification takes the following format: | |
| 651 o ESC '0' -- start character composition | |
| 652 o ESC '1' -- end character composition | |
| 653 Since these are not standard escape sequences of any ISO, the use | |
| 654 of them for these meaning is restricted to Emacs only. */ | |
| 655 | |
| 656 enum iso_code_class_type iso_code_class[256]; | |
| 657 | |
|
22964
87f4c88f4c59
(CHARSET_OK): Check that coding_system_table[IDX] != 0.
Richard M. Stallman <rms@gnu.org>
parents:
22954
diff
changeset
|
658 #define CHARSET_OK(idx, charset) \ |
|
87f4c88f4c59
(CHARSET_OK): Check that coding_system_table[IDX] != 0.
Richard M. Stallman <rms@gnu.org>
parents:
22954
diff
changeset
|
659 (coding_system_table[idx] \ |
|
87f4c88f4c59
(CHARSET_OK): Check that coding_system_table[IDX] != 0.
Richard M. Stallman <rms@gnu.org>
parents:
22954
diff
changeset
|
660 && (coding_system_table[idx]->safe_charsets[charset] \ |
|
87f4c88f4c59
(CHARSET_OK): Check that coding_system_table[IDX] != 0.
Richard M. Stallman <rms@gnu.org>
parents:
22954
diff
changeset
|
661 || (CODING_SPEC_ISO_REQUESTED_DESIGNATION \ |
|
87f4c88f4c59
(CHARSET_OK): Check that coding_system_table[IDX] != 0.
Richard M. Stallman <rms@gnu.org>
parents:
22954
diff
changeset
|
662 (coding_system_table[idx], charset) \ |
|
87f4c88f4c59
(CHARSET_OK): Check that coding_system_table[IDX] != 0.
Richard M. Stallman <rms@gnu.org>
parents:
22954
diff
changeset
|
663 != CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION))) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
664 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
665 #define SHIFT_OUT_OK(idx) \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
666 (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding_system_table[idx], 1) >= 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
667 |
| 17052 | 668 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions". |
| 669 Check if a text is encoded in ISO2022. If it is, returns an | |
| 670 integer in which appropriate flag bits any of: | |
| 671 CODING_CATEGORY_MASK_ISO_7 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
672 CODING_CATEGORY_MASK_ISO_7_TIGHT |
| 17052 | 673 CODING_CATEGORY_MASK_ISO_8_1 |
| 674 CODING_CATEGORY_MASK_ISO_8_2 | |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
675 CODING_CATEGORY_MASK_ISO_7_ELSE |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
676 CODING_CATEGORY_MASK_ISO_8_ELSE |
| 17052 | 677 are set. If a code which should never appear in ISO2022 is found, |
| 678 returns 0. */ | |
| 679 | |
| 680 int | |
| 681 detect_coding_iso2022 (src, src_end) | |
| 682 unsigned char *src, *src_end; | |
| 683 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
684 int mask = CODING_CATEGORY_MASK_ISO; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
685 int mask_found = 0; |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
686 int reg[4], shift_out = 0, single_shifting = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
687 int c, c1, i, charset; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
688 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
689 reg[0] = CHARSET_ASCII, reg[1] = reg[2] = reg[3] = -1; |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
690 while (mask && src < src_end) |
| 17052 | 691 { |
| 692 c = *src++; | |
| 693 switch (c) | |
| 694 { | |
| 695 case ISO_CODE_ESC: | |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
696 single_shifting = 0; |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
697 if (src >= src_end) |
| 17052 | 698 break; |
| 699 c = *src++; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
700 if (c >= '(' && c <= '/') |
|
19134
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
701 { |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
702 /* Designation sequence for a charset of dimension 1. */ |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
703 if (src >= src_end) |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
704 break; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
705 c1 = *src++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
706 if (c1 < ' ' || c1 >= 0x80 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
707 || (charset = iso_charset_table[0][c >= ','][c1]) < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
708 /* Invalid designation sequence. Just ignore. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
709 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
710 reg[(c - '(') % 4] = charset; |
|
19134
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
711 } |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
712 else if (c == '$') |
| 17052 | 713 { |
|
19134
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
714 /* Designation sequence for a charset of dimension 2. */ |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
715 if (src >= src_end) |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
716 break; |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
717 c = *src++; |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
718 if (c >= '@' && c <= 'B') |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
719 /* Designation for JISX0208.1978, GB2312, or JISX0208. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
720 reg[0] = charset = iso_charset_table[1][0][c]; |
|
19134
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
721 else if (c >= '(' && c <= '/') |
|
17320
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
722 { |
|
19134
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
723 if (src >= src_end) |
|
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
724 break; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
725 c1 = *src++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
726 if (c1 < ' ' || c1 >= 0x80 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
727 || (charset = iso_charset_table[1][c >= ','][c1]) < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
728 /* Invalid designation sequence. Just ignore. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
729 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
730 reg[(c - '(') % 4] = charset; |
|
17320
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
731 } |
|
19134
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
732 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
733 /* Invalid designation sequence. Just ignore. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
734 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
735 } |
|
23116
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
736 else if (c == 'N' || c == 'O') |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
737 { |
|
23116
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
738 /* ESC <Fe> for SS2 or SS3. */ |
|
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
739 mask &= CODING_CATEGORY_MASK_ISO_7_ELSE; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
740 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
741 } |
|
19134
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
742 else if (c == '0' || c == '1' || c == '2') |
|
23116
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
743 /* ESC <Fp> for start/end composition. Just ignore. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
744 break; |
|
19134
8fa6e23f8d22
(detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents:
19118
diff
changeset
|
745 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
746 /* Invalid escape sequence. Just ignore. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
747 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
748 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
749 /* We found a valid designation sequence for CHARSET. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
750 mask &= ~CODING_CATEGORY_MASK_ISO_8BIT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
751 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7, charset)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
752 mask_found |= CODING_CATEGORY_MASK_ISO_7; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
753 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
754 mask &= ~CODING_CATEGORY_MASK_ISO_7; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
755 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_TIGHT, charset)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
756 mask_found |= CODING_CATEGORY_MASK_ISO_7_TIGHT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
757 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
758 mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT; |
|
23116
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
759 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_ELSE, charset)) |
|
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
760 mask_found |= CODING_CATEGORY_MASK_ISO_7_ELSE; |
|
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
761 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
762 mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE; |
|
23116
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
763 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_8_ELSE, charset)) |
|
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
764 mask_found |= CODING_CATEGORY_MASK_ISO_8_ELSE; |
|
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
765 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
766 mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE; |
| 17052 | 767 break; |
| 768 | |
| 769 case ISO_CODE_SO: | |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
770 single_shifting = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
771 if (shift_out == 0 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
772 && (reg[1] >= 0 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
773 || SHIFT_OUT_OK (CODING_CATEGORY_IDX_ISO_7_ELSE) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
774 || SHIFT_OUT_OK (CODING_CATEGORY_IDX_ISO_8_ELSE))) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
775 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
776 /* Locking shift out. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
777 mask &= ~CODING_CATEGORY_MASK_ISO_7BIT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
778 mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
779 } |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
780 break; |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
781 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
782 case ISO_CODE_SI: |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
783 single_shifting = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
784 if (shift_out == 1) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
785 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
786 /* Locking shift in. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
787 mask &= ~CODING_CATEGORY_MASK_ISO_7BIT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
788 mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
789 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
790 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
791 |
| 17052 | 792 case ISO_CODE_CSI: |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
793 single_shifting = 0; |
| 17052 | 794 case ISO_CODE_SS2: |
| 795 case ISO_CODE_SS3: | |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
796 { |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
797 int newmask = CODING_CATEGORY_MASK_ISO_8_ELSE; |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
798 |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
799 if (c != ISO_CODE_CSI) |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
800 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
801 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_1]->flags |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
802 & CODING_FLAG_ISO_SINGLE_SHIFT) |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
803 newmask |= CODING_CATEGORY_MASK_ISO_8_1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
804 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_2]->flags |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
805 & CODING_FLAG_ISO_SINGLE_SHIFT) |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
806 newmask |= CODING_CATEGORY_MASK_ISO_8_2; |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
807 single_shifting = 1; |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
808 } |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
809 if (VECTORP (Vlatin_extra_code_table) |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
810 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c])) |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
811 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
812 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_1]->flags |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
813 & CODING_FLAG_ISO_LATIN_EXTRA) |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
814 newmask |= CODING_CATEGORY_MASK_ISO_8_1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
815 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_2]->flags |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
816 & CODING_FLAG_ISO_LATIN_EXTRA) |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
817 newmask |= CODING_CATEGORY_MASK_ISO_8_2; |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
818 } |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
819 mask &= newmask; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
820 mask_found |= newmask; |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
821 } |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
822 break; |
| 17052 | 823 |
| 824 default: | |
| 825 if (c < 0x80) | |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
826 { |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
827 single_shifting = 0; |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
828 break; |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
829 } |
| 17052 | 830 else if (c < 0xA0) |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
831 { |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
832 single_shifting = 0; |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
833 if (VECTORP (Vlatin_extra_code_table) |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
834 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c])) |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
835 { |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
836 int newmask = 0; |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
837 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
838 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_1]->flags |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
839 & CODING_FLAG_ISO_LATIN_EXTRA) |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
840 newmask |= CODING_CATEGORY_MASK_ISO_8_1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
841 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_2]->flags |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
842 & CODING_FLAG_ISO_LATIN_EXTRA) |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
843 newmask |= CODING_CATEGORY_MASK_ISO_8_2; |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
844 mask &= newmask; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
845 mask_found |= newmask; |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
846 } |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
847 else |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
848 return 0; |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
849 } |
| 17052 | 850 else |
| 851 { | |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
852 unsigned char *src_begin = src; |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
853 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
854 mask &= ~(CODING_CATEGORY_MASK_ISO_7BIT |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
855 | CODING_CATEGORY_MASK_ISO_7_ELSE); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
856 mask_found |= CODING_CATEGORY_MASK_ISO_8_1; |
|
23088
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
857 /* Check the length of succeeding codes of the range |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
858 0xA0..0FF. If the byte length is odd, we exclude |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
859 CODING_CATEGORY_MASK_ISO_8_2. We can check this only |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
860 when we are not single shifting. */ |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
861 if (!single_shifting) |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
862 { |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
863 while (src < src_end && *src >= 0xA0) |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
864 src++; |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
865 if ((src - src_begin - 1) & 1 && src < src_end) |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
866 mask &= ~CODING_CATEGORY_MASK_ISO_8_2; |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
867 else |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
868 mask_found |= CODING_CATEGORY_MASK_ISO_8_2; |
|
45c36d636f66
(detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents:
23082
diff
changeset
|
869 } |
| 17052 | 870 } |
| 871 break; | |
| 872 } | |
| 873 } | |
| 874 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
875 return (mask & mask_found); |
| 17052 | 876 } |
| 877 | |
| 878 /* Decode a character of which charset is CHARSET and the 1st position | |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
879 code is C1. If dimension of CHARSET is 2, the 2nd position code is |
| 17052 | 880 fetched from SRC and set to C2. If CHARSET is negative, it means |
| 881 that we are decoding ill formed text, and what we can do is just to | |
| 882 read C1 as is. */ | |
| 883 | |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
884 #define DECODE_ISO_CHARACTER(charset, c1) \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
885 do { \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
886 int c_alt, charset_alt = (charset); \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
887 if (COMPOSING_HEAD_P (coding->composing)) \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
888 { \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
889 *dst++ = LEADING_CODE_COMPOSITION; \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
890 if (COMPOSING_WITH_RULE_P (coding->composing)) \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
891 /* To tell composition rules are embeded. */ \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
892 *dst++ = 0xFF; \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
893 coding->composing += 2; \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
894 } \ |
|
22717
3e3949ac4cfb
(DECODE_ISO_CHARACTER): While decoding two-byte code,
Kenichi Handa <handa@m17n.org>
parents:
22616
diff
changeset
|
895 if (charset_alt >= 0) \ |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
896 { \ |
|
22717
3e3949ac4cfb
(DECODE_ISO_CHARACTER): While decoding two-byte code,
Kenichi Handa <handa@m17n.org>
parents:
22616
diff
changeset
|
897 if (CHARSET_DIMENSION (charset_alt) == 2) \ |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
898 { \ |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
899 ONE_MORE_BYTE (c2); \ |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
900 if (iso_code_class[(c2) & 0x7F] != ISO_0x20_or_0x7F \ |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
901 && iso_code_class[(c2) & 0x7F] != ISO_graphic_plane_0) \ |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
902 { \ |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
903 src--; \ |
|
22717
3e3949ac4cfb
(DECODE_ISO_CHARACTER): While decoding two-byte code,
Kenichi Handa <handa@m17n.org>
parents:
22616
diff
changeset
|
904 charset_alt = CHARSET_ASCII; \ |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
905 } \ |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
906 } \ |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
907 if (!NILP (translation_table) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
908 && ((c_alt = translate_char (translation_table, \ |
|
22717
3e3949ac4cfb
(DECODE_ISO_CHARACTER): While decoding two-byte code,
Kenichi Handa <handa@m17n.org>
parents:
22616
diff
changeset
|
909 -1, charset_alt, c1, c2)) >= 0)) \ |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
910 SPLIT_CHAR (c_alt, charset_alt, c1, c2); \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
911 } \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
912 if (charset_alt == CHARSET_ASCII || charset_alt < 0) \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
913 DECODE_CHARACTER_ASCII (c1); \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
914 else if (CHARSET_DIMENSION (charset_alt) == 1) \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
915 DECODE_CHARACTER_DIMENSION1 (charset_alt, c1); \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
916 else \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
917 DECODE_CHARACTER_DIMENSION2 (charset_alt, c1, c2); \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
918 if (COMPOSING_WITH_RULE_P (coding->composing)) \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
919 /* To tell a composition rule follows. */ \ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
920 coding->composing = COMPOSING_WITH_RULE_RULE; \ |
| 17052 | 921 } while (0) |
| 922 | |
| 923 /* Set designation state into CODING. */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
924 #define DECODE_DESIGNATION(reg, dimension, chars, final_char) \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
925 do { \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
926 int charset = ISO_CHARSET_TABLE (make_number (dimension), \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
927 make_number (chars), \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
928 make_number (final_char)); \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
929 if (charset >= 0 \ |
|
21331
4c89837392b3
(CHARSET_OK): Don't reject safe charsets.
Kenichi Handa <handa@m17n.org>
parents:
21321
diff
changeset
|
930 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) == reg \ |
|
4c89837392b3
(CHARSET_OK): Don't reject safe charsets.
Kenichi Handa <handa@m17n.org>
parents:
21321
diff
changeset
|
931 || coding->safe_charsets[charset])) \ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
932 { \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
933 if (coding->spec.iso2022.last_invalid_designation_register == 0 \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
934 && reg == 0 \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
935 && charset == CHARSET_ASCII) \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
936 { \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
937 /* We should insert this designation sequence as is so \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
938 that it is surely written back to a file. */ \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
939 coding->spec.iso2022.last_invalid_designation_register = -1; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
940 goto label_invalid_code; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
941 } \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
942 coding->spec.iso2022.last_invalid_designation_register = -1; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
943 if ((coding->mode & CODING_MODE_DIRECTION) \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
944 && CHARSET_REVERSE_CHARSET (charset) >= 0) \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
945 charset = CHARSET_REVERSE_CHARSET (charset); \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
946 CODING_SPEC_ISO_DESIGNATION (coding, reg) = charset; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
947 } \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
948 else \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
949 { \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
950 coding->spec.iso2022.last_invalid_designation_register = reg; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
951 goto label_invalid_code; \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
952 } \ |
| 17052 | 953 } while (0) |
| 954 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
955 /* Check if the current composing sequence contains only valid codes. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
956 If the composing sequence doesn't end before SRC_END, return -1. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
957 Else, if it contains only valid codes, return 0. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
958 Else return the length of the composing sequence. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
959 |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
960 int |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
961 check_composing_code (coding, src, src_end) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
962 struct coding_system *coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
963 unsigned char *src, *src_end; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
964 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
965 unsigned char *src_start = src; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
966 int invalid_code_found = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
967 int charset, c, c1, dim; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
968 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
969 while (src < src_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
970 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
971 if (*src++ != ISO_CODE_ESC) continue; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
972 if (src >= src_end) break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
973 if ((c = *src++) == '1') /* end of compsition */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
974 return (invalid_code_found ? src - src_start : 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
975 if (src + 2 >= src_end) break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
976 if (!coding->flags & CODING_FLAG_ISO_DESIGNATION) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
977 invalid_code_found = 1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
978 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
979 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
980 dim = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
981 if (c == '$') |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
982 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
983 dim = 1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
984 c = (*src >= '@' && *src <= 'B') ? '(' : *src++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
985 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
986 if (c >= '(' && c <= '/') |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
987 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
988 c1 = *src++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
989 if ((c1 < ' ' || c1 >= 0x80) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
990 || (charset = iso_charset_table[dim][c >= ','][c1]) < 0 |
|
21331
4c89837392b3
(CHARSET_OK): Don't reject safe charsets.
Kenichi Handa <handa@m17n.org>
parents:
21321
diff
changeset
|
991 || ! coding->safe_charsets[charset] |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
992 || (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
993 == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
994 invalid_code_found = 1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
995 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
996 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
997 invalid_code_found = 1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
998 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
999 } |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1000 return (invalid_code_found |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1001 ? src - src_start |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1002 : (coding->mode & CODING_MODE_LAST_BLOCK ? 0 : -1)); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1003 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1004 |
| 17052 | 1005 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". */ |
| 1006 | |
| 1007 int | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1008 decode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes) |
| 17052 | 1009 struct coding_system *coding; |
| 1010 unsigned char *source, *destination; | |
| 1011 int src_bytes, dst_bytes; | |
| 1012 { | |
| 1013 unsigned char *src = source; | |
| 1014 unsigned char *src_end = source + src_bytes; | |
| 1015 unsigned char *dst = destination; | |
| 1016 unsigned char *dst_end = destination + dst_bytes; | |
| 1017 /* Since the maximum bytes produced by each loop is 7, we subtract 6 | |
| 1018 from DST_END to assure that overflow checking is necessary only | |
| 1019 at the head of loop. */ | |
| 1020 unsigned char *adjusted_dst_end = dst_end - 6; | |
| 1021 int charset; | |
| 1022 /* Charsets invoked to graphic plane 0 and 1 respectively. */ | |
| 1023 int charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0); | |
| 1024 int charset1 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 1); | |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1025 Lisp_Object translation_table |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
1026 = coding->translation_table_for_decode; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1027 int result = CODING_FINISH_NORMAL; |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1028 |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1029 if (!NILP (Venable_character_translation) && NILP (translation_table)) |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
1030 translation_table = Vstandard_translation_table_for_decode; |
| 17052 | 1031 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1032 coding->produced_char = 0; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1033 coding->fake_multibyte = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1034 while (src < src_end && (dst_bytes |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1035 ? (dst < adjusted_dst_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1036 : (dst < src - 6))) |
| 17052 | 1037 { |
| 1038 /* SRC_BASE remembers the start position in source in each loop. | |
| 1039 The loop will be exited when there's not enough source text | |
| 1040 to analyze long escape sequence or 2-byte code (within macros | |
| 1041 ONE_MORE_BYTE or TWO_MORE_BYTES). In that case, SRC is reset | |
| 1042 to SRC_BASE before exiting. */ | |
| 1043 unsigned char *src_base = src; | |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1044 int c1 = *src++, c2; |
| 17052 | 1045 |
| 1046 switch (iso_code_class [c1]) | |
| 1047 { | |
| 1048 case ISO_0x20_or_0x7F: | |
| 1049 if (!coding->composing | |
| 1050 && (charset0 < 0 || CHARSET_CHARS (charset0) == 94)) | |
| 1051 { | |
| 1052 /* This is SPACE or DEL. */ | |
| 1053 *dst++ = c1; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1054 coding->produced_char++; |
| 17052 | 1055 break; |
| 1056 } | |
| 1057 /* This is a graphic character, we fall down ... */ | |
| 1058 | |
| 1059 case ISO_graphic_plane_0: | |
| 1060 if (coding->composing == COMPOSING_WITH_RULE_RULE) | |
| 1061 { | |
| 1062 /* This is a composition rule. */ | |
| 1063 *dst++ = c1 | 0x80; | |
| 1064 coding->composing = COMPOSING_WITH_RULE_TAIL; | |
| 1065 } | |
| 1066 else | |
| 1067 DECODE_ISO_CHARACTER (charset0, c1); | |
| 1068 break; | |
| 1069 | |
| 1070 case ISO_0xA0_or_0xFF: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1071 if (charset1 < 0 || CHARSET_CHARS (charset1) == 94 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1072 || coding->flags & CODING_FLAG_ISO_SEVEN_BITS) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1073 goto label_invalid_code; |
| 17052 | 1074 /* This is a graphic character, we fall down ... */ |
| 1075 | |
| 1076 case ISO_graphic_plane_1: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1077 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1078 goto label_invalid_code; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1079 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1080 DECODE_ISO_CHARACTER (charset1, c1); |
| 17052 | 1081 break; |
| 1082 | |
| 1083 case ISO_control_code: | |
| 1084 /* All ISO2022 control characters in this class have the | |
| 1085 same representation in Emacs internal format. */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1086 if (c1 == '\n' |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1087 && (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1088 && (coding->eol_type == CODING_EOL_CR |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1089 || coding->eol_type == CODING_EOL_CRLF)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1090 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1091 result = CODING_FINISH_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1092 goto label_end_of_loop_2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1093 } |
| 17052 | 1094 *dst++ = c1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1095 coding->produced_char++; |
| 17052 | 1096 break; |
| 1097 | |
| 1098 case ISO_carriage_return: | |
| 1099 if (coding->eol_type == CODING_EOL_CR) | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1100 *dst++ = '\n'; |
| 17052 | 1101 else if (coding->eol_type == CODING_EOL_CRLF) |
| 1102 { | |
| 1103 ONE_MORE_BYTE (c1); | |
| 1104 if (c1 == ISO_CODE_LF) | |
| 1105 *dst++ = '\n'; | |
| 1106 else | |
| 1107 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1108 if (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1109 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1110 result = CODING_FINISH_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1111 goto label_end_of_loop_2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1112 } |
| 17052 | 1113 src--; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1114 *dst++ = '\r'; |
| 17052 | 1115 } |
| 1116 } | |
| 1117 else | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1118 *dst++ = c1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1119 coding->produced_char++; |
| 17052 | 1120 break; |
| 1121 | |
| 1122 case ISO_shift_out: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1123 if (! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1124 || CODING_SPEC_ISO_DESIGNATION (coding, 1) < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1125 goto label_invalid_code; |
| 17052 | 1126 CODING_SPEC_ISO_INVOCATION (coding, 0) = 1; |
| 1127 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0); | |
| 1128 break; | |
| 1129 | |
| 1130 case ISO_shift_in: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1131 if (! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1132 goto label_invalid_code; |
| 17052 | 1133 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0; |
| 1134 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0); | |
| 1135 break; | |
| 1136 | |
| 1137 case ISO_single_shift_2_7: | |
| 1138 case ISO_single_shift_2: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1139 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1140 goto label_invalid_code; |
| 17052 | 1141 /* SS2 is handled as an escape sequence of ESC 'N' */ |
| 1142 c1 = 'N'; | |
| 1143 goto label_escape_sequence; | |
| 1144 | |
| 1145 case ISO_single_shift_3: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1146 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1147 goto label_invalid_code; |
| 17052 | 1148 /* SS2 is handled as an escape sequence of ESC 'O' */ |
| 1149 c1 = 'O'; | |
| 1150 goto label_escape_sequence; | |
| 1151 | |
| 1152 case ISO_control_sequence_introducer: | |
| 1153 /* CSI is handled as an escape sequence of ESC '[' ... */ | |
| 1154 c1 = '['; | |
| 1155 goto label_escape_sequence; | |
| 1156 | |
| 1157 case ISO_escape: | |
| 1158 ONE_MORE_BYTE (c1); | |
| 1159 label_escape_sequence: | |
| 1160 /* Escape sequences handled by Emacs are invocation, | |
| 1161 designation, direction specification, and character | |
| 1162 composition specification. */ | |
| 1163 switch (c1) | |
| 1164 { | |
| 1165 case '&': /* revision of following character set */ | |
| 1166 ONE_MORE_BYTE (c1); | |
| 1167 if (!(c1 >= '@' && c1 <= '~')) | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1168 goto label_invalid_code; |
| 17052 | 1169 ONE_MORE_BYTE (c1); |
| 1170 if (c1 != ISO_CODE_ESC) | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1171 goto label_invalid_code; |
| 17052 | 1172 ONE_MORE_BYTE (c1); |
| 1173 goto label_escape_sequence; | |
| 1174 | |
| 1175 case '$': /* designation of 2-byte character set */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1176 if (! (coding->flags & CODING_FLAG_ISO_DESIGNATION)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1177 goto label_invalid_code; |
| 17052 | 1178 ONE_MORE_BYTE (c1); |
| 1179 if (c1 >= '@' && c1 <= 'B') | |
| 1180 { /* designation of JISX0208.1978, GB2312.1980, | |
| 1181 or JISX0208.1980 */ | |
| 1182 DECODE_DESIGNATION (0, 2, 94, c1); | |
| 1183 } | |
| 1184 else if (c1 >= 0x28 && c1 <= 0x2B) | |
| 1185 { /* designation of DIMENSION2_CHARS94 character set */ | |
| 1186 ONE_MORE_BYTE (c2); | |
| 1187 DECODE_DESIGNATION (c1 - 0x28, 2, 94, c2); | |
| 1188 } | |
| 1189 else if (c1 >= 0x2C && c1 <= 0x2F) | |
| 1190 { /* designation of DIMENSION2_CHARS96 character set */ | |
| 1191 ONE_MORE_BYTE (c2); | |
| 1192 DECODE_DESIGNATION (c1 - 0x2C, 2, 96, c2); | |
| 1193 } | |
| 1194 else | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1195 goto label_invalid_code; |
| 17052 | 1196 break; |
| 1197 | |
| 1198 case 'n': /* invocation of locking-shift-2 */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1199 if (! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1200 || CODING_SPEC_ISO_DESIGNATION (coding, 2) < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1201 goto label_invalid_code; |
| 17052 | 1202 CODING_SPEC_ISO_INVOCATION (coding, 0) = 2; |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1203 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0); |
| 17052 | 1204 break; |
| 1205 | |
| 1206 case 'o': /* invocation of locking-shift-3 */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1207 if (! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1208 || CODING_SPEC_ISO_DESIGNATION (coding, 3) < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1209 goto label_invalid_code; |
| 17052 | 1210 CODING_SPEC_ISO_INVOCATION (coding, 0) = 3; |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1211 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0); |
| 17052 | 1212 break; |
| 1213 | |
| 1214 case 'N': /* invocation of single-shift-2 */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1215 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1216 || CODING_SPEC_ISO_DESIGNATION (coding, 2) < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1217 goto label_invalid_code; |
| 17052 | 1218 ONE_MORE_BYTE (c1); |
| 1219 charset = CODING_SPEC_ISO_DESIGNATION (coding, 2); | |
| 1220 DECODE_ISO_CHARACTER (charset, c1); | |
| 1221 break; | |
| 1222 | |
| 1223 case 'O': /* invocation of single-shift-3 */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1224 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1225 || CODING_SPEC_ISO_DESIGNATION (coding, 3) < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1226 goto label_invalid_code; |
| 17052 | 1227 ONE_MORE_BYTE (c1); |
| 1228 charset = CODING_SPEC_ISO_DESIGNATION (coding, 3); | |
| 1229 DECODE_ISO_CHARACTER (charset, c1); | |
| 1230 break; | |
| 1231 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1232 case '0': case '2': /* start composing */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1233 /* Before processing composing, we must be sure that all |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1234 characters being composed are supported by CODING. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1235 If not, we must give up composing and insert the |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1236 bunch of codes for composing as is without decoding. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1237 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1238 int result1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1239 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1240 result1 = check_composing_code (coding, src, src_end); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1241 if (result1 == 0) |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1242 { |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1243 coding->composing = (c1 == '0' |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1244 ? COMPOSING_NO_RULE_HEAD |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1245 : COMPOSING_WITH_RULE_HEAD); |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1246 coding->produced_char++; |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1247 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1248 else if (result1 > 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1249 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1250 if (result1 + 2 < (dst_bytes ? dst_end : src_base) - dst) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1251 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1252 bcopy (src_base, dst, result1 + 2); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1253 src += result1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1254 dst += result1 + 2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1255 coding->produced_char += result1 + 2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1256 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1257 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1258 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1259 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1260 goto label_end_of_loop_2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1261 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1262 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1263 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1264 goto label_end_of_loop; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1265 } |
| 17052 | 1266 break; |
| 1267 | |
| 1268 case '1': /* end composing */ | |
| 1269 coding->composing = COMPOSING_NO; | |
| 1270 break; | |
| 1271 | |
| 1272 case '[': /* specification of direction */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1273 if (coding->flags & CODING_FLAG_ISO_NO_DIRECTION) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1274 goto label_invalid_code; |
| 17052 | 1275 /* For the moment, nested direction is not supported. |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1276 So, `coding->mode & CODING_MODE_DIRECTION' zero means |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1277 left-to-right, and nozero means right-to-left. */ |
| 17052 | 1278 ONE_MORE_BYTE (c1); |
| 1279 switch (c1) | |
| 1280 { | |
| 1281 case ']': /* end of the current direction */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1282 coding->mode &= ~CODING_MODE_DIRECTION; |
| 17052 | 1283 |
| 1284 case '0': /* end of the current direction */ | |
| 1285 case '1': /* start of left-to-right direction */ | |
| 1286 ONE_MORE_BYTE (c1); | |
| 1287 if (c1 == ']') | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1288 coding->mode &= ~CODING_MODE_DIRECTION; |
| 17052 | 1289 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1290 goto label_invalid_code; |
| 17052 | 1291 break; |
| 1292 | |
| 1293 case '2': /* start of right-to-left direction */ | |
| 1294 ONE_MORE_BYTE (c1); | |
| 1295 if (c1 == ']') | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1296 coding->mode |= CODING_MODE_DIRECTION; |
| 17052 | 1297 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1298 goto label_invalid_code; |
| 17052 | 1299 break; |
| 1300 | |
| 1301 default: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1302 goto label_invalid_code; |
| 17052 | 1303 } |
| 1304 break; | |
| 1305 | |
| 1306 default: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1307 if (! (coding->flags & CODING_FLAG_ISO_DESIGNATION)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1308 goto label_invalid_code; |
| 17052 | 1309 if (c1 >= 0x28 && c1 <= 0x2B) |
| 1310 { /* designation of DIMENSION1_CHARS94 character set */ | |
| 1311 ONE_MORE_BYTE (c2); | |
| 1312 DECODE_DESIGNATION (c1 - 0x28, 1, 94, c2); | |
| 1313 } | |
| 1314 else if (c1 >= 0x2C && c1 <= 0x2F) | |
| 1315 { /* designation of DIMENSION1_CHARS96 character set */ | |
| 1316 ONE_MORE_BYTE (c2); | |
| 1317 DECODE_DESIGNATION (c1 - 0x2C, 1, 96, c2); | |
| 1318 } | |
| 1319 else | |
| 1320 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1321 goto label_invalid_code; |
| 17052 | 1322 } |
| 1323 } | |
| 1324 /* We must update these variables now. */ | |
| 1325 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0); | |
| 1326 charset1 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 1); | |
| 1327 break; | |
| 1328 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1329 label_invalid_code: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1330 while (src_base < src) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1331 *dst++ = *src_base++; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1332 coding->fake_multibyte = 1; |
| 17052 | 1333 } |
| 1334 continue; | |
| 1335 | |
| 1336 label_end_of_loop: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1337 result = CODING_FINISH_INSUFFICIENT_SRC; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1338 label_end_of_loop_2: |
| 17052 | 1339 src = src_base; |
| 1340 break; | |
| 1341 } | |
| 1342 | |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1343 if (src < src_end) |
| 17052 | 1344 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1345 if (result == CODING_FINISH_NORMAL) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1346 result = CODING_FINISH_INSUFFICIENT_DST; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1347 else if (result != CODING_FINISH_INCONSISTENT_EOL |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1348 && coding->mode & CODING_MODE_LAST_BLOCK) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1349 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1350 /* This is the last block of the text to be decoded. We had |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1351 better just flush out all remaining codes in the text |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1352 although they are not valid characters. */ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1353 src_bytes = src_end - src; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1354 if (dst_bytes && (dst_end - dst < src_bytes)) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1355 src_bytes = dst_end - dst; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1356 bcopy (src, dst, src_bytes); |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1357 dst += src_bytes; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1358 src += src_bytes; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1359 coding->fake_multibyte = 1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1360 } |
| 17052 | 1361 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1362 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1363 coding->consumed = coding->consumed_char = src - source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1364 coding->produced = dst - destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1365 return result; |
| 17052 | 1366 } |
| 1367 | |
| 18766 | 1368 /* ISO2022 encoding stuff. */ |
| 17052 | 1369 |
| 1370 /* | |
| 18766 | 1371 It is not enough to say just "ISO2022" on encoding, we have to |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1372 specify more details. In Emacs, each coding system of ISO2022 |
| 17052 | 1373 variant has the following specifications: |
| 1374 1. Initial designation to G0 thru G3. | |
| 1375 2. Allows short-form designation? | |
| 1376 3. ASCII should be designated to G0 before control characters? | |
| 1377 4. ASCII should be designated to G0 at end of line? | |
| 1378 5. 7-bit environment or 8-bit environment? | |
| 1379 6. Use locking-shift? | |
| 1380 7. Use Single-shift? | |
| 1381 And the following two are only for Japanese: | |
| 1382 8. Use ASCII in place of JIS0201-1976-Roman? | |
| 1383 9. Use JISX0208-1983 in place of JISX0208-1978? | |
| 1384 These specifications are encoded in `coding->flags' as flag bits | |
| 1385 defined by macros CODING_FLAG_ISO_XXX. See `coding.h' for more | |
| 18766 | 1386 details. |
| 17052 | 1387 */ |
| 1388 | |
| 1389 /* Produce codes (escape sequence) for designating CHARSET to graphic | |
| 1390 register REG. If <final-char> of CHARSET is '@', 'A', or 'B' and | |
| 1391 the coding system CODING allows, produce designation sequence of | |
| 1392 short-form. */ | |
| 1393 | |
| 1394 #define ENCODE_DESIGNATION(charset, reg, coding) \ | |
| 1395 do { \ | |
| 1396 unsigned char final_char = CHARSET_ISO_FINAL_CHAR (charset); \ | |
| 1397 char *intermediate_char_94 = "()*+"; \ | |
| 1398 char *intermediate_char_96 = ",-./"; \ | |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
1399 int revision = CODING_SPEC_ISO_REVISION_NUMBER(coding, charset); \ |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
1400 if (revision < 255) \ |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
1401 { \ |
| 17052 | 1402 *dst++ = ISO_CODE_ESC; \ |
| 1403 *dst++ = '&'; \ | |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
1404 *dst++ = '@' + revision; \ |
| 17052 | 1405 } \ |
| 1406 *dst++ = ISO_CODE_ESC; \ | |
| 1407 if (CHARSET_DIMENSION (charset) == 1) \ | |
| 1408 { \ | |
| 1409 if (CHARSET_CHARS (charset) == 94) \ | |
| 1410 *dst++ = (unsigned char) (intermediate_char_94[reg]); \ | |
| 1411 else \ | |
| 1412 *dst++ = (unsigned char) (intermediate_char_96[reg]); \ | |
| 1413 } \ | |
| 1414 else \ | |
| 1415 { \ | |
| 1416 *dst++ = '$'; \ | |
| 1417 if (CHARSET_CHARS (charset) == 94) \ | |
| 1418 { \ | |
| 1419 if (! (coding->flags & CODING_FLAG_ISO_SHORT_FORM) \ | |
| 1420 || reg != 0 \ | |
| 1421 || final_char < '@' || final_char > 'B') \ | |
| 1422 *dst++ = (unsigned char) (intermediate_char_94[reg]); \ | |
| 1423 } \ | |
| 1424 else \ | |
| 1425 *dst++ = (unsigned char) (intermediate_char_96[reg]); \ | |
| 1426 } \ | |
| 1427 *dst++ = final_char; \ | |
| 1428 CODING_SPEC_ISO_DESIGNATION (coding, reg) = charset; \ | |
| 1429 } while (0) | |
| 1430 | |
| 1431 /* The following two macros produce codes (control character or escape | |
| 1432 sequence) for ISO2022 single-shift functions (single-shift-2 and | |
| 1433 single-shift-3). */ | |
| 1434 | |
| 1435 #define ENCODE_SINGLE_SHIFT_2 \ | |
| 1436 do { \ | |
| 1437 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \ | |
| 1438 *dst++ = ISO_CODE_ESC, *dst++ = 'N'; \ | |
| 1439 else \ | |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1440 { \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1441 *dst++ = ISO_CODE_SS2; \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1442 coding->fake_multibyte = 1; \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1443 } \ |
| 17052 | 1444 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 1; \ |
| 1445 } while (0) | |
| 1446 | |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1447 #define ENCODE_SINGLE_SHIFT_3 \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1448 do { \ |
| 17052 | 1449 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \ |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1450 *dst++ = ISO_CODE_ESC, *dst++ = 'O'; \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1451 else \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1452 { \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1453 *dst++ = ISO_CODE_SS3; \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1454 coding->fake_multibyte = 1; \ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1455 } \ |
| 17052 | 1456 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 1; \ |
| 1457 } while (0) | |
| 1458 | |
| 1459 /* The following four macros produce codes (control character or | |
| 1460 escape sequence) for ISO2022 locking-shift functions (shift-in, | |
| 1461 shift-out, locking-shift-2, and locking-shift-3). */ | |
| 1462 | |
| 1463 #define ENCODE_SHIFT_IN \ | |
| 1464 do { \ | |
| 1465 *dst++ = ISO_CODE_SI; \ | |
| 1466 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0; \ | |
| 1467 } while (0) | |
| 1468 | |
| 1469 #define ENCODE_SHIFT_OUT \ | |
| 1470 do { \ | |
| 1471 *dst++ = ISO_CODE_SO; \ | |
| 1472 CODING_SPEC_ISO_INVOCATION (coding, 0) = 1; \ | |
| 1473 } while (0) | |
| 1474 | |
| 1475 #define ENCODE_LOCKING_SHIFT_2 \ | |
| 1476 do { \ | |
| 1477 *dst++ = ISO_CODE_ESC, *dst++ = 'n'; \ | |
| 1478 CODING_SPEC_ISO_INVOCATION (coding, 0) = 2; \ | |
| 1479 } while (0) | |
| 1480 | |
| 1481 #define ENCODE_LOCKING_SHIFT_3 \ | |
| 1482 do { \ | |
| 1483 *dst++ = ISO_CODE_ESC, *dst++ = 'o'; \ | |
| 1484 CODING_SPEC_ISO_INVOCATION (coding, 0) = 3; \ | |
| 1485 } while (0) | |
| 1486 | |
| 18766 | 1487 /* Produce codes for a DIMENSION1 character whose character set is |
| 1488 CHARSET and whose position-code is C1. Designation and invocation | |
| 17052 | 1489 sequences are also produced in advance if necessary. */ |
| 1490 | |
| 1491 | |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1492 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1493 do { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1494 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1495 { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1496 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1497 *dst++ = c1 & 0x7F; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1498 else \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1499 *dst++ = c1 | 0x80; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1500 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1501 break; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1502 } \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1503 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 0)) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1504 { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1505 *dst++ = c1 & 0x7F; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1506 break; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1507 } \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1508 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 1)) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1509 { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1510 *dst++ = c1 | 0x80; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1511 break; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1512 } \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1513 else if (coding->flags & CODING_FLAG_ISO_SAFE \ |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
1514 && !coding->safe_charsets[charset]) \ |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1515 { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1516 /* We should not encode this character, instead produce one or \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1517 two `?'s. */ \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1518 *dst++ = CODING_INHIBIT_CHARACTER_SUBSTITUTION; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1519 if (CHARSET_WIDTH (charset) == 2) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1520 *dst++ = CODING_INHIBIT_CHARACTER_SUBSTITUTION; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1521 break; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1522 } \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1523 else \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1524 /* Since CHARSET is not yet invoked to any graphic planes, we \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1525 must invoke it, or, at first, designate it to some graphic \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1526 register. Then repeat the loop to actually produce the \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1527 character. */ \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1528 dst = encode_invocation_designation (charset, coding, dst); \ |
| 17052 | 1529 } while (1) |
| 1530 | |
| 18766 | 1531 /* Produce codes for a DIMENSION2 character whose character set is |
| 1532 CHARSET and whose position-codes are C1 and C2. Designation and | |
| 17052 | 1533 invocation codes are also produced in advance if necessary. */ |
| 1534 | |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1535 #define ENCODE_ISO_CHARACTER_DIMENSION2(charset, c1, c2) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1536 do { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1537 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1538 { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1539 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1540 *dst++ = c1 & 0x7F, *dst++ = c2 & 0x7F; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1541 else \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1542 *dst++ = c1 | 0x80, *dst++ = c2 | 0x80; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1543 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1544 break; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1545 } \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1546 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 0)) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1547 { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1548 *dst++ = c1 & 0x7F, *dst++= c2 & 0x7F; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1549 break; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1550 } \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1551 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 1)) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1552 { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1553 *dst++ = c1 | 0x80, *dst++= c2 | 0x80; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1554 break; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1555 } \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1556 else if (coding->flags & CODING_FLAG_ISO_SAFE \ |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
1557 && !coding->safe_charsets[charset]) \ |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1558 { \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1559 /* We should not encode this character, instead produce one or \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1560 two `?'s. */ \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1561 *dst++ = CODING_INHIBIT_CHARACTER_SUBSTITUTION; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1562 if (CHARSET_WIDTH (charset) == 2) \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1563 *dst++ = CODING_INHIBIT_CHARACTER_SUBSTITUTION; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1564 break; \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1565 } \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1566 else \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1567 /* Since CHARSET is not yet invoked to any graphic planes, we \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1568 must invoke it, or, at first, designate it to some graphic \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1569 register. Then repeat the loop to actually produce the \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1570 character. */ \ |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
1571 dst = encode_invocation_designation (charset, coding, dst); \ |
| 17052 | 1572 } while (1) |
| 1573 | |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1574 #define ENCODE_ISO_CHARACTER(charset, c1, c2) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1575 do { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1576 int c_alt, charset_alt; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1577 if (!NILP (translation_table) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1578 && ((c_alt = translate_char (translation_table, -1, \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1579 charset, c1, c2)) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1580 >= 0)) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1581 SPLIT_CHAR (c_alt, charset_alt, c1, c2); \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1582 else \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1583 charset_alt = charset; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1584 if (CHARSET_DIMENSION (charset_alt) == 1) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1585 { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1586 if (charset == CHARSET_ASCII \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1587 && coding->flags & CODING_FLAG_ISO_USE_ROMAN) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1588 charset_alt = charset_latin_jisx0201; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1589 ENCODE_ISO_CHARACTER_DIMENSION1 (charset_alt, c1); \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1590 } \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1591 else \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1592 { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1593 if (charset == charset_jisx0208 \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1594 && coding->flags & CODING_FLAG_ISO_USE_OLDJIS) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1595 charset_alt = charset_jisx0208_1978; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1596 ENCODE_ISO_CHARACTER_DIMENSION2 (charset_alt, c1, c2); \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1597 } \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1598 if (! COMPOSING_P (coding->composing)) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1599 coding->consumed_char++; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1600 } while (0) |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1601 |
| 17052 | 1602 /* Produce designation and invocation codes at a place pointed by DST |
| 1603 to use CHARSET. The element `spec.iso2022' of *CODING is updated. | |
| 1604 Return new DST. */ | |
| 1605 | |
| 1606 unsigned char * | |
| 1607 encode_invocation_designation (charset, coding, dst) | |
| 1608 int charset; | |
| 1609 struct coding_system *coding; | |
| 1610 unsigned char *dst; | |
| 1611 { | |
| 1612 int reg; /* graphic register number */ | |
| 1613 | |
| 1614 /* At first, check designations. */ | |
| 1615 for (reg = 0; reg < 4; reg++) | |
| 1616 if (charset == CODING_SPEC_ISO_DESIGNATION (coding, reg)) | |
| 1617 break; | |
| 1618 | |
| 1619 if (reg >= 4) | |
| 1620 { | |
| 1621 /* CHARSET is not yet designated to any graphic registers. */ | |
| 1622 /* At first check the requested designation. */ | |
| 1623 reg = CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset); | |
|
18002
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
1624 if (reg == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION) |
|
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
1625 /* Since CHARSET requests no special designation, designate it |
|
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
1626 to graphic register 0. */ |
| 17052 | 1627 reg = 0; |
| 1628 | |
| 1629 ENCODE_DESIGNATION (charset, reg, coding); | |
| 1630 } | |
| 1631 | |
| 1632 if (CODING_SPEC_ISO_INVOCATION (coding, 0) != reg | |
| 1633 && CODING_SPEC_ISO_INVOCATION (coding, 1) != reg) | |
| 1634 { | |
| 1635 /* Since the graphic register REG is not invoked to any graphic | |
| 1636 planes, invoke it to graphic plane 0. */ | |
| 1637 switch (reg) | |
| 1638 { | |
| 1639 case 0: /* graphic register 0 */ | |
| 1640 ENCODE_SHIFT_IN; | |
| 1641 break; | |
| 1642 | |
| 1643 case 1: /* graphic register 1 */ | |
| 1644 ENCODE_SHIFT_OUT; | |
| 1645 break; | |
| 1646 | |
| 1647 case 2: /* graphic register 2 */ | |
| 1648 if (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT) | |
| 1649 ENCODE_SINGLE_SHIFT_2; | |
| 1650 else | |
| 1651 ENCODE_LOCKING_SHIFT_2; | |
| 1652 break; | |
| 1653 | |
| 1654 case 3: /* graphic register 3 */ | |
| 1655 if (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT) | |
| 1656 ENCODE_SINGLE_SHIFT_3; | |
| 1657 else | |
| 1658 ENCODE_LOCKING_SHIFT_3; | |
| 1659 break; | |
| 1660 } | |
| 1661 } | |
| 1662 return dst; | |
| 1663 } | |
| 1664 | |
| 1665 /* The following two macros produce codes for indicating composition. */ | |
| 1666 #define ENCODE_COMPOSITION_NO_RULE_START *dst++ = ISO_CODE_ESC, *dst++ = '0' | |
| 1667 #define ENCODE_COMPOSITION_WITH_RULE_START *dst++ = ISO_CODE_ESC, *dst++ = '2' | |
| 1668 #define ENCODE_COMPOSITION_END *dst++ = ISO_CODE_ESC, *dst++ = '1' | |
| 1669 | |
| 1670 /* The following three macros produce codes for indicating direction | |
| 1671 of text. */ | |
| 1672 #define ENCODE_CONTROL_SEQUENCE_INTRODUCER \ | |
| 1673 do { \ | |
| 1674 if (coding->flags == CODING_FLAG_ISO_SEVEN_BITS) \ | |
| 1675 *dst++ = ISO_CODE_ESC, *dst++ = '['; \ | |
| 1676 else \ | |
| 1677 *dst++ = ISO_CODE_CSI; \ | |
| 1678 } while (0) | |
| 1679 | |
| 1680 #define ENCODE_DIRECTION_R2L \ | |
| 1681 ENCODE_CONTROL_SEQUENCE_INTRODUCER, *dst++ = '2', *dst++ = ']' | |
| 1682 | |
| 1683 #define ENCODE_DIRECTION_L2R \ | |
| 1684 ENCODE_CONTROL_SEQUENCE_INTRODUCER, *dst++ = '0', *dst++ = ']' | |
| 1685 | |
| 1686 /* Produce codes for designation and invocation to reset the graphic | |
| 1687 planes and registers to initial state. */ | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1688 #define ENCODE_RESET_PLANE_AND_REGISTER \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1689 do { \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1690 int reg; \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1691 if (CODING_SPEC_ISO_INVOCATION (coding, 0) != 0) \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1692 ENCODE_SHIFT_IN; \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1693 for (reg = 0; reg < 4; reg++) \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1694 if (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, reg) >= 0 \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1695 && (CODING_SPEC_ISO_DESIGNATION (coding, reg) \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1696 != CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, reg))) \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1697 ENCODE_DESIGNATION \ |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1698 (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, reg), reg, coding); \ |
| 17052 | 1699 } while (0) |
| 1700 | |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1701 /* Produce designation sequences of charsets in the line started from |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1702 SRC to a place pointed by *DSTP, and update DSTP. |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1703 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1704 If the current block ends before any end-of-line, we may fail to |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1705 find all the necessary designations. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1706 |
| 21514 | 1707 void |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1708 encode_designation_at_bol (coding, table, src, src_end, dstp) |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1709 struct coding_system *coding; |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1710 Lisp_Object table; |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1711 unsigned char *src, *src_end, **dstp; |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1712 { |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1713 int charset, c, found = 0, reg; |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1714 /* Table of charsets to be designated to each graphic register. */ |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1715 int r[4]; |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1716 unsigned char *dst = *dstp; |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1717 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1718 for (reg = 0; reg < 4; reg++) |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1719 r[reg] = -1; |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1720 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1721 while (src < src_end && *src != '\n' && found < 4) |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1722 { |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1723 int bytes = BYTES_BY_CHAR_HEAD (*src); |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1724 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1725 if (NILP (table)) |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1726 charset = CHARSET_AT (src); |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1727 else |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1728 { |
|
19824
ea89a2408bfa
(encode_designation_at_bol): Fix type of local vars C1, C2.
Richard M. Stallman <rms@gnu.org>
parents:
19815
diff
changeset
|
1729 int c_alt; |
|
ea89a2408bfa
(encode_designation_at_bol): Fix type of local vars C1, C2.
Richard M. Stallman <rms@gnu.org>
parents:
19815
diff
changeset
|
1730 unsigned char c1, c2; |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1731 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1732 SPLIT_STRING(src, bytes, charset, c1, c2); |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1733 if ((c_alt = translate_char (table, -1, charset, c1, c2)) >= 0) |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1734 charset = CHAR_CHARSET (c_alt); |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1735 } |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1736 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1737 reg = CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1738 if (reg != CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION && r[reg] < 0) |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1739 { |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1740 found++; |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1741 r[reg] = charset; |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1742 } |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1743 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1744 src += bytes; |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1745 } |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1746 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1747 if (found) |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1748 { |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1749 for (reg = 0; reg < 4; reg++) |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1750 if (r[reg] >= 0 |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1751 && CODING_SPEC_ISO_DESIGNATION (coding, reg) != r[reg]) |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1752 ENCODE_DESIGNATION (r[reg], reg, coding); |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1753 *dstp = dst; |
|
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1754 } |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1755 } |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1756 |
| 17052 | 1757 /* See the above "GENERAL NOTES on `encode_coding_XXX ()' functions". */ |
| 1758 | |
| 1759 int | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1760 encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes) |
| 17052 | 1761 struct coding_system *coding; |
| 1762 unsigned char *source, *destination; | |
| 1763 int src_bytes, dst_bytes; | |
| 1764 { | |
| 1765 unsigned char *src = source; | |
| 1766 unsigned char *src_end = source + src_bytes; | |
| 1767 unsigned char *dst = destination; | |
| 1768 unsigned char *dst_end = destination + dst_bytes; | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1769 /* Since the maximum bytes produced by each loop is 20, we subtract 19 |
| 17052 | 1770 from DST_END to assure overflow checking is necessary only at the |
| 1771 head of loop. */ | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1772 unsigned char *adjusted_dst_end = dst_end - 19; |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1773 Lisp_Object translation_table |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
1774 = coding->translation_table_for_encode; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1775 int result = CODING_FINISH_NORMAL; |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1776 |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1777 if (!NILP (Venable_character_translation) && NILP (translation_table)) |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
1778 translation_table = Vstandard_translation_table_for_encode; |
| 17052 | 1779 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1780 coding->consumed_char = 0; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
1781 coding->fake_multibyte = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1782 while (src < src_end && (dst_bytes |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1783 ? (dst < adjusted_dst_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1784 : (dst < src - 19))) |
| 17052 | 1785 { |
| 1786 /* SRC_BASE remembers the start position in source in each loop. | |
| 1787 The loop will be exited when there's not enough source text | |
| 1788 to analyze multi-byte codes (within macros ONE_MORE_BYTE, | |
| 1789 TWO_MORE_BYTES, and THREE_MORE_BYTES). In that case, SRC is | |
| 1790 reset to SRC_BASE before exiting. */ | |
| 1791 unsigned char *src_base = src; | |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1792 int charset, c1, c2, c3, c4; |
| 17052 | 1793 |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1794 if (coding->flags & CODING_FLAG_ISO_DESIGNATE_AT_BOL |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1795 && CODING_SPEC_ISO_BOL (coding)) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1796 { |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1797 /* We have to produce designation sequences if any now. */ |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1798 encode_designation_at_bol (coding, translation_table, |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1799 src, src_end, &dst); |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1800 CODING_SPEC_ISO_BOL (coding) = 0; |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1801 } |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1802 |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1803 c1 = *src++; |
| 17052 | 1804 /* If we are seeing a component of a composite character, we are |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1805 seeing a leading-code encoded irregularly for composition, or |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1806 a composition rule if composing with rule. We must set C1 to |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1807 a normal leading-code or an ASCII code. If we are not seeing |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1808 a composite character, we must reset composition, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1809 designation, and invocation states. */ |
| 17052 | 1810 if (COMPOSING_P (coding->composing)) |
| 1811 { | |
| 1812 if (c1 < 0xA0) | |
| 1813 { | |
| 1814 /* We are not in a composite character any longer. */ | |
| 1815 coding->composing = COMPOSING_NO; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1816 ENCODE_RESET_PLANE_AND_REGISTER; |
| 17052 | 1817 ENCODE_COMPOSITION_END; |
| 1818 } | |
| 1819 else | |
| 1820 { | |
| 1821 if (coding->composing == COMPOSING_WITH_RULE_RULE) | |
| 1822 { | |
| 1823 *dst++ = c1 & 0x7F; | |
| 1824 coding->composing = COMPOSING_WITH_RULE_HEAD; | |
| 1825 continue; | |
| 1826 } | |
| 1827 else if (coding->composing == COMPOSING_WITH_RULE_HEAD) | |
| 1828 coding->composing = COMPOSING_WITH_RULE_RULE; | |
| 1829 if (c1 == 0xA0) | |
| 1830 { | |
| 1831 /* This is an ASCII component. */ | |
| 1832 ONE_MORE_BYTE (c1); | |
| 1833 c1 &= 0x7F; | |
| 1834 } | |
| 1835 else | |
| 1836 /* This is a leading-code of non ASCII component. */ | |
| 1837 c1 -= 0x20; | |
| 1838 } | |
| 1839 } | |
| 1840 | |
| 1841 /* Now encode one character. C1 is a control character, an | |
| 1842 ASCII character, or a leading-code of multi-byte character. */ | |
| 1843 switch (emacs_code_class[c1]) | |
| 1844 { | |
| 1845 case EMACS_ascii_code: | |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1846 ENCODE_ISO_CHARACTER (CHARSET_ASCII, c1, /* dummy */ c2); |
| 17052 | 1847 break; |
| 1848 | |
| 1849 case EMACS_control_code: | |
| 1850 if (coding->flags & CODING_FLAG_ISO_RESET_AT_CNTL) | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1851 ENCODE_RESET_PLANE_AND_REGISTER; |
| 17052 | 1852 *dst++ = c1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1853 coding->consumed_char++; |
| 17052 | 1854 break; |
| 1855 | |
| 1856 case EMACS_carriage_return_code: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1857 if (! (coding->mode & CODING_MODE_SELECTIVE_DISPLAY)) |
| 17052 | 1858 { |
| 1859 if (coding->flags & CODING_FLAG_ISO_RESET_AT_CNTL) | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1860 ENCODE_RESET_PLANE_AND_REGISTER; |
| 17052 | 1861 *dst++ = c1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1862 coding->consumed_char++; |
| 17052 | 1863 break; |
| 1864 } | |
| 1865 /* fall down to treat '\r' as '\n' ... */ | |
| 1866 | |
| 1867 case EMACS_linefeed_code: | |
| 1868 if (coding->flags & CODING_FLAG_ISO_RESET_AT_EOL) | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1869 ENCODE_RESET_PLANE_AND_REGISTER; |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1870 if (coding->flags & CODING_FLAG_ISO_INIT_AT_BOL) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1871 bcopy (coding->spec.iso2022.initial_designation, |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1872 coding->spec.iso2022.current_designation, |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1873 sizeof coding->spec.iso2022.initial_designation); |
| 17052 | 1874 if (coding->eol_type == CODING_EOL_LF |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
1875 || coding->eol_type == CODING_EOL_UNDECIDED) |
| 17052 | 1876 *dst++ = ISO_CODE_LF; |
| 1877 else if (coding->eol_type == CODING_EOL_CRLF) | |
| 1878 *dst++ = ISO_CODE_CR, *dst++ = ISO_CODE_LF; | |
| 1879 else | |
| 1880 *dst++ = ISO_CODE_CR; | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1881 CODING_SPEC_ISO_BOL (coding) = 1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1882 coding->consumed_char++; |
| 17052 | 1883 break; |
| 1884 | |
| 1885 case EMACS_leading_code_2: | |
| 1886 ONE_MORE_BYTE (c2); | |
|
19052
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1887 if (c2 < 0xA0) |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1888 { |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1889 /* invalid sequence */ |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1890 *dst++ = c1; |
|
21939
e9014d2166a4
(encode_coding_iso2022): Don't skip a code following some invalid code.
Richard M. Stallman <rms@gnu.org>
parents:
21880
diff
changeset
|
1891 src--; |
|
e9014d2166a4
(encode_coding_iso2022): Don't skip a code following some invalid code.
Richard M. Stallman <rms@gnu.org>
parents:
21880
diff
changeset
|
1892 coding->consumed_char++; |
|
19052
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1893 } |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1894 else |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1895 ENCODE_ISO_CHARACTER (c1, c2, /* dummy */ c3); |
| 17052 | 1896 break; |
| 1897 | |
| 1898 case EMACS_leading_code_3: | |
| 1899 TWO_MORE_BYTES (c2, c3); | |
|
19052
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1900 if (c2 < 0xA0 || c3 < 0xA0) |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1901 { |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1902 /* invalid sequence */ |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1903 *dst++ = c1; |
|
21939
e9014d2166a4
(encode_coding_iso2022): Don't skip a code following some invalid code.
Richard M. Stallman <rms@gnu.org>
parents:
21880
diff
changeset
|
1904 src -= 2; |
|
e9014d2166a4
(encode_coding_iso2022): Don't skip a code following some invalid code.
Richard M. Stallman <rms@gnu.org>
parents:
21880
diff
changeset
|
1905 coding->consumed_char++; |
|
19052
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1906 } |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1907 else if (c1 < LEADING_CODE_PRIVATE_11) |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1908 ENCODE_ISO_CHARACTER (c1, c2, c3); |
| 17052 | 1909 else |
|
17725
92f042f73be2
(Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents:
17717
diff
changeset
|
1910 ENCODE_ISO_CHARACTER (c2, c3, /* dummy */ c4); |
| 17052 | 1911 break; |
| 1912 | |
| 1913 case EMACS_leading_code_4: | |
| 1914 THREE_MORE_BYTES (c2, c3, c4); | |
|
19052
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1915 if (c2 < 0xA0 || c3 < 0xA0 || c4 < 0xA0) |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1916 { |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1917 /* invalid sequence */ |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1918 *dst++ = c1; |
|
21939
e9014d2166a4
(encode_coding_iso2022): Don't skip a code following some invalid code.
Richard M. Stallman <rms@gnu.org>
parents:
21880
diff
changeset
|
1919 src -= 3; |
|
e9014d2166a4
(encode_coding_iso2022): Don't skip a code following some invalid code.
Richard M. Stallman <rms@gnu.org>
parents:
21880
diff
changeset
|
1920 coding->consumed_char++; |
|
19052
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1921 } |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1922 else |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1923 ENCODE_ISO_CHARACTER (c2, c3, c4); |
| 17052 | 1924 break; |
| 1925 | |
| 1926 case EMACS_leading_code_composition: | |
|
19052
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1927 ONE_MORE_BYTE (c2); |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1928 if (c2 < 0xA0) |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1929 { |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1930 /* invalid sequence */ |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1931 *dst++ = c1; |
|
21939
e9014d2166a4
(encode_coding_iso2022): Don't skip a code following some invalid code.
Richard M. Stallman <rms@gnu.org>
parents:
21880
diff
changeset
|
1932 src--; |
|
e9014d2166a4
(encode_coding_iso2022): Don't skip a code following some invalid code.
Richard M. Stallman <rms@gnu.org>
parents:
21880
diff
changeset
|
1933 coding->consumed_char++; |
|
19052
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1934 } |
|
302a7b2a6948
(encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents:
18910
diff
changeset
|
1935 else if (c2 == 0xFF) |
| 17052 | 1936 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1937 ENCODE_RESET_PLANE_AND_REGISTER; |
| 17052 | 1938 coding->composing = COMPOSING_WITH_RULE_HEAD; |
| 1939 ENCODE_COMPOSITION_WITH_RULE_START; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1940 coding->consumed_char++; |
| 17052 | 1941 } |
| 1942 else | |
| 1943 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1944 ENCODE_RESET_PLANE_AND_REGISTER; |
| 17052 | 1945 /* Rewind one byte because it is a character code of |
| 1946 composition elements. */ | |
| 1947 src--; | |
| 1948 coding->composing = COMPOSING_NO_RULE_HEAD; | |
| 1949 ENCODE_COMPOSITION_NO_RULE_START; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1950 coding->consumed_char++; |
| 17052 | 1951 } |
| 1952 break; | |
| 1953 | |
| 1954 case EMACS_invalid_code: | |
| 1955 *dst++ = c1; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1956 coding->consumed_char++; |
| 17052 | 1957 break; |
| 1958 } | |
| 1959 continue; | |
| 1960 label_end_of_loop: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1961 result = CODING_FINISH_INSUFFICIENT_SRC; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1962 src = src_base; |
| 17052 | 1963 break; |
| 1964 } | |
| 1965 | |
|
21880
0a3488a71129
(encode_coding_iso2022): If encoding a last block,
Kenichi Handa <handa@m17n.org>
parents:
21839
diff
changeset
|
1966 if (src < src_end && result == CODING_FINISH_NORMAL) |
|
0a3488a71129
(encode_coding_iso2022): If encoding a last block,
Kenichi Handa <handa@m17n.org>
parents:
21839
diff
changeset
|
1967 result = CODING_FINISH_INSUFFICIENT_DST; |
|
0a3488a71129
(encode_coding_iso2022): If encoding a last block,
Kenichi Handa <handa@m17n.org>
parents:
21839
diff
changeset
|
1968 |
|
0a3488a71129
(encode_coding_iso2022): If encoding a last block,
Kenichi Handa <handa@m17n.org>
parents:
21839
diff
changeset
|
1969 /* If this is the last block of the text to be encoded, we must |
|
0a3488a71129
(encode_coding_iso2022): If encoding a last block,
Kenichi Handa <handa@m17n.org>
parents:
21839
diff
changeset
|
1970 reset graphic planes and registers to the initial state, and |
|
0a3488a71129
(encode_coding_iso2022): If encoding a last block,
Kenichi Handa <handa@m17n.org>
parents:
21839
diff
changeset
|
1971 flush out the carryover if any. */ |
|
0a3488a71129
(encode_coding_iso2022): If encoding a last block,
Kenichi Handa <handa@m17n.org>
parents:
21839
diff
changeset
|
1972 if (coding->mode & CODING_MODE_LAST_BLOCK) |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1973 { |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1974 ENCODE_RESET_PLANE_AND_REGISTER; |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1975 if (COMPOSING_P (coding->composing)) |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1976 ENCODE_COMPOSITION_END; |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
1977 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1978 coding->consumed = src - source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1979 coding->produced = coding->produced_char = dst - destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1980 return result; |
| 17052 | 1981 } |
| 1982 | |
| 1983 | |
| 1984 /*** 4. SJIS and BIG5 handlers ***/ | |
| 1985 | |
| 18766 | 1986 /* Although SJIS and BIG5 are not ISO's coding system, they are used |
| 17052 | 1987 quite widely. So, for the moment, Emacs supports them in the bare |
| 1988 C code. But, in the future, they may be supported only by CCL. */ | |
| 1989 | |
| 1990 /* SJIS is a coding system encoding three character sets: ASCII, right | |
| 1991 half of JISX0201-Kana, and JISX0208. An ASCII character is encoded | |
| 1992 as is. A character of charset katakana-jisx0201 is encoded by | |
| 1993 "position-code + 0x80". A character of charset japanese-jisx0208 | |
| 1994 is encoded in 2-byte but two position-codes are divided and shifted | |
| 1995 so that it fit in the range below. | |
| 1996 | |
| 1997 --- CODE RANGE of SJIS --- | |
| 1998 (character set) (range) | |
| 1999 ASCII 0x00 .. 0x7F | |
| 2000 KATAKANA-JISX0201 0xA0 .. 0xDF | |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2001 JISX0208 (1st byte) 0x80 .. 0x9F and 0xE0 .. 0xEF |
| 17052 | 2002 (2nd byte) 0x40 .. 0xFF |
| 2003 ------------------------------- | |
| 2004 | |
| 2005 */ | |
| 2006 | |
| 2007 /* BIG5 is a coding system encoding two character sets: ASCII and | |
| 2008 Big5. An ASCII character is encoded as is. Big5 is a two-byte | |
| 2009 character set and is encoded in two-byte. | |
| 2010 | |
| 2011 --- CODE RANGE of BIG5 --- | |
| 2012 (character set) (range) | |
| 2013 ASCII 0x00 .. 0x7F | |
| 2014 Big5 (1st byte) 0xA1 .. 0xFE | |
| 2015 (2nd byte) 0x40 .. 0x7E and 0xA1 .. 0xFE | |
| 2016 -------------------------- | |
| 2017 | |
| 2018 Since the number of characters in Big5 is larger than maximum | |
| 2019 characters in Emacs' charset (96x96), it can't be handled as one | |
| 2020 charset. So, in Emacs, Big5 is divided into two: `charset-big5-1' | |
| 2021 and `charset-big5-2'. Both are DIMENSION2 and CHARS94. The former | |
| 2022 contains frequently used characters and the latter contains less | |
| 2023 frequently used characters. */ | |
| 2024 | |
| 2025 /* Macros to decode or encode a character of Big5 in BIG5. B1 and B2 | |
| 2026 are the 1st and 2nd position-codes of Big5 in BIG5 coding system. | |
| 2027 C1 and C2 are the 1st and 2nd position-codes of of Emacs' internal | |
| 2028 format. CHARSET is `charset_big5_1' or `charset_big5_2'. */ | |
| 2029 | |
| 2030 /* Number of Big5 characters which have the same code in 1st byte. */ | |
| 2031 #define BIG5_SAME_ROW (0xFF - 0xA1 + 0x7F - 0x40) | |
| 2032 | |
| 2033 #define DECODE_BIG5(b1, b2, charset, c1, c2) \ | |
| 2034 do { \ | |
| 2035 unsigned int temp \ | |
| 2036 = (b1 - 0xA1) * BIG5_SAME_ROW + b2 - (b2 < 0x7F ? 0x40 : 0x62); \ | |
| 2037 if (b1 < 0xC9) \ | |
| 2038 charset = charset_big5_1; \ | |
| 2039 else \ | |
| 2040 { \ | |
| 2041 charset = charset_big5_2; \ | |
| 2042 temp -= (0xC9 - 0xA1) * BIG5_SAME_ROW; \ | |
| 2043 } \ | |
| 2044 c1 = temp / (0xFF - 0xA1) + 0x21; \ | |
| 2045 c2 = temp % (0xFF - 0xA1) + 0x21; \ | |
| 2046 } while (0) | |
| 2047 | |
| 2048 #define ENCODE_BIG5(charset, c1, c2, b1, b2) \ | |
| 2049 do { \ | |
| 2050 unsigned int temp = (c1 - 0x21) * (0xFF - 0xA1) + (c2 - 0x21); \ | |
| 2051 if (charset == charset_big5_2) \ | |
| 2052 temp += BIG5_SAME_ROW * (0xC9 - 0xA1); \ | |
| 2053 b1 = temp / BIG5_SAME_ROW + 0xA1; \ | |
| 2054 b2 = temp % BIG5_SAME_ROW; \ | |
| 2055 b2 += b2 < 0x3F ? 0x40 : 0x62; \ | |
| 2056 } while (0) | |
| 2057 | |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2058 #define DECODE_SJIS_BIG5_CHARACTER(charset, c1, c2) \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2059 do { \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2060 int c_alt, charset_alt = (charset); \ |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2061 if (!NILP (translation_table) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2062 && ((c_alt = translate_char (translation_table, \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2063 -1, (charset), c1, c2)) >= 0)) \ |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2064 SPLIT_CHAR (c_alt, charset_alt, c1, c2); \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2065 if (charset_alt == CHARSET_ASCII || charset_alt < 0) \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2066 DECODE_CHARACTER_ASCII (c1); \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2067 else if (CHARSET_DIMENSION (charset_alt) == 1) \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2068 DECODE_CHARACTER_DIMENSION1 (charset_alt, c1); \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2069 else \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2070 DECODE_CHARACTER_DIMENSION2 (charset_alt, c1, c2); \ |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2071 } while (0) |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2072 |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2073 #define ENCODE_SJIS_BIG5_CHARACTER(charset, c1, c2) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2074 do { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2075 int c_alt, charset_alt; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2076 if (!NILP (translation_table) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2077 && ((c_alt = translate_char (translation_table, -1, \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2078 charset, c1, c2)) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2079 >= 0)) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2080 SPLIT_CHAR (c_alt, charset_alt, c1, c2); \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2081 else \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2082 charset_alt = charset; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2083 if (charset_alt == charset_ascii) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2084 *dst++ = c1; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2085 else if (CHARSET_DIMENSION (charset_alt) == 1) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2086 { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2087 if (sjis_p && charset_alt == charset_katakana_jisx0201) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2088 *dst++ = c1; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2089 else \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2090 { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2091 *dst++ = charset_alt, *dst++ = c1; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2092 coding->fake_multibyte = 1; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2093 } \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2094 } \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2095 else \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2096 { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2097 c1 &= 0x7F, c2 &= 0x7F; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2098 if (sjis_p && charset_alt == charset_jisx0208) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2099 { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2100 unsigned char s1, s2; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2101 \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2102 ENCODE_SJIS (c1, c2, s1, s2); \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2103 *dst++ = s1, *dst++ = s2; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2104 coding->fake_multibyte = 1; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2105 } \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2106 else if (!sjis_p \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2107 && (charset_alt == charset_big5_1 \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2108 || charset_alt == charset_big5_2)) \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2109 { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2110 unsigned char b1, b2; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2111 \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2112 ENCODE_BIG5 (charset_alt, c1, c2, b1, b2); \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2113 *dst++ = b1, *dst++ = b2; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2114 } \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2115 else \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2116 { \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2117 *dst++ = charset_alt, *dst++ = c1, *dst++ = c2; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2118 coding->fake_multibyte = 1; \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2119 } \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2120 } \ |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2121 coding->consumed_char++; \ |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2122 } while (0); |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2123 |
| 17052 | 2124 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions". |
| 2125 Check if a text is encoded in SJIS. If it is, return | |
| 2126 CODING_CATEGORY_MASK_SJIS, else return 0. */ | |
| 2127 | |
| 2128 int | |
| 2129 detect_coding_sjis (src, src_end) | |
| 2130 unsigned char *src, *src_end; | |
| 2131 { | |
| 2132 unsigned char c; | |
| 2133 | |
| 2134 while (src < src_end) | |
| 2135 { | |
| 2136 c = *src++; | |
| 2137 if ((c >= 0x80 && c < 0xA0) || c >= 0xE0) | |
| 2138 { | |
| 2139 if (src < src_end && *src++ < 0x40) | |
| 2140 return 0; | |
| 2141 } | |
| 2142 } | |
| 2143 return CODING_CATEGORY_MASK_SJIS; | |
| 2144 } | |
| 2145 | |
| 2146 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions". | |
| 2147 Check if a text is encoded in BIG5. If it is, return | |
| 2148 CODING_CATEGORY_MASK_BIG5, else return 0. */ | |
| 2149 | |
| 2150 int | |
| 2151 detect_coding_big5 (src, src_end) | |
| 2152 unsigned char *src, *src_end; | |
| 2153 { | |
| 2154 unsigned char c; | |
| 2155 | |
| 2156 while (src < src_end) | |
| 2157 { | |
| 2158 c = *src++; | |
| 2159 if (c >= 0xA1) | |
| 2160 { | |
| 2161 if (src >= src_end) | |
| 2162 break; | |
| 2163 c = *src++; | |
| 2164 if (c < 0x40 || (c >= 0x7F && c <= 0xA0)) | |
| 2165 return 0; | |
| 2166 } | |
| 2167 } | |
| 2168 return CODING_CATEGORY_MASK_BIG5; | |
| 2169 } | |
| 2170 | |
| 2171 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". | |
| 2172 If SJIS_P is 1, decode SJIS text, else decode BIG5 test. */ | |
| 2173 | |
| 2174 int | |
| 2175 decode_coding_sjis_big5 (coding, source, destination, | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2176 src_bytes, dst_bytes, sjis_p) |
| 17052 | 2177 struct coding_system *coding; |
| 2178 unsigned char *source, *destination; | |
| 2179 int src_bytes, dst_bytes; | |
| 2180 int sjis_p; | |
| 2181 { | |
| 2182 unsigned char *src = source; | |
| 2183 unsigned char *src_end = source + src_bytes; | |
| 2184 unsigned char *dst = destination; | |
| 2185 unsigned char *dst_end = destination + dst_bytes; | |
| 2186 /* Since the maximum bytes produced by each loop is 4, we subtract 3 | |
| 2187 from DST_END to assure overflow checking is necessary only at the | |
| 2188 head of loop. */ | |
| 2189 unsigned char *adjusted_dst_end = dst_end - 3; | |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2190 Lisp_Object translation_table |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2191 = coding->translation_table_for_decode; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2192 int result = CODING_FINISH_NORMAL; |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2193 |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2194 if (!NILP (Venable_character_translation) && NILP (translation_table)) |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2195 translation_table = Vstandard_translation_table_for_decode; |
| 17052 | 2196 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2197 coding->produced_char = 0; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2198 coding->fake_multibyte = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2199 while (src < src_end && (dst_bytes |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2200 ? (dst < adjusted_dst_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2201 : (dst < src - 3))) |
| 17052 | 2202 { |
| 2203 /* SRC_BASE remembers the start position in source in each loop. | |
| 2204 The loop will be exited when there's not enough source text | |
| 2205 to analyze two-byte character (within macro ONE_MORE_BYTE). | |
| 2206 In that case, SRC is reset to SRC_BASE before exiting. */ | |
| 2207 unsigned char *src_base = src; | |
| 2208 unsigned char c1 = *src++, c2, c3, c4; | |
| 2209 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2210 if (c1 < 0x20) |
| 17052 | 2211 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2212 if (c1 == '\r') |
| 17052 | 2213 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2214 if (coding->eol_type == CODING_EOL_CRLF) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2215 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2216 ONE_MORE_BYTE (c2); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2217 if (c2 == '\n') |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2218 *dst++ = c2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2219 else if (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2220 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2221 result = CODING_FINISH_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2222 goto label_end_of_loop_2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2223 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2224 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2225 /* To process C2 again, SRC is subtracted by 1. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2226 *dst++ = c1, src--; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2227 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2228 else if (coding->eol_type == CODING_EOL_CR) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2229 *dst++ = '\n'; |
| 17052 | 2230 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2231 *dst++ = c1; |
| 17052 | 2232 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2233 else if (c1 == '\n' |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2234 && (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2235 && (coding->eol_type == CODING_EOL_CR |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2236 || coding->eol_type == CODING_EOL_CRLF)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2237 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2238 result = CODING_FINISH_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2239 goto label_end_of_loop_2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2240 } |
| 17052 | 2241 else |
| 2242 *dst++ = c1; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2243 coding->produced_char++; |
| 17052 | 2244 } |
| 2245 else if (c1 < 0x80) | |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2246 DECODE_SJIS_BIG5_CHARACTER (charset_ascii, c1, /* dummy */ c2); |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2247 else |
| 17052 | 2248 { |
| 2249 if (sjis_p) | |
| 2250 { | |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2251 if (c1 < 0xA0 || (c1 >= 0xE0 && c1 < 0xF0)) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2252 { |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2253 /* SJIS -> JISX0208 */ |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2254 ONE_MORE_BYTE (c2); |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2255 if (c2 >= 0x40) |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2256 { |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2257 DECODE_SJIS (c1, c2, c3, c4); |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2258 DECODE_SJIS_BIG5_CHARACTER (charset_jisx0208, c3, c4); |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2259 } |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2260 else |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2261 goto label_invalid_code_2; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2262 } |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2263 else if (c1 < 0xE0) |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2264 /* SJIS -> JISX0201-Kana */ |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2265 DECODE_SJIS_BIG5_CHARACTER (charset_katakana_jisx0201, c1, |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2266 /* dummy */ c2); |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2267 else |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2268 goto label_invalid_code_1; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2269 } |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2270 else |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2271 { |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2272 /* BIG5 -> Big5 */ |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2273 if (c1 >= 0xA1 && c1 <= 0xFE) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2274 { |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2275 ONE_MORE_BYTE (c2); |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2276 if ((c2 >= 0x40 && c2 <= 0x7E) || (c2 >= 0xA1 && c2 <= 0xFE)) |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2277 { |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2278 int charset; |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2279 |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2280 DECODE_BIG5 (c1, c2, charset, c3, c4); |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2281 DECODE_SJIS_BIG5_CHARACTER (charset, c3, c4); |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2282 } |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2283 else |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2284 goto label_invalid_code_2; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2285 } |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2286 else |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
2287 goto label_invalid_code_1; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2288 } |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2289 } |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2290 continue; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2291 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2292 label_invalid_code_1: |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2293 *dst++ = c1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2294 coding->produced_char++; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2295 coding->fake_multibyte = 1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2296 continue; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2297 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2298 label_invalid_code_2: |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2299 *dst++ = c1; *dst++= c2; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2300 coding->produced_char += 2; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2301 coding->fake_multibyte = 1; |
| 17052 | 2302 continue; |
| 2303 | |
| 2304 label_end_of_loop: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2305 result = CODING_FINISH_INSUFFICIENT_SRC; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2306 label_end_of_loop_2: |
| 17052 | 2307 src = src_base; |
| 2308 break; | |
| 2309 } | |
| 2310 | |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2311 if (src < src_end) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2312 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2313 if (result == CODING_FINISH_NORMAL) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2314 result = CODING_FINISH_INSUFFICIENT_DST; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2315 else if (result != CODING_FINISH_INCONSISTENT_EOL |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2316 && coding->mode & CODING_MODE_LAST_BLOCK) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2317 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2318 src_bytes = src_end - src; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2319 if (dst_bytes && (dst_end - dst < src_bytes)) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2320 src_bytes = dst_end - dst; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2321 bcopy (dst, src, src_bytes); |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2322 src += src_bytes; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2323 dst += src_bytes; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2324 coding->fake_multibyte = 1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2325 } |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2326 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2327 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2328 coding->consumed = coding->consumed_char = src - source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2329 coding->produced = dst - destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2330 return result; |
| 17052 | 2331 } |
| 2332 | |
| 2333 /* See the above "GENERAL NOTES on `encode_coding_XXX ()' functions". | |
| 2334 This function can encode `charset_ascii', `charset_katakana_jisx0201', | |
| 2335 `charset_jisx0208', `charset_big5_1', and `charset_big5-2'. We are | |
| 2336 sure that all these charsets are registered as official charset | |
| 2337 (i.e. do not have extended leading-codes). Characters of other | |
| 2338 charsets are produced without any encoding. If SJIS_P is 1, encode | |
| 2339 SJIS text, else encode BIG5 text. */ | |
| 2340 | |
| 2341 int | |
| 2342 encode_coding_sjis_big5 (coding, source, destination, | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2343 src_bytes, dst_bytes, sjis_p) |
| 17052 | 2344 struct coding_system *coding; |
| 2345 unsigned char *source, *destination; | |
| 2346 int src_bytes, dst_bytes; | |
| 2347 int sjis_p; | |
| 2348 { | |
| 2349 unsigned char *src = source; | |
| 2350 unsigned char *src_end = source + src_bytes; | |
| 2351 unsigned char *dst = destination; | |
| 2352 unsigned char *dst_end = destination + dst_bytes; | |
| 2353 /* Since the maximum bytes produced by each loop is 2, we subtract 1 | |
| 2354 from DST_END to assure overflow checking is necessary only at the | |
| 2355 head of loop. */ | |
| 2356 unsigned char *adjusted_dst_end = dst_end - 1; | |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2357 Lisp_Object translation_table |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2358 = coding->translation_table_for_encode; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2359 int result = CODING_FINISH_NORMAL; |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2360 |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
2361 if (!NILP (Venable_character_translation) && NILP (translation_table)) |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2362 translation_table = Vstandard_translation_table_for_encode; |
| 17052 | 2363 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2364 coding->consumed_char = 0; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2365 coding->fake_multibyte = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2366 while (src < src_end && (dst_bytes |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2367 ? (dst < adjusted_dst_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2368 : (dst < src - 1))) |
| 17052 | 2369 { |
| 2370 /* SRC_BASE remembers the start position in source in each loop. | |
| 2371 The loop will be exited when there's not enough source text | |
| 2372 to analyze multi-byte codes (within macros ONE_MORE_BYTE and | |
| 2373 TWO_MORE_BYTES). In that case, SRC is reset to SRC_BASE | |
| 2374 before exiting. */ | |
| 2375 unsigned char *src_base = src; | |
| 2376 unsigned char c1 = *src++, c2, c3, c4; | |
| 2377 | |
| 2378 if (coding->composing) | |
| 2379 { | |
| 2380 if (c1 == 0xA0) | |
| 2381 { | |
| 2382 ONE_MORE_BYTE (c1); | |
| 2383 c1 &= 0x7F; | |
| 2384 } | |
| 2385 else if (c1 >= 0xA0) | |
| 2386 c1 -= 0x20; | |
| 2387 else | |
| 2388 coding->composing = 0; | |
| 2389 } | |
| 2390 | |
| 2391 switch (emacs_code_class[c1]) | |
| 2392 { | |
| 2393 case EMACS_ascii_code: | |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2394 ENCODE_SJIS_BIG5_CHARACTER (charset_ascii, c1, /* dummy */ c2); |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2395 break; |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2396 |
| 17052 | 2397 case EMACS_control_code: |
| 2398 *dst++ = c1; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2399 coding->consumed_char++; |
| 17052 | 2400 break; |
| 2401 | |
| 2402 case EMACS_carriage_return_code: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2403 if (! (coding->mode & CODING_MODE_SELECTIVE_DISPLAY)) |
| 17052 | 2404 { |
| 2405 *dst++ = c1; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2406 coding->consumed_char++; |
| 17052 | 2407 break; |
| 2408 } | |
| 2409 /* fall down to treat '\r' as '\n' ... */ | |
| 2410 | |
| 2411 case EMACS_linefeed_code: | |
| 2412 if (coding->eol_type == CODING_EOL_LF | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2413 || coding->eol_type == CODING_EOL_UNDECIDED) |
| 17052 | 2414 *dst++ = '\n'; |
| 2415 else if (coding->eol_type == CODING_EOL_CRLF) | |
| 2416 *dst++ = '\r', *dst++ = '\n'; | |
| 2417 else | |
| 2418 *dst++ = '\r'; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2419 coding->consumed_char++; |
| 17052 | 2420 break; |
| 2421 | |
| 2422 case EMACS_leading_code_2: | |
| 2423 ONE_MORE_BYTE (c2); | |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2424 ENCODE_SJIS_BIG5_CHARACTER (c1, c2, /* dummy */ c3); |
| 17052 | 2425 break; |
| 2426 | |
| 2427 case EMACS_leading_code_3: | |
| 2428 TWO_MORE_BYTES (c2, c3); | |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2429 ENCODE_SJIS_BIG5_CHARACTER (c1, c2, c3); |
| 17052 | 2430 break; |
| 2431 | |
| 2432 case EMACS_leading_code_4: | |
| 2433 THREE_MORE_BYTES (c2, c3, c4); | |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
2434 ENCODE_SJIS_BIG5_CHARACTER (c2, c3, c4); |
| 17052 | 2435 break; |
| 2436 | |
| 2437 case EMACS_leading_code_composition: | |
| 2438 coding->composing = 1; | |
| 2439 break; | |
| 2440 | |
| 2441 default: /* i.e. case EMACS_invalid_code: */ | |
| 2442 *dst++ = c1; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2443 coding->consumed_char++; |
| 17052 | 2444 } |
| 2445 continue; | |
| 2446 | |
| 2447 label_end_of_loop: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2448 result = CODING_FINISH_INSUFFICIENT_SRC; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2449 src = src_base; |
| 17052 | 2450 break; |
| 2451 } | |
| 2452 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2453 if (result == CODING_FINISH_NORMAL |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2454 && src < src_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2455 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2456 coding->consumed = src - source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2457 coding->produced = coding->produced_char = dst - destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2458 return result; |
| 17052 | 2459 } |
| 2460 | |
| 2461 | |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2462 /*** 5. CCL handlers ***/ |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2463 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2464 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions". |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2465 Check if a text is encoded in a coding system of which |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2466 encoder/decoder are written in CCL program. If it is, return |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2467 CODING_CATEGORY_MASK_CCL, else return 0. */ |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2468 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2469 int |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2470 detect_coding_ccl (src, src_end) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2471 unsigned char *src, *src_end; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2472 { |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2473 unsigned char *valid; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2474 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2475 /* No coding system is assigned to coding-category-ccl. */ |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2476 if (!coding_system_table[CODING_CATEGORY_IDX_CCL]) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2477 return 0; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2478 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2479 valid = coding_system_table[CODING_CATEGORY_IDX_CCL]->spec.ccl.valid_codes; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2480 while (src < src_end) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2481 { |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2482 if (! valid[*src]) return 0; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2483 src++; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2484 } |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2485 return CODING_CATEGORY_MASK_CCL; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2486 } |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2487 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2488 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2489 /*** 6. End-of-line handlers ***/ |
| 17052 | 2490 |
| 2491 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". | |
| 2492 This function is called only when `coding->eol_type' is | |
| 2493 CODING_EOL_CRLF or CODING_EOL_CR. */ | |
| 2494 | |
| 21514 | 2495 int |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2496 decode_eol (coding, source, destination, src_bytes, dst_bytes) |
| 17052 | 2497 struct coding_system *coding; |
| 2498 unsigned char *source, *destination; | |
| 2499 int src_bytes, dst_bytes; | |
| 2500 { | |
| 2501 unsigned char *src = source; | |
| 2502 unsigned char *src_end = source + src_bytes; | |
| 2503 unsigned char *dst = destination; | |
| 2504 unsigned char *dst_end = destination + dst_bytes; | |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2505 unsigned char c; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2506 int result = CODING_FINISH_NORMAL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2507 |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2508 coding->fake_multibyte = 0; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2509 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2510 if (src_bytes <= 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2511 return result; |
| 17052 | 2512 |
| 2513 switch (coding->eol_type) | |
| 2514 { | |
| 2515 case CODING_EOL_CRLF: | |
| 2516 { | |
| 2517 /* Since the maximum bytes produced by each loop is 2, we | |
| 2518 subtract 1 from DST_END to assure overflow checking is | |
| 2519 necessary only at the head of loop. */ | |
| 2520 unsigned char *adjusted_dst_end = dst_end - 1; | |
| 2521 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2522 while (src < src_end && (dst_bytes |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2523 ? (dst < adjusted_dst_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2524 : (dst < src - 1))) |
| 17052 | 2525 { |
| 2526 unsigned char *src_base = src; | |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2527 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2528 c = *src++; |
| 17052 | 2529 if (c == '\r') |
| 2530 { | |
| 2531 ONE_MORE_BYTE (c); | |
|
23315
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2532 if (c == '\n') |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2533 *dst++ = c; |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2534 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2535 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2536 if (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2537 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2538 result = CODING_FINISH_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2539 goto label_end_of_loop_2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2540 } |
|
23315
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2541 src--; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2542 *dst++ = '\r'; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2543 if (BASE_LEADING_CODE_P (c)) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2544 coding->fake_multibyte = 1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2545 } |
| 17052 | 2546 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2547 else if (c == '\n' |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2548 && (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2549 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2550 result = CODING_FINISH_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2551 goto label_end_of_loop_2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2552 } |
| 17052 | 2553 else |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2554 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2555 *dst++ = c; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2556 if (BASE_LEADING_CODE_P (c)) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2557 coding->fake_multibyte = 1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2558 } |
| 17052 | 2559 continue; |
| 2560 | |
| 2561 label_end_of_loop: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2562 result = CODING_FINISH_INSUFFICIENT_SRC; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2563 label_end_of_loop_2: |
| 17052 | 2564 src = src_base; |
| 2565 break; | |
| 2566 } | |
|
23315
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2567 if (src < src_end) |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2568 { |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2569 if (result == CODING_FINISH_NORMAL) |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2570 result = CODING_FINISH_INSUFFICIENT_DST; |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2571 else if (result != CODING_FINISH_INCONSISTENT_EOL |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2572 && coding->mode & CODING_MODE_LAST_BLOCK) |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2573 { |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2574 /* This is the last block of the text to be decoded. |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2575 We flush out all remaining codes. */ |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2576 src_bytes = src_end - src; |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2577 if (dst_bytes && (dst_end - dst < src_bytes)) |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2578 src_bytes = dst_end - dst; |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2579 bcopy (src, dst, src_bytes); |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2580 dst += src_bytes; |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2581 src += src_bytes; |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2582 } |
|
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
2583 } |
| 17052 | 2584 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2585 break; |
| 17052 | 2586 |
| 2587 case CODING_EOL_CR: | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2588 if (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2589 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2590 while (src < src_end) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2591 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2592 if ((c = *src++) == '\n') |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2593 break; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2594 if (BASE_LEADING_CODE_P (c)) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2595 coding->fake_multibyte = 1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2596 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2597 if (*--src == '\n') |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2598 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2599 src_bytes = src - source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2600 result = CODING_FINISH_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2601 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2602 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2603 if (dst_bytes && src_bytes > dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2604 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2605 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2606 src_bytes = dst_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2607 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2608 if (dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2609 bcopy (source, destination, src_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2610 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2611 safe_bcopy (source, destination, src_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2612 src = source + src_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2613 while (src_bytes--) if (*dst++ == '\r') dst[-1] = '\n'; |
| 17052 | 2614 break; |
| 2615 | |
| 2616 default: /* i.e. case: CODING_EOL_LF */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2617 if (dst_bytes && src_bytes > dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2618 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2619 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2620 src_bytes = dst_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2621 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2622 if (dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2623 bcopy (source, destination, src_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2624 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2625 safe_bcopy (source, destination, src_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2626 src += src_bytes; |
|
22502
627b13315f04
(encode_eol): Fix typo that prevented converting to Mac
Richard M. Stallman <rms@gnu.org>
parents:
22460
diff
changeset
|
2627 dst += src_bytes; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2628 coding->fake_multibyte = 1; |
| 17052 | 2629 break; |
| 2630 } | |
| 2631 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2632 coding->consumed = coding->consumed_char = src - source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2633 coding->produced = coding->produced_char = dst - destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2634 return result; |
| 17052 | 2635 } |
| 2636 | |
| 2637 /* See "GENERAL NOTES about `encode_coding_XXX ()' functions". Encode | |
| 2638 format of end-of-line according to `coding->eol_type'. If | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2639 `coding->mode & CODING_MODE_SELECTIVE_DISPLAY' is nonzero, code |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2640 '\r' in source text also means end-of-line. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2641 |
| 21514 | 2642 int |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2643 encode_eol (coding, source, destination, src_bytes, dst_bytes) |
| 17052 | 2644 struct coding_system *coding; |
| 2645 unsigned char *source, *destination; | |
| 2646 int src_bytes, dst_bytes; | |
| 2647 { | |
| 2648 unsigned char *src = source; | |
| 2649 unsigned char *dst = destination; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2650 int result = CODING_FINISH_NORMAL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2651 |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2652 coding->fake_multibyte = 0; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2653 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2654 if (coding->eol_type == CODING_EOL_CRLF) |
| 17052 | 2655 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2656 unsigned char c; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2657 unsigned char *src_end = source + src_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2658 unsigned char *dst_end = destination + dst_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2659 /* Since the maximum bytes produced by each loop is 2, we |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2660 subtract 1 from DST_END to assure overflow checking is |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2661 necessary only at the head of loop. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2662 unsigned char *adjusted_dst_end = dst_end - 1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2663 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2664 while (src < src_end && (dst_bytes |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2665 ? (dst < adjusted_dst_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2666 : (dst < src - 1))) |
| 17052 | 2667 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2668 c = *src++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2669 if (c == '\n' |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2670 || (c == '\r' && (coding->mode & CODING_MODE_SELECTIVE_DISPLAY))) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2671 *dst++ = '\r', *dst++ = '\n'; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2672 else |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2673 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2674 *dst++ = c; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2675 if (BASE_LEADING_CODE_P (c)) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2676 coding->fake_multibyte = 1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2677 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2678 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2679 if (src < src_end) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2680 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2681 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2682 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2683 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2684 unsigned char c; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2685 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2686 if (dst_bytes && src_bytes > dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2687 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2688 src_bytes = dst_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2689 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2690 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2691 if (dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2692 bcopy (source, destination, src_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2693 else |
|
22502
627b13315f04
(encode_eol): Fix typo that prevented converting to Mac
Richard M. Stallman <rms@gnu.org>
parents:
22460
diff
changeset
|
2694 safe_bcopy (source, destination, src_bytes); |
|
627b13315f04
(encode_eol): Fix typo that prevented converting to Mac
Richard M. Stallman <rms@gnu.org>
parents:
22460
diff
changeset
|
2695 dst_bytes = src_bytes; |
|
627b13315f04
(encode_eol): Fix typo that prevented converting to Mac
Richard M. Stallman <rms@gnu.org>
parents:
22460
diff
changeset
|
2696 if (coding->eol_type == CODING_EOL_CR) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2697 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2698 while (src_bytes--) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2699 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2700 if ((c = *dst++) == '\n') |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2701 dst[-1] = '\r'; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2702 else if (BASE_LEADING_CODE_P (c)) |
|
22502
627b13315f04
(encode_eol): Fix typo that prevented converting to Mac
Richard M. Stallman <rms@gnu.org>
parents:
22460
diff
changeset
|
2703 coding->fake_multibyte = 1; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2704 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2705 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2706 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2707 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2708 if (coding->mode & CODING_MODE_SELECTIVE_DISPLAY) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2709 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2710 while (src_bytes--) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2711 if (*dst++ == '\r') dst[-1] = '\n'; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2712 } |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2713 coding->fake_multibyte = 1; |
| 17052 | 2714 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2715 src = source + dst_bytes; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
2716 dst = destination + dst_bytes; |
| 17052 | 2717 } |
| 2718 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2719 coding->consumed = coding->consumed_char = src - source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2720 coding->produced = coding->produced_char = dst - destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2721 return result; |
| 17052 | 2722 } |
| 2723 | |
| 2724 | |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
2725 /*** 7. C library functions ***/ |
| 17052 | 2726 |
| 2727 /* In Emacs Lisp, coding system is represented by a Lisp symbol which | |
| 2728 has a property `coding-system'. The value of this property is a | |
| 2729 vector of length 5 (called as coding-vector). Among elements of | |
| 2730 this vector, the first (element[0]) and the fifth (element[4]) | |
| 2731 carry important information for decoding/encoding. Before | |
| 2732 decoding/encoding, this information should be set in fields of a | |
| 2733 structure of type `coding_system'. | |
| 2734 | |
| 2735 A value of property `coding-system' can be a symbol of another | |
| 2736 subsidiary coding-system. In that case, Emacs gets coding-vector | |
| 2737 from that symbol. | |
| 2738 | |
| 2739 `element[0]' contains information to be set in `coding->type'. The | |
| 2740 value and its meaning is as follows: | |
| 2741 | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2742 0 -- coding_type_emacs_mule |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2743 1 -- coding_type_sjis |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2744 2 -- coding_type_iso2022 |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2745 3 -- coding_type_big5 |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2746 4 -- coding_type_ccl encoder/decoder written in CCL |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2747 nil -- coding_type_no_conversion |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2748 t -- coding_type_undecided (automatic conversion on decoding, |
|
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2749 no-conversion on encoding) |
| 17052 | 2750 |
| 2751 `element[4]' contains information to be set in `coding->flags' and | |
| 2752 `coding->spec'. The meaning varies by `coding->type'. | |
| 2753 | |
| 2754 If `coding->type' is `coding_type_iso2022', element[4] is a vector | |
| 2755 of length 32 (of which the first 13 sub-elements are used now). | |
| 2756 Meanings of these sub-elements are: | |
| 2757 | |
| 2758 sub-element[N] where N is 0 through 3: to be set in `coding->spec.iso2022' | |
| 2759 If the value is an integer of valid charset, the charset is | |
| 2760 assumed to be designated to graphic register N initially. | |
| 2761 | |
| 2762 If the value is minus, it is a minus value of charset which | |
| 2763 reserves graphic register N, which means that the charset is | |
| 2764 not designated initially but should be designated to graphic | |
| 2765 register N just before encoding a character in that charset. | |
| 2766 | |
| 2767 If the value is nil, graphic register N is never used on | |
| 2768 encoding. | |
| 2769 | |
| 2770 sub-element[N] where N is 4 through 11: to be set in `coding->flags' | |
| 2771 Each value takes t or nil. See the section ISO2022 of | |
| 2772 `coding.h' for more information. | |
| 2773 | |
| 2774 If `coding->type' is `coding_type_big5', element[4] is t to denote | |
| 2775 BIG5-ETen or nil to denote BIG5-HKU. | |
| 2776 | |
| 2777 If `coding->type' takes the other value, element[4] is ignored. | |
| 2778 | |
| 2779 Emacs Lisp's coding system also carries information about format of | |
| 2780 end-of-line in a value of property `eol-type'. If the value is | |
| 2781 integer, 0 means CODING_EOL_LF, 1 means CODING_EOL_CRLF, and 2 | |
| 2782 means CODING_EOL_CR. If it is not integer, it should be a vector | |
| 2783 of subsidiary coding systems of which property `eol-type' has one | |
| 2784 of above values. | |
| 2785 | |
| 2786 */ | |
| 2787 | |
| 2788 /* Extract information for decoding/encoding from CODING_SYSTEM_SYMBOL | |
| 2789 and set it in CODING. If CODING_SYSTEM_SYMBOL is invalid, CODING | |
| 2790 is setup so that no conversion is necessary and return -1, else | |
| 2791 return 0. */ | |
| 2792 | |
| 2793 int | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2794 setup_coding_system (coding_system, coding) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2795 Lisp_Object coding_system; |
| 17052 | 2796 struct coding_system *coding; |
| 2797 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2798 Lisp_Object coding_spec, coding_type, eol_type, plist; |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
2799 Lisp_Object val; |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2800 int i; |
| 17052 | 2801 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2802 /* Initialize some fields required for all kinds of coding systems. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2803 coding->symbol = coding_system; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2804 coding->common_flags = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2805 coding->mode = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2806 coding->heading_ascii = -1; |
| 17052 | 2807 coding->post_read_conversion = coding->pre_write_conversion = Qnil; |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
2808 coding_spec = Fget (coding_system, Qcoding_system); |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
2809 if (!VECTORP (coding_spec) |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
2810 || XVECTOR (coding_spec)->size != 5 |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
2811 || !CONSP (XVECTOR (coding_spec)->contents[3])) |
| 17052 | 2812 goto label_invalid_coding_system; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2813 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2814 eol_type = inhibit_eol_conversion ? Qnil : Fget (coding_system, Qeol_type); |
| 17052 | 2815 if (VECTORP (eol_type)) |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2816 { |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2817 coding->eol_type = CODING_EOL_UNDECIDED; |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2818 coding->common_flags = CODING_REQUIRE_DETECTION_MASK; |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2819 } |
| 17052 | 2820 else if (XFASTINT (eol_type) == 1) |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2821 { |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2822 coding->eol_type = CODING_EOL_CRLF; |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2823 coding->common_flags |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2824 = CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK; |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2825 } |
| 17052 | 2826 else if (XFASTINT (eol_type) == 2) |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2827 { |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2828 coding->eol_type = CODING_EOL_CR; |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2829 coding->common_flags |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2830 = CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK; |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2831 } |
| 17052 | 2832 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2833 coding->eol_type = CODING_EOL_LF; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2834 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2835 coding_type = XVECTOR (coding_spec)->contents[0]; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2836 /* Try short cut. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2837 if (SYMBOLP (coding_type)) |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2838 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2839 if (EQ (coding_type, Qt)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2840 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2841 coding->type = coding_type_undecided; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2842 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2843 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2844 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2845 coding->type = coding_type_no_conversion; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2846 return 0; |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2847 } |
| 17052 | 2848 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2849 /* Initialize remaining fields. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2850 coding->composing = 0; |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2851 coding->translation_table_for_decode = Qnil; |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2852 coding->translation_table_for_encode = Qnil; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2853 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2854 /* Get values of coding system properties: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2855 `post-read-conversion', `pre-write-conversion', |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2856 `translation-table-for-decode', `translation-table-for-encode'. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2857 plist = XVECTOR (coding_spec)->contents[3]; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2858 coding->post_read_conversion = Fplist_get (plist, Qpost_read_conversion); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2859 coding->pre_write_conversion = Fplist_get (plist, Qpre_write_conversion); |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2860 val = Fplist_get (plist, Qtranslation_table_for_decode); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2861 if (SYMBOLP (val)) |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2862 val = Fget (val, Qtranslation_table_for_decode); |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2863 coding->translation_table_for_decode = CHAR_TABLE_P (val) ? val : Qnil; |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2864 val = Fplist_get (plist, Qtranslation_table_for_encode); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2865 if (SYMBOLP (val)) |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2866 val = Fget (val, Qtranslation_table_for_encode); |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
2867 coding->translation_table_for_encode = CHAR_TABLE_P (val) ? val : Qnil; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2868 val = Fplist_get (plist, Qcoding_category); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2869 if (!NILP (val)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2870 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2871 val = Fget (val, Qcoding_category_index); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2872 if (INTEGERP (val)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2873 coding->category_idx = XINT (val); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2874 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2875 goto label_invalid_coding_system; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2876 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2877 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2878 goto label_invalid_coding_system; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2879 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2880 val = Fplist_get (plist, Qsafe_charsets); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2881 if (EQ (val, Qt)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2882 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2883 for (i = 0; i <= MAX_CHARSET; i++) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2884 coding->safe_charsets[i] = 1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2885 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2886 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2887 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2888 bzero (coding->safe_charsets, MAX_CHARSET + 1); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2889 while (CONSP (val)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2890 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2891 if ((i = get_charset_id (XCONS (val)->car)) >= 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2892 coding->safe_charsets[i] = 1; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2893 val = XCONS (val)->cdr; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2894 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2895 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2896 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2897 switch (XFASTINT (coding_type)) |
| 17052 | 2898 { |
| 2899 case 0: | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
2900 coding->type = coding_type_emacs_mule; |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2901 if (!NILP (coding->post_read_conversion)) |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2902 coding->common_flags |= CODING_REQUIRE_DECODING_MASK; |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2903 if (!NILP (coding->pre_write_conversion)) |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2904 coding->common_flags |= CODING_REQUIRE_ENCODING_MASK; |
| 17052 | 2905 break; |
| 2906 | |
| 2907 case 1: | |
| 2908 coding->type = coding_type_sjis; | |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2909 coding->common_flags |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2910 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK; |
| 17052 | 2911 break; |
| 2912 | |
| 2913 case 2: | |
| 2914 coding->type = coding_type_iso2022; | |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2915 coding->common_flags |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
2916 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK; |
| 17052 | 2917 { |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2918 Lisp_Object val, temp; |
| 17052 | 2919 Lisp_Object *flags; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2920 int i, charset, reg_bits = 0; |
| 17052 | 2921 |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
2922 val = XVECTOR (coding_spec)->contents[4]; |
|
19747
bed06df9cbc5
(setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents:
19743
diff
changeset
|
2923 |
| 17052 | 2924 if (!VECTORP (val) || XVECTOR (val)->size != 32) |
| 2925 goto label_invalid_coding_system; | |
| 2926 | |
| 2927 flags = XVECTOR (val)->contents; | |
| 2928 coding->flags | |
| 2929 = ((NILP (flags[4]) ? 0 : CODING_FLAG_ISO_SHORT_FORM) | |
| 2930 | (NILP (flags[5]) ? 0 : CODING_FLAG_ISO_RESET_AT_EOL) | |
| 2931 | (NILP (flags[6]) ? 0 : CODING_FLAG_ISO_RESET_AT_CNTL) | |
| 2932 | (NILP (flags[7]) ? 0 : CODING_FLAG_ISO_SEVEN_BITS) | |
| 2933 | (NILP (flags[8]) ? 0 : CODING_FLAG_ISO_LOCKING_SHIFT) | |
| 2934 | (NILP (flags[9]) ? 0 : CODING_FLAG_ISO_SINGLE_SHIFT) | |
| 2935 | (NILP (flags[10]) ? 0 : CODING_FLAG_ISO_USE_ROMAN) | |
| 2936 | (NILP (flags[11]) ? 0 : CODING_FLAG_ISO_USE_OLDJIS) | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2937 | (NILP (flags[12]) ? 0 : CODING_FLAG_ISO_NO_DIRECTION) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2938 | (NILP (flags[13]) ? 0 : CODING_FLAG_ISO_INIT_AT_BOL) |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
2939 | (NILP (flags[14]) ? 0 : CODING_FLAG_ISO_DESIGNATE_AT_BOL) |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
2940 | (NILP (flags[15]) ? 0 : CODING_FLAG_ISO_SAFE) |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
2941 | (NILP (flags[16]) ? 0 : CODING_FLAG_ISO_LATIN_EXTRA) |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
2942 ); |
| 17052 | 2943 |
| 2944 /* Invoke graphic register 0 to plane 0. */ | |
| 2945 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0; | |
| 2946 /* Invoke graphic register 1 to plane 1 if we can use full 8-bit. */ | |
| 2947 CODING_SPEC_ISO_INVOCATION (coding, 1) | |
| 2948 = (coding->flags & CODING_FLAG_ISO_SEVEN_BITS ? -1 : 1); | |
| 2949 /* Not single shifting at first. */ | |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
2950 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2951 /* Beginning of buffer should also be regarded as bol. */ |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
2952 CODING_SPEC_ISO_BOL (coding) = 1; |
| 17052 | 2953 |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2954 for (charset = 0; charset <= MAX_CHARSET; charset++) |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2955 CODING_SPEC_ISO_REVISION_NUMBER (coding, charset) = 255; |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2956 val = Vcharset_revision_alist; |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2957 while (CONSP (val)) |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2958 { |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2959 charset = get_charset_id (Fcar_safe (XCONS (val)->car)); |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2960 if (charset >= 0 |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2961 && (temp = Fcdr_safe (XCONS (val)->car), INTEGERP (temp)) |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2962 && (i = XINT (temp), (i >= 0 && (i + '@') < 128))) |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2963 CODING_SPEC_ISO_REVISION_NUMBER (coding, charset) = i; |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2964 val = XCONS (val)->cdr; |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2965 } |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
2966 |
| 17052 | 2967 /* Checks FLAGS[REG] (REG = 0, 1, 2 3) and decide designations. |
| 2968 FLAGS[REG] can be one of below: | |
| 2969 integer CHARSET: CHARSET occupies register I, | |
| 2970 t: designate nothing to REG initially, but can be used | |
| 2971 by any charsets, | |
| 2972 list of integer, nil, or t: designate the first | |
| 2973 element (if integer) to REG initially, the remaining | |
| 2974 elements (if integer) is designated to REG on request, | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2975 if an element is t, REG can be used by any charsets, |
| 17052 | 2976 nil: REG is never used. */ |
|
17190
6637001cdb4b
Adjusted for the change of MAX_CHARSET.
Kenichi Handa <handa@m17n.org>
parents:
17137
diff
changeset
|
2977 for (charset = 0; charset <= MAX_CHARSET; charset++) |
|
18002
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
2978 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) |
|
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
2979 = CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION; |
| 17052 | 2980 for (i = 0; i < 4; i++) |
| 2981 { | |
| 2982 if (INTEGERP (flags[i]) | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2983 && (charset = XINT (flags[i]), CHARSET_VALID_P (charset)) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2984 || (charset = get_charset_id (flags[i])) >= 0) |
| 17052 | 2985 { |
| 2986 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = charset; | |
| 2987 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) = i; | |
| 2988 } | |
| 2989 else if (EQ (flags[i], Qt)) | |
| 2990 { | |
| 2991 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = -1; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2992 reg_bits |= 1 << i; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
2993 coding->flags |= CODING_FLAG_ISO_DESIGNATION; |
| 17052 | 2994 } |
| 2995 else if (CONSP (flags[i])) | |
| 2996 { | |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
2997 Lisp_Object tail; |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
2998 tail = flags[i]; |
| 17052 | 2999 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3000 coding->flags |= CODING_FLAG_ISO_DESIGNATION; |
| 17052 | 3001 if (INTEGERP (XCONS (tail)->car) |
| 3002 && (charset = XINT (XCONS (tail)->car), | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
3003 CHARSET_VALID_P (charset)) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
3004 || (charset = get_charset_id (XCONS (tail)->car)) >= 0) |
| 17052 | 3005 { |
| 3006 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = charset; | |
| 3007 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) =i; | |
| 3008 } | |
| 3009 else | |
| 3010 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = -1; | |
| 3011 tail = XCONS (tail)->cdr; | |
| 3012 while (CONSP (tail)) | |
| 3013 { | |
| 3014 if (INTEGERP (XCONS (tail)->car) | |
| 3015 && (charset = XINT (XCONS (tail)->car), | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
3016 CHARSET_VALID_P (charset)) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
3017 || (charset = get_charset_id (XCONS (tail)->car)) >= 0) |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
3018 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
3019 = i; |
| 17052 | 3020 else if (EQ (XCONS (tail)->car, Qt)) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3021 reg_bits |= 1 << i; |
| 17052 | 3022 tail = XCONS (tail)->cdr; |
| 3023 } | |
| 3024 } | |
| 3025 else | |
| 3026 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = -1; | |
| 3027 | |
| 3028 CODING_SPEC_ISO_DESIGNATION (coding, i) | |
| 3029 = CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i); | |
| 3030 } | |
| 3031 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3032 if (reg_bits && ! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT)) |
| 17052 | 3033 { |
| 3034 /* REG 1 can be used only by locking shift in 7-bit env. */ | |
| 3035 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3036 reg_bits &= ~2; |
| 17052 | 3037 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)) |
| 3038 /* Without any shifting, only REG 0 and 1 can be used. */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3039 reg_bits &= 3; |
| 17052 | 3040 } |
| 3041 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3042 if (reg_bits) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3043 for (charset = 0; charset <= MAX_CHARSET; charset++) |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
3044 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3045 if (CHARSET_VALID_P (charset)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3046 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3047 /* There exist some default graphic registers to be |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3048 used CHARSET. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3049 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3050 /* We had better avoid designating a charset of |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3051 CHARS96 to REG 0 as far as possible. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3052 if (CHARSET_CHARS (charset) == 96) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3053 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3054 = (reg_bits & 2 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3055 ? 1 : (reg_bits & 4 ? 2 : (reg_bits & 8 ? 3 : 0))); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3056 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3057 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3058 = (reg_bits & 1 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3059 ? 0 : (reg_bits & 2 ? 1 : (reg_bits & 4 ? 2 : 3))); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3060 } |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
3061 } |
| 17052 | 3062 } |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
3063 coding->common_flags |= CODING_REQUIRE_FLUSHING_MASK; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3064 coding->spec.iso2022.last_invalid_designation_register = -1; |
| 17052 | 3065 break; |
| 3066 | |
| 3067 case 3: | |
| 3068 coding->type = coding_type_big5; | |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
3069 coding->common_flags |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
3070 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK; |
| 17052 | 3071 coding->flags |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
3072 = (NILP (XVECTOR (coding_spec)->contents[4]) |
| 17052 | 3073 ? CODING_FLAG_BIG5_HKU |
| 3074 : CODING_FLAG_BIG5_ETEN); | |
| 3075 break; | |
| 3076 | |
| 3077 case 4: | |
| 3078 coding->type = coding_type_ccl; | |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
3079 coding->common_flags |
|
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
3080 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK; |
| 17052 | 3081 { |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3082 Lisp_Object val; |
|
21664
4097e558fa19
(setup_coding_system): For a type 4 coding system,
Kenichi Handa <handa@m17n.org>
parents:
21576
diff
changeset
|
3083 Lisp_Object decoder, encoder; |
|
4097e558fa19
(setup_coding_system): For a type 4 coding system,
Kenichi Handa <handa@m17n.org>
parents:
21576
diff
changeset
|
3084 |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3085 val = XVECTOR (coding_spec)->contents[4]; |
| 17052 | 3086 if (CONSP (val) |
|
21664
4097e558fa19
(setup_coding_system): For a type 4 coding system,
Kenichi Handa <handa@m17n.org>
parents:
21576
diff
changeset
|
3087 && SYMBOLP (XCONS (val)->car) |
|
4097e558fa19
(setup_coding_system): For a type 4 coding system,
Kenichi Handa <handa@m17n.org>
parents:
21576
diff
changeset
|
3088 && !NILP (decoder = Fget (XCONS (val)->car, Qccl_program_idx)) |
|
21839
376ce06ab12d
(setup_coding_system): Properly check for nil.
Andreas Schwab <schwab@suse.de>
parents:
21744
diff
changeset
|
3089 && !NILP (decoder = Fcdr (Faref (Vccl_program_table, decoder))) |
|
21664
4097e558fa19
(setup_coding_system): For a type 4 coding system,
Kenichi Handa <handa@m17n.org>
parents:
21576
diff
changeset
|
3090 && SYMBOLP (XCONS (val)->cdr) |
|
4097e558fa19
(setup_coding_system): For a type 4 coding system,
Kenichi Handa <handa@m17n.org>
parents:
21576
diff
changeset
|
3091 && !NILP (encoder = Fget (XCONS (val)->cdr, Qccl_program_idx)) |
|
21839
376ce06ab12d
(setup_coding_system): Properly check for nil.
Andreas Schwab <schwab@suse.de>
parents:
21744
diff
changeset
|
3092 && !NILP (encoder = Fcdr (Faref (Vccl_program_table, encoder)))) |
| 17052 | 3093 { |
|
21664
4097e558fa19
(setup_coding_system): For a type 4 coding system,
Kenichi Handa <handa@m17n.org>
parents:
21576
diff
changeset
|
3094 setup_ccl_program (&(coding->spec.ccl.decoder), decoder); |
|
4097e558fa19
(setup_coding_system): For a type 4 coding system,
Kenichi Handa <handa@m17n.org>
parents:
21576
diff
changeset
|
3095 setup_ccl_program (&(coding->spec.ccl.encoder), encoder); |
| 17052 | 3096 } |
| 3097 else | |
| 3098 goto label_invalid_coding_system; | |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3099 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3100 bzero (coding->spec.ccl.valid_codes, 256); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3101 val = Fplist_get (plist, Qvalid_codes); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3102 if (CONSP (val)) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3103 { |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3104 Lisp_Object this; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3105 |
|
23067
ac788ee31080
(ccl_coding_driver): Setup ccl->last_block properly.
Kenichi Handa <handa@m17n.org>
parents:
23027
diff
changeset
|
3106 for (; CONSP (val); val = XCONS (val)->cdr) |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3107 { |
|
23067
ac788ee31080
(ccl_coding_driver): Setup ccl->last_block properly.
Kenichi Handa <handa@m17n.org>
parents:
23027
diff
changeset
|
3108 this = XCONS (val)->car; |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3109 if (INTEGERP (this) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3110 && XINT (this) >= 0 && XINT (this) < 256) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3111 coding->spec.ccl.valid_codes[XINT (this)] = 1; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3112 else if (CONSP (this) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3113 && INTEGERP (XCONS (this)->car) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3114 && INTEGERP (XCONS (this)->cdr)) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3115 { |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3116 int start = XINT (XCONS (this)->car); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3117 int end = XINT (XCONS (this)->cdr); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3118 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3119 if (start >= 0 && start <= end && end < 256) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3120 while (start < end) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3121 coding->spec.ccl.valid_codes[start++] = 1; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3122 } |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3123 } |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3124 } |
| 17052 | 3125 } |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
3126 coding->common_flags |= CODING_REQUIRE_FLUSHING_MASK; |
| 17052 | 3127 break; |
| 3128 | |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3129 case 5: |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3130 coding->type = coding_type_raw_text; |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3131 break; |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3132 |
| 17052 | 3133 default: |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3134 goto label_invalid_coding_system; |
| 17052 | 3135 } |
| 3136 return 0; | |
| 3137 | |
| 3138 label_invalid_coding_system: | |
| 3139 coding->type = coding_type_no_conversion; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3140 coding->category_idx = CODING_CATEGORY_IDX_BINARY; |
|
20227
71008f909642
(setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents:
20150
diff
changeset
|
3141 coding->common_flags = 0; |
|
17485
abfa77a2693b
(setup_coding_system): Setup coding->eol_type as LF
Kenichi Handa <handa@m17n.org>
parents:
17368
diff
changeset
|
3142 coding->eol_type = CODING_EOL_LF; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3143 coding->pre_write_conversion = coding->post_read_conversion = Qnil; |
| 17052 | 3144 return -1; |
| 3145 } | |
| 3146 | |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3147 /* Setup raw-text or one of its subsidiaries in the structure |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3148 coding_system CODING according to the already setup value eol_type |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3149 in CODING. CODING should be setup for some coding system in |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3150 advance. */ |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3151 |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3152 void |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3153 setup_raw_text_coding_system (coding) |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3154 struct coding_system *coding; |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3155 { |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3156 if (coding->type != coding_type_raw_text) |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3157 { |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3158 coding->symbol = Qraw_text; |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3159 coding->type = coding_type_raw_text; |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3160 if (coding->eol_type != CODING_EOL_UNDECIDED) |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3161 { |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3162 Lisp_Object subsidiaries; |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3163 subsidiaries = Fget (Qraw_text, Qeol_type); |
|
22616
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3164 |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3165 if (VECTORP (subsidiaries) |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3166 && XVECTOR (subsidiaries)->size == 3) |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3167 coding->symbol |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3168 = XVECTOR (subsidiaries)->contents[coding->eol_type]; |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3169 } |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3170 } |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3171 return; |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3172 } |
|
c493ce6a31e4
(setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents:
22529
diff
changeset
|
3173 |
| 17052 | 3174 /* Emacs has a mechanism to automatically detect a coding system if it |
| 3175 is one of Emacs' internal format, ISO2022, SJIS, and BIG5. But, | |
| 3176 it's impossible to distinguish some coding systems accurately | |
| 3177 because they use the same range of codes. So, at first, coding | |
| 3178 systems are categorized into 7, those are: | |
| 3179 | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
3180 o coding-category-emacs-mule |
| 17052 | 3181 |
| 3182 The category for a coding system which has the same code range | |
| 3183 as Emacs' internal format. Assigned the coding-system (Lisp | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
3184 symbol) `emacs-mule' by default. |
| 17052 | 3185 |
| 3186 o coding-category-sjis | |
| 3187 | |
| 3188 The category for a coding system which has the same code range | |
| 3189 as SJIS. Assigned the coding-system (Lisp | |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3190 symbol) `japanese-shift-jis' by default. |
| 17052 | 3191 |
| 3192 o coding-category-iso-7 | |
| 3193 | |
| 3194 The category for a coding system which has the same code range | |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3195 as ISO2022 of 7-bit environment. This doesn't use any locking |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3196 shift and single shift functions. This can encode/decode all |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3197 charsets. Assigned the coding-system (Lisp symbol) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3198 `iso-2022-7bit' by default. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3199 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3200 o coding-category-iso-7-tight |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3201 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3202 Same as coding-category-iso-7 except that this can |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3203 encode/decode only the specified charsets. |
| 17052 | 3204 |
| 3205 o coding-category-iso-8-1 | |
| 3206 | |
| 3207 The category for a coding system which has the same code range | |
| 3208 as ISO2022 of 8-bit environment and graphic plane 1 used only | |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3209 for DIMENSION1 charset. This doesn't use any locking shift |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3210 and single shift functions. Assigned the coding-system (Lisp |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3211 symbol) `iso-latin-1' by default. |
| 17052 | 3212 |
| 3213 o coding-category-iso-8-2 | |
| 3214 | |
| 3215 The category for a coding system which has the same code range | |
| 3216 as ISO2022 of 8-bit environment and graphic plane 1 used only | |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3217 for DIMENSION2 charset. This doesn't use any locking shift |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3218 and single shift functions. Assigned the coding-system (Lisp |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3219 symbol) `japanese-iso-8bit' by default. |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3220 |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3221 o coding-category-iso-7-else |
| 17052 | 3222 |
| 3223 The category for a coding system which has the same code range | |
|
18787
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3224 as ISO2022 of 7-bit environemnt but uses locking shift or |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3225 single shift functions. Assigned the coding-system (Lisp |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3226 symbol) `iso-2022-7bit-lock' by default. |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3227 |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3228 o coding-category-iso-8-else |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3229 |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3230 The category for a coding system which has the same code range |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3231 as ISO2022 of 8-bit environemnt but uses locking shift or |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3232 single shift functions. Assigned the coding-system (Lisp |
|
954e6be0a757
(detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents:
18766
diff
changeset
|
3233 symbol) `iso-2022-8bit-ss2' by default. |
| 17052 | 3234 |
| 3235 o coding-category-big5 | |
| 3236 | |
| 3237 The category for a coding system which has the same code range | |
| 3238 as BIG5. Assigned the coding-system (Lisp symbol) | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
3239 `cn-big5' by default. |
| 17052 | 3240 |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3241 o coding-category-ccl |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3242 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3243 The category for a coding system of which encoder/decoder is |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3244 written in CCL programs. The default value is nil, i.e., no |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3245 coding system is assigned. |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3246 |
| 17052 | 3247 o coding-category-binary |
| 3248 | |
| 3249 The category for a coding system not categorized in any of the | |
| 3250 above. Assigned the coding-system (Lisp symbol) | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
3251 `no-conversion' by default. |
| 17052 | 3252 |
| 3253 Each of them is a Lisp symbol and the value is an actual | |
| 3254 `coding-system's (this is also a Lisp symbol) assigned by a user. | |
| 3255 What Emacs does actually is to detect a category of coding system. | |
| 3256 Then, it uses a `coding-system' assigned to it. If Emacs can't | |
| 3257 decide only one possible category, it selects a category of the | |
| 3258 highest priority. Priorities of categories are also specified by a | |
| 3259 user in a Lisp variable `coding-category-list'. | |
| 3260 | |
| 3261 */ | |
| 3262 | |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3263 static |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3264 int ascii_skip_code[256]; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3265 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3266 /* Detect how a text of length SRC_BYTES pointed by SOURCE is encoded. |
| 17052 | 3267 If it detects possible coding systems, return an integer in which |
| 3268 appropriate flag bits are set. Flag bits are defined by macros | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3269 CODING_CATEGORY_MASK_XXX in `coding.h'. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3270 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3271 How many ASCII characters are at the head is returned as *SKIP. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3272 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3273 static int |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3274 detect_coding_mask (source, src_bytes, priorities, skip) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3275 unsigned char *source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3276 int src_bytes, *priorities, *skip; |
| 17052 | 3277 { |
| 3278 register unsigned char c; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3279 unsigned char *src = source, *src_end = source + src_bytes; |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3280 unsigned int mask; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3281 int i; |
| 17052 | 3282 |
| 3283 /* At first, skip all ASCII characters and control characters except | |
| 3284 for three ISO2022 specific control characters. */ | |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3285 ascii_skip_code[ISO_CODE_SO] = 0; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3286 ascii_skip_code[ISO_CODE_SI] = 0; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3287 ascii_skip_code[ISO_CODE_ESC] = 0; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3288 |
|
17320
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
3289 label_loop_detect_coding: |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3290 while (src < src_end && ascii_skip_code[*src]) src++; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3291 *skip = src - source; |
| 17052 | 3292 |
| 3293 if (src >= src_end) | |
| 3294 /* We found nothing other than ASCII. There's nothing to do. */ | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3295 return 0; |
| 17052 | 3296 |
|
22329
4786b00d2973
(detect_coding_mask): Initilize local variable C.
Kenichi Handa <handa@m17n.org>
parents:
22254
diff
changeset
|
3297 c = *src; |
| 17052 | 3298 /* The text seems to be encoded in some multilingual coding system. |
| 3299 Now, try to find in which coding system the text is encoded. */ | |
| 3300 if (c < 0x80) | |
|
17320
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
3301 { |
|
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
3302 /* i.e. (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO) */ |
|
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
3303 /* C is an ISO2022 specific control code of C0. */ |
|
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
3304 mask = detect_coding_iso2022 (src, src_end); |
|
19743
b228f82192d5
(detect_coding_mask): Re-work previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19688
diff
changeset
|
3305 if (mask == 0) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3306 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3307 /* No valid ISO2022 code follows C. Try again. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3308 src++; |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3309 if (c == ISO_CODE_ESC) |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3310 ascii_skip_code[ISO_CODE_ESC] = 1; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3311 else |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3312 ascii_skip_code[ISO_CODE_SO] = ascii_skip_code[ISO_CODE_SI] = 1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3313 goto label_loop_detect_coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3314 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3315 if (priorities) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3316 goto label_return_highest_only; |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
3317 } |
| 17052 | 3318 else |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3319 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3320 int try; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3321 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3322 if (c < 0xA0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3323 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3324 /* C is the first byte of SJIS character code, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3325 or a leading-code of Emacs' internal format (emacs-mule). */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3326 try = CODING_CATEGORY_MASK_SJIS | CODING_CATEGORY_MASK_EMACS_MULE; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3327 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3328 /* Or, if C is a special latin extra code, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3329 or is an ISO2022 specific control code of C1 (SS2 or SS3), |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3330 or is an ISO2022 control-sequence-introducer (CSI), |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3331 we should also consider the possibility of ISO2022 codings. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3332 if ((VECTORP (Vlatin_extra_code_table) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3333 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c])) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3334 || (c == ISO_CODE_SS2 || c == ISO_CODE_SS3) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3335 || (c == ISO_CODE_CSI |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3336 && (src < src_end |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3337 && (*src == ']' |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3338 || ((*src == '0' || *src == '1' || *src == '2') |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3339 && src + 1 < src_end |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3340 && src[1] == ']'))))) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3341 try |= (CODING_CATEGORY_MASK_ISO_8_ELSE |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3342 | CODING_CATEGORY_MASK_ISO_8BIT); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3343 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3344 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3345 /* C is a character of ISO2022 in graphic plane right, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3346 or a SJIS's 1-byte character code (i.e. JISX0201), |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3347 or the first byte of BIG5's 2-byte code. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3348 try = (CODING_CATEGORY_MASK_ISO_8_ELSE |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3349 | CODING_CATEGORY_MASK_ISO_8BIT |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3350 | CODING_CATEGORY_MASK_SJIS |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3351 | CODING_CATEGORY_MASK_BIG5); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3352 |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3353 /* Or, we may have to consider the possibility of CCL. */ |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3354 if (coding_system_table[CODING_CATEGORY_IDX_CCL] |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3355 && (coding_system_table[CODING_CATEGORY_IDX_CCL] |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3356 ->spec.ccl.valid_codes)[c]) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3357 try |= CODING_CATEGORY_MASK_CCL; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3358 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3359 mask = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3360 if (priorities) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3361 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3362 for (i = 0; i < CODING_CATEGORY_IDX_MAX; i++) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3363 { |
|
22009
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3364 if (priorities[i] & try & CODING_CATEGORY_MASK_ISO) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3365 mask = detect_coding_iso2022 (src, src_end); |
|
22009
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3366 else if (priorities[i] & try & CODING_CATEGORY_MASK_SJIS) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3367 mask = detect_coding_sjis (src, src_end); |
|
22009
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3368 else if (priorities[i] & try & CODING_CATEGORY_MASK_BIG5) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3369 mask = detect_coding_big5 (src, src_end); |
|
22009
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3370 else if (priorities[i] & try & CODING_CATEGORY_MASK_EMACS_MULE) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3371 mask = detect_coding_emacs_mule (src, src_end); |
|
23027
0dc823b2335f
(coding_category_name): Fix the order of initial
Kenichi Handa <handa@m17n.org>
parents:
22979
diff
changeset
|
3372 else if (priorities[i] & try & CODING_CATEGORY_MASK_CCL) |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3373 mask = detect_coding_ccl (src, src_end); |
|
22009
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3374 else if (priorities[i] & CODING_CATEGORY_MASK_RAW_TEXT) |
|
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3375 mask = CODING_CATEGORY_MASK_RAW_TEXT; |
|
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3376 else if (priorities[i] & CODING_CATEGORY_MASK_BINARY) |
|
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3377 mask = CODING_CATEGORY_MASK_BINARY; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3378 if (mask) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3379 goto label_return_highest_only; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3380 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3381 return CODING_CATEGORY_MASK_RAW_TEXT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3382 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3383 if (try & CODING_CATEGORY_MASK_ISO) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3384 mask |= detect_coding_iso2022 (src, src_end); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3385 if (try & CODING_CATEGORY_MASK_SJIS) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3386 mask |= detect_coding_sjis (src, src_end); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3387 if (try & CODING_CATEGORY_MASK_BIG5) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3388 mask |= detect_coding_big5 (src, src_end); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3389 if (try & CODING_CATEGORY_MASK_EMACS_MULE) |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3390 mask |= detect_coding_emacs_mule (src, src_end); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3391 if (try & CODING_CATEGORY_MASK_CCL) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
3392 mask |= detect_coding_ccl (src, src_end); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3393 } |
|
22009
8a2d45cadd66
(detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents:
21939
diff
changeset
|
3394 return (mask | CODING_CATEGORY_MASK_RAW_TEXT | CODING_CATEGORY_MASK_BINARY); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3395 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3396 label_return_highest_only: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3397 for (i = 0; i < CODING_CATEGORY_IDX_MAX; i++) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3398 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3399 if (mask & priorities[i]) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3400 return priorities[i]; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3401 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3402 return CODING_CATEGORY_MASK_RAW_TEXT; |
| 17052 | 3403 } |
| 3404 | |
| 3405 /* Detect how a text of length SRC_BYTES pointed by SRC is encoded. | |
| 3406 The information of the detected coding system is set in CODING. */ | |
| 3407 | |
| 3408 void | |
| 3409 detect_coding (coding, src, src_bytes) | |
| 3410 struct coding_system *coding; | |
| 3411 unsigned char *src; | |
| 3412 int src_bytes; | |
| 3413 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3414 unsigned int idx; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3415 int skip, mask, i; |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3416 Lisp_Object val; |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3417 |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3418 val = Vcoding_category_list; |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
3419 mask = detect_coding_mask (src, src_bytes, coding_priorities, &skip); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3420 coding->heading_ascii = skip; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3421 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3422 if (!mask) return; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3423 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3424 /* We found a single coding system of the highest priority in MASK. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3425 idx = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3426 while (mask && ! (mask & 1)) mask >>= 1, idx++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3427 if (! mask) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3428 idx = CODING_CATEGORY_IDX_RAW_TEXT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3429 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3430 val = XSYMBOL (XVECTOR (Vcoding_category_table)->contents[idx])->value; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3431 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3432 if (coding->eol_type != CODING_EOL_UNDECIDED) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3433 { |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3434 Lisp_Object tmp; |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3435 |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
3436 tmp = Fget (val, Qeol_type); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3437 if (VECTORP (tmp)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3438 val = XVECTOR (tmp)->contents[coding->eol_type]; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3439 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3440 setup_coding_system (val, coding); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3441 /* Set this again because setup_coding_system reset this member. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3442 coding->heading_ascii = skip; |
| 17052 | 3443 } |
| 3444 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3445 /* Detect how end-of-line of a text of length SRC_BYTES pointed by |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3446 SOURCE is encoded. Return one of CODING_EOL_LF, CODING_EOL_CRLF, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3447 CODING_EOL_CR, and CODING_EOL_UNDECIDED. |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3448 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3449 How many non-eol characters are at the head is returned as *SKIP. */ |
| 17052 | 3450 |
|
19173
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3451 #define MAX_EOL_CHECK_COUNT 3 |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3452 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3453 static int |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3454 detect_eol_type (source, src_bytes, skip) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3455 unsigned char *source; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3456 int src_bytes, *skip; |
| 17052 | 3457 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3458 unsigned char *src = source, *src_end = src + src_bytes; |
| 17052 | 3459 unsigned char c; |
|
19173
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3460 int total = 0; /* How many end-of-lines are found so far. */ |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3461 int eol_type = CODING_EOL_UNDECIDED; |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3462 int this_eol_type; |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3463 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3464 *skip = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3465 |
|
19173
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3466 while (src < src_end && total < MAX_EOL_CHECK_COUNT) |
| 17052 | 3467 { |
| 3468 c = *src++; | |
|
19173
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3469 if (c == '\n' || c == '\r') |
| 17052 | 3470 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3471 if (*skip == 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3472 *skip = src - 1 - source; |
|
19173
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3473 total++; |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3474 if (c == '\n') |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3475 this_eol_type = CODING_EOL_LF; |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3476 else if (src >= src_end || *src != '\n') |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3477 this_eol_type = CODING_EOL_CR; |
| 17052 | 3478 else |
|
19173
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3479 this_eol_type = CODING_EOL_CRLF, src++; |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3480 |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3481 if (eol_type == CODING_EOL_UNDECIDED) |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3482 /* This is the first end-of-line. */ |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3483 eol_type = this_eol_type; |
|
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3484 else if (eol_type != this_eol_type) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3485 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3486 /* The found type is different from what found before. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3487 eol_type = CODING_EOL_INCONSISTENT; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3488 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3489 } |
| 17052 | 3490 } |
| 3491 } | |
|
19173
04ed7c3f5cee
(detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents:
19134
diff
changeset
|
3492 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3493 if (*skip == 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3494 *skip = src_end - source; |
|
19181
917138730635
(detect_eol_type): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
19173
diff
changeset
|
3495 return eol_type; |
| 17052 | 3496 } |
| 3497 | |
| 3498 /* Detect how end-of-line of a text of length SRC_BYTES pointed by SRC | |
| 3499 is encoded. If it detects an appropriate format of end-of-line, it | |
| 3500 sets the information in *CODING. */ | |
| 3501 | |
| 3502 void | |
| 3503 detect_eol (coding, src, src_bytes) | |
| 3504 struct coding_system *coding; | |
| 3505 unsigned char *src; | |
| 3506 int src_bytes; | |
| 3507 { | |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
3508 Lisp_Object val; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3509 int skip; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3510 int eol_type = detect_eol_type (src, src_bytes, &skip); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3511 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3512 if (coding->heading_ascii > skip) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3513 coding->heading_ascii = skip; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3514 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3515 skip = coding->heading_ascii; |
| 17052 | 3516 |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
3517 if (eol_type == CODING_EOL_UNDECIDED) |
| 17052 | 3518 return; |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3519 if (eol_type == CODING_EOL_INCONSISTENT) |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3520 { |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3521 #if 0 |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3522 /* This code is suppressed until we find a better way to |
|
19613
666288d82ae1
(detect_eol): Do not select no-conversion even if EOL
Kenichi Handa <handa@m17n.org>
parents:
19612
diff
changeset
|
3523 distinguish raw text file and binary file. */ |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3524 |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3525 /* If we have already detected that the coding is raw-text, the |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3526 coding should actually be no-conversion. */ |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3527 if (coding->type == coding_type_raw_text) |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3528 { |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3529 setup_coding_system (Qno_conversion, coding); |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3530 return; |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3531 } |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3532 /* Else, let's decode only text code anyway. */ |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3533 #endif /* 0 */ |
|
19743
b228f82192d5
(detect_coding_mask): Re-work previous change.
Richard M. Stallman <rms@gnu.org>
parents:
19688
diff
changeset
|
3534 eol_type = CODING_EOL_LF; |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3535 } |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
3536 |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
3537 val = Fget (coding->symbol, Qeol_type); |
| 17052 | 3538 if (VECTORP (val) && XVECTOR (val)->size == 3) |
| 3539 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3540 setup_coding_system (XVECTOR (val)->contents[eol_type], coding); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3541 coding->heading_ascii = skip; |
| 17052 | 3542 } |
| 3543 } | |
| 3544 | |
| 3545 #define CONVERSION_BUFFER_EXTRA_ROOM 256 | |
| 3546 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3547 #define DECODING_BUFFER_MAG(coding) \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3548 (coding->type == coding_type_iso2022 \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3549 ? 3 \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3550 : ((coding->type == coding_type_sjis || coding->type == coding_type_big5) \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3551 ? 2 \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3552 : (coding->type == coding_type_raw_text \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3553 ? 1 \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3554 : (coding->type == coding_type_ccl \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3555 ? coding->spec.ccl.decoder.buf_magnification \ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3556 : 2)))) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3557 |
| 17052 | 3558 /* Return maximum size (bytes) of a buffer enough for decoding |
| 3559 SRC_BYTES of text encoded in CODING. */ | |
| 3560 | |
| 3561 int | |
| 3562 decoding_buffer_size (coding, src_bytes) | |
| 3563 struct coding_system *coding; | |
| 3564 int src_bytes; | |
| 3565 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3566 return (src_bytes * DECODING_BUFFER_MAG (coding) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3567 + CONVERSION_BUFFER_EXTRA_ROOM); |
| 17052 | 3568 } |
| 3569 | |
| 3570 /* Return maximum size (bytes) of a buffer enough for encoding | |
| 3571 SRC_BYTES of text to CODING. */ | |
| 3572 | |
| 3573 int | |
| 3574 encoding_buffer_size (coding, src_bytes) | |
| 3575 struct coding_system *coding; | |
| 3576 int src_bytes; | |
| 3577 { | |
| 3578 int magnification; | |
| 3579 | |
| 3580 if (coding->type == coding_type_ccl) | |
| 3581 magnification = coding->spec.ccl.encoder.buf_magnification; | |
| 3582 else | |
| 3583 magnification = 3; | |
| 3584 | |
| 3585 return (src_bytes * magnification + CONVERSION_BUFFER_EXTRA_ROOM); | |
| 3586 } | |
| 3587 | |
| 3588 #ifndef MINIMUM_CONVERSION_BUFFER_SIZE | |
| 3589 #define MINIMUM_CONVERSION_BUFFER_SIZE 1024 | |
| 3590 #endif | |
| 3591 | |
| 3592 char *conversion_buffer; | |
| 3593 int conversion_buffer_size; | |
| 3594 | |
| 3595 /* Return a pointer to a SIZE bytes of buffer to be used for encoding | |
| 3596 or decoding. Sufficient memory is allocated automatically. If we | |
| 3597 run out of memory, return NULL. */ | |
| 3598 | |
| 3599 char * | |
| 3600 get_conversion_buffer (size) | |
| 3601 int size; | |
| 3602 { | |
| 3603 if (size > conversion_buffer_size) | |
| 3604 { | |
| 3605 char *buf; | |
| 3606 int real_size = conversion_buffer_size * 2; | |
| 3607 | |
| 3608 while (real_size < size) real_size *= 2; | |
| 3609 buf = (char *) xmalloc (real_size); | |
| 3610 xfree (conversion_buffer); | |
| 3611 conversion_buffer = buf; | |
| 3612 conversion_buffer_size = real_size; | |
| 3613 } | |
| 3614 return conversion_buffer; | |
| 3615 } | |
| 3616 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3617 int |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3618 ccl_coding_driver (coding, source, destination, src_bytes, dst_bytes, encodep) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3619 struct coding_system *coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3620 unsigned char *source, *destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3621 int src_bytes, dst_bytes, encodep; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3622 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3623 struct ccl_program *ccl |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3624 = encodep ? &coding->spec.ccl.encoder : &coding->spec.ccl.decoder; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3625 int result; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3626 |
|
23116
6736da064f4a
(detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents:
23089
diff
changeset
|
3627 ccl->last_block = coding->mode & CODING_MODE_LAST_BLOCK; |
|
23067
ac788ee31080
(ccl_coding_driver): Setup ccl->last_block properly.
Kenichi Handa <handa@m17n.org>
parents:
23027
diff
changeset
|
3628 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3629 coding->produced = ccl_driver (ccl, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3630 src_bytes, dst_bytes, &(coding->consumed)); |
|
23201
392b44751a22
(ccl_coding_driver): Always calculate correct mulibyte
Kenichi Handa <handa@m17n.org>
parents:
23153
diff
changeset
|
3631 coding->produced_char |
|
392b44751a22
(ccl_coding_driver): Always calculate correct mulibyte
Kenichi Handa <handa@m17n.org>
parents:
23153
diff
changeset
|
3632 = multibyte_chars_in_text (destination, coding->produced); |
|
392b44751a22
(ccl_coding_driver): Always calculate correct mulibyte
Kenichi Handa <handa@m17n.org>
parents:
23153
diff
changeset
|
3633 coding->consumed_char |
|
392b44751a22
(ccl_coding_driver): Always calculate correct mulibyte
Kenichi Handa <handa@m17n.org>
parents:
23153
diff
changeset
|
3634 = multibyte_chars_in_text (source, coding->consumed); |
|
392b44751a22
(ccl_coding_driver): Always calculate correct mulibyte
Kenichi Handa <handa@m17n.org>
parents:
23153
diff
changeset
|
3635 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3636 switch (ccl->status) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3637 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3638 case CCL_STAT_SUSPEND_BY_SRC: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3639 result = CODING_FINISH_INSUFFICIENT_SRC; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3640 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3641 case CCL_STAT_SUSPEND_BY_DST: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3642 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3643 break; |
|
23279
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
3644 case CCL_STAT_QUIT: |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
3645 case CCL_STAT_INVALID_CMD: |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
3646 result = CODING_FINISH_INTERRUPT; |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
3647 break; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3648 default: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3649 result = CODING_FINISH_NORMAL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3650 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3651 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3652 return result; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3653 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3654 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3655 /* See "GENERAL NOTES about `decode_coding_XXX ()' functions". Before |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3656 decoding, it may detect coding system and format of end-of-line if |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3657 those are not yet decided. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3658 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3659 int |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3660 decode_coding (coding, source, destination, src_bytes, dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3661 struct coding_system *coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3662 unsigned char *source, *destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3663 int src_bytes, dst_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3664 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3665 int result; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3666 |
|
23153
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
3667 if (src_bytes <= 0 |
|
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
3668 && ! (coding->mode & CODING_MODE_LAST_BLOCK |
|
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
3669 && CODING_REQUIRE_FLUSHING (coding))) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3670 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3671 coding->produced = coding->produced_char = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3672 coding->consumed = coding->consumed_char = 0; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3673 coding->fake_multibyte = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3674 return CODING_FINISH_NORMAL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3675 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3676 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3677 if (coding->type == coding_type_undecided) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3678 detect_coding (coding, source, src_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3679 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3680 if (coding->eol_type == CODING_EOL_UNDECIDED) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3681 detect_eol (coding, source, src_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3682 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3683 switch (coding->type) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3684 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3685 case coding_type_emacs_mule: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3686 case coding_type_undecided: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3687 case coding_type_raw_text: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3688 if (coding->eol_type == CODING_EOL_LF |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3689 || coding->eol_type == CODING_EOL_UNDECIDED) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3690 goto label_no_conversion; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3691 result = decode_eol (coding, source, destination, src_bytes, dst_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3692 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3693 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3694 case coding_type_sjis: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3695 result = decode_coding_sjis_big5 (coding, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3696 src_bytes, dst_bytes, 1); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3697 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3698 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3699 case coding_type_iso2022: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3700 result = decode_coding_iso2022 (coding, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3701 src_bytes, dst_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3702 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3703 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3704 case coding_type_big5: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3705 result = decode_coding_sjis_big5 (coding, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3706 src_bytes, dst_bytes, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3707 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3708 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3709 case coding_type_ccl: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3710 result = ccl_coding_driver (coding, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3711 src_bytes, dst_bytes, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3712 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3713 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3714 default: /* i.e. case coding_type_no_conversion: */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3715 label_no_conversion: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3716 if (dst_bytes && src_bytes > dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3717 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3718 coding->produced = dst_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3719 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3720 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3721 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3722 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3723 coding->produced = src_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3724 result = CODING_FINISH_NORMAL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3725 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3726 if (dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3727 bcopy (source, destination, coding->produced); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3728 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3729 safe_bcopy (source, destination, coding->produced); |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3730 coding->fake_multibyte = 1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3731 coding->consumed |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3732 = coding->consumed_char = coding->produced_char = coding->produced; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3733 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3734 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3735 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3736 return result; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3737 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3738 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3739 /* See "GENERAL NOTES about `encode_coding_XXX ()' functions". */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3740 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3741 int |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3742 encode_coding (coding, source, destination, src_bytes, dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3743 struct coding_system *coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3744 unsigned char *source, *destination; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3745 int src_bytes, dst_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3746 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3747 int result; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3748 |
|
23153
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
3749 if (src_bytes <= 0 |
|
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
3750 && ! (coding->mode & CODING_MODE_LAST_BLOCK |
|
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
3751 && CODING_REQUIRE_FLUSHING (coding))) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3752 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3753 coding->produced = coding->produced_char = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3754 coding->consumed = coding->consumed_char = 0; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3755 coding->fake_multibyte = 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3756 return CODING_FINISH_NORMAL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3757 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3758 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3759 switch (coding->type) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3760 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3761 case coding_type_emacs_mule: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3762 case coding_type_undecided: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3763 case coding_type_raw_text: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3764 if (coding->eol_type == CODING_EOL_LF |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3765 || coding->eol_type == CODING_EOL_UNDECIDED) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3766 goto label_no_conversion; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3767 result = encode_eol (coding, source, destination, src_bytes, dst_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3768 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3769 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3770 case coding_type_sjis: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3771 result = encode_coding_sjis_big5 (coding, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3772 src_bytes, dst_bytes, 1); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3773 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3774 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3775 case coding_type_iso2022: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3776 result = encode_coding_iso2022 (coding, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3777 src_bytes, dst_bytes); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3778 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3779 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3780 case coding_type_big5: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3781 result = encode_coding_sjis_big5 (coding, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3782 src_bytes, dst_bytes, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3783 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3784 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3785 case coding_type_ccl: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3786 result = ccl_coding_driver (coding, source, destination, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3787 src_bytes, dst_bytes, 1); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3788 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3789 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3790 default: /* i.e. case coding_type_no_conversion: */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3791 label_no_conversion: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3792 if (dst_bytes && src_bytes > dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3793 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3794 coding->produced = dst_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3795 result = CODING_FINISH_INSUFFICIENT_DST; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3796 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3797 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3798 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3799 coding->produced = src_bytes; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3800 result = CODING_FINISH_NORMAL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3801 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3802 if (dst_bytes) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3803 bcopy (source, destination, coding->produced); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3804 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3805 safe_bcopy (source, destination, coding->produced); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3806 if (coding->mode & CODING_MODE_SELECTIVE_DISPLAY) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3807 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3808 unsigned char *p = destination, *pend = p + coding->produced; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3809 while (p < pend) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3810 if (*p++ == '\015') p[-1] = '\n'; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3811 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3812 coding->fake_multibyte = 1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3813 coding->consumed |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3814 = coding->consumed_char = coding->produced_char = coding->produced; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3815 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3816 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3817 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3818 return result; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3819 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3820 |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3821 /* Scan text in the region between *BEG and *END (byte positions), |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3822 skip characters which we don't have to decode by coding system |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3823 CODING at the head and tail, then set *BEG and *END to the region |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3824 of the text we actually have to convert. The caller should move |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3825 the gap out of the region in advance. |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3826 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3827 If STR is not NULL, *BEG and *END are indices into STR. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3828 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3829 static void |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3830 shrink_decoding_region (beg, end, coding, str) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3831 int *beg, *end; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3832 struct coding_system *coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3833 unsigned char *str; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3834 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3835 unsigned char *begp_orig, *begp, *endp_orig, *endp, c; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3836 int eol_conversion; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3837 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3838 if (coding->type == coding_type_ccl |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3839 || coding->type == coding_type_undecided |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3840 || !NILP (coding->post_read_conversion)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3841 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3842 /* We can't skip any data. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3843 return; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3844 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3845 else if (coding->type == coding_type_no_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3846 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3847 /* We need no conversion, but don't have to skip any data here. |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3848 Decoding routine handles them effectively anyway. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3849 return; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3850 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3851 |
|
22166
917e237b5e65
(shrink_decoding_region): No short cut by
Kenichi Handa <handa@m17n.org>
parents:
22119
diff
changeset
|
3852 eol_conversion = (coding->eol_type != CODING_EOL_LF); |
|
917e237b5e65
(shrink_decoding_region): No short cut by
Kenichi Handa <handa@m17n.org>
parents:
22119
diff
changeset
|
3853 |
|
917e237b5e65
(shrink_decoding_region): No short cut by
Kenichi Handa <handa@m17n.org>
parents:
22119
diff
changeset
|
3854 if ((! eol_conversion) && (coding->heading_ascii >= 0)) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3855 /* Detection routine has already found how much we can skip at the |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3856 head. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3857 *beg += coding->heading_ascii; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3858 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3859 if (str) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3860 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3861 begp_orig = begp = str + *beg; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3862 endp_orig = endp = str + *end; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3863 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3864 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3865 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3866 begp_orig = begp = BYTE_POS_ADDR (*beg); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3867 endp_orig = endp = begp + *end - *beg; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3868 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3869 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3870 switch (coding->type) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3871 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3872 case coding_type_emacs_mule: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3873 case coding_type_raw_text: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3874 if (eol_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3875 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3876 if (coding->heading_ascii < 0) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3877 while (begp < endp && *begp != '\r' && *begp < 0x80) begp++; |
|
21744
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3878 while (begp < endp && endp[-1] != '\r' && endp[-1] < 0x80) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3879 endp--; |
|
21744
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3880 /* Do not consider LF as ascii if preceded by CR, since that |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3881 confuses eol decoding. */ |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3882 if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n') |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3883 endp++; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3884 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3885 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3886 begp = endp; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3887 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3888 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3889 case coding_type_sjis: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3890 case coding_type_big5: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3891 /* We can skip all ASCII characters at the head. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3892 if (coding->heading_ascii < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3893 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3894 if (eol_conversion) |
|
21273
3d9e12cf2e63
(shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents:
21253
diff
changeset
|
3895 while (begp < endp && *begp < 0x80 && *begp != '\r') begp++; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3896 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3897 while (begp < endp && *begp < 0x80) begp++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3898 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3899 /* We can skip all ASCII characters at the tail except for the |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3900 second byte of SJIS or BIG5 code. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3901 if (eol_conversion) |
|
21273
3d9e12cf2e63
(shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents:
21253
diff
changeset
|
3902 while (begp < endp && endp[-1] < 0x80 && endp[-1] != '\r') endp--; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3903 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3904 while (begp < endp && endp[-1] < 0x80) endp--; |
|
21744
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3905 /* Do not consider LF as ascii if preceded by CR, since that |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3906 confuses eol decoding. */ |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3907 if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n') |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3908 endp++; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3909 if (begp < endp && endp < endp_orig && endp[-1] >= 0x80) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3910 endp++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3911 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3912 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3913 default: /* i.e. case coding_type_iso2022: */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3914 if (coding->heading_ascii < 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3915 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3916 /* We can skip all ASCII characters at the head except for a |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3917 few control codes. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3918 while (begp < endp && (c = *begp) < 0x80 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3919 && c != ISO_CODE_CR && c != ISO_CODE_SO |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3920 && c != ISO_CODE_SI && c != ISO_CODE_ESC |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3921 && (!eol_conversion || c != ISO_CODE_LF)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3922 begp++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3923 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3924 switch (coding->category_idx) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3925 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3926 case CODING_CATEGORY_IDX_ISO_8_1: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3927 case CODING_CATEGORY_IDX_ISO_8_2: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3928 /* We can skip all ASCII characters at the tail. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3929 if (eol_conversion) |
|
21273
3d9e12cf2e63
(shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents:
21253
diff
changeset
|
3930 while (begp < endp && (c = endp[-1]) < 0x80 && c != '\r') endp--; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3931 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3932 while (begp < endp && endp[-1] < 0x80) endp--; |
|
21744
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3933 /* Do not consider LF as ascii if preceded by CR, since that |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3934 confuses eol decoding. */ |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3935 if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n') |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3936 endp++; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3937 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3938 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3939 case CODING_CATEGORY_IDX_ISO_7: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3940 case CODING_CATEGORY_IDX_ISO_7_TIGHT: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3941 /* We can skip all charactes at the tail except for ESC and |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3942 the following 2-byte at the tail. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3943 if (eol_conversion) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3944 while (begp < endp |
|
23315
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
3945 && (c = endp[-1]) != ISO_CODE_ESC && c != '\r') |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3946 endp--; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3947 else |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
3948 while (begp < endp |
|
23315
86a8b8566369
(decode_eol): While decoding DOS-like eol, handle a
Kenichi Handa <handa@m17n.org>
parents:
23279
diff
changeset
|
3949 && (c = endp[-1]) != ISO_CODE_ESC) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3950 endp--; |
|
21744
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3951 /* Do not consider LF as ascii if preceded by CR, since that |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3952 confuses eol decoding. */ |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3953 if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n') |
|
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
3954 endp++; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3955 if (begp < endp && endp[-1] == ISO_CODE_ESC) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3956 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3957 if (endp + 1 < endp_orig && end[0] == '(' && end[1] == 'B') |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3958 /* This is an ASCII designation sequence. We can |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3959 surely skip the tail. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3960 endp += 2; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3961 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3962 /* Hmmm, we can't skip the tail. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3963 endp = endp_orig; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3964 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3965 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3966 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3967 *beg += begp - begp_orig; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3968 *end += endp - endp_orig; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3969 return; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3970 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3971 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3972 /* Like shrink_decoding_region but for encoding. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3973 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3974 static void |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3975 shrink_encoding_region (beg, end, coding, str) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3976 int *beg, *end; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3977 struct coding_system *coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3978 unsigned char *str; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3979 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3980 unsigned char *begp_orig, *begp, *endp_orig, *endp; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3981 int eol_conversion; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3982 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3983 if (coding->type == coding_type_ccl) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3984 /* We can't skip any data. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3985 return; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3986 else if (coding->type == coding_type_no_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3987 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3988 /* We need no conversion. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3989 *beg = *end; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3990 return; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3991 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3992 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3993 if (str) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3994 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3995 begp_orig = begp = str + *beg; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3996 endp_orig = endp = str + *end; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3997 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3998 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
3999 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4000 begp_orig = begp = BYTE_POS_ADDR (*beg); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4001 endp_orig = endp = begp + *end - *beg; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4002 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4003 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4004 eol_conversion = (coding->eol_type == CODING_EOL_CR |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4005 || coding->eol_type == CODING_EOL_CRLF); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4006 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4007 /* Here, we don't have to check coding->pre_write_conversion because |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4008 the caller is expected to have handled it already. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4009 switch (coding->type) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4010 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4011 case coding_type_undecided: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4012 case coding_type_emacs_mule: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4013 case coding_type_raw_text: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4014 if (eol_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4015 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4016 while (begp < endp && *begp != '\n') begp++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4017 while (begp < endp && endp[-1] != '\n') endp--; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4018 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4019 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4020 begp = endp; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4021 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4022 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4023 case coding_type_iso2022: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4024 if (coding->flags & CODING_FLAG_ISO_DESIGNATE_AT_BOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4025 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4026 unsigned char *bol = begp; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4027 while (begp < endp && *begp < 0x80) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4028 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4029 begp++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4030 if (begp[-1] == '\n') |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4031 bol = begp; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4032 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4033 begp = bol; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4034 goto label_skip_tail; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4035 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4036 /* fall down ... */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4037 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4038 default: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4039 /* We can skip all ASCII characters at the head and tail. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4040 if (eol_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4041 while (begp < endp && *begp < 0x80 && *begp != '\n') begp++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4042 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4043 while (begp < endp && *begp < 0x80) begp++; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4044 label_skip_tail: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4045 if (eol_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4046 while (begp < endp && endp[-1] < 0x80 && endp[-1] != '\n') endp--; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4047 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4048 while (begp < endp && *(endp - 1) < 0x80) endp--; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4049 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4050 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4051 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4052 *beg += begp - begp_orig; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4053 *end += endp - endp_orig; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4054 return; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4055 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4056 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4057 /* Decode (if ENCODEP is zero) or encode (if ENCODEP is nonzero) the |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4058 text from FROM to TO (byte positions are FROM_BYTE and TO_BYTE) by |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4059 coding system CODING, and return the status code of code conversion |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4060 (currently, this value has no meaning). |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4061 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4062 How many characters (and bytes) are converted to how many |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4063 characters (and bytes) are recorded in members of the structure |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4064 CODING. |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4065 |
|
21190
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4066 If REPLACE is nonzero, we do various things as if the original text |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4067 is deleted and a new text is inserted. See the comments in |
|
21190
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4068 replace_range (insdel.c) to know what we are doing. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4069 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4070 int |
|
21190
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4071 code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace) |
|
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4072 int from, from_byte, to, to_byte, encodep, replace; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4073 struct coding_system *coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4074 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4075 int len = to - from, len_byte = to_byte - from_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4076 int require, inserted, inserted_byte; |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4077 int head_skip, tail_skip, total_skip; |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
4078 Lisp_Object saved_coding_symbol; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4079 int multibyte = !NILP (current_buffer->enable_multibyte_characters); |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4080 int first = 1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4081 int fake_multibyte = 0; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4082 unsigned char *src, *dst; |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
4083 Lisp_Object deletion; |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
4084 |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
4085 deletion = Qnil; |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
4086 saved_coding_symbol = Qnil; |
|
21190
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4087 |
|
21576
8043d47984fd
(code_convert_region): If point in the conversion
Kenichi Handa <handa@m17n.org>
parents:
21574
diff
changeset
|
4088 if (from < PT && PT < to) |
|
8043d47984fd
(code_convert_region): If point in the conversion
Kenichi Handa <handa@m17n.org>
parents:
21574
diff
changeset
|
4089 SET_PT_BOTH (from, from_byte); |
|
8043d47984fd
(code_convert_region): If point in the conversion
Kenichi Handa <handa@m17n.org>
parents:
21574
diff
changeset
|
4090 |
|
21190
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4091 if (replace) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4092 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4093 int saved_from = from; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4094 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4095 prepare_to_modify_buffer (from, to, &from); |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4096 if (saved_from != from) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4097 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4098 to = from + len; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4099 if (multibyte) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4100 from_byte = CHAR_TO_BYTE (from), to_byte = CHAR_TO_BYTE (to); |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4101 else |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4102 from_byte = from, to_byte = to; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4103 len_byte = to_byte - from_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4104 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4105 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4106 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4107 if (! encodep && CODING_REQUIRE_DETECTION (coding)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4108 { |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4109 /* We must detect encoding of text and eol format. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4110 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4111 if (from < GPT && to > GPT) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4112 move_gap_both (from, from_byte); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4113 if (coding->type == coding_type_undecided) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4114 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4115 detect_coding (coding, BYTE_POS_ADDR (from_byte), len_byte); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4116 if (coding->type == coding_type_undecided) |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4117 /* It seems that the text contains only ASCII, but we |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4118 should not left it undecided because the deeper |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4119 decoding routine (decode_coding) tries to detect the |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4120 encodings again in vain. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4121 coding->type = coding_type_emacs_mule; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4122 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4123 if (coding->eol_type == CODING_EOL_UNDECIDED) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4124 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4125 saved_coding_symbol = coding->symbol; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4126 detect_eol (coding, BYTE_POS_ADDR (from_byte), len_byte); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4127 if (coding->eol_type == CODING_EOL_UNDECIDED) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4128 coding->eol_type = CODING_EOL_LF; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4129 /* We had better recover the original eol format if we |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4130 encounter an inconsitent eol format while decoding. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4131 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4132 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4133 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4134 |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4135 coding->consumed_char = len, coding->consumed = len_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4136 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4137 if (encodep |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4138 ? ! CODING_REQUIRE_ENCODING (coding) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4139 : ! CODING_REQUIRE_DECODING (coding)) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4140 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4141 coding->produced = len_byte; |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4142 if (multibyte |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4143 && ! replace |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4144 /* See the comment of the member heading_ascii in coding.h. */ |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4145 && coding->heading_ascii < len_byte) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4146 { |
|
21190
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4147 /* We still may have to combine byte at the head and the |
|
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4148 tail of the text in the region. */ |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4149 if (from < GPT && GPT < to) |
|
21190
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4150 move_gap_both (to, to_byte); |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4151 len = multibyte_chars_in_text (BYTE_POS_ADDR (from_byte), len_byte); |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4152 adjust_after_insert (from, from_byte, to, to_byte, len); |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4153 coding->produced_char = len; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4154 } |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4155 else |
|
21505
eeffe4ca2306
(code_convert_region): Call adjust_after_insert also
Andreas Schwab <schwab@suse.de>
parents:
21502
diff
changeset
|
4156 { |
|
eeffe4ca2306
(code_convert_region): Call adjust_after_insert also
Andreas Schwab <schwab@suse.de>
parents:
21502
diff
changeset
|
4157 if (!replace) |
|
eeffe4ca2306
(code_convert_region): Call adjust_after_insert also
Andreas Schwab <schwab@suse.de>
parents:
21502
diff
changeset
|
4158 adjust_after_insert (from, from_byte, to, to_byte, len_byte); |
|
eeffe4ca2306
(code_convert_region): Call adjust_after_insert also
Andreas Schwab <schwab@suse.de>
parents:
21502
diff
changeset
|
4159 coding->produced_char = len_byte; |
|
eeffe4ca2306
(code_convert_region): Call adjust_after_insert also
Andreas Schwab <schwab@suse.de>
parents:
21502
diff
changeset
|
4160 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4161 return 0; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4162 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4163 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4164 /* Now we convert the text. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4165 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4166 /* For encoding, we must process pre-write-conversion in advance. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4167 if (encodep |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4168 && ! NILP (coding->pre_write_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4169 && SYMBOLP (coding->pre_write_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4170 && ! NILP (Ffboundp (coding->pre_write_conversion))) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4171 { |
|
21140
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4172 /* The function in pre-write-conversion may put a new text in a |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4173 new buffer. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4174 struct buffer *prev = current_buffer, *new; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4175 |
|
21520
ca4819c36ab9
(code_convert_region): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents:
21514
diff
changeset
|
4176 call2 (coding->pre_write_conversion, |
|
ca4819c36ab9
(code_convert_region): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents:
21514
diff
changeset
|
4177 make_number (from), make_number (to)); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4178 if (current_buffer != prev) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4179 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4180 len = ZV - BEGV; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4181 new = current_buffer; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4182 set_buffer_internal_1 (prev); |
|
20999
e4dd62e5d921
Reorder args in callers of del_range_2.
Karl Heuer <kwzh@gnu.org>
parents:
20931
diff
changeset
|
4183 del_range_2 (from, from_byte, to, to_byte); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4184 insert_from_buffer (new, BEG, len, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4185 to = from + len; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4186 to_byte = multibyte ? CHAR_TO_BYTE (to) : to; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4187 len_byte = to_byte - from_byte; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4188 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4189 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4190 |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4191 if (replace) |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4192 deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4193 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4194 /* Try to skip the heading and tailing ASCIIs. */ |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4195 { |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4196 int from_byte_orig = from_byte, to_byte_orig = to_byte; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4197 |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4198 if (from < GPT && GPT < to) |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4199 move_gap_both (from, from_byte); |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4200 if (encodep) |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4201 shrink_encoding_region (&from_byte, &to_byte, coding, NULL); |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4202 else |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4203 shrink_decoding_region (&from_byte, &to_byte, coding, NULL); |
|
23153
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
4204 if (from_byte == to_byte |
|
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
4205 && ! (coding->mode & CODING_MODE_LAST_BLOCK |
|
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
4206 && CODING_REQUIRE_FLUSHING (coding))) |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4207 { |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4208 coding->produced = len_byte; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4209 coding->produced_char = multibyte ? len : len_byte; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4210 if (!replace) |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4211 /* We must record and adjust for this new text now. */ |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4212 adjust_after_insert (from, from_byte_orig, to, to_byte_orig, len); |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4213 return 0; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4214 } |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4215 |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4216 head_skip = from_byte - from_byte_orig; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4217 tail_skip = to_byte_orig - to_byte; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4218 total_skip = head_skip + tail_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4219 from += head_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4220 to -= tail_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4221 len -= total_skip; len_byte -= total_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4222 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4223 |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4224 /* For converion, we must put the gap before the text in addition to |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4225 making the gap larger for efficient decoding. The required gap |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4226 size starts from 2000 which is the magic number used in make_gap. |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4227 But, after one batch of conversion, it will be incremented if we |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4228 find that it is not enough . */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4229 require = 2000; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4230 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4231 if (GAP_SIZE < require) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4232 make_gap (require - GAP_SIZE); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4233 move_gap_both (from, from_byte); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4234 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4235 inserted = inserted_byte = 0; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4236 src = GAP_END_ADDR, dst = GPT_ADDR; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4237 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4238 GAP_SIZE += len_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4239 ZV -= len; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4240 Z -= len; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4241 ZV_BYTE -= len_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4242 Z_BYTE -= len_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4243 |
|
23258
2f8585bcea90
(code_convert_region): Update beg_unchanged and
Kenichi Handa <handa@m17n.org>
parents:
23201
diff
changeset
|
4244 if (GPT - BEG < beg_unchanged) |
|
2f8585bcea90
(code_convert_region): Update beg_unchanged and
Kenichi Handa <handa@m17n.org>
parents:
23201
diff
changeset
|
4245 beg_unchanged = GPT - BEG; |
|
2f8585bcea90
(code_convert_region): Update beg_unchanged and
Kenichi Handa <handa@m17n.org>
parents:
23201
diff
changeset
|
4246 if (Z - GPT < end_unchanged) |
|
2f8585bcea90
(code_convert_region): Update beg_unchanged and
Kenichi Handa <handa@m17n.org>
parents:
23201
diff
changeset
|
4247 end_unchanged = Z - GPT; |
|
2f8585bcea90
(code_convert_region): Update beg_unchanged and
Kenichi Handa <handa@m17n.org>
parents:
23201
diff
changeset
|
4248 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4249 for (;;) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4250 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4251 int result; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4252 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4253 /* The buffer memory is changed from: |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4254 +--------+converted-text+---------+-------original-text------+---+ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4255 |<-from->|<--inserted-->|---------|<-----------len---------->|---| |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4256 |<------------------- GAP_SIZE -------------------->| */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4257 if (encodep) |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4258 result = encode_coding (coding, src, dst, len_byte, 0); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4259 else |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4260 result = decode_coding (coding, src, dst, len_byte, 0); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4261 /* to: |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4262 +--------+-------converted-text--------+--+---original-text--+---+ |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4263 |<-from->|<--inserted-->|<--produced-->|--|<-(len-consumed)->|---| |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4264 |<------------------- GAP_SIZE -------------------->| */ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4265 if (coding->fake_multibyte) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4266 fake_multibyte = 1; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4267 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4268 if (!encodep && !multibyte) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4269 coding->produced_char = coding->produced; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4270 inserted += coding->produced_char; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4271 inserted_byte += coding->produced; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4272 len_byte -= coding->consumed; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4273 src += coding->consumed; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4274 dst += inserted_byte; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4275 |
|
23279
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4276 if (result == CODING_FINISH_NORMAL) |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4277 { |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4278 src += len_byte; |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4279 break; |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4280 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4281 if (! encodep && result == CODING_FINISH_INCONSISTENT_EOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4282 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4283 unsigned char *pend = dst, *p = pend - inserted_byte; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4284 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4285 /* Encode LFs back to the original eol format (CR or CRLF). */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4286 if (coding->eol_type == CODING_EOL_CR) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4287 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4288 while (p < pend) if (*p++ == '\n') p[-1] = '\r'; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4289 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4290 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4291 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4292 int count = 0; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4293 |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4294 while (p < pend) if (*p++ == '\n') count++; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4295 if (src - dst < count) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4296 { |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4297 /* We don't have sufficient room for putting LFs |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4298 back to CRLF. We must record converted and |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4299 not-yet-converted text back to the buffer |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4300 content, enlarge the gap, then record them out of |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4301 the buffer contents again. */ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4302 int add = len_byte + inserted_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4303 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4304 GAP_SIZE -= add; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4305 ZV += add; Z += add; ZV_BYTE += add; Z_BYTE += add; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4306 GPT += inserted_byte; GPT_BYTE += inserted_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4307 make_gap (count - GAP_SIZE); |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4308 GAP_SIZE += add; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4309 ZV -= add; Z -= add; ZV_BYTE -= add; Z_BYTE -= add; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4310 GPT -= inserted_byte; GPT_BYTE -= inserted_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4311 /* Don't forget to update SRC, DST, and PEND. */ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4312 src = GAP_END_ADDR - len_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4313 dst = GPT_ADDR + inserted_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4314 pend = dst; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4315 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4316 inserted += count; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4317 inserted_byte += count; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4318 coding->produced += count; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4319 p = dst = pend + count; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4320 while (count) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4321 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4322 *--p = *--pend; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4323 if (*p == '\n') count--, *--p = '\r'; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4324 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4325 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4326 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4327 /* Suppress eol-format conversion in the further conversion. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4328 coding->eol_type = CODING_EOL_LF; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4329 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4330 /* Restore the original symbol. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4331 coding->symbol = saved_coding_symbol; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4332 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4333 continue; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4334 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4335 if (len_byte <= 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4336 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4337 if (result == CODING_FINISH_INSUFFICIENT_SRC) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4338 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4339 /* The source text ends in invalid codes. Let's just |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4340 make them valid buffer contents, and finish conversion. */ |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4341 inserted += len_byte; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4342 inserted_byte += len_byte; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4343 while (len_byte--) |
|
21744
64c815fe1bdc
(shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents:
21664
diff
changeset
|
4344 *dst++ = *src++; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4345 fake_multibyte = 1; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4346 break; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4347 } |
|
23279
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4348 if (result == CODING_FINISH_INTERRUPT) |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4349 { |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4350 /* The conversion procedure was interrupted by a user. */ |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4351 fake_multibyte = 1; |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4352 break; |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4353 } |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4354 /* Now RESULT == CODING_FINISH_INSUFFICIENT_DST */ |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4355 if (coding->consumed < 1) |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4356 { |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4357 /* It's quite strange to require more memory without |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4358 consuming any bytes. Perhaps CCL program bug. */ |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4359 fake_multibyte = 1; |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4360 break; |
|
ca159e828a68
(ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents:
23258
diff
changeset
|
4361 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4362 if (first) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4363 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4364 /* We have just done the first batch of conversion which was |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4365 stoped because of insufficient gap. Let's reconsider the |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4366 required gap size (i.e. SRT - DST) now. |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4367 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4368 We have converted ORIG bytes (== coding->consumed) into |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4369 NEW bytes (coding->produced). To convert the remaining |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4370 LEN bytes, we may need REQUIRE bytes of gap, where: |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4371 REQUIRE + LEN_BYTE = LEN_BYTE * (NEW / ORIG) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4372 REQUIRE = LEN_BYTE * (NEW - ORIG) / ORIG |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4373 Here, we are sure that NEW >= ORIG. */ |
|
21190
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4374 float ratio = coding->produced - coding->consumed; |
|
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4375 ratio /= coding->consumed; |
|
d704dd953837
(code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents:
21140
diff
changeset
|
4376 require = len_byte * ratio; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4377 first = 0; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4378 } |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4379 if ((src - dst) < (require + 2000)) |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4380 { |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4381 /* See the comment above the previous call of make_gap. */ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4382 int add = len_byte + inserted_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4383 |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4384 GAP_SIZE -= add; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4385 ZV += add; Z += add; ZV_BYTE += add; Z_BYTE += add; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4386 GPT += inserted_byte; GPT_BYTE += inserted_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4387 make_gap (require + 2000); |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4388 GAP_SIZE += add; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4389 ZV -= add; Z -= add; ZV_BYTE -= add; Z_BYTE -= add; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4390 GPT -= inserted_byte; GPT_BYTE -= inserted_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4391 /* Don't forget to update SRC, DST. */ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4392 src = GAP_END_ADDR - len_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4393 dst = GPT_ADDR + inserted_byte; |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4394 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4395 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4396 if (src - dst > 0) *dst = 0; /* Put an anchor. */ |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4397 |
|
21140
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4398 if (multibyte |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4399 && (fake_multibyte |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4400 || !encodep && (to - from) != (to_byte - from_byte))) |
|
21140
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4401 inserted = multibyte_chars_in_text (GPT_ADDR, inserted_byte); |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4402 |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4403 /* If we have shrinked the conversion area, adjust it now. */ |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4404 if (total_skip > 0) |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4405 { |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4406 if (tail_skip > 0) |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4407 safe_bcopy (GAP_END_ADDR, GPT_ADDR + inserted_byte, tail_skip); |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4408 inserted += total_skip; inserted_byte += total_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4409 GAP_SIZE += total_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4410 GPT -= head_skip; GPT_BYTE -= head_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4411 ZV -= total_skip; ZV_BYTE -= total_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4412 Z -= total_skip; Z_BYTE -= total_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4413 from -= head_skip; from_byte -= head_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4414 to += tail_skip; to_byte += tail_skip; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4415 } |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4416 |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4417 adjust_after_replace (from, from_byte, deletion, inserted, inserted_byte); |
|
21140
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4418 |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4419 if (! encodep && ! NILP (coding->post_read_conversion)) |
|
21062
839b22ad1e42
(code_convert_region): Handle the case that codes
Kenichi Handa <handa@m17n.org>
parents:
20999
diff
changeset
|
4420 { |
|
21140
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4421 Lisp_Object val; |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4422 int orig_inserted = inserted, pos = PT; |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4423 |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4424 if (from != pos) |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4425 temp_set_point_both (current_buffer, from, from_byte); |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4426 val = call1 (coding->post_read_conversion, make_number (inserted)); |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4427 if (! NILP (val)) |
|
21062
839b22ad1e42
(code_convert_region): Handle the case that codes
Kenichi Handa <handa@m17n.org>
parents:
20999
diff
changeset
|
4428 { |
|
21140
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4429 CHECK_NUMBER (val, 0); |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4430 inserted = XFASTINT (val); |
|
21062
839b22ad1e42
(code_convert_region): Handle the case that codes
Kenichi Handa <handa@m17n.org>
parents:
20999
diff
changeset
|
4431 } |
|
21140
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4432 if (pos >= from + orig_inserted) |
|
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4433 temp_set_point (current_buffer, pos + (inserted - orig_inserted)); |
|
21062
839b22ad1e42
(code_convert_region): Handle the case that codes
Kenichi Handa <handa@m17n.org>
parents:
20999
diff
changeset
|
4434 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4435 |
|
21140
179c73d91f70
(code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
21132
diff
changeset
|
4436 signal_after_change (from, to - from, inserted); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4437 |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4438 { |
|
21321
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4439 coding->consumed = to_byte - from_byte; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4440 coding->consumed_char = to - from; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4441 coding->produced = inserted_byte; |
|
27b08da98abe
(code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents:
21308
diff
changeset
|
4442 coding->produced_char = inserted; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4443 } |
|
21132
75c6408013e5
(code_convert_region): Fix previous change. Adjusted
Richard M. Stallman <rms@gnu.org>
parents:
21067
diff
changeset
|
4444 |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4445 return 0; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4446 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4447 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4448 Lisp_Object |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4449 code_convert_string (str, coding, encodep, nocopy) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4450 Lisp_Object str; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4451 struct coding_system *coding; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4452 int encodep, nocopy; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4453 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4454 int len; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4455 char *buf; |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21190
diff
changeset
|
4456 int from = 0, to = XSTRING (str)->size; |
|
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21190
diff
changeset
|
4457 int to_byte = STRING_BYTES (XSTRING (str)); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4458 struct gcpro gcpro1; |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
4459 Lisp_Object saved_coding_symbol; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4460 int result; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4461 |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
4462 saved_coding_symbol = Qnil; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4463 if (encodep && !NILP (coding->pre_write_conversion) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4464 || !encodep && !NILP (coding->post_read_conversion)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4465 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4466 /* Since we have to call Lisp functions which assume target text |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4467 is in a buffer, after setting a temporary buffer, call |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4468 code_convert_region. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4469 int count = specpdl_ptr - specpdl; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4470 struct buffer *prev = current_buffer; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4471 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4472 record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4473 temp_output_buffer_setup (" *code-converting-work*"); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4474 set_buffer_internal (XBUFFER (Vstandard_output)); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4475 if (encodep) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4476 insert_from_string (str, 0, 0, to, to_byte, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4477 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4478 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4479 /* We must insert the contents of STR as is without |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4480 unibyte<->multibyte conversion. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4481 current_buffer->enable_multibyte_characters = Qnil; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4482 insert_from_string (str, 0, 0, to_byte, to_byte, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4483 current_buffer->enable_multibyte_characters = Qt; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4484 } |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4485 code_convert_region (BEGV, BEGV_BYTE, ZV, ZV_BYTE, coding, encodep, 1); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4486 if (encodep) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4487 /* We must return the buffer contents as unibyte string. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4488 current_buffer->enable_multibyte_characters = Qnil; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4489 str = make_buffer_string (BEGV, ZV, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4490 set_buffer_internal (prev); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4491 return unbind_to (count, str); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4492 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4493 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4494 if (! encodep && CODING_REQUIRE_DETECTION (coding)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4495 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4496 /* See the comments in code_convert_region. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4497 if (coding->type == coding_type_undecided) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4498 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4499 detect_coding (coding, XSTRING (str)->data, to_byte); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4500 if (coding->type == coding_type_undecided) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4501 coding->type = coding_type_emacs_mule; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4502 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4503 if (coding->eol_type == CODING_EOL_UNDECIDED) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4504 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4505 saved_coding_symbol = coding->symbol; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4506 detect_eol (coding, XSTRING (str)->data, to_byte); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4507 if (coding->eol_type == CODING_EOL_UNDECIDED) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4508 coding->eol_type = CODING_EOL_LF; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4509 /* We had better recover the original eol format if we |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4510 encounter an inconsitent eol format while decoding. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4511 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4512 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4513 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4514 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4515 if (encodep |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4516 ? ! CODING_REQUIRE_ENCODING (coding) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4517 : ! CODING_REQUIRE_DECODING (coding)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4518 from = to_byte; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4519 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4520 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4521 /* Try to skip the heading and tailing ASCIIs. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4522 if (encodep) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4523 shrink_encoding_region (&from, &to_byte, coding, XSTRING (str)->data); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4524 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4525 shrink_decoding_region (&from, &to_byte, coding, XSTRING (str)->data); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4526 } |
|
23153
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
4527 if (from == to_byte |
|
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
4528 && ! (coding->mode & CODING_MODE_LAST_BLOCK |
|
b2770410c752
(decode_coding): Even if SRC_BYTES is zero, try
Kenichi Handa <handa@m17n.org>
parents:
23136
diff
changeset
|
4529 && CODING_REQUIRE_FLUSHING (coding))) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4530 return (nocopy ? str : Fcopy_sequence (str)); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4531 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4532 if (encodep) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4533 len = encoding_buffer_size (coding, to_byte - from); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4534 else |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4535 len = decoding_buffer_size (coding, to_byte - from); |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21190
diff
changeset
|
4536 len += from + STRING_BYTES (XSTRING (str)) - to_byte; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4537 GCPRO1 (str); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4538 buf = get_conversion_buffer (len); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4539 UNGCPRO; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4540 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4541 if (from > 0) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4542 bcopy (XSTRING (str)->data, buf, from); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4543 result = (encodep |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4544 ? encode_coding (coding, XSTRING (str)->data + from, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4545 buf + from, to_byte - from, len) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4546 : decode_coding (coding, XSTRING (str)->data + from, |
|
21502
388b7c77183b
(code_convert_string): Give decode_coding correct byte
Kenichi Handa <handa@m17n.org>
parents:
21331
diff
changeset
|
4547 buf + from, to_byte - from, len)); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4548 if (! encodep && result == CODING_FINISH_INCONSISTENT_EOL) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4549 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4550 /* We simple try to decode the whole string again but without |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4551 eol-conversion this time. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4552 coding->eol_type = CODING_EOL_LF; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4553 coding->symbol = saved_coding_symbol; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4554 return code_convert_string (str, coding, encodep, nocopy); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4555 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4556 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4557 bcopy (XSTRING (str)->data + to_byte, buf + from + coding->produced, |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21190
diff
changeset
|
4558 STRING_BYTES (XSTRING (str)) - to_byte); |
|
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21190
diff
changeset
|
4559 |
|
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21190
diff
changeset
|
4560 len = from + STRING_BYTES (XSTRING (str)) - to_byte; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4561 if (encodep) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4562 str = make_unibyte_string (buf, len + coding->produced); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4563 else |
|
22723
04b653d7f842
(code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents:
22717
diff
changeset
|
4564 { |
|
04b653d7f842
(code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents:
22717
diff
changeset
|
4565 int chars= (coding->fake_multibyte |
|
04b653d7f842
(code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents:
22717
diff
changeset
|
4566 ? multibyte_chars_in_text (buf + from, coding->produced) |
|
04b653d7f842
(code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents:
22717
diff
changeset
|
4567 : coding->produced_char); |
|
04b653d7f842
(code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents:
22717
diff
changeset
|
4568 str = make_multibyte_string (buf, len + chars, len + coding->produced); |
|
04b653d7f842
(code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents:
22717
diff
changeset
|
4569 } |
|
04b653d7f842
(code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents:
22717
diff
changeset
|
4570 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4571 return str; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4572 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4573 |
| 17052 | 4574 |
| 4575 #ifdef emacs | |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
4576 /*** 8. Emacs Lisp library functions ***/ |
| 17052 | 4577 |
| 4578 DEFUN ("coding-system-p", Fcoding_system_p, Scoding_system_p, 1, 1, 0, | |
| 4579 "Return t if OBJECT is nil or a coding-system.\n\ | |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4580 See the documentation of `make-coding-system' for information\n\ |
|
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4581 about coding-system objects.") |
| 17052 | 4582 (obj) |
| 4583 Lisp_Object obj; | |
| 4584 { | |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4585 if (NILP (obj)) |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4586 return Qt; |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4587 if (!SYMBOLP (obj)) |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4588 return Qnil; |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4589 /* Get coding-spec vector for OBJ. */ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4590 obj = Fget (obj, Qcoding_system); |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4591 return ((VECTORP (obj) && XVECTOR (obj)->size == 5) |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4592 ? Qt : Qnil); |
| 17052 | 4593 } |
| 4594 | |
|
17717
4891aaecc5cc
(Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents:
17485
diff
changeset
|
4595 DEFUN ("read-non-nil-coding-system", Fread_non_nil_coding_system, |
|
4891aaecc5cc
(Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents:
17485
diff
changeset
|
4596 Sread_non_nil_coding_system, 1, 1, 0, |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4597 "Read a coding system from the minibuffer, prompting with string PROMPT.") |
| 17052 | 4598 (prompt) |
| 4599 Lisp_Object prompt; | |
| 4600 { | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4601 Lisp_Object val; |
|
17717
4891aaecc5cc
(Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents:
17485
diff
changeset
|
4602 do |
|
4891aaecc5cc
(Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents:
17485
diff
changeset
|
4603 { |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4604 val = Fcompleting_read (prompt, Vcoding_system_alist, Qnil, |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4605 Qt, Qnil, Qcoding_system_history, Qnil, Qnil); |
|
17717
4891aaecc5cc
(Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents:
17485
diff
changeset
|
4606 } |
|
4891aaecc5cc
(Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents:
17485
diff
changeset
|
4607 while (XSTRING (val)->size == 0); |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4608 return (Fintern (val, Qnil)); |
| 17052 | 4609 } |
| 4610 | |
|
19758
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4611 DEFUN ("read-coding-system", Fread_coding_system, Sread_coding_system, 1, 2, 0, |
|
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4612 "Read a coding system from the minibuffer, prompting with string PROMPT.\n\ |
|
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4613 If the user enters null input, return second argument DEFAULT-CODING-SYSTEM.") |
|
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4614 (prompt, default_coding_system) |
|
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4615 Lisp_Object prompt, default_coding_system; |
| 17052 | 4616 { |
|
19747
bed06df9cbc5
(setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents:
19743
diff
changeset
|
4617 Lisp_Object val; |
|
19758
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4618 if (SYMBOLP (default_coding_system)) |
|
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4619 XSETSTRING (default_coding_system, XSYMBOL (default_coding_system)->name); |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
4620 val = Fcompleting_read (prompt, Vcoding_system_alist, Qnil, |
|
19758
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4621 Qt, Qnil, Qcoding_system_history, |
|
49a1662b68dd
(Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents:
19750
diff
changeset
|
4622 default_coding_system, Qnil); |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4623 return (XSTRING (val)->size == 0 ? Qnil : Fintern (val, Qnil)); |
| 17052 | 4624 } |
| 4625 | |
| 4626 DEFUN ("check-coding-system", Fcheck_coding_system, Scheck_coding_system, | |
| 4627 1, 1, 0, | |
| 4628 "Check validity of CODING-SYSTEM.\n\ | |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4629 If valid, return CODING-SYSTEM, else signal a `coding-system-error' error.\n\ |
|
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4630 It is valid if it is a symbol with a non-nil `coding-system' property.\n\ |
| 17052 | 4631 The value of property should be a vector of length 5.") |
| 4632 (coding_system) | |
| 4633 Lisp_Object coding_system; | |
| 4634 { | |
| 4635 CHECK_SYMBOL (coding_system, 0); | |
| 4636 if (!NILP (Fcoding_system_p (coding_system))) | |
| 4637 return coding_system; | |
| 4638 while (1) | |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
4639 Fsignal (Qcoding_system_error, Fcons (coding_system, Qnil)); |
| 17052 | 4640 } |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4641 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4642 Lisp_Object |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4643 detect_coding_system (src, src_bytes, highest) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4644 unsigned char *src; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4645 int src_bytes, highest; |
| 17052 | 4646 { |
| 4647 int coding_mask, eol_type; | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4648 Lisp_Object val, tmp; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4649 int dummy; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4650 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4651 coding_mask = detect_coding_mask (src, src_bytes, NULL, &dummy); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4652 eol_type = detect_eol_type (src, src_bytes, &dummy); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4653 if (eol_type == CODING_EOL_INCONSISTENT) |
|
23082
910740dcedb5
(detect_coding_system): If detect_eol_type returns
Kenichi Handa <handa@m17n.org>
parents:
23067
diff
changeset
|
4654 eol_type = CODING_EOL_UNDECIDED; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4655 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4656 if (!coding_mask) |
| 17052 | 4657 { |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
4658 val = Qundecided; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4659 if (eol_type != CODING_EOL_UNDECIDED) |
| 17052 | 4660 { |
|
19747
bed06df9cbc5
(setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents:
19743
diff
changeset
|
4661 Lisp_Object val2; |
|
bed06df9cbc5
(setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents:
19743
diff
changeset
|
4662 val2 = Fget (Qundecided, Qeol_type); |
| 17052 | 4663 if (VECTORP (val2)) |
| 4664 val = XVECTOR (val2)->contents[eol_type]; | |
| 4665 } | |
|
22460
7ca919476042
(detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents:
22341
diff
changeset
|
4666 return (highest ? val : Fcons (val, Qnil)); |
| 17052 | 4667 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4668 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4669 /* At first, gather possible coding systems in VAL. */ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4670 val = Qnil; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4671 for (tmp = Vcoding_category_list; !NILP (tmp); tmp = XCONS (tmp)->cdr) |
| 17052 | 4672 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4673 int idx |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4674 = XFASTINT (Fget (XCONS (tmp)->car, Qcoding_category_index)); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4675 if (coding_mask & (1 << idx)) |
| 17052 | 4676 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4677 val = Fcons (Fsymbol_value (XCONS (tmp)->car), val); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4678 if (highest) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4679 break; |
| 17052 | 4680 } |
| 4681 } | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4682 if (!highest) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4683 val = Fnreverse (val); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4684 |
|
22254
1deb7d79af00
(detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents:
22226
diff
changeset
|
4685 /* Then, replace the elements with subsidiary coding systems. */ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4686 for (tmp = val; !NILP (tmp); tmp = XCONS (tmp)->cdr) |
| 17052 | 4687 { |
|
22254
1deb7d79af00
(detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents:
22226
diff
changeset
|
4688 if (eol_type != CODING_EOL_UNDECIDED |
|
1deb7d79af00
(detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents:
22226
diff
changeset
|
4689 && eol_type != CODING_EOL_INCONSISTENT) |
| 17052 | 4690 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4691 Lisp_Object eol; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4692 eol = Fget (XCONS (tmp)->car, Qeol_type); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4693 if (VECTORP (eol)) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4694 XCONS (tmp)->car = XVECTOR (eol)->contents[eol_type]; |
| 17052 | 4695 } |
| 4696 } | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4697 return (highest ? XCONS (val)->car : val); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4698 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4699 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4700 DEFUN ("detect-coding-region", Fdetect_coding_region, Sdetect_coding_region, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4701 2, 3, 0, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4702 "Detect coding system of the text in the region between START and END.\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4703 Return a list of possible coding systems ordered by priority.\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4704 \n\ |
|
22460
7ca919476042
(detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents:
22341
diff
changeset
|
4705 If only ASCII characters are found, it returns a list of single element\n\ |
|
7ca919476042
(detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents:
22341
diff
changeset
|
4706 `undecided' or its subsidiary coding system according to a detected\n\ |
|
7ca919476042
(detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents:
22341
diff
changeset
|
4707 end-of-line format.\n\ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4708 \n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4709 If optional argument HIGHEST is non-nil, return the coding system of\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4710 highest priority.") |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4711 (start, end, highest) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4712 Lisp_Object start, end, highest; |
| 17052 | 4713 { |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4714 int from, to; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4715 int from_byte, to_byte; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4716 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4717 CHECK_NUMBER_COERCE_MARKER (start, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4718 CHECK_NUMBER_COERCE_MARKER (end, 1); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4719 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4720 validate_region (&start, &end); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4721 from = XINT (start), to = XINT (end); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4722 from_byte = CHAR_TO_BYTE (from); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4723 to_byte = CHAR_TO_BYTE (to); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4724 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4725 if (from < GPT && to >= GPT) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4726 move_gap_both (to, to_byte); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4727 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4728 return detect_coding_system (BYTE_POS_ADDR (from_byte), |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4729 to_byte - from_byte, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4730 !NILP (highest)); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4731 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4732 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4733 DEFUN ("detect-coding-string", Fdetect_coding_string, Sdetect_coding_string, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4734 1, 2, 0, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4735 "Detect coding system of the text in STRING.\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4736 Return a list of possible coding systems ordered by priority.\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4737 \n\ |
|
22460
7ca919476042
(detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents:
22341
diff
changeset
|
4738 If only ASCII characters are found, it returns a list of single element\n\ |
|
7ca919476042
(detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents:
22341
diff
changeset
|
4739 `undecided' or its subsidiary coding system according to a detected\n\ |
|
7ca919476042
(detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents:
22341
diff
changeset
|
4740 end-of-line format.\n\ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4741 \n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4742 If optional argument HIGHEST is non-nil, return the coding system of\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4743 highest priority.") |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4744 (string, highest) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4745 Lisp_Object string, highest; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4746 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4747 CHECK_STRING (string, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4748 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4749 return detect_coding_system (XSTRING (string)->data, |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21190
diff
changeset
|
4750 STRING_BYTES (XSTRING (string)), |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4751 !NILP (highest)); |
| 17052 | 4752 } |
| 4753 | |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4754 Lisp_Object |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4755 code_convert_region1 (start, end, coding_system, encodep) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4756 Lisp_Object start, end, coding_system; |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4757 int encodep; |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4758 { |
|
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4759 struct coding_system coding; |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4760 int from, to, len; |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4761 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4762 CHECK_NUMBER_COERCE_MARKER (start, 0); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4763 CHECK_NUMBER_COERCE_MARKER (end, 1); |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4764 CHECK_SYMBOL (coding_system, 2); |
|
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4765 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4766 validate_region (&start, &end); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4767 from = XFASTINT (start); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4768 to = XFASTINT (end); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4769 |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4770 if (NILP (coding_system)) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4771 return make_number (to - from); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4772 |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4773 if (setup_coding_system (Fcheck_coding_system (coding_system), &coding) < 0) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4774 error ("Invalid coding system: %s", XSYMBOL (coding_system)->name->data); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4775 |
|
23136
7a72a7b8718c
(code_convert_region1): Remove all text properties of the region.
Kenichi Handa <handa@m17n.org>
parents:
23116
diff
changeset
|
4776 /* The code conversion routine can not preserve text properties for |
|
7a72a7b8718c
(code_convert_region1): Remove all text properties of the region.
Kenichi Handa <handa@m17n.org>
parents:
23116
diff
changeset
|
4777 now. So, we must remove all text properties in the region. */ |
|
7a72a7b8718c
(code_convert_region1): Remove all text properties of the region.
Kenichi Handa <handa@m17n.org>
parents:
23116
diff
changeset
|
4778 Fset_text_properties (start, end, Qnil, Qnil); |
|
7a72a7b8718c
(code_convert_region1): Remove all text properties of the region.
Kenichi Handa <handa@m17n.org>
parents:
23116
diff
changeset
|
4779 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4780 coding.mode |= CODING_MODE_LAST_BLOCK; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4781 code_convert_region (from, CHAR_TO_BYTE (from), to, CHAR_TO_BYTE (to), |
|
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4782 &coding, encodep, 1); |
|
22020
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4783 Vlast_coding_system_used = coding.symbol; |
|
20931
068eb408c911
(decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents:
20803
diff
changeset
|
4784 return make_number (coding.produced_char); |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4785 } |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4786 |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4787 DEFUN ("decode-coding-region", Fdecode_coding_region, Sdecode_coding_region, |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4788 3, 3, "r\nzCoding system: ", |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4789 "Decode the current region by specified coding system.\n\ |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4790 When called from a program, takes three arguments:\n\ |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4791 START, END, and CODING-SYSTEM. START and END are buffer positions.\n\ |
|
22020
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4792 This function sets `last-coding-system-used' to the precise coding system\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4793 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4794 not fully specified.)\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4795 It returns the length of the decoded text.") |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4796 (start, end, coding_system) |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4797 Lisp_Object start, end, coding_system; |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4798 { |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4799 return code_convert_region1 (start, end, coding_system, 0); |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4800 } |
|
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4801 |
|
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4802 DEFUN ("encode-coding-region", Fencode_coding_region, Sencode_coding_region, |
|
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4803 3, 3, "r\nzCoding system: ", |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4804 "Encode the current region by specified coding system.\n\ |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4805 When called from a program, takes three arguments:\n\ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4806 START, END, and CODING-SYSTEM. START and END are buffer positions.\n\ |
|
22020
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4807 This function sets `last-coding-system-used' to the precise coding system\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4808 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4809 not fully specified.)\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4810 It returns the length of the encoded text.") |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4811 (start, end, coding_system) |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4812 Lisp_Object start, end, coding_system; |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4813 { |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4814 return code_convert_region1 (start, end, coding_system, 1); |
| 17052 | 4815 } |
| 4816 | |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4817 Lisp_Object |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4818 code_convert_string1 (string, coding_system, nocopy, encodep) |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4819 Lisp_Object string, coding_system, nocopy; |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4820 int encodep; |
| 17052 | 4821 { |
| 4822 struct coding_system coding; | |
| 4823 | |
| 4824 CHECK_STRING (string, 0); | |
| 4825 CHECK_SYMBOL (coding_system, 1); | |
| 4826 | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4827 if (NILP (coding_system)) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4828 return (NILP (nocopy) ? Fcopy_sequence (string) : string); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4829 |
| 17052 | 4830 if (setup_coding_system (Fcheck_coding_system (coding_system), &coding) < 0) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4831 error ("Invalid coding system: %s", XSYMBOL (coding_system)->name->data); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4832 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4833 coding.mode |= CODING_MODE_LAST_BLOCK; |
|
22020
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4834 Vlast_coding_system_used = coding.symbol; |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4835 return code_convert_string (string, &coding, encodep, !NILP (nocopy)); |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4836 } |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4837 |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4838 DEFUN ("decode-coding-string", Fdecode_coding_string, Sdecode_coding_string, |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4839 2, 3, 0, |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4840 "Decode STRING which is encoded in CODING-SYSTEM, and return the result.\n\ |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4841 Optional arg NOCOPY non-nil means it is ok to return STRING itself\n\ |
|
22020
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4842 if the decoding operation is trivial.\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4843 This function sets `last-coding-system-used' to the precise coding system\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4844 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4845 not fully specified.)") |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4846 (string, coding_system, nocopy) |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4847 Lisp_Object string, coding_system, nocopy; |
|
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4848 { |
|
22020
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4849 return code_convert_string1 (string, coding_system, nocopy, 0); |
| 17052 | 4850 } |
| 4851 | |
| 4852 DEFUN ("encode-coding-string", Fencode_coding_string, Sencode_coding_string, | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4853 2, 3, 0, |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4854 "Encode STRING to CODING-SYSTEM, and return the result.\n\ |
|
19815
e68cab4f1f70
(Fencode_coding_string, Fdecode_coding_string): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
19763
diff
changeset
|
4855 Optional arg NOCOPY non-nil means it is ok to return STRING itself\n\ |
|
22020
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4856 if the encoding operation is trivial.\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4857 This function sets `last-coding-system-used' to the precise coding system\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4858 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is\n\ |
|
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4859 not fully specified.)") |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4860 (string, coding_system, nocopy) |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4861 Lisp_Object string, coding_system, nocopy; |
| 17052 | 4862 { |
|
22020
e144ad749084
(code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents:
22009
diff
changeset
|
4863 return code_convert_string1 (string, coding_system, nocopy, 1); |
| 17052 | 4864 } |
|
20803
0fa2183c587d
(ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
20794
diff
changeset
|
4865 |
|
22341
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4866 /* Encode or decode STRING according to CODING_SYSTEM. |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4867 Do not set Vlast_coding_system_used. */ |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4868 |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4869 Lisp_Object |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4870 code_convert_string_norecord (string, coding_system, encodep) |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4871 Lisp_Object string, coding_system; |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4872 int encodep; |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4873 { |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4874 struct coding_system coding; |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4875 |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4876 CHECK_STRING (string, 0); |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4877 CHECK_SYMBOL (coding_system, 1); |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4878 |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4879 if (NILP (coding_system)) |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4880 return string; |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4881 |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4882 if (setup_coding_system (Fcheck_coding_system (coding_system), &coding) < 0) |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4883 error ("Invalid coding system: %s", XSYMBOL (coding_system)->name->data); |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4884 |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4885 coding.mode |= CODING_MODE_LAST_BLOCK; |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4886 return code_convert_string (string, &coding, encodep, Qt); |
|
572ba933a4bf
(code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents:
22329
diff
changeset
|
4887 } |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4888 |
| 17052 | 4889 DEFUN ("decode-sjis-char", Fdecode_sjis_char, Sdecode_sjis_char, 1, 1, 0, |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
4890 "Decode a JISX0208 character of shift-jis encoding.\n\ |
| 17052 | 4891 CODE is the character code in SJIS.\n\ |
| 4892 Return the corresponding character.") | |
| 4893 (code) | |
| 4894 Lisp_Object code; | |
| 4895 { | |
| 4896 unsigned char c1, c2, s1, s2; | |
| 4897 Lisp_Object val; | |
| 4898 | |
| 4899 CHECK_NUMBER (code, 0); | |
| 4900 s1 = (XFASTINT (code)) >> 8, s2 = (XFASTINT (code)) & 0xFF; | |
| 4901 DECODE_SJIS (s1, s2, c1, c2); | |
| 4902 XSETFASTINT (val, MAKE_NON_ASCII_CHAR (charset_jisx0208, c1, c2)); | |
| 4903 return val; | |
| 4904 } | |
| 4905 | |
| 4906 DEFUN ("encode-sjis-char", Fencode_sjis_char, Sencode_sjis_char, 1, 1, 0, | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4907 "Encode a JISX0208 character CHAR to SJIS coding system.\n\ |
| 17052 | 4908 Return the corresponding character code in SJIS.") |
| 4909 (ch) | |
| 4910 Lisp_Object ch; | |
| 4911 { | |
|
17320
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
4912 int charset, c1, c2, s1, s2; |
| 17052 | 4913 Lisp_Object val; |
| 4914 | |
| 4915 CHECK_NUMBER (ch, 0); | |
| 4916 SPLIT_CHAR (XFASTINT (ch), charset, c1, c2); | |
| 4917 if (charset == charset_jisx0208) | |
| 4918 { | |
| 4919 ENCODE_SJIS (c1, c2, s1, s2); | |
|
17320
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
4920 XSETFASTINT (val, (s1 << 8) | s2); |
| 17052 | 4921 } |
| 4922 else | |
| 4923 XSETFASTINT (val, 0); | |
| 4924 return val; | |
| 4925 } | |
| 4926 | |
| 4927 DEFUN ("decode-big5-char", Fdecode_big5_char, Sdecode_big5_char, 1, 1, 0, | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4928 "Decode a Big5 character CODE of BIG5 coding system.\n\ |
| 17052 | 4929 CODE is the character code in BIG5.\n\ |
| 4930 Return the corresponding character.") | |
| 4931 (code) | |
| 4932 Lisp_Object code; | |
| 4933 { | |
| 4934 int charset; | |
| 4935 unsigned char b1, b2, c1, c2; | |
| 4936 Lisp_Object val; | |
| 4937 | |
| 4938 CHECK_NUMBER (code, 0); | |
| 4939 b1 = (XFASTINT (code)) >> 8, b2 = (XFASTINT (code)) & 0xFF; | |
| 4940 DECODE_BIG5 (b1, b2, charset, c1, c2); | |
| 4941 XSETFASTINT (val, MAKE_NON_ASCII_CHAR (charset, c1, c2)); | |
| 4942 return val; | |
| 4943 } | |
| 4944 | |
| 4945 DEFUN ("encode-big5-char", Fencode_big5_char, Sencode_big5_char, 1, 1, 0, | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
4946 "Encode the Big5 character CHAR to BIG5 coding system.\n\ |
| 17052 | 4947 Return the corresponding character code in Big5.") |
| 4948 (ch) | |
| 4949 Lisp_Object ch; | |
| 4950 { | |
|
17320
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
4951 int charset, c1, c2, b1, b2; |
| 17052 | 4952 Lisp_Object val; |
| 4953 | |
| 4954 CHECK_NUMBER (ch, 0); | |
| 4955 SPLIT_CHAR (XFASTINT (ch), charset, c1, c2); | |
| 4956 if (charset == charset_big5_1 || charset == charset_big5_2) | |
| 4957 { | |
| 4958 ENCODE_BIG5 (charset, c1, c2, b1, b2); | |
|
17320
9d15bec5f47e
(detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents:
17304
diff
changeset
|
4959 XSETFASTINT (val, (b1 << 8) | b2); |
| 17052 | 4960 } |
| 4961 else | |
| 4962 XSETFASTINT (val, 0); | |
| 4963 return val; | |
| 4964 } | |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4965 |
|
18002
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
4966 DEFUN ("set-terminal-coding-system-internal", |
|
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
4967 Fset_terminal_coding_system_internal, |
|
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
4968 Sset_terminal_coding_system_internal, 1, 1, 0, "") |
| 17052 | 4969 (coding_system) |
| 4970 Lisp_Object coding_system; | |
| 4971 { | |
| 4972 CHECK_SYMBOL (coding_system, 0); | |
| 4973 setup_coding_system (Fcheck_coding_system (coding_system), &terminal_coding); | |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
4974 /* We had better not send unsafe characters to terminal. */ |
|
19285
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
4975 terminal_coding.flags |= CODING_FLAG_ISO_SAFE; |
|
af3d00fde172
(Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents:
19280
diff
changeset
|
4976 |
| 17052 | 4977 return Qnil; |
| 4978 } | |
| 4979 | |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4980 DEFUN ("set-safe-terminal-coding-system-internal", |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4981 Fset_safe_terminal_coding_system_internal, |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4982 Sset_safe_terminal_coding_system_internal, 1, 1, 0, "") |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4983 (coding_system) |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4984 Lisp_Object coding_system; |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4985 { |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4986 CHECK_SYMBOL (coding_system, 0); |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4987 setup_coding_system (Fcheck_coding_system (coding_system), |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4988 &safe_terminal_coding); |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4989 return Qnil; |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4990 } |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
4991 |
| 17052 | 4992 DEFUN ("terminal-coding-system", |
| 4993 Fterminal_coding_system, Sterminal_coding_system, 0, 0, 0, | |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
4994 "Return coding system specified for terminal output.") |
| 17052 | 4995 () |
| 4996 { | |
| 4997 return terminal_coding.symbol; | |
| 4998 } | |
| 4999 | |
|
18002
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
5000 DEFUN ("set-keyboard-coding-system-internal", |
|
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
5001 Fset_keyboard_coding_system_internal, |
|
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
5002 Sset_keyboard_coding_system_internal, 1, 1, 0, "") |
| 17052 | 5003 (coding_system) |
| 5004 Lisp_Object coding_system; | |
| 5005 { | |
| 5006 CHECK_SYMBOL (coding_system, 0); | |
| 5007 setup_coding_system (Fcheck_coding_system (coding_system), &keyboard_coding); | |
| 5008 return Qnil; | |
| 5009 } | |
| 5010 | |
| 5011 DEFUN ("keyboard-coding-system", | |
| 5012 Fkeyboard_coding_system, Skeyboard_coding_system, 0, 0, 0, | |
|
20680
dd46027e8412
(code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents:
20668
diff
changeset
|
5013 "Return coding system specified for decoding keyboard input.") |
| 17052 | 5014 () |
| 5015 { | |
| 5016 return keyboard_coding.symbol; | |
| 5017 } | |
| 5018 | |
| 5019 | |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
5020 DEFUN ("find-operation-coding-system", Ffind_operation_coding_system, |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
5021 Sfind_operation_coding_system, 1, MANY, 0, |
|
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
5022 "Choose a coding system for an operation based on the target name.\n\ |
|
23201
392b44751a22
(ccl_coding_driver): Always calculate correct mulibyte
Kenichi Handa <handa@m17n.org>
parents:
23153
diff
changeset
|
5023 The value names a pair of coding systems: (DECODING-SYSTEM . ENCODING-SYSTEM).\n\ |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5024 DECODING-SYSTEM is the coding system to use for decoding\n\ |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5025 \(in case OPERATION does decoding), and ENCODING-SYSTEM is the coding system\n\ |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5026 for encoding (in case OPERATION does encoding).\n\ |
|
17304
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5027 \n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5028 The first argument OPERATION specifies an I/O primitive:\n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5029 For file I/O, `insert-file-contents' or `write-region'.\n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5030 For process I/O, `call-process', `call-process-region', or `start-process'.\n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5031 For network I/O, `open-network-stream'.\n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5032 \n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5033 The remaining arguments should be the same arguments that were passed\n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5034 to the primitive. Depending on which primitive, one of those arguments\n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5035 is selected as the TARGET. For example, if OPERATION does file I/O,\n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5036 whichever argument specifies the file name is TARGET.\n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5037 \n\ |
|
ecacd8936926
(Ffind_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17190
diff
changeset
|
5038 TARGET has a meaning which depends on OPERATION:\n\ |
| 17052 | 5039 For file I/O, TARGET is a file name.\n\ |
| 5040 For process I/O, TARGET is a process name.\n\ | |
| 5041 For network I/O, TARGET is a service name or a port number\n\ | |
| 5042 \n\ | |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5043 This function looks up what specified for TARGET in,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5044 `file-coding-system-alist', `process-coding-system-alist',\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5045 or `network-coding-system-alist' depending on OPERATION.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5046 They may specify a coding system, a cons of coding systems,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5047 or a function symbol to call.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5048 In the last case, we call the function with one argument,\n\ |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5049 which is a list of all the arguments given to this function.") |
| 17052 | 5050 (nargs, args) |
| 5051 int nargs; | |
| 5052 Lisp_Object *args; | |
| 5053 { | |
| 5054 Lisp_Object operation, target_idx, target, val; | |
| 5055 register Lisp_Object chain; | |
| 5056 | |
| 5057 if (nargs < 2) | |
| 5058 error ("Too few arguments"); | |
| 5059 operation = args[0]; | |
| 5060 if (!SYMBOLP (operation) | |
| 5061 || !INTEGERP (target_idx = Fget (operation, Qtarget_idx))) | |
| 5062 error ("Invalid first arguement"); | |
| 5063 if (nargs < 1 + XINT (target_idx)) | |
| 5064 error ("Too few arguments for operation: %s", | |
| 5065 XSYMBOL (operation)->name->data); | |
| 5066 target = args[XINT (target_idx) + 1]; | |
| 5067 if (!(STRINGP (target) | |
| 5068 || (EQ (operation, Qopen_network_stream) && INTEGERP (target)))) | |
| 5069 error ("Invalid %dth argument", XINT (target_idx) + 1); | |
| 5070 | |
|
18613
614b916ff5bf
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18536
diff
changeset
|
5071 chain = ((EQ (operation, Qinsert_file_contents) |
|
614b916ff5bf
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18536
diff
changeset
|
5072 || EQ (operation, Qwrite_region)) |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5073 ? Vfile_coding_system_alist |
|
18613
614b916ff5bf
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18536
diff
changeset
|
5074 : (EQ (operation, Qopen_network_stream) |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5075 ? Vnetwork_coding_system_alist |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5076 : Vprocess_coding_system_alist)); |
| 17052 | 5077 if (NILP (chain)) |
| 5078 return Qnil; | |
| 5079 | |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5080 for (; CONSP (chain); chain = XCONS (chain)->cdr) |
| 17052 | 5081 { |
|
19747
bed06df9cbc5
(setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents:
19743
diff
changeset
|
5082 Lisp_Object elt; |
|
bed06df9cbc5
(setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents:
19743
diff
changeset
|
5083 elt = XCONS (chain)->car; |
| 17052 | 5084 |
| 5085 if (CONSP (elt) | |
| 5086 && ((STRINGP (target) | |
| 5087 && STRINGP (XCONS (elt)->car) | |
| 5088 && fast_string_match (XCONS (elt)->car, target) >= 0) | |
| 5089 || (INTEGERP (target) && EQ (target, XCONS (elt)->car)))) | |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5090 { |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5091 val = XCONS (elt)->cdr; |
|
19763
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5092 /* Here, if VAL is both a valid coding system and a valid |
|
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5093 function symbol, we return VAL as a coding system. */ |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5094 if (CONSP (val)) |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5095 return val; |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5096 if (! SYMBOLP (val)) |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5097 return Qnil; |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5098 if (! NILP (Fcoding_system_p (val))) |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5099 return Fcons (val, val); |
|
19763
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5100 if (! NILP (Ffboundp (val))) |
|
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5101 { |
|
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5102 val = call1 (val, Flist (nargs, args)); |
|
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5103 if (CONSP (val)) |
|
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5104 return val; |
|
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5105 if (SYMBOLP (val) && ! NILP (Fcoding_system_p (val))) |
|
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5106 return Fcons (val, val); |
|
ab2fd2c85986
(Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents:
19758
diff
changeset
|
5107 } |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5108 return Qnil; |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5109 } |
| 17052 | 5110 } |
| 5111 return Qnil; | |
| 5112 } | |
| 5113 | |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5114 DEFUN ("update-coding-systems-internal", Fupdate_coding_systems_internal, |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5115 Supdate_coding_systems_internal, 0, 0, 0, |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5116 "Update internal database for ISO2022 and CCL based coding systems.\n\ |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5117 When values of the following coding categories are changed, you must\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5118 call this function:\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5119 coding-category-iso-7, coding-category-iso-7-tight,\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5120 coding-category-iso-8-1, coding-category-iso-8-2,\n\ |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5121 coding-category-iso-7-else, coding-category-iso-8-else,\n\ |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5122 coding-category-ccl") |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5123 () |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5124 { |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5125 int i; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5126 |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5127 for (i = CODING_CATEGORY_IDX_ISO_7; i <= CODING_CATEGORY_IDX_CCL; i++) |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5128 { |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5129 Lisp_Object val; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5130 |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5131 val = XSYMBOL (XVECTOR (Vcoding_category_table)->contents[i])->value; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5132 if (!NILP (val)) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5133 { |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5134 if (! coding_system_table[i]) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5135 coding_system_table[i] = ((struct coding_system *) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5136 xmalloc (sizeof (struct coding_system))); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5137 setup_coding_system (val, coding_system_table[i]); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5138 } |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5139 else if (coding_system_table[i]) |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5140 { |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5141 xfree (coding_system_table[i]); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5142 coding_system_table[i] = NULL; |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5143 } |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5144 } |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5145 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5146 return Qnil; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5147 } |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5148 |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5149 DEFUN ("set-coding-priority-internal", Fset_coding_priority_internal, |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5150 Sset_coding_priority_internal, 0, 0, 0, |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5151 "Update internal database for the current value of `coding-category-list'.\n\ |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5152 This function is internal use only.") |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5153 () |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5154 { |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5155 int i = 0, idx; |
|
22954
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
5156 Lisp_Object val; |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
5157 |
|
928b337d953b
Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
22874
diff
changeset
|
5158 val = Vcoding_category_list; |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5159 |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5160 while (CONSP (val) && i < CODING_CATEGORY_IDX_MAX) |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5161 { |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5162 if (! SYMBOLP (XCONS (val)->car)) |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5163 break; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5164 idx = XFASTINT (Fget (XCONS (val)->car, Qcoding_category_index)); |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5165 if (idx >= CODING_CATEGORY_IDX_MAX) |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5166 break; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5167 coding_priorities[i++] = (1 << idx); |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5168 val = XCONS (val)->cdr; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5169 } |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5170 /* If coding-category-list is valid and contains all coding |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5171 categories, `i' should be CODING_CATEGORY_IDX_MAX now. If not, |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5172 the following code saves Emacs from craching. */ |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5173 while (i < CODING_CATEGORY_IDX_MAX) |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5174 coding_priorities[i++] = CODING_CATEGORY_MASK_RAW_TEXT; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5175 |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5176 return Qnil; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5177 } |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5178 |
| 17052 | 5179 #endif /* emacs */ |
| 5180 | |
| 5181 | |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5182 /*** 9. Post-amble ***/ |
| 17052 | 5183 |
| 21514 | 5184 void |
|
22790
7ab6c2f70b0b
(init_coding): New function.
Kenichi Handa <handa@m17n.org>
parents:
22723
diff
changeset
|
5185 init_coding () |
|
7ab6c2f70b0b
(init_coding): New function.
Kenichi Handa <handa@m17n.org>
parents:
22723
diff
changeset
|
5186 { |
|
7ab6c2f70b0b
(init_coding): New function.
Kenichi Handa <handa@m17n.org>
parents:
22723
diff
changeset
|
5187 conversion_buffer = (char *) xmalloc (MINIMUM_CONVERSION_BUFFER_SIZE); |
|
7ab6c2f70b0b
(init_coding): New function.
Kenichi Handa <handa@m17n.org>
parents:
22723
diff
changeset
|
5188 } |
|
7ab6c2f70b0b
(init_coding): New function.
Kenichi Handa <handa@m17n.org>
parents:
22723
diff
changeset
|
5189 |
|
7ab6c2f70b0b
(init_coding): New function.
Kenichi Handa <handa@m17n.org>
parents:
22723
diff
changeset
|
5190 void |
| 17052 | 5191 init_coding_once () |
| 5192 { | |
| 5193 int i; | |
| 5194 | |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17725
diff
changeset
|
5195 /* Emacs' internal format specific initialize routine. */ |
| 17052 | 5196 for (i = 0; i <= 0x20; i++) |
| 5197 emacs_code_class[i] = EMACS_control_code; | |
| 5198 emacs_code_class[0x0A] = EMACS_linefeed_code; | |
| 5199 emacs_code_class[0x0D] = EMACS_carriage_return_code; | |
| 5200 for (i = 0x21 ; i < 0x7F; i++) | |
| 5201 emacs_code_class[i] = EMACS_ascii_code; | |
| 5202 emacs_code_class[0x7F] = EMACS_control_code; | |
| 5203 emacs_code_class[0x80] = EMACS_leading_code_composition; | |
| 5204 for (i = 0x81; i < 0xFF; i++) | |
| 5205 emacs_code_class[i] = EMACS_invalid_code; | |
| 5206 emacs_code_class[LEADING_CODE_PRIVATE_11] = EMACS_leading_code_3; | |
| 5207 emacs_code_class[LEADING_CODE_PRIVATE_12] = EMACS_leading_code_3; | |
| 5208 emacs_code_class[LEADING_CODE_PRIVATE_21] = EMACS_leading_code_4; | |
| 5209 emacs_code_class[LEADING_CODE_PRIVATE_22] = EMACS_leading_code_4; | |
| 5210 | |
| 5211 /* ISO2022 specific initialize routine. */ | |
| 5212 for (i = 0; i < 0x20; i++) | |
| 5213 iso_code_class[i] = ISO_control_code; | |
| 5214 for (i = 0x21; i < 0x7F; i++) | |
| 5215 iso_code_class[i] = ISO_graphic_plane_0; | |
| 5216 for (i = 0x80; i < 0xA0; i++) | |
| 5217 iso_code_class[i] = ISO_control_code; | |
| 5218 for (i = 0xA1; i < 0xFF; i++) | |
| 5219 iso_code_class[i] = ISO_graphic_plane_1; | |
| 5220 iso_code_class[0x20] = iso_code_class[0x7F] = ISO_0x20_or_0x7F; | |
| 5221 iso_code_class[0xA0] = iso_code_class[0xFF] = ISO_0xA0_or_0xFF; | |
| 5222 iso_code_class[ISO_CODE_CR] = ISO_carriage_return; | |
| 5223 iso_code_class[ISO_CODE_SO] = ISO_shift_out; | |
| 5224 iso_code_class[ISO_CODE_SI] = ISO_shift_in; | |
| 5225 iso_code_class[ISO_CODE_SS2_7] = ISO_single_shift_2_7; | |
| 5226 iso_code_class[ISO_CODE_ESC] = ISO_escape; | |
| 5227 iso_code_class[ISO_CODE_SS2] = ISO_single_shift_2; | |
| 5228 iso_code_class[ISO_CODE_SS3] = ISO_single_shift_3; | |
| 5229 iso_code_class[ISO_CODE_CSI] = ISO_control_sequence_introducer; | |
| 5230 | |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5231 conversion_buffer_size = MINIMUM_CONVERSION_BUFFER_SIZE; |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5232 |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5233 setup_coding_system (Qnil, &keyboard_coding); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5234 setup_coding_system (Qnil, &terminal_coding); |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
5235 setup_coding_system (Qnil, &safe_terminal_coding); |
|
22979
ceb8e4a89a32
(default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22964
diff
changeset
|
5236 setup_coding_system (Qnil, &default_buffer_file_coding); |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5237 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5238 bzero (coding_system_table, sizeof coding_system_table); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5239 |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5240 bzero (ascii_skip_code, sizeof ascii_skip_code); |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5241 for (i = 0; i < 128; i++) |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5242 ascii_skip_code[i] = 1; |
|
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5243 |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5244 #if defined (MSDOS) || defined (WINDOWSNT) |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5245 system_eol_type = CODING_EOL_CRLF; |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5246 #else |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5247 system_eol_type = CODING_EOL_LF; |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5248 #endif |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5249 } |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5250 |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5251 #ifdef emacs |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5252 |
| 21514 | 5253 void |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5254 syms_of_coding () |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5255 { |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5256 Qtarget_idx = intern ("target-idx"); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5257 staticpro (&Qtarget_idx); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5258 |
|
19750
95e4e1cba6ac
(Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19747
diff
changeset
|
5259 Qcoding_system_history = intern ("coding-system-history"); |
|
95e4e1cba6ac
(Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19747
diff
changeset
|
5260 staticpro (&Qcoding_system_history); |
|
95e4e1cba6ac
(Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19747
diff
changeset
|
5261 Fset (Qcoding_system_history, Qnil); |
|
95e4e1cba6ac
(Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19747
diff
changeset
|
5262 |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5263 /* Target FILENAME is the first argument. */ |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5264 Fput (Qinsert_file_contents, Qtarget_idx, make_number (0)); |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5265 /* Target FILENAME is the third argument. */ |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5266 Fput (Qwrite_region, Qtarget_idx, make_number (2)); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5267 |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5268 Qcall_process = intern ("call-process"); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5269 staticpro (&Qcall_process); |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5270 /* Target PROGRAM is the first argument. */ |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5271 Fput (Qcall_process, Qtarget_idx, make_number (0)); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5272 |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5273 Qcall_process_region = intern ("call-process-region"); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5274 staticpro (&Qcall_process_region); |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5275 /* Target PROGRAM is the third argument. */ |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5276 Fput (Qcall_process_region, Qtarget_idx, make_number (2)); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5277 |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5278 Qstart_process = intern ("start-process"); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5279 staticpro (&Qstart_process); |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5280 /* Target PROGRAM is the third argument. */ |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5281 Fput (Qstart_process, Qtarget_idx, make_number (2)); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5282 |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5283 Qopen_network_stream = intern ("open-network-stream"); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5284 staticpro (&Qopen_network_stream); |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5285 /* Target SERVICE is the fourth argument. */ |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5286 Fput (Qopen_network_stream, Qtarget_idx, make_number (3)); |
|
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5287 |
| 17052 | 5288 Qcoding_system = intern ("coding-system"); |
| 5289 staticpro (&Qcoding_system); | |
| 5290 | |
| 5291 Qeol_type = intern ("eol-type"); | |
| 5292 staticpro (&Qeol_type); | |
| 5293 | |
| 5294 Qbuffer_file_coding_system = intern ("buffer-file-coding-system"); | |
| 5295 staticpro (&Qbuffer_file_coding_system); | |
| 5296 | |
| 5297 Qpost_read_conversion = intern ("post-read-conversion"); | |
| 5298 staticpro (&Qpost_read_conversion); | |
| 5299 | |
| 5300 Qpre_write_conversion = intern ("pre-write-conversion"); | |
| 5301 staticpro (&Qpre_write_conversion); | |
| 5302 | |
|
19612
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
5303 Qno_conversion = intern ("no-conversion"); |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
5304 staticpro (&Qno_conversion); |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
5305 |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
5306 Qundecided = intern ("undecided"); |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
5307 staticpro (&Qundecided); |
|
783efd6c7c1e
(Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents:
19546
diff
changeset
|
5308 |
| 17052 | 5309 Qcoding_system_p = intern ("coding-system-p"); |
| 5310 staticpro (&Qcoding_system_p); | |
| 5311 | |
| 5312 Qcoding_system_error = intern ("coding-system-error"); | |
| 5313 staticpro (&Qcoding_system_error); | |
| 5314 | |
| 5315 Fput (Qcoding_system_error, Qerror_conditions, | |
| 5316 Fcons (Qcoding_system_error, Fcons (Qerror, Qnil))); | |
| 5317 Fput (Qcoding_system_error, Qerror_message, | |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5318 build_string ("Invalid coding system")); |
| 17052 | 5319 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5320 Qcoding_category = intern ("coding-category"); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5321 staticpro (&Qcoding_category); |
| 17052 | 5322 Qcoding_category_index = intern ("coding-category-index"); |
| 5323 staticpro (&Qcoding_category_index); | |
| 5324 | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5325 Vcoding_category_table |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5326 = Fmake_vector (make_number (CODING_CATEGORY_IDX_MAX), Qnil); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5327 staticpro (&Vcoding_category_table); |
| 17052 | 5328 { |
| 5329 int i; | |
| 5330 for (i = 0; i < CODING_CATEGORY_IDX_MAX; i++) | |
| 5331 { | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5332 XVECTOR (Vcoding_category_table)->contents[i] |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5333 = intern (coding_category_name[i]); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5334 Fput (XVECTOR (Vcoding_category_table)->contents[i], |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5335 Qcoding_category_index, make_number (i)); |
| 17052 | 5336 } |
| 5337 } | |
| 5338 | |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5339 Qtranslation_table = intern ("translation-table"); |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5340 staticpro (&Qtranslation_table); |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5341 Fput (Qtranslation_table, Qchar_table_extra_slots, make_number (1)); |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5342 |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5343 Qtranslation_table_id = intern ("translation-table-id"); |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5344 staticpro (&Qtranslation_table_id); |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5345 |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5346 Qtranslation_table_for_decode = intern ("translation-table-for-decode"); |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5347 staticpro (&Qtranslation_table_for_decode); |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5348 |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5349 Qtranslation_table_for_encode = intern ("translation-table-for-encode"); |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5350 staticpro (&Qtranslation_table_for_encode); |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
5351 |
|
20150
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
5352 Qsafe_charsets = intern ("safe-charsets"); |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
5353 staticpro (&Qsafe_charsets); |
|
402b6e5f4b58
(encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents:
20105
diff
changeset
|
5354 |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5355 Qvalid_codes = intern ("valid-codes"); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5356 staticpro (&Qvalid_codes); |
|
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5357 |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5358 Qemacs_mule = intern ("emacs-mule"); |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5359 staticpro (&Qemacs_mule); |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5360 |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5361 Qraw_text = intern ("raw-text"); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5362 staticpro (&Qraw_text); |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5363 |
| 17052 | 5364 defsubr (&Scoding_system_p); |
| 5365 defsubr (&Sread_coding_system); | |
| 5366 defsubr (&Sread_non_nil_coding_system); | |
| 5367 defsubr (&Scheck_coding_system); | |
| 5368 defsubr (&Sdetect_coding_region); | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5369 defsubr (&Sdetect_coding_string); |
| 17052 | 5370 defsubr (&Sdecode_coding_region); |
| 5371 defsubr (&Sencode_coding_region); | |
| 5372 defsubr (&Sdecode_coding_string); | |
| 5373 defsubr (&Sencode_coding_string); | |
| 5374 defsubr (&Sdecode_sjis_char); | |
| 5375 defsubr (&Sencode_sjis_char); | |
| 5376 defsubr (&Sdecode_big5_char); | |
| 5377 defsubr (&Sencode_big5_char); | |
|
18002
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
5378 defsubr (&Sset_terminal_coding_system_internal); |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
5379 defsubr (&Sset_safe_terminal_coding_system_internal); |
| 17052 | 5380 defsubr (&Sterminal_coding_system); |
|
18002
a14261786239
(encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents:
17835
diff
changeset
|
5381 defsubr (&Sset_keyboard_coding_system_internal); |
| 17052 | 5382 defsubr (&Skeyboard_coding_system); |
|
18536
69c0e220b626
(Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents:
18523
diff
changeset
|
5383 defsubr (&Sfind_operation_coding_system); |
|
22874
b133f07a76db
(Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22812
diff
changeset
|
5384 defsubr (&Supdate_coding_systems_internal); |
|
22226
557fac086b1b
(ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents:
22186
diff
changeset
|
5385 defsubr (&Sset_coding_priority_internal); |
| 17052 | 5386 |
|
20105
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5387 DEFVAR_LISP ("coding-system-list", &Vcoding_system_list, |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5388 "List of coding systems.\n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5389 \n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5390 Do not alter the value of this variable manually. This variable should be\n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5391 updated by the functions `make-coding-system' and\n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5392 `define-coding-system-alias'."); |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5393 Vcoding_system_list = Qnil; |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5394 |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5395 DEFVAR_LISP ("coding-system-alist", &Vcoding_system_alist, |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5396 "Alist of coding system names.\n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5397 Each element is one element list of coding system name.\n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5398 This variable is given to `completing-read' as TABLE argument.\n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5399 \n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5400 Do not alter the value of this variable manually. This variable should be\n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5401 updated by the functions `make-coding-system' and\n\ |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5402 `define-coding-system-alias'."); |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5403 Vcoding_system_alist = Qnil; |
|
c017642863c2
(Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
19824
diff
changeset
|
5404 |
| 17052 | 5405 DEFVAR_LISP ("coding-category-list", &Vcoding_category_list, |
| 5406 "List of coding-categories (symbols) ordered by priority."); | |
| 5407 { | |
| 5408 int i; | |
| 5409 | |
| 5410 Vcoding_category_list = Qnil; | |
| 5411 for (i = CODING_CATEGORY_IDX_MAX - 1; i >= 0; i--) | |
| 5412 Vcoding_category_list | |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5413 = Fcons (XVECTOR (Vcoding_category_table)->contents[i], |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5414 Vcoding_category_list); |
| 17052 | 5415 } |
| 5416 | |
| 5417 DEFVAR_LISP ("coding-system-for-read", &Vcoding_system_for_read, | |
|
19118
16ef8c28e4e0
(detect_coding_mask): Include CODING_CATEGORY_MASK_BINARY in the
Richard M. Stallman <rms@gnu.org>
parents:
19068
diff
changeset
|
5418 "Specify the coding system for read operations.\n\ |
|
19193
1701f2296f99
(syms_of_coding): Doc syntax fixes.
Richard M. Stallman <rms@gnu.org>
parents:
19181
diff
changeset
|
5419 It is useful to bind this variable with `let', but do not set it globally.\n\ |
| 17052 | 5420 If the value is a coding system, it is used for decoding on read operation.\n\ |
|
18910
50c89868f8c7
(syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
18860
diff
changeset
|
5421 If not, an appropriate element is used from one of the coding system alists:\n\ |
|
19118
16ef8c28e4e0
(detect_coding_mask): Include CODING_CATEGORY_MASK_BINARY in the
Richard M. Stallman <rms@gnu.org>
parents:
19068
diff
changeset
|
5422 There are three such tables, `file-coding-system-alist',\n\ |
|
18910
50c89868f8c7
(syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
18860
diff
changeset
|
5423 `process-coding-system-alist', and `network-coding-system-alist'."); |
| 17052 | 5424 Vcoding_system_for_read = Qnil; |
| 5425 | |
| 5426 DEFVAR_LISP ("coding-system-for-write", &Vcoding_system_for_write, | |
|
19118
16ef8c28e4e0
(detect_coding_mask): Include CODING_CATEGORY_MASK_BINARY in the
Richard M. Stallman <rms@gnu.org>
parents:
19068
diff
changeset
|
5427 "Specify the coding system for write operations.\n\ |
|
19193
1701f2296f99
(syms_of_coding): Doc syntax fixes.
Richard M. Stallman <rms@gnu.org>
parents:
19181
diff
changeset
|
5428 It is useful to bind this variable with `let', but do not set it globally.\n\ |
| 17052 | 5429 If the value is a coding system, it is used for encoding on write operation.\n\ |
|
18910
50c89868f8c7
(syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
18860
diff
changeset
|
5430 If not, an appropriate element is used from one of the coding system alists:\n\ |
|
19118
16ef8c28e4e0
(detect_coding_mask): Include CODING_CATEGORY_MASK_BINARY in the
Richard M. Stallman <rms@gnu.org>
parents:
19068
diff
changeset
|
5431 There are three such tables, `file-coding-system-alist',\n\ |
|
18910
50c89868f8c7
(syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
18860
diff
changeset
|
5432 `process-coding-system-alist', and `network-coding-system-alist'."); |
| 17052 | 5433 Vcoding_system_for_write = Qnil; |
| 5434 | |
| 5435 DEFVAR_LISP ("last-coding-system-used", &Vlast_coding_system_used, | |
|
18910
50c89868f8c7
(syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
18860
diff
changeset
|
5436 "Coding system used in the latest file or process I/O."); |
| 17052 | 5437 Vlast_coding_system_used = Qnil; |
| 5438 | |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5439 DEFVAR_BOOL ("inhibit-eol-conversion", &inhibit_eol_conversion, |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5440 "*Non-nil inhibit code conversion of end-of-line format in any cases."); |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5441 inhibit_eol_conversion = 0; |
|
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5442 |
|
21574
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
5443 DEFVAR_BOOL ("inherit-process-coding-system", &inherit_process_coding_system, |
|
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
5444 "Non-nil means process buffer inherits coding system of process output.\n\ |
|
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
5445 Bind it to t if the process output is to be treated as if it were a file\n\ |
|
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
5446 read from some filesystem."); |
|
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
5447 inherit_process_coding_system = 0; |
|
30394e3ae7f8
(syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents:
21520
diff
changeset
|
5448 |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5449 DEFVAR_LISP ("file-coding-system-alist", &Vfile_coding_system_alist, |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5450 "Alist to decide a coding system to use for a file I/O operation.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5451 The format is ((PATTERN . VAL) ...),\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5452 where PATTERN is a regular expression matching a file name,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5453 VAL is a coding system, a cons of coding systems, or a function symbol.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5454 If VAL is a coding system, it is used for both decoding and encoding\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5455 the file contents.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5456 If VAL is a cons of coding systems, the car part is used for decoding,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5457 and the cdr part is used for encoding.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5458 If VAL is a function symbol, the function must return a coding system\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5459 or a cons of coding systems which are used as above.\n\ |
|
17119
2cfb31c15ced
(create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
5460 \n\ |
|
23089
20486aa49e7d
(file-coding-system-alist, select-safe-coding-system-function): Doc fix.
Andreas Schwab <schwab@suse.de>
parents:
23088
diff
changeset
|
5461 See also the function `find-operation-coding-system'\n\ |
|
22812
70f58e77fda7
(syms_of_coding): Mention auto-coding-alist in the
Kenichi Handa <handa@m17n.org>
parents:
22790
diff
changeset
|
5462 and the variable `auto-coding-alist'."); |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5463 Vfile_coding_system_alist = Qnil; |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5464 |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5465 DEFVAR_LISP ("process-coding-system-alist", &Vprocess_coding_system_alist, |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5466 "Alist to decide a coding system to use for a process I/O operation.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5467 The format is ((PATTERN . VAL) ...),\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5468 where PATTERN is a regular expression matching a program name,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5469 VAL is a coding system, a cons of coding systems, or a function symbol.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5470 If VAL is a coding system, it is used for both decoding what received\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5471 from the program and encoding what sent to the program.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5472 If VAL is a cons of coding systems, the car part is used for decoding,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5473 and the cdr part is used for encoding.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5474 If VAL is a function symbol, the function must return a coding system\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5475 or a cons of coding systems which are used as above.\n\ |
| 17052 | 5476 \n\ |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5477 See also the function `find-operation-coding-system'."); |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5478 Vprocess_coding_system_alist = Qnil; |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5479 |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5480 DEFVAR_LISP ("network-coding-system-alist", &Vnetwork_coding_system_alist, |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5481 "Alist to decide a coding system to use for a network I/O operation.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5482 The format is ((PATTERN . VAL) ...),\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5483 where PATTERN is a regular expression matching a network service name\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5484 or is a port number to connect to,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5485 VAL is a coding system, a cons of coding systems, or a function symbol.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5486 If VAL is a coding system, it is used for both decoding what received\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5487 from the network stream and encoding what sent to the network stream.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5488 If VAL is a cons of coding systems, the car part is used for decoding,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5489 and the cdr part is used for encoding.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5490 If VAL is a function symbol, the function must return a coding system\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5491 or a cons of coding systems which are used as above.\n\ |
| 17052 | 5492 \n\ |
|
18650
aa3f2820e2ac
(Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
5493 See also the function `find-operation-coding-system'."); |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5494 Vnetwork_coding_system_alist = Qnil; |
| 17052 | 5495 |
| 5496 DEFVAR_INT ("eol-mnemonic-unix", &eol_mnemonic_unix, | |
| 5497 "Mnemonic character indicating UNIX-like end-of-line format (i.e. LF) ."); | |
|
18523
6b5af78c8b21
(syms_of_coding): Change initial values of eol_mnemonic_... variables.
Richard M. Stallman <rms@gnu.org>
parents:
18310
diff
changeset
|
5498 eol_mnemonic_unix = ':'; |
| 17052 | 5499 |
| 5500 DEFVAR_INT ("eol-mnemonic-dos", &eol_mnemonic_dos, | |
| 5501 "Mnemonic character indicating DOS-like end-of-line format (i.e. CRLF)."); | |
|
18523
6b5af78c8b21
(syms_of_coding): Change initial values of eol_mnemonic_... variables.
Richard M. Stallman <rms@gnu.org>
parents:
18310
diff
changeset
|
5502 eol_mnemonic_dos = '\\'; |
| 17052 | 5503 |
| 5504 DEFVAR_INT ("eol-mnemonic-mac", &eol_mnemonic_mac, | |
| 5505 "Mnemonic character indicating MAC-like end-of-line format (i.e. CR)."); | |
|
18523
6b5af78c8b21
(syms_of_coding): Change initial values of eol_mnemonic_... variables.
Richard M. Stallman <rms@gnu.org>
parents:
18310
diff
changeset
|
5506 eol_mnemonic_mac = '/'; |
| 17052 | 5507 |
| 5508 DEFVAR_INT ("eol-mnemonic-undecided", &eol_mnemonic_undecided, | |
| 5509 "Mnemonic character indicating end-of-line format is not yet decided."); | |
|
18523
6b5af78c8b21
(syms_of_coding): Change initial values of eol_mnemonic_... variables.
Richard M. Stallman <rms@gnu.org>
parents:
18310
diff
changeset
|
5510 eol_mnemonic_undecided = ':'; |
| 17052 | 5511 |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
5512 DEFVAR_LISP ("enable-character-translation", &Venable_character_translation, |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5513 "*Non-nil enables character translation while encoding and decoding."); |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
5514 Venable_character_translation = Qt; |
|
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
5515 |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5516 DEFVAR_LISP ("standard-translation-table-for-decode", |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5517 &Vstandard_translation_table_for_decode, |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
5518 "Table for translating characters while decoding."); |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5519 Vstandard_translation_table_for_decode = Qnil; |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5520 |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5521 DEFVAR_LISP ("standard-translation-table-for-encode", |
|
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5522 &Vstandard_translation_table_for_encode, |
|
22119
592bb8b9bcfd
Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents:
22020
diff
changeset
|
5523 "Table for translationg characters while encoding."); |
|
22186
fc4aaf1b1772
Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents:
22166
diff
changeset
|
5524 Vstandard_translation_table_for_encode = Qnil; |
| 17052 | 5525 |
| 5526 DEFVAR_LISP ("charset-revision-table", &Vcharset_revision_alist, | |
| 5527 "Alist of charsets vs revision numbers.\n\ | |
| 5528 While encoding, if a charset (car part of an element) is found,\n\ | |
| 5529 designate it with the escape sequence identifing revision (cdr part of the element)."); | |
| 5530 Vcharset_revision_alist = Qnil; | |
|
18180
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5531 |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5532 DEFVAR_LISP ("default-process-coding-system", |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5533 &Vdefault_process_coding_system, |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5534 "Cons of coding systems used for process I/O by default.\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5535 The car part is used for decoding a process output,\n\ |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5536 the cdr part is used for encoding a text to be sent to a process."); |
|
5f4c4da24e75
(Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
18002
diff
changeset
|
5537 Vdefault_process_coding_system = Qnil; |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
5538 |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
5539 DEFVAR_LISP ("latin-extra-code-table", &Vlatin_extra_code_table, |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
5540 "Table of extra Latin codes in the range 128..159 (inclusive).\n\ |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
5541 This is a vector of length 256.\n\ |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
5542 If Nth element is non-nil, the existence of code N in a file\n\ |
|
19750
95e4e1cba6ac
(Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
19747
diff
changeset
|
5543 \(or output of subprocess) doesn't prevent it to be detected as\n\ |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
5544 a coding system of ISO 2022 variant which has a flag\n\ |
|
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
5545 `accept-latin-extra-code' t (e.g. iso-latin-1) on reading a file\n\ |
|
19280
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
5546 or reading output of a subprocess.\n\ |
|
e755044718ee
(ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents:
19193
diff
changeset
|
5547 Only 128th through 159th elements has a meaning."); |
|
19365
d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents:
19285
diff
changeset
|
5548 Vlatin_extra_code_table = Fmake_vector (make_number (256), Qnil); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5549 |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5550 DEFVAR_LISP ("select-safe-coding-system-function", |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5551 &Vselect_safe_coding_system_function, |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5552 "Function to call to select safe coding system for encoding a text.\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5553 \n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5554 If set, this function is called to force a user to select a proper\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5555 coding system which can encode the text in the case that a default\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5556 coding system used in each operation can't encode the text.\n\ |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5557 \n\ |
|
23089
20486aa49e7d
(file-coding-system-alist, select-safe-coding-system-function): Doc fix.
Andreas Schwab <schwab@suse.de>
parents:
23088
diff
changeset
|
5558 The default value is `select-safe-coding-system' (which see)."); |
|
20718
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5559 Vselect_safe_coding_system_function = Qnil; |
|
c600dea3b06b
Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
5560 |
| 17052 | 5561 } |
| 5562 | |
| 5563 #endif /* emacs */ |
