annotate src/coding.c @ 89851:b2d1259417e3

*** empty log message ***
author Kenichi Handa <handa@m17n.org>
date Tue, 09 Mar 2004 02:30:13 +0000
parents 3edfa038a435
children b636ae1109c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
88936
c6ed294ee664 Comment fix
Dave Love <fx@gnu.org>
parents: 88889
diff changeset
1 /* Coding system handler (conversion, detection, etc).
20708
ed9ed828415e Update copyright year.
Richard M. Stallman <rms@gnu.org>
parents: 20680
diff changeset
2 Copyright (C) 1995, 1997, 1998 Electrotechnical Laboratory, JAPAN.
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3 Licensed to the Free Software Foundation.
88862
108e2535280d (adjust_coding_eol_type): Fix eol_type/eol_seen mixup.
Dave Love <fx@gnu.org>
parents: 88856
diff changeset
4 Copyright (C) 2001, 2002 Free Software Foundation, Inc.
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5 Copyright (C) 2003
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6 National Institute of Advanced Industrial Science and Technology (AIST)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7 Registration Number H13PRO009
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
9 This file is part of GNU Emacs.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
10
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
11 GNU Emacs is free software; you can redistribute it and/or modify
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
12 it under the terms of the GNU General Public License as published by
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
13 the Free Software Foundation; either version 2, or (at your option)
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
14 any later version.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
15
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
16 GNU Emacs is distributed in the hope that it will be useful,
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
19 GNU General Public License for more details.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
20
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
21 You should have received a copy of the GNU General Public License
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
22 along with GNU Emacs; see the file COPYING. If not, write to
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
23 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
24 Boston, MA 02111-1307, USA. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
25
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
26 /*** TABLE OF CONTENTS ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
27
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
28 0. General comments
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
29 1. Preamble
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
30 2. Emacs' internal format (emacs-utf-8) handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
31 3. UTF-8 handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
32 4. UTF-16 handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
33 5. Charset-base coding systems handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
34 6. emacs-mule (old Emacs' internal format) handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
35 7. ISO2022 handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
36 8. Shift-JIS and BIG5 handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
37 9. CCL handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
38 10. C library functions
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
39 11. Emacs Lisp library functions
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
40 12. Postamble
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
41
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
42 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
43
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
44 /*** 0. General comments ***
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
45
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
46
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
47 CODING SYSTEM
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
48
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
49 A coding system is an object for an encoding mechanism that contains
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
50 information about how to convert byte sequences to character
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
51 sequences and vice versa. When we say "decode", it means converting
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
52 a byte sequence of a specific coding system into a character
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
53 sequence that is represented by Emacs' internal coding system
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
54 `emacs-utf-8', and when we say "encode", it means converting a
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
55 character sequence of emacs-utf-8 to a byte sequence of a specific
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
56 coding system.
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
57
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
58 In Emacs Lisp, a coding system is represented by a Lisp symbol. In
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
59 C level, a coding system is represented by a vector of attributes
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
60 stored in the hash table Vcharset_hash_table. The conversion from
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
61 coding system symbol to attributes vector is done by looking up
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
62 Vcharset_hash_table by the symbol.
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
63
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
64 Coding systems are classified into the following types depending on
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
65 the encoding mechanism. Here's a brief description of the types.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
66
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
67 o UTF-8
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
68
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
69 o UTF-16
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
70
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
71 o Charset-base coding system
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
72
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
73 A coding system defined by one or more (coded) character sets.
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
74 Decoding and encoding are done by a code converter defined for each
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
75 character set.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
76
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
77 o Old Emacs internal format (emacs-mule)
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
78
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
79 The coding system adopted by old versions of Emacs (20 and 21).
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
80
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
81 o ISO2022-base coding system
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
82
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
83 The most famous coding system for multiple character sets. X's
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
84 Compound Text, various EUCs (Extended Unix Code), and coding systems
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
85 used in the Internet communication such as ISO-2022-JP are all
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
86 variants of ISO2022.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
87
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
88 o SJIS (or Shift-JIS or MS-Kanji-Code)
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
89
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
90 A coding system to encode character sets: ASCII, JISX0201, and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
91 JISX0208. Widely used for PC's in Japan. Details are described in
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
92 section 8.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
93
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
94 o BIG5
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
95
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
96 A coding system to encode character sets: ASCII and Big5. Widely
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
97 used for Chinese (mainly in Taiwan and Hong Kong). Details are
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
98 described in section 8. In this file, when we write "big5" (all
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
99 lowercase), we mean the coding system, and when we write "Big5"
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
100 (capitalized), we mean the character set.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
101
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
102 o CCL
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
103
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
104 If a user wants to decode/encode text encoded in a coding system
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
105 not listed above, he can supply a decoder and an encoder for it in
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
106 CCL (Code Conversion Language) programs. Emacs executes the CCL
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
107 program while decoding/encoding.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
108
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
109 o Raw-text
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
110
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
111 A coding system for text containing raw eight-bit data. Emacs
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
112 treats each byte of source text as a character (except for
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
113 end-of-line conversion).
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
114
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
115 o No-conversion
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
116
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
117 Like raw text, but don't do end-of-line conversion.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
118
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
119
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
120 END-OF-LINE FORMAT
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
121
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
122 How text end-of-line is encoded depends on operating system. For
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
123 instance, Unix's format is just one byte of LF (line-feed) code,
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
124 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
125 `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
126 `carriage-return'.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
127
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
128 Since text character encoding and end-of-line encoding are
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
129 independent, any coding system described above can take any format
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
130 of end-of-line (except for no-conversion).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
131
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
132 STRUCT CODING_SYSTEM
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
133
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
134 Before using a coding system for code conversion (i.e. decoding and
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
135 encoding), we setup a structure of type `struct coding_system'.
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
136 This structure keeps various information about a specific code
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
137 conversion (e.g. the location of source and destination data).
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
138
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
139 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
140
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
141 /* COMMON MACROS */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
142
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
143
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
144 /*** GENERAL NOTES on `detect_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
145
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
146 These functions check if a byte sequence specified as a source in
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
147 CODING conforms to the format of XXX, and update the members of
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
148 DETECT_INFO.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
149
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
150 Return 1 if the byte sequence conforms to XXX, otherwise return 0.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
151
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
152 Below is the template of these functions. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
153
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
154 #if 0
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
155 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
156 detect_coding_XXX (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
157 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
158 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
159 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
160 unsigned char *src = coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
161 unsigned char *src_end = coding->source + coding->src_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
162 int multibytep = coding->src_multibyte;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
163 int consumed_chars = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
164 int found = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
165 ...;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
166
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
167 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
168 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
169 /* Get one byte from the source. If the souce is exausted, jump
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
170 to no_more_source:. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
171 ONE_MORE_BYTE (c);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
172
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
173 if (! __C_conforms_to_XXX___ (c))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
174 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
175 if (! __C_strongly_suggests_XXX__ (c))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
176 found = CATEGORY_MASK_XXX;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
177 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
178 /* The byte sequence is invalid for XXX. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
179 detect_info->rejected |= CATEGORY_MASK_XXX;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
180 return 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
181
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
182 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
183 /* The source exausted successfully. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
184 detect_info->found |= found;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
185 return 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
186 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
187 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
188
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
189 /*** GENERAL NOTES on `decode_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
190
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
191 These functions decode a byte sequence specified as a source by
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
192 CODING. The resulting multibyte text goes to a place pointed to by
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
193 CODING->charbuf, the length of which should not exceed
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
194 CODING->charbuf_size;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
195
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
196 These functions set the information of original and decoded texts in
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
197 CODING->consumed, CODING->consumed_char, and CODING->charbuf_used.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
198 They also set CODING->result to one of CODING_RESULT_XXX indicating
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
199 how the decoding is finished.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
200
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
201 Below is the template of these functions. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
202
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
203 #if 0
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
204 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
205 decode_coding_XXXX (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
206 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
207 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
208 unsigned char *src = coding->source + coding->consumed;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
209 unsigned char *src_end = coding->source + coding->src_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
210 /* SRC_BASE remembers the start position in source in each loop.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
211 The loop will be exited when there's not enough source code, or
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
212 when there's no room in CHARBUF for a decoded character. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
213 unsigned char *src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
214 /* A buffer to produce decoded characters. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
215 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
216 int *charbuf_end = charbuf + coding->charbuf_size;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
217 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
218
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
219 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
220 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
221 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
222 if (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
223 /* No more room to produce a decoded character. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
224 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
225 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
226 /* Decode it. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
227 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
228
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
229 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
230 if (src_base < src_end
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
231 && coding->mode & CODING_MODE_LAST_BLOCK)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
232 /* If the source ends by partial bytes to construct a character,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
233 treat them as eight-bit raw data. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
234 while (src_base < src_end && charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
235 *charbuf++ = *src_base++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
236 /* Remember how many bytes and characters we consumed. If the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
237 source is multibyte, the bytes and chars are not identical. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
238 coding->consumed = coding->consumed_char = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
239 /* Remember how many characters we produced. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
240 coding->charbuf_used = charbuf - coding->charbuf;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
241 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
242 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
243
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244 /*** GENERAL NOTES on `encode_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
245
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
246 These functions encode SRC_BYTES length text at SOURCE of Emacs'
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
247 internal multibyte format by CODING. The resulting byte sequence
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
248 goes to a place pointed to by DESTINATION, the length of which
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
249 should not exceed DST_BYTES.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
250
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
251 These functions set the information of original and encoded texts in
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
252 the members produced, produced_char, consumed, and consumed_char of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
253 the structure *CODING. They also set the member result to one of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
254 CODING_RESULT_XXX indicating how the encoding finished.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
255
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
256 DST_BYTES zero means that source area and destination area are
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
257 overlapped, which means that we can produce a encoded text until it
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
258 reaches at the head of not-yet-encoded source text.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
259
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
260 Below is a template of these functions. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
261 #if 0
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
262 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
263 encode_coding_XXX (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
264 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
265 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
266 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
267 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
268 int *charbuf_end = charbuf->charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
269 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
270 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
271 unsigned char *adjusted_dst_end = dst_end - _MAX_BYTES_PRODUCED_IN_LOOP_;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
272 int produced_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
273
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
274 for (; charbuf < charbuf_end && dst < adjusted_dst_end; charbuf++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
275 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
276 int c = *charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
277 /* Encode C into DST, and increment DST. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
278 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
279 label_no_more_destination:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
280 /* How many chars and bytes we produced. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
281 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
282 coding->produced = dst - coding->destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
283 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
284 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
285
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
286
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
287 /*** 1. Preamble ***/
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
288
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
289 #include <config.h>
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
290 #include <stdio.h>
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
291
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
292 #include "lisp.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
293 #include "buffer.h"
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
294 #include "character.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
295 #include "charset.h"
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
296 #include "ccl.h"
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
297 #include "composite.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
298 #include "coding.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
299 #include "window.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
300
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
301 Lisp_Object Vcoding_system_hash_table;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
302
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
303 Lisp_Object Qcoding_system, Qcoding_aliases, Qeol_type;
88646
d3b1f30e2267 (Qmac): Remove (duplicated) definition.
Dave Love <fx@gnu.org>
parents: 88645
diff changeset
304 Lisp_Object Qunix, Qdos;
d3b1f30e2267 (Qmac): Remove (duplicated) definition.
Dave Love <fx@gnu.org>
parents: 88645
diff changeset
305 extern Lisp_Object Qmac; /* frame.c */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
306 Lisp_Object Qbuffer_file_coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
307 Lisp_Object Qpost_read_conversion, Qpre_write_conversion;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
308 Lisp_Object Qdefault_char;
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
309 Lisp_Object Qno_conversion, Qundecided;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
310 Lisp_Object Qcharset, Qiso_2022, Qutf_8, Qutf_16, Qshift_jis, Qbig5;
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
311 Lisp_Object Qbig, Qlittle;
19750
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
312 Lisp_Object Qcoding_system_history;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
313 Lisp_Object Qvalid_codes;
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
314 Lisp_Object QCcategory, QCmnemonic, QCdefalut_char;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
315 Lisp_Object QCdecode_translation_table, QCencode_translation_table;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
316 Lisp_Object QCpost_read_conversion, QCpre_write_conversion;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
317
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
318 extern Lisp_Object Qinsert_file_contents, Qwrite_region;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
319 Lisp_Object Qcall_process, Qcall_process_region, Qprocess_argument;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
320 Lisp_Object Qstart_process, Qopen_network_stream;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
321 Lisp_Object Qtarget_idx;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
322
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
323 Lisp_Object Qinsufficient_source, Qinconsistent_eol, Qinvalid_source;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
324 Lisp_Object Qinterrupted, Qinsufficient_memory;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
325
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
326 int coding_system_require_warning;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
327
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
328 Lisp_Object Vselect_safe_coding_system_function;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
329
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
330 /* Mnemonic string for each format of end-of-line. */
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
331 Lisp_Object eol_mnemonic_unix, eol_mnemonic_dos, eol_mnemonic_mac;
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
332 /* Mnemonic string to indicate format of end-of-line is not yet
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
333 decided. */
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
334 Lisp_Object eol_mnemonic_undecided;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
335
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
336 #ifdef emacs
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
337
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
338 Lisp_Object Vcoding_system_list, Vcoding_system_alist;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
339
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
340 Lisp_Object Qcoding_system_p, Qcoding_system_error;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
341
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
342 /* 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
343 end-of-line format. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
344 Lisp_Object Qemacs_mule, Qraw_text;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
345 Lisp_Object Qutf_8_emacs;
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
346
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
347 /* Coding-systems are handed between Emacs Lisp programs and C internal
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
348 routines by the following three variables. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
349 /* Coding-system for reading files and receiving data from process. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
350 Lisp_Object Vcoding_system_for_read;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
351 /* Coding-system for writing files and sending data to process. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
352 Lisp_Object Vcoding_system_for_write;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
353 /* Coding-system actually used in the latest I/O. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
354 Lisp_Object Vlast_coding_system_used;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
355 /* Set to non-nil when an error is detected while code conversion. */
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
356 Lisp_Object Vlast_code_conversion_error;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
357 /* A vector of length 256 which contains information about special
22529
d9eac134a41b Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22502
diff changeset
358 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
359 Lisp_Object Vlatin_extra_code_table;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
360
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
361 /* 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
362 int inhibit_eol_conversion;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
363
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
364 /* Flag to inhibit ISO2022 escape sequence detection. */
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
365 int inhibit_iso_escape_detection;
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
366
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
367 /* 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
368 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
369
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
370 /* Coding system to be used to encode text for terminal display. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
371 struct coding_system terminal_coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
372
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
373 /* 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
374 terminal coding system is nil. */
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
375 struct coding_system safe_terminal_coding;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
376
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
377 /* Coding system of what is sent from terminal keyboard. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
378 struct coding_system keyboard_coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
379
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
380 Lisp_Object Vfile_coding_system_alist;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
381 Lisp_Object Vprocess_coding_system_alist;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
382 Lisp_Object Vnetwork_coding_system_alist;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
383
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
384 Lisp_Object Vlocale_coding_system;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
385
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
386 #endif /* emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
387
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
388 /* 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
389 conversion. */
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
390 Lisp_Object Venable_character_translation;
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
391 /* 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
392 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
393 /* 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
394 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
395
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
396 Lisp_Object Qtranslation_table;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
397 Lisp_Object Qtranslation_table_id;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
398 Lisp_Object Qtranslation_table_for_decode;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
399 Lisp_Object Qtranslation_table_for_encode;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
400
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
401 /* Alist of charsets vs revision number. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
402 static Lisp_Object Vcharset_revision_table;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
403
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
404 /* Default coding systems used for process I/O. */
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
405 Lisp_Object Vdefault_process_coding_system;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
406
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
407 /* Char table for translating Quail and self-inserting input. */
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
408 Lisp_Object Vtranslation_table_for_input;
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
409
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
410 /* Two special coding systems. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
411 Lisp_Object Vsjis_coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
412 Lisp_Object Vbig5_coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
413
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
414 static void record_conversion_result (struct coding_system *coding,
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
415 enum coding_result_code result);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
416 static int detect_coding_utf_8 P_ ((struct coding_system *,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
417 struct coding_detection_info *info));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
418 static void decode_coding_utf_8 P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
419 static int encode_coding_utf_8 P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
420
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
421 static int detect_coding_utf_16 P_ ((struct coding_system *,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
422 struct coding_detection_info *info));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
423 static void decode_coding_utf_16 P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
424 static int encode_coding_utf_16 P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
425
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
426 static int detect_coding_iso_2022 P_ ((struct coding_system *,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
427 struct coding_detection_info *info));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
428 static void decode_coding_iso_2022 P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
429 static int encode_coding_iso_2022 P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
430
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
431 static int detect_coding_emacs_mule P_ ((struct coding_system *,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
432 struct coding_detection_info *info));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
433 static void decode_coding_emacs_mule P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
434 static int encode_coding_emacs_mule P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
435
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
436 static int detect_coding_sjis P_ ((struct coding_system *,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
437 struct coding_detection_info *info));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
438 static void decode_coding_sjis P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
439 static int encode_coding_sjis P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
440
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
441 static int detect_coding_big5 P_ ((struct coding_system *,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
442 struct coding_detection_info *info));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
443 static void decode_coding_big5 P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
444 static int encode_coding_big5 P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
445
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
446 static int detect_coding_ccl P_ ((struct coding_system *,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
447 struct coding_detection_info *info));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
448 static void decode_coding_ccl P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
449 static int encode_coding_ccl P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
450
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
451 static void decode_coding_raw_text P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
452 static int encode_coding_raw_text P_ ((struct coding_system *));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
453
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
454
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
455 /* ISO2022 section */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
456
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
457 #define CODING_ISO_INITIAL(coding, reg) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
458 (XINT (AREF (AREF (CODING_ID_ATTRS ((coding)->id), \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
459 coding_attr_iso_initial), \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
460 reg)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
461
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
462
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
463 #define CODING_ISO_REQUEST(coding, charset_id) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
464 ((charset_id <= (coding)->max_charset_id \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
465 ? (coding)->safe_charsets[charset_id] \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
466 : -1))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
467
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
468
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
469 #define CODING_ISO_FLAGS(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
470 ((coding)->spec.iso_2022.flags)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
471 #define CODING_ISO_DESIGNATION(coding, reg) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
472 ((coding)->spec.iso_2022.current_designation[reg])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
473 #define CODING_ISO_INVOCATION(coding, plane) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
474 ((coding)->spec.iso_2022.current_invocation[plane])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
475 #define CODING_ISO_SINGLE_SHIFTING(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
476 ((coding)->spec.iso_2022.single_shifting)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
477 #define CODING_ISO_BOL(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
478 ((coding)->spec.iso_2022.bol)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
479 #define CODING_ISO_INVOKED_CHARSET(coding, plane) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
480 CODING_ISO_DESIGNATION ((coding), CODING_ISO_INVOCATION ((coding), (plane)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
481
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
482 /* Control characters of ISO2022. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
483 /* code */ /* function */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
484 #define ISO_CODE_LF 0x0A /* line-feed */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
485 #define ISO_CODE_CR 0x0D /* carriage-return */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
486 #define ISO_CODE_SO 0x0E /* shift-out */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
487 #define ISO_CODE_SI 0x0F /* shift-in */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
488 #define ISO_CODE_SS2_7 0x19 /* single-shift-2 for 7-bit code */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
489 #define ISO_CODE_ESC 0x1B /* escape */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
490 #define ISO_CODE_SS2 0x8E /* single-shift-2 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
491 #define ISO_CODE_SS3 0x8F /* single-shift-3 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
492 #define ISO_CODE_CSI 0x9B /* control-sequence-introducer */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
493
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
494 /* All code (1-byte) of ISO2022 is classified into one of the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
495 followings. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
496 enum iso_code_class_type
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
497 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
498 ISO_control_0, /* Control codes in the range
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
499 0x00..0x1F and 0x7F, except for the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
500 following 5 codes. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
501 ISO_shift_out, /* ISO_CODE_SO (0x0E) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
502 ISO_shift_in, /* ISO_CODE_SI (0x0F) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
503 ISO_single_shift_2_7, /* ISO_CODE_SS2_7 (0x19) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
504 ISO_escape, /* ISO_CODE_SO (0x1B) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
505 ISO_control_1, /* Control codes in the range
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
506 0x80..0x9F, except for the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
507 following 3 codes. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
508 ISO_single_shift_2, /* ISO_CODE_SS2 (0x8E) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
509 ISO_single_shift_3, /* ISO_CODE_SS3 (0x8F) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
510 ISO_control_sequence_introducer, /* ISO_CODE_CSI (0x9B) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
511 ISO_0x20_or_0x7F, /* Codes of the values 0x20 or 0x7F. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
512 ISO_graphic_plane_0, /* Graphic codes in the range 0x21..0x7E. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
513 ISO_0xA0_or_0xFF, /* Codes of the values 0xA0 or 0xFF. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
514 ISO_graphic_plane_1 /* Graphic codes in the range 0xA1..0xFE. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
515 };
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
516
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
517 /** The macros CODING_ISO_FLAG_XXX defines a flag bit of the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
518 `iso-flags' attribute of an iso2022 coding system. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
519
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
520 /* If set, produce long-form designation sequence (e.g. ESC $ ( A)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
521 instead of the correct short-form sequence (e.g. ESC $ A). */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
522 #define CODING_ISO_FLAG_LONG_FORM 0x0001
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
523
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
524 /* If set, reset graphic planes and registers at end-of-line to the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
525 initial state. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
526 #define CODING_ISO_FLAG_RESET_AT_EOL 0x0002
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
527
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
528 /* If set, reset graphic planes and registers before any control
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
529 characters to the initial state. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
530 #define CODING_ISO_FLAG_RESET_AT_CNTL 0x0004
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
531
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
532 /* If set, encode by 7-bit environment. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
533 #define CODING_ISO_FLAG_SEVEN_BITS 0x0008
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
534
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
535 /* If set, use locking-shift function. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
536 #define CODING_ISO_FLAG_LOCKING_SHIFT 0x0010
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
537
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
538 /* If set, use single-shift function. Overwrite
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
539 CODING_ISO_FLAG_LOCKING_SHIFT. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
540 #define CODING_ISO_FLAG_SINGLE_SHIFT 0x0020
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
541
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
542 /* If set, use designation escape sequence. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
543 #define CODING_ISO_FLAG_DESIGNATION 0x0040
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
544
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
545 /* If set, produce revision number sequence. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
546 #define CODING_ISO_FLAG_REVISION 0x0080
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
547
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
548 /* If set, produce ISO6429's direction specifying sequence. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
549 #define CODING_ISO_FLAG_DIRECTION 0x0100
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
550
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
551 /* If set, assume designation states are reset at beginning of line on
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
552 output. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
553 #define CODING_ISO_FLAG_INIT_AT_BOL 0x0200
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
554
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
555 /* If set, designation sequence should be placed at beginning of line
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
556 on output. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
557 #define CODING_ISO_FLAG_DESIGNATE_AT_BOL 0x0400
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
558
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
559 /* If set, do not encode unsafe charactes on output. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
560 #define CODING_ISO_FLAG_SAFE 0x0800
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
561
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
562 /* If set, extra latin codes (128..159) are accepted as a valid code
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
563 on input. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
564 #define CODING_ISO_FLAG_LATIN_EXTRA 0x1000
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
565
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
566 #define CODING_ISO_FLAG_COMPOSITION 0x2000
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
567
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
568 #define CODING_ISO_FLAG_EUC_TW_SHIFT 0x4000
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
569
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
570 #define CODING_ISO_FLAG_USE_ROMAN 0x8000
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
571
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
572 #define CODING_ISO_FLAG_USE_OLDJIS 0x10000
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
573
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
574 #define CODING_ISO_FLAG_FULL_SUPPORT 0x100000
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
575
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
576 /* A character to be produced on output if encoding of the original
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
577 character is prohibited by CODING_ISO_FLAG_SAFE. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
578 #define CODING_INHIBIT_CHARACTER_SUBSTITUTION '?'
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
579
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
580
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
581 /* UTF-16 section */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
582 #define CODING_UTF_16_BOM(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
583 ((coding)->spec.utf_16.bom)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
584
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
585 #define CODING_UTF_16_ENDIAN(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
586 ((coding)->spec.utf_16.endian)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
587
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
588 #define CODING_UTF_16_SURROGATE(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
589 ((coding)->spec.utf_16.surrogate)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
590
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
591
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
592 /* CCL section */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
593 #define CODING_CCL_DECODER(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
594 AREF (CODING_ID_ATTRS ((coding)->id), coding_attr_ccl_decoder)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
595 #define CODING_CCL_ENCODER(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
596 AREF (CODING_ID_ATTRS ((coding)->id), coding_attr_ccl_encoder)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
597 #define CODING_CCL_VALIDS(coding) \
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
598 (SDATA (AREF (CODING_ID_ATTRS ((coding)->id), coding_attr_ccl_valids)))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
599
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
600 /* Index for each coding category in `coding_categories' */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
601
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
602 enum coding_category
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
603 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
604 coding_category_iso_7,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
605 coding_category_iso_7_tight,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
606 coding_category_iso_8_1,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
607 coding_category_iso_8_2,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
608 coding_category_iso_7_else,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
609 coding_category_iso_8_else,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
610 coding_category_utf_8,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
611 coding_category_utf_16_auto,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
612 coding_category_utf_16_be,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
613 coding_category_utf_16_le,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
614 coding_category_utf_16_be_nosig,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
615 coding_category_utf_16_le_nosig,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
616 coding_category_charset,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
617 coding_category_sjis,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
618 coding_category_big5,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
619 coding_category_ccl,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
620 coding_category_emacs_mule,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
621 /* All above are targets of code detection. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
622 coding_category_raw_text,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
623 coding_category_undecided,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
624 coding_category_max
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
625 };
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
626
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
627 /* Definitions of flag bits used in detect_coding_XXXX. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
628 #define CATEGORY_MASK_ISO_7 (1 << coding_category_iso_7)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
629 #define CATEGORY_MASK_ISO_7_TIGHT (1 << coding_category_iso_7_tight)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
630 #define CATEGORY_MASK_ISO_8_1 (1 << coding_category_iso_8_1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
631 #define CATEGORY_MASK_ISO_8_2 (1 << coding_category_iso_8_2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
632 #define CATEGORY_MASK_ISO_7_ELSE (1 << coding_category_iso_7_else)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
633 #define CATEGORY_MASK_ISO_8_ELSE (1 << coding_category_iso_8_else)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
634 #define CATEGORY_MASK_UTF_8 (1 << coding_category_utf_8)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
635 #define CATEGORY_MASK_UTF_16_AUTO (1 << coding_category_utf_16_auto)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
636 #define CATEGORY_MASK_UTF_16_BE (1 << coding_category_utf_16_be)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
637 #define CATEGORY_MASK_UTF_16_LE (1 << coding_category_utf_16_le)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
638 #define CATEGORY_MASK_UTF_16_BE_NOSIG (1 << coding_category_utf_16_be_nosig)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
639 #define CATEGORY_MASK_UTF_16_LE_NOSIG (1 << coding_category_utf_16_le_nosig)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
640 #define CATEGORY_MASK_CHARSET (1 << coding_category_charset)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
641 #define CATEGORY_MASK_SJIS (1 << coding_category_sjis)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
642 #define CATEGORY_MASK_BIG5 (1 << coding_category_big5)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
643 #define CATEGORY_MASK_CCL (1 << coding_category_ccl)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
644 #define CATEGORY_MASK_EMACS_MULE (1 << coding_category_emacs_mule)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
645 #define CATEGORY_MASK_RAW_TEXT (1 << coding_category_raw_text)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
646
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
647 /* This value is returned if detect_coding_mask () find nothing other
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
648 than ASCII characters. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
649 #define CATEGORY_MASK_ANY \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
650 (CATEGORY_MASK_ISO_7 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
651 | CATEGORY_MASK_ISO_7_TIGHT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
652 | CATEGORY_MASK_ISO_8_1 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
653 | CATEGORY_MASK_ISO_8_2 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
654 | CATEGORY_MASK_ISO_7_ELSE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
655 | CATEGORY_MASK_ISO_8_ELSE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
656 | CATEGORY_MASK_UTF_8 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
657 | CATEGORY_MASK_UTF_16_BE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
658 | CATEGORY_MASK_UTF_16_LE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
659 | CATEGORY_MASK_UTF_16_BE_NOSIG \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
660 | CATEGORY_MASK_UTF_16_LE_NOSIG \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
661 | CATEGORY_MASK_CHARSET \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
662 | CATEGORY_MASK_SJIS \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
663 | CATEGORY_MASK_BIG5 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
664 | CATEGORY_MASK_CCL \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
665 | CATEGORY_MASK_EMACS_MULE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
666
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
667
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
668 #define CATEGORY_MASK_ISO_7BIT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
669 (CATEGORY_MASK_ISO_7 | CATEGORY_MASK_ISO_7_TIGHT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
670
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
671 #define CATEGORY_MASK_ISO_8BIT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
672 (CATEGORY_MASK_ISO_8_1 | CATEGORY_MASK_ISO_8_2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
673
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
674 #define CATEGORY_MASK_ISO_ELSE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
675 (CATEGORY_MASK_ISO_7_ELSE | CATEGORY_MASK_ISO_8_ELSE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
676
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
677 #define CATEGORY_MASK_ISO_ESCAPE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
678 (CATEGORY_MASK_ISO_7 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
679 | CATEGORY_MASK_ISO_7_TIGHT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
680 | CATEGORY_MASK_ISO_7_ELSE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
681 | CATEGORY_MASK_ISO_8_ELSE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
682
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
683 #define CATEGORY_MASK_ISO \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
684 ( CATEGORY_MASK_ISO_7BIT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
685 | CATEGORY_MASK_ISO_8BIT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
686 | CATEGORY_MASK_ISO_ELSE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
687
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
688 #define CATEGORY_MASK_UTF_16 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
689 (CATEGORY_MASK_UTF_16_BE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
690 | CATEGORY_MASK_UTF_16_LE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
691 | CATEGORY_MASK_UTF_16_BE_NOSIG \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
692 | CATEGORY_MASK_UTF_16_LE_NOSIG)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
693
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
694
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
695 /* List of symbols `coding-category-xxx' ordered by priority. This
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
696 variable is exposed to Emacs Lisp. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
697 static Lisp_Object Vcoding_category_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
698
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
699 /* Table of coding categories (Lisp symbols). This variable is for
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
700 internal use oly. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
701 static Lisp_Object Vcoding_category_table;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
702
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
703 /* Table of coding-categories ordered by priority. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
704 static enum coding_category coding_priorities[coding_category_max];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
705
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
706 /* Nth element is a coding context for the coding system bound to the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
707 Nth coding category. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
708 static struct coding_system coding_categories[coding_category_max];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
709
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
710 /*** Commonly used macros and functions ***/
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
711
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
712 #ifndef min
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
713 #define min(a, b) ((a) < (b) ? (a) : (b))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
714 #endif
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
715 #ifndef max
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
716 #define max(a, b) ((a) > (b) ? (a) : (b))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
717 #endif
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
718
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
719 #define CODING_GET_INFO(coding, attrs, charset_list) \
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
720 do { \
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
721 (attrs) = CODING_ID_ATTRS ((coding)->id); \
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
722 (charset_list) = CODING_ATTR_CHARSET_LIST (attrs); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
723 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
724
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
725
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
726 /* Safely get one byte from the source text pointed by SRC which ends
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
727 at SRC_END, and set C to that byte. If there are not enough bytes
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
728 in the source, it jumps to `no_more_source'. If multibytep is
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
729 nonzero, and a multibyte character is found at SRC, set C to the
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
730 negative value of the character code. The caller should declare
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
731 and set these variables appropriately in advance:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
732 src, src_end, multibytep */
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
733
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
734 #define ONE_MORE_BYTE(c) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
735 do { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
736 if (src == src_end) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
737 { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
738 if (src_base < src) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
739 record_conversion_result \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
740 (coding, CODING_RESULT_INSUFFICIENT_SRC); \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
741 goto no_more_source; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
742 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
743 c = *src++; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
744 if (multibytep && (c & 0x80)) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
745 { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
746 if ((c & 0xFE) == 0xC0) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
747 c = ((c & 1) << 6) | *src++; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
748 else \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
749 { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
750 c = - string_char (--src, &src, NULL); \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
751 record_conversion_result \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
752 (coding, CODING_RESULT_INVALID_SRC); \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
753 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
754 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
755 consumed_chars++; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
756 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
757
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
758
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
759 #define ONE_MORE_BYTE_NO_CHECK(c) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
760 do { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
761 c = *src++; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
762 if (multibytep && (c & 0x80)) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
763 { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
764 if ((c & 0xFE) == 0xC0) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
765 c = ((c & 1) << 6) | *src++; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
766 else \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
767 { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
768 c = - string_char (--src, &src, NULL); \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
769 record_conversion_result \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
770 (coding, CODING_RESULT_INVALID_SRC); \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
771 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
772 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
773 consumed_chars++; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
774 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
775
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
776
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
777 /* Store a byte C in the place pointed by DST and increment DST to the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
778 next free point, and increment PRODUCED_CHARS. The caller should
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
779 assure that C is 0..127, and declare and set the variable `dst'
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
780 appropriately in advance.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
781 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
782
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
783
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
784 #define EMIT_ONE_ASCII_BYTE(c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
785 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
786 produced_chars++; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
787 *dst++ = (c); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
788 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
789
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
790
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
791 /* Like EMIT_ONE_ASCII_BYTE byt store two bytes; C1 and C2. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
792
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
793 #define EMIT_TWO_ASCII_BYTES(c1, c2) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
794 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
795 produced_chars += 2; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
796 *dst++ = (c1), *dst++ = (c2); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
797 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
798
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
799
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
800 /* Store a byte C in the place pointed by DST and increment DST to the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
801 next free point, and increment PRODUCED_CHARS. If MULTIBYTEP is
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
802 nonzero, store in an appropriate multibyte from. The caller should
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
803 declare and set the variables `dst' and `multibytep' appropriately
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
804 in advance. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
805
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
806 #define EMIT_ONE_BYTE(c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
807 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
808 produced_chars++; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
809 if (multibytep) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
810 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
811 int ch = (c); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
812 if (ch >= 0x80) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
813 ch = BYTE8_TO_CHAR (ch); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
814 CHAR_STRING_ADVANCE (ch, dst); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
815 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
816 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
817 *dst++ = (c); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
818 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
819
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
820
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
821 /* Like EMIT_ONE_BYTE, but emit two bytes; C1 and C2. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
822
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
823 #define EMIT_TWO_BYTES(c1, c2) \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
824 do { \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
825 produced_chars += 2; \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
826 if (multibytep) \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
827 { \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
828 int ch; \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
829 \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
830 ch = (c1); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
831 if (ch >= 0x80) \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
832 ch = BYTE8_TO_CHAR (ch); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
833 CHAR_STRING_ADVANCE (ch, dst); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
834 ch = (c2); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
835 if (ch >= 0x80) \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
836 ch = BYTE8_TO_CHAR (ch); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
837 CHAR_STRING_ADVANCE (ch, dst); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
838 } \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
839 else \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
840 { \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
841 *dst++ = (c1); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
842 *dst++ = (c2); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
843 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
844 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
845
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
846
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
847 #define EMIT_THREE_BYTES(c1, c2, c3) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
848 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
849 EMIT_ONE_BYTE (c1); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
850 EMIT_TWO_BYTES (c2, c3); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
851 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
852
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
853
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
854 #define EMIT_FOUR_BYTES(c1, c2, c3, c4) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
855 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
856 EMIT_TWO_BYTES (c1, c2); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
857 EMIT_TWO_BYTES (c3, c4); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
858 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
859
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
860
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
861 static void
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
862 record_conversion_result (struct coding_system *coding,
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
863 enum coding_result_code result)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
864 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
865 coding->result = result;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
866 switch (result)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
867 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
868 case CODING_RESULT_INSUFFICIENT_SRC:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
869 Vlast_code_conversion_error = Qinsufficient_source;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
870 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
871 case CODING_RESULT_INCONSISTENT_EOL:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
872 Vlast_code_conversion_error = Qinconsistent_eol;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
873 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
874 case CODING_RESULT_INVALID_SRC:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
875 Vlast_code_conversion_error = Qinvalid_source;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
876 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
877 case CODING_RESULT_INTERRUPT:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
878 Vlast_code_conversion_error = Qinterrupted;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
879 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
880 case CODING_RESULT_INSUFFICIENT_MEM:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
881 Vlast_code_conversion_error = Qinsufficient_memory;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
882 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
883 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
884 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
885
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
886 #define CODING_DECODE_CHAR(coding, src, src_base, src_end, charset, code, c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
887 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
888 charset_map_loaded = 0; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
889 c = DECODE_CHAR (charset, code); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
890 if (charset_map_loaded) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
891 { \
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
892 const unsigned char *orig = coding->source; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
893 EMACS_INT offset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
894 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
895 coding_set_source (coding); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
896 offset = coding->source - orig; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
897 src += offset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
898 src_base += offset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
899 src_end += offset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
900 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
901 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
902
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
903
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
904 #define ASSURE_DESTINATION(bytes) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
905 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
906 if (dst + (bytes) >= dst_end) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
907 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
908 int more_bytes = charbuf_end - charbuf + (bytes); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
909 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
910 dst = alloc_destination (coding, more_bytes, dst); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
911 dst_end = coding->destination + coding->dst_bytes; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
912 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
913 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
914
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
915
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
916
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
917 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
918 coding_set_source (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
919 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
920 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
921 if (BUFFERP (coding->src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
922 {
89418
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
923 struct buffer *buf = XBUFFER (coding->src_object);
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
924
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
925 if (coding->src_pos < 0)
89418
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
926 coding->source = BUF_GAP_END_ADDR (buf) + coding->src_pos_byte;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
927 else
89418
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
928 coding->source = BUF_BYTE_ADDRESS (buf, coding->src_pos_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
929 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
930 else if (STRINGP (coding->src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
931 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
932 coding->source = SDATA (coding->src_object) + coding->src_pos_byte;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
933 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
934 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
935 /* Otherwise, the source is C string and is never relocated
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
936 automatically. Thus we don't have to update anything. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
937 ;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
938 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
939
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
940 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
941 coding_set_destination (coding)
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
942 struct coding_system *coding;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
943 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
944 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
945 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
946 if (coding->src_pos < 0)
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
947 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
948 coding->destination = BEG_ADDR + coding->dst_pos_byte - 1;
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
949 coding->dst_bytes = (GAP_END_ADDR
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
950 - (coding->src_bytes - coding->consumed)
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
951 - coding->destination);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
952 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
953 else
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
954 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
955 /* We are sure that coding->dst_pos_byte is before the gap
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
956 of the buffer. */
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
957 coding->destination = (BUF_BEG_ADDR (XBUFFER (coding->dst_object))
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
958 + coding->dst_pos_byte - 1);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
959 coding->dst_bytes = (BUF_GAP_END_ADDR (XBUFFER (coding->dst_object))
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
960 - coding->destination);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
961 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
962 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
963 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
964 /* Otherwise, the destination is C string and is never relocated
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
965 automatically. Thus we don't have to update anything. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
966 ;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
967 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
968
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
969
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
970 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
971 coding_alloc_by_realloc (coding, bytes)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
972 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
973 EMACS_INT bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
974 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
975 coding->destination = (unsigned char *) xrealloc (coding->destination,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
976 coding->dst_bytes + bytes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
977 coding->dst_bytes += bytes;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
978 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
979
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
980 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
981 coding_alloc_by_making_gap (coding, bytes)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
982 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
983 EMACS_INT bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
984 {
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
985 if (BUFFERP (coding->dst_object)
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
986 && EQ (coding->src_object, coding->dst_object))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
987 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
988 EMACS_INT add = coding->src_bytes - coding->consumed;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
989
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
990 GAP_SIZE -= add; ZV += add; Z += add; ZV_BYTE += add; Z_BYTE += add;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
991 make_gap (bytes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
992 GAP_SIZE += add; ZV -= add; Z -= add; ZV_BYTE -= add; Z_BYTE -= add;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
993 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
994 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
995 {
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
996 Lisp_Object this_buffer;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
997
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
998 this_buffer = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
999 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1000 make_gap (bytes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1001 set_buffer_internal (XBUFFER (this_buffer));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1002 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1003 }
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1004
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1005
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1006 static unsigned char *
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1007 alloc_destination (coding, nbytes, dst)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1008 struct coding_system *coding;
89545
4f394eed6ff2 (inhibit_pre_post_conversion): Removed (unused).
Dave Love <fx@gnu.org>
parents: 89519
diff changeset
1009 EMACS_INT nbytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1010 unsigned char *dst;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1011 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1012 EMACS_INT offset = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1013
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1014 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1015 coding_alloc_by_making_gap (coding, nbytes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1016 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1017 coding_alloc_by_realloc (coding, nbytes);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1018 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1019 coding_set_destination (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1020 dst = coding->destination + offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1021 return dst;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1022 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1023
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1024 /** Macros for annotations. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1025
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1026 /* Maximum length of annotation data (sum of annotations for
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1027 composition and charset). */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1028 #define MAX_ANNOTATION_LENGTH (5 + (MAX_COMPOSITION_COMPONENTS * 2) - 1 + 5)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1029
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1030 /* An annotation data is stored in the array coding->charbuf in this
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1031 format:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1032 [ -LENGTH ANNOTATION_MASK FROM TO ... ]
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1033 LENGTH is the number of elements in the annotation.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1034 ANNOTATION_MASK is one of CODING_ANNOTATE_XXX_MASK.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1035 FROM and TO specify the range of text annotated. They are relative
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1036 to coding->src_pos (on encoding) or coding->dst_pos (on decoding).
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1037
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1038 The format of the following elements depend on ANNOTATION_MASK.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1039
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1040 In the case of CODING_ANNOTATE_COMPOSITION_MASK, these elements
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1041 follows:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1042 ... METHOD [ COMPOSITION-COMPONENTS ... ]
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1043 METHOD is one of enum composition_method.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1044 Optionnal COMPOSITION-COMPONENTS are characters and composition
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1045 rules.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1046
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1047 In the case of CODING_ANNOTATE_CHARSET_MASK, one element CHARSET-ID
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1048 follows. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1049
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1050 #define ADD_ANNOTATION_DATA(buf, len, mask, from, to) \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1051 do { \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1052 *(buf)++ = -(len); \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1053 *(buf)++ = (mask); \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1054 *(buf)++ = (from); \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1055 *(buf)++ = (to); \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1056 coding->annotated = 1; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1057 } while (0);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1058
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1059 #define ADD_COMPOSITION_DATA(buf, from, to, method) \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1060 do { \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1061 ADD_ANNOTATION_DATA (buf, 5, CODING_ANNOTATE_COMPOSITION_MASK, from, to); \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1062 *buf++ = method; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1063 } while (0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1064
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1065
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1066 #define ADD_CHARSET_DATA(buf, from, to, id) \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1067 do { \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1068 ADD_ANNOTATION_DATA (buf, 5, CODING_ANNOTATE_CHARSET_MASK, from, to); \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1069 *buf++ = id; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1070 } while (0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1071
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1072
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1073 /*** 2. Emacs' internal format (emacs-utf-8) ***/
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1074
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1075
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1076
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1077
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1078 /*** 3. UTF-8 ***/
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1079
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1080 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1081 Check if a text is encoded in UTF-8. If it is, return 1, else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1082 return 0. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1083
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1084 #define UTF_8_1_OCTET_P(c) ((c) < 0x80)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1085 #define UTF_8_EXTRA_OCTET_P(c) (((c) & 0xC0) == 0x80)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1086 #define UTF_8_2_OCTET_LEADING_P(c) (((c) & 0xE0) == 0xC0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1087 #define UTF_8_3_OCTET_LEADING_P(c) (((c) & 0xF0) == 0xE0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1088 #define UTF_8_4_OCTET_LEADING_P(c) (((c) & 0xF8) == 0xF0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1089 #define UTF_8_5_OCTET_LEADING_P(c) (((c) & 0xFC) == 0xF8)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1090
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1091 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1092 detect_coding_utf_8 (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1093 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1094 struct coding_detection_info *detect_info;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1095 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1096 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1097 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1098 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1099 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1100 int found = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1101
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1102 detect_info->checked |= CATEGORY_MASK_UTF_8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1103 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1104 src += coding->head_ascii;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1105
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1106 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1107 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1108 int c, c1, c2, c3, c4;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1109
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1110 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1111 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1112 if (c < 0 || UTF_8_1_OCTET_P (c))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1113 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1114 ONE_MORE_BYTE (c1);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1115 if (c1 < 0 || ! UTF_8_EXTRA_OCTET_P (c1))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1116 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1117 if (UTF_8_2_OCTET_LEADING_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1118 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1119 found = CATEGORY_MASK_UTF_8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1120 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1121 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1122 ONE_MORE_BYTE (c2);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1123 if (c2 < 0 || ! UTF_8_EXTRA_OCTET_P (c2))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1124 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1125 if (UTF_8_3_OCTET_LEADING_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1126 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1127 found = CATEGORY_MASK_UTF_8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1128 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1129 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1130 ONE_MORE_BYTE (c3);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1131 if (c3 < 0 || ! UTF_8_EXTRA_OCTET_P (c3))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1132 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1133 if (UTF_8_4_OCTET_LEADING_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1134 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1135 found = CATEGORY_MASK_UTF_8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1136 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1137 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1138 ONE_MORE_BYTE (c4);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1139 if (c4 < 0 || ! UTF_8_EXTRA_OCTET_P (c4))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1140 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1141 if (UTF_8_5_OCTET_LEADING_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1142 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1143 found = CATEGORY_MASK_UTF_8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1144 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1145 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1146 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1147 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1148 detect_info->rejected |= CATEGORY_MASK_UTF_8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1149 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1150
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1151 no_more_source:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1152 if (src_base < src && coding->mode & CODING_MODE_LAST_BLOCK)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1153 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1154 detect_info->rejected |= CATEGORY_MASK_UTF_8;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1155 return 0;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1156 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1157 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1158 return 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1159 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1160
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1161
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1162 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1163 decode_coding_utf_8 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1164 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1165 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1166 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1167 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1168 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1169 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1170 int *charbuf_end = charbuf + coding->charbuf_size;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1171 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1172 int multibytep = coding->src_multibyte;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1173 Lisp_Object attr, charset_list;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1174
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1175 CODING_GET_INFO (coding, attr, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1176
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1177 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1178 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1179 int c, c1, c2, c3, c4, c5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1180
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1181 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1182 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1183
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1184 if (charbuf >= charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1185 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1186
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1187 ONE_MORE_BYTE (c1);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1188 if (c1 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1189 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1190 c = - c1;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1191 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1192 else if (UTF_8_1_OCTET_P(c1))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1193 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1194 c = c1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1195 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1196 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1197 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1198 ONE_MORE_BYTE (c2);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1199 if (c2 < 0 || ! UTF_8_EXTRA_OCTET_P (c2))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1200 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1201 if (UTF_8_2_OCTET_LEADING_P (c1))
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1202 {
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1203 c = ((c1 & 0x1F) << 6) | (c2 & 0x3F);
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1204 /* Reject overlong sequences here and below. Encoders
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1205 producing them are incorrect, they can be misleading,
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1206 and they mess up read/write invariance. */
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1207 if (c < 128)
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1208 goto invalid_code;
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1209 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1210 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1211 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1212 ONE_MORE_BYTE (c3);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1213 if (c3 < 0 || ! UTF_8_EXTRA_OCTET_P (c3))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1214 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1215 if (UTF_8_3_OCTET_LEADING_P (c1))
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1216 {
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1217 c = (((c1 & 0xF) << 12)
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1218 | ((c2 & 0x3F) << 6) | (c3 & 0x3F));
89184
88a9e962e183 (decode_coding_utf_8): Treat surrogates as invalid.
Dave Love <fx@gnu.org>
parents: 89042
diff changeset
1219 if (c < 0x800
88a9e962e183 (decode_coding_utf_8): Treat surrogates as invalid.
Dave Love <fx@gnu.org>
parents: 89042
diff changeset
1220 || (c >= 0xd800 && c < 0xe000)) /* surrogates (invalid) */
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1221 goto invalid_code;
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1222 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1223 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1224 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1225 ONE_MORE_BYTE (c4);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1226 if (c4 < 0 || ! UTF_8_EXTRA_OCTET_P (c4))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1227 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1228 if (UTF_8_4_OCTET_LEADING_P (c1))
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1229 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1230 c = (((c1 & 0x7) << 18) | ((c2 & 0x3F) << 12)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1231 | ((c3 & 0x3F) << 6) | (c4 & 0x3F));
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1232 if (c < 0x10000)
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1233 goto invalid_code;
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1234 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1235 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1236 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1237 ONE_MORE_BYTE (c5);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1238 if (c5 < 0 || ! UTF_8_EXTRA_OCTET_P (c5))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1239 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1240 if (UTF_8_5_OCTET_LEADING_P (c1))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1241 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1242 c = (((c1 & 0x3) << 24) | ((c2 & 0x3F) << 18)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1243 | ((c3 & 0x3F) << 12) | ((c4 & 0x3F) << 6)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1244 | (c5 & 0x3F));
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1245 if ((c > MAX_CHAR) || (c < 0x200000))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1246 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1247 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1248 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1249 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1250 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1251 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1252 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1253 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1254
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1255 *charbuf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1256 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1257
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1258 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1259 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1260 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1261 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1262 *charbuf++ = ASCII_BYTE_P (c) ? c : BYTE8_TO_CHAR (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1263 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1264 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1265
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1266 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1267 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1268 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1269 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1270 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1271
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1272
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1273 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1274 encode_coding_utf_8 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1275 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1276 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1277 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1278 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1279 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1280 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1281 unsigned char *dst_end = coding->destination + coding->dst_bytes;
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
1282 int produced_chars = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1283 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1284
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1285 if (multibytep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1286 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1287 int safe_room = MAX_MULTIBYTE_LENGTH * 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1288
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1289 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1290 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1291 unsigned char str[MAX_MULTIBYTE_LENGTH], *p, *pend = str;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1292
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1293 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1294 c = *charbuf++;
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1295 if (CHAR_BYTE8_P (c))
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1296 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1297 c = CHAR_TO_BYTE8 (c);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1298 EMIT_ONE_BYTE (c);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1299 }
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1300 else
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1301 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1302 CHAR_STRING_ADVANCE (c, pend);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1303 for (p = str; p < pend; p++)
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1304 EMIT_ONE_BYTE (*p);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1305 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1306 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1307 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1308 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1309 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1310 int safe_room = MAX_MULTIBYTE_LENGTH;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1311
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1312 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1313 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1314 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1315 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1316 dst += CHAR_STRING (c, dst);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1317 produced_chars++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1318 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1319 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1320 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1321 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1322 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1323 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1324 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1325
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1326
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1327 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1328 Check if a text is encoded in one of UTF-16 based coding systems.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1329 If it is, return 1, else return 0. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1330
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1331 #define UTF_16_HIGH_SURROGATE_P(val) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1332 (((val) & 0xFC00) == 0xD800)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1333
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1334 #define UTF_16_LOW_SURROGATE_P(val) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1335 (((val) & 0xFC00) == 0xDC00)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1336
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1337 #define UTF_16_INVALID_P(val) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1338 (((val) == 0xFFFE) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1339 || ((val) == 0xFFFF) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1340 || UTF_16_LOW_SURROGATE_P (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1341
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1342
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1343 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1344 detect_coding_utf_16 (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1345 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1346 struct coding_detection_info *detect_info;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1347 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1348 const unsigned char *src = coding->source, *src_base = src;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1349 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1350 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1351 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1352 int c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1353
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1354 detect_info->checked |= CATEGORY_MASK_UTF_16;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1355 if (coding->mode & CODING_MODE_LAST_BLOCK
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1356 && (coding->src_chars & 1))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1357 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1358 detect_info->rejected |= CATEGORY_MASK_UTF_16;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1359 return 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1360 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1361
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1362 ONE_MORE_BYTE (c1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1363 ONE_MORE_BYTE (c2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1364 if ((c1 == 0xFF) && (c2 == 0xFE))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1365 {
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1366 detect_info->found |= (CATEGORY_MASK_UTF_16_LE
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1367 | CATEGORY_MASK_UTF_16_AUTO);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1368 detect_info->rejected |= (CATEGORY_MASK_UTF_16_BE
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1369 | CATEGORY_MASK_UTF_16_BE_NOSIG
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1370 | CATEGORY_MASK_UTF_16_LE_NOSIG);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1371 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1372 else if ((c1 == 0xFE) && (c2 == 0xFF))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1373 {
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1374 detect_info->found |= (CATEGORY_MASK_UTF_16_BE
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1375 | CATEGORY_MASK_UTF_16_AUTO);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1376 detect_info->rejected |= (CATEGORY_MASK_UTF_16_LE
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1377 | CATEGORY_MASK_UTF_16_BE_NOSIG
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1378 | CATEGORY_MASK_UTF_16_LE_NOSIG);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1379 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1380 else if (c1 >= 0 && c2 >= 0)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1381 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1382 unsigned char b1[256], b2[256];
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1383 int b1_variants = 1, b2_variants = 1;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1384 int n;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1385
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1386 bzero (b1, 256), bzero (b2, 256);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1387 b1[c1]++, b2[c2]++;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1388 for (n = 0; n < 256 && src < src_end; n++)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1389 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1390 src_base = src;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1391 ONE_MORE_BYTE (c1);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1392 ONE_MORE_BYTE (c2);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1393 if (c1 < 0 || c2 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1394 break;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1395 if (! b1[c1++]) b1_variants++;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1396 if (! b2[c2++]) b2_variants++;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1397 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1398 if (b1_variants < b2_variants)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1399 detect_info->found |= CATEGORY_MASK_UTF_16_BE_NOSIG;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1400 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1401 detect_info->found |= CATEGORY_MASK_UTF_16_LE_NOSIG;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1402 detect_info->rejected
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1403 |= (CATEGORY_MASK_UTF_16_BE | CATEGORY_MASK_UTF_16_LE);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1404 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1405 no_more_source:
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1406 return 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1407 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1408
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1409 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1410 decode_coding_utf_16 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1411 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1412 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1413 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1414 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1415 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1416 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1417 int *charbuf_end = charbuf + coding->charbuf_size;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1418 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1419 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1420 enum utf_16_bom_type bom = CODING_UTF_16_BOM (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1421 enum utf_16_endian_type endian = CODING_UTF_16_ENDIAN (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1422 int surrogate = CODING_UTF_16_SURROGATE (coding);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1423 Lisp_Object attr, charset_list;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1424
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1425 CODING_GET_INFO (coding, attr, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1426
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1427 if (bom == utf_16_with_bom)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1428 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1429 int c, c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1430
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1431 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1432 ONE_MORE_BYTE (c1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1433 ONE_MORE_BYTE (c2);
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
1434 c = (c1 << 8) | c2;
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1435
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1436 if (endian == utf_16_big_endian
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1437 ? c != 0xFEFF : c != 0xFFFE)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1438 {
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1439 /* The first two bytes are not BOM. Treat them as bytes
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1440 for a normal character. */
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1441 src = src_base;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1442 coding->errors++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1443 }
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1444 CODING_UTF_16_BOM (coding) = utf_16_without_bom;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1445 }
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1446 else if (bom == utf_16_detect_bom)
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1447 {
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1448 /* We have already tried to detect BOM and failed in
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1449 detect_coding. */
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1450 CODING_UTF_16_BOM (coding) = utf_16_without_bom;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1451 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1452
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1453 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1454 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1455 int c, c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1456
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1457 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1458 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1459
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1460 if (charbuf + 2 >= charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1461 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1462
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1463 ONE_MORE_BYTE (c1);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1464 if (c1 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1465 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1466 *charbuf++ = -c1;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1467 continue;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1468 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1469 ONE_MORE_BYTE (c2);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1470 if (c2 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1471 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1472 *charbuf++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1473 *charbuf++ = -c2;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1474 continue;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1475 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1476 c = (endian == utf_16_big_endian
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
1477 ? ((c1 << 8) | c2) : ((c2 << 8) | c1));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1478 if (surrogate)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1479 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1480 if (! UTF_16_LOW_SURROGATE_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1481 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1482 if (endian == utf_16_big_endian)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1483 c1 = surrogate >> 8, c2 = surrogate & 0xFF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1484 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1485 c1 = surrogate & 0xFF, c2 = surrogate >> 8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1486 *charbuf++ = c1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1487 *charbuf++ = c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1488 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1489 if (UTF_16_HIGH_SURROGATE_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1490 CODING_UTF_16_SURROGATE (coding) = surrogate = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1491 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1492 *charbuf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1493 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1494 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1495 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1496 c = ((surrogate - 0xD800) << 10) | (c - 0xDC00);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1497 CODING_UTF_16_SURROGATE (coding) = surrogate = 0;
89842
b5f22f538c1f (decode_coding_utf_16): Fix handling of surrogate pare.
Kenichi Handa <handa@m17n.org>
parents: 89780
diff changeset
1498 *charbuf++ = 0x10000 + c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1499 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1500 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1501 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1502 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1503 if (UTF_16_HIGH_SURROGATE_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1504 CODING_UTF_16_SURROGATE (coding) = surrogate = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1505 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1506 *charbuf++ = c;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1507 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1508 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1509
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1510 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1511 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1512 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1513 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1514 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1515
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1516 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1517 encode_coding_utf_16 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1518 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1519 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1520 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1521 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1522 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1523 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1524 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1525 int safe_room = 8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1526 enum utf_16_bom_type bom = CODING_UTF_16_BOM (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1527 int big_endian = CODING_UTF_16_ENDIAN (coding) == utf_16_big_endian;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1528 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1529 Lisp_Object attrs, charset_list;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1530 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1531
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1532 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1533
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1534 if (bom != utf_16_without_bom)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1535 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1536 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1537 if (big_endian)
89404
3e1d187b52c3 (Qutf_16_be_nosig, Qutf_16_be, Qutf_16_le_nosig)
Kenichi Handa <handa@m17n.org>
parents: 89394
diff changeset
1538 EMIT_TWO_BYTES (0xFE, 0xFF);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1539 else
89404
3e1d187b52c3 (Qutf_16_be_nosig, Qutf_16_be, Qutf_16_le_nosig)
Kenichi Handa <handa@m17n.org>
parents: 89394
diff changeset
1540 EMIT_TWO_BYTES (0xFF, 0xFE);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1541 CODING_UTF_16_BOM (coding) = utf_16_without_bom;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1542 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1543
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1544 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1545 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1546 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1547 c = *charbuf++;
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
1548 if (c >= MAX_UNICODE_CHAR)
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
1549 c = coding->default_char;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1550
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1551 if (c < 0x10000)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1552 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1553 if (big_endian)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1554 EMIT_TWO_BYTES (c >> 8, c & 0xFF);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1555 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1556 EMIT_TWO_BYTES (c & 0xFF, c >> 8);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1557 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1558 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1559 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1560 int c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1561
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1562 c -= 0x10000;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1563 c1 = (c >> 10) + 0xD800;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1564 c2 = (c & 0x3FF) + 0xDC00;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1565 if (big_endian)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1566 EMIT_FOUR_BYTES (c1 >> 8, c1 & 0xFF, c2 >> 8, c2 & 0xFF);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1567 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1568 EMIT_FOUR_BYTES (c1 & 0xFF, c1 >> 8, c2 & 0xFF, c2 >> 8);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1569 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1570 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1571 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1572 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1573 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1574 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1575 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1576
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1577
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1578 /*** 6. Old Emacs' internal format (emacs-mule) ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1579
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1580 /* Emacs' internal format for representation of multiple character
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1581 sets is a kind of multi-byte encoding, i.e. characters are
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1582 represented by variable-length sequences of one-byte codes.
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1583
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1584 ASCII characters and control characters (e.g. `tab', `newline') are
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1585 represented by one-byte sequences which are their ASCII codes, in
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1586 the range 0x00 through 0x7F.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1587
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1588 8-bit characters of the range 0x80..0x9F are represented by
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1589 two-byte sequences of LEADING_CODE_8_BIT_CONTROL and (their 8-bit
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1590 code + 0x20).
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1591
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1592 8-bit characters of the range 0xA0..0xFF are represented by
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1593 one-byte sequences which are their 8-bit code.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1594
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1595 The other characters are represented by a sequence of `base
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1596 leading-code', optional `extended leading-code', and one or two
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1597 `position-code's. The length of the sequence is determined by the
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1598 base leading-code. Leading-code takes the range 0x81 through 0x9D,
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1599 whereas extended leading-code and position-code take the range 0xA0
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1600 through 0xFF. See `charset.h' for more details about leading-code
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1601 and position-code.
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
1602
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1603 --- CODE RANGE of Emacs' internal format ---
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1604 character set range
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1605 ------------- -----
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1606 ascii 0x00..0x7F
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1607 eight-bit-control LEADING_CODE_8_BIT_CONTROL + 0xA0..0xBF
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1608 eight-bit-graphic 0xA0..0xBF
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1609 ELSE 0x81..0x9D + [0xA0..0xFF]+
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1610 ---------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1611
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1612 As this is the internal character representation, the format is
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1613 usually not used externally (i.e. in a file or in a data sent to a
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1614 process). But, it is possible to have a text externally in this
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1615 format (i.e. by encoding by the coding system `emacs-mule').
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1616
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1617 In that case, a sequence of one-byte codes has a slightly different
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1618 form.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1619
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1620 At first, all characters in eight-bit-control are represented by
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1621 one-byte sequences which are their 8-bit code.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1622
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1623 Next, character composition data are represented by the byte
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1624 sequence of the form: 0x80 METHOD BYTES CHARS COMPONENT ...,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1625 where,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1626 METHOD is 0xF0 plus one of composition method (enum
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1627 composition_method),
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1628
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1629 BYTES is 0xA0 plus a byte length of this composition data,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1630
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1631 CHARS is 0x20 plus a number of characters composed by this
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1632 data,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1633
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1634 COMPONENTs are characters of multibye form or composition
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1635 rules encoded by two-byte of ASCII codes.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1636
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1637 In addition, for backward compatibility, the following formats are
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1638 also recognized as composition data on decoding.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1639
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1640 0x80 MSEQ ...
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1641 0x80 0xFF MSEQ RULE MSEQ RULE ... MSEQ
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1642
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1643 Here,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1644 MSEQ is a multibyte form but in these special format:
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1645 ASCII: 0xA0 ASCII_CODE+0x80,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1646 other: LEADING_CODE+0x20 FOLLOWING-BYTE ...,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1647 RULE is a one byte code of the range 0xA0..0xF0 that
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1648 represents a composition rule.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1649 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1650
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1651 char emacs_mule_bytes[256];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1652
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1653 int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1654 emacs_mule_char (coding, src, nbytes, nchars, id)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1655 struct coding_system *coding;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1656 const unsigned char *src;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1657 int *nbytes, *nchars, *id;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1658 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1659 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1660 const unsigned char *src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1661 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1662 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1663 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1664 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1665 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1666
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1667 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1668 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1669 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1670 c = -c;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1671 charset = emacs_mule_charset[0];
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1672 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1673 else
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1674 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1675 switch (emacs_mule_bytes[c])
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1676 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1677 case 2:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1678 if (! (charset = emacs_mule_charset[c]))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1679 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1680 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1681 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1682 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1683 code = c & 0x7F;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1684 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1685
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1686 case 3:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1687 if (c == EMACS_MULE_LEADING_CODE_PRIVATE_11
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1688 || c == EMACS_MULE_LEADING_CODE_PRIVATE_12)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1689 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1690 ONE_MORE_BYTE (c);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1691 if (c < 0 || ! (charset = emacs_mule_charset[c]))
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1692 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1693 ONE_MORE_BYTE (c);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1694 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1695 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1696 code = c & 0x7F;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1697 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1698 else
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1699 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1700 if (! (charset = emacs_mule_charset[c]))
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1701 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1702 ONE_MORE_BYTE (c);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1703 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1704 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1705 code = (c & 0x7F) << 8;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1706 ONE_MORE_BYTE (c);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1707 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1708 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1709 code |= c & 0x7F;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1710 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1711 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1712
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1713 case 4:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1714 ONE_MORE_BYTE (c);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1715 if (c < 0 || ! (charset = emacs_mule_charset[c]))
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1716 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1717 ONE_MORE_BYTE (c);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1718 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1719 goto invalid_code;
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1720 code = (c & 0x7F) << 8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1721 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1722 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1723 goto invalid_code;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1724 code |= c & 0x7F;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1725 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1726
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1727 case 1:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1728 code = c;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1729 charset = CHARSET_FROM_ID (ASCII_BYTE_P (code)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1730 ? charset_ascii : charset_eight_bit);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1731 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1732
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1733 default:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1734 abort ();
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1735 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1736 c = DECODE_CHAR (charset, code);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1737 if (c < 0)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1738 goto invalid_code;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1739 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1740 *nbytes = src - src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1741 *nchars = consumed_chars;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1742 if (id)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1743 *id = charset->id;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1744 return c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1745
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1746 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1747 return -2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1748
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1749 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1750 return -1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1751 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1752
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1753
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1754 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1755 Check if a text is encoded in `emacs-mule'. If it is, return 1,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1756 else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1757
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1758 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1759 detect_coding_emacs_mule (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1760 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1761 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1762 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1763 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1764 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1765 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1766 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1767 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1768 int found = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1769
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1770 detect_info->checked |= CATEGORY_MASK_EMACS_MULE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1771 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1772 src += coding->head_ascii;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1773
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1774 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1775 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1776 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1777 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1778 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1779 continue;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1780 if (c == 0x80)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1781 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1782 /* Perhaps the start of composite character. We simple skip
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1783 it because analyzing it is too heavy for detecting. But,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1784 at least, we check that the composite character
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1785 constitues of more than 4 bytes. */
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1786 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1787
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1788 repeat:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1789 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1790 do
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1791 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1792 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1793 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1794 while (c >= 0xA0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1795
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1796 if (src - src_base <= 4)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1797 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1798 found = CATEGORY_MASK_EMACS_MULE;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1799 if (c == 0x80)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1800 goto repeat;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1801 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1802
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1803 if (c < 0x80)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1804 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1805 if (c < 0x20
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1806 && (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1807 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1808 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1809 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1810 {
89848
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1811 int more_bytes = emacs_mule_bytes[*src_base] - 1;
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1812
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1813 while (more_bytes > 0)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1814 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1815 ONE_MORE_BYTE (c);
89848
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1816 if (c < 0xA0)
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1817 {
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1818 src--; /* Unread the last byte. */
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1819 break;
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1820 }
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1821 more_bytes--;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1822 }
89848
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
1823 if (more_bytes != 0)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1824 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1825 found = CATEGORY_MASK_EMACS_MULE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1826 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1827 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1828 detect_info->rejected |= CATEGORY_MASK_EMACS_MULE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1829 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1830
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1831 no_more_source:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1832 if (src_base < src && coding->mode & CODING_MODE_LAST_BLOCK)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1833 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1834 detect_info->rejected |= CATEGORY_MASK_EMACS_MULE;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1835 return 0;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1836 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1837 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1838 return 1;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1839 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1840
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1841
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1842 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". */
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1843
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1844 /* Decode a character represented as a component of composition
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1845 sequence of Emacs 20/21 style at SRC. Set C to that character and
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1846 update SRC to the head of next character (or an encoded composition
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1847 rule). If SRC doesn't points a composition component, set C to -1.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1848 If SRC points an invalid byte sequence, global exit by a return
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1849 value 0. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1850
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1851 #define DECODE_EMACS_MULE_COMPOSITION_CHAR(buf) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1852 if (1) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1853 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1854 int c; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1855 int nbytes, nchars; \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1856 \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1857 if (src == src_end) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1858 break; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1859 c = emacs_mule_char (coding, src, &nbytes, &nchars, NULL);\
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1860 if (c < 0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1861 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1862 if (c == -2) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1863 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1864 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1865 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1866 *buf++ = c; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1867 src += nbytes; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1868 consumed_chars += nchars; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1869 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1870 else
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1871
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1872
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1873 /* Decode a composition rule represented as a component of composition
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1874 sequence of Emacs 20 style at SRC. Store the decoded rule in *BUF,
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1875 and increment BUF. If SRC points an invalid byte sequence, set C
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1876 to -1. */
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1877
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1878 #define DECODE_EMACS_MULE_COMPOSITION_RULE_20(buf) \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1879 do { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1880 int c, gref, nref; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1881 \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1882 if (src >= src_end) \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1883 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1884 ONE_MORE_BYTE_NO_CHECK (c); \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1885 c -= 0x20; \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1886 if (c < 0 || c >= 81) \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1887 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1888 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1889 gref = c / 9, nref = c % 9; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1890 *buf++ = COMPOSITION_ENCODE_RULE (gref, nref); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1891 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1892
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1893
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1894 /* Decode a composition rule represented as a component of composition
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1895 sequence of Emacs 21 style at SRC. Store the decoded rule in *BUF,
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1896 and increment BUF. If SRC points an invalid byte sequence, set C
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1897 to -1. */
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1898
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1899 #define DECODE_EMACS_MULE_COMPOSITION_RULE_21(buf) \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1900 do { \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1901 int gref, nref; \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1902 \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1903 if (src + 1>= src_end) \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1904 goto invalid_code; \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1905 ONE_MORE_BYTE_NO_CHECK (gref); \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1906 gref -= 0x20; \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1907 ONE_MORE_BYTE_NO_CHECK (nref); \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1908 nref -= 0x20; \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1909 if (gref < 0 || gref >= 81 \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1910 || nref < 0 || nref >= 81) \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1911 goto invalid_code; \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1912 *buf++ = COMPOSITION_ENCODE_RULE (gref, nref); \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1913 } while (0)
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1914
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1915
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1916 #define DECODE_EMACS_MULE_21_COMPOSITION(c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1917 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1918 /* Emacs 21 style format. The first three bytes at SRC are \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1919 (METHOD - 0xF2), (BYTES - 0xA0), (CHARS - 0xA0), where BYTES is \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1920 the byte length of this composition information, CHARS is the \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1921 number of characters composed by this composition. */ \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1922 enum composition_method method = c - 0xF2; \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1923 int *charbuf_base = charbuf; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1924 int from, to; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1925 int consumed_chars_limit; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1926 int nbytes, nchars; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1927 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1928 ONE_MORE_BYTE (c); \
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1929 if (c < 0) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1930 goto invalid_code; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1931 nbytes = c - 0xA0; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1932 if (nbytes < 3) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1933 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1934 ONE_MORE_BYTE (c); \
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1935 if (c < 0) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1936 goto invalid_code; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1937 nchars = c - 0xA0; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1938 from = coding->produced + char_offset; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1939 to = from + nchars; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1940 ADD_COMPOSITION_DATA (charbuf, from, to, method); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1941 consumed_chars_limit = consumed_chars_base + nbytes; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1942 if (method != COMPOSITION_RELATIVE) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1943 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1944 int i = 0; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1945 while (consumed_chars < consumed_chars_limit) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1946 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1947 if (i % 2 && method != COMPOSITION_WITH_ALTCHARS) \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1948 DECODE_EMACS_MULE_COMPOSITION_RULE_21 (charbuf); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1949 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1950 DECODE_EMACS_MULE_COMPOSITION_CHAR (charbuf); \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1951 i++; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1952 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1953 if (consumed_chars < consumed_chars_limit) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1954 goto invalid_code; \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1955 charbuf_base[0] -= i; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1956 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1957 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1958
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1959
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1960 #define DECODE_EMACS_MULE_20_RELATIVE_COMPOSITION(c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1961 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1962 /* Emacs 20 style format for relative composition. */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1963 /* Store multibyte form of characters to be composed. */ \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1964 enum composition_method method = COMPOSITION_RELATIVE; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1965 int components[MAX_COMPOSITION_COMPONENTS * 2 - 1]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1966 int *buf = components; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1967 int i, j; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1968 int from, to; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1969 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1970 src = src_base; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1971 ONE_MORE_BYTE (c); /* skip 0x80 */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1972 for (i = 0; i < MAX_COMPOSITION_COMPONENTS; i++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1973 DECODE_EMACS_MULE_COMPOSITION_CHAR (buf); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1974 if (i < 2) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1975 goto invalid_code; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1976 from = coding->produced_char + char_offset; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1977 to = from + i; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1978 ADD_COMPOSITION_DATA (charbuf, from, to, method); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1979 for (j = 0; j < i; j++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1980 *charbuf++ = components[j]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1981 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1982
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1983
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1984 #define DECODE_EMACS_MULE_20_RULEBASE_COMPOSITION(c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1985 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1986 /* Emacs 20 style format for rule-base composition. */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1987 /* Store multibyte form of characters to be composed. */ \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1988 enum composition_method method = COMPOSITION_WITH_RULE; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1989 int components[MAX_COMPOSITION_COMPONENTS * 2 - 1]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1990 int *buf = components; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1991 int i, j; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1992 int from, to; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1993 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1994 DECODE_EMACS_MULE_COMPOSITION_CHAR (buf); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1995 for (i = 0; i < MAX_COMPOSITION_COMPONENTS; i++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1996 { \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
1997 DECODE_EMACS_MULE_COMPOSITION_RULE_20 (buf); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1998 DECODE_EMACS_MULE_COMPOSITION_CHAR (buf); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1999 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2000 if (i < 1 || (buf - components) % 2 == 0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2001 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2002 if (charbuf + i + (i / 2) + 1 < charbuf_end) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2003 goto no_more_source; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2004 from = coding->produced_char + char_offset; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2005 to = from + i; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2006 ADD_COMPOSITION_DATA (buf, from, to, method); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2007 for (j = 0; j < i; j++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2008 *charbuf++ = components[j]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2009 for (j = 0; j < i; j += 2) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2010 *charbuf++ = components[j]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2011 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2012
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2013
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2014 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2015 decode_coding_emacs_mule (coding)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2016 struct coding_system *coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2017 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2018 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2019 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2020 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2021 int *charbuf = coding->charbuf;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2022 int *charbuf_end = charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2023 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2024 int multibytep = coding->src_multibyte;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2025 Lisp_Object attrs, charset_list;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2026 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2027 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2028 int last_id = charset_ascii;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2029
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2030 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2031
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2032 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2033 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2034 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2035
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2036 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2037 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2038
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2039 if (charbuf >= charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2040 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2041
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2042 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2043 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2044 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2045 *charbuf++ = -c;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2046 char_offset++;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2047 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2048 else if (c < 0x80)
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2049 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2050 *charbuf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2051 char_offset++;
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2052 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2053 else if (c == 0x80)
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2054 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2055 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2056 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2057 goto invalid_code;
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2058 if (c - 0xF2 >= COMPOSITION_RELATIVE
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2059 && c - 0xF2 <= COMPOSITION_WITH_RULE_ALTCHARS)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2060 DECODE_EMACS_MULE_21_COMPOSITION (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2061 else if (c < 0xC0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2062 DECODE_EMACS_MULE_20_RELATIVE_COMPOSITION (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2063 else if (c == 0xFF)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2064 DECODE_EMACS_MULE_20_RULEBASE_COMPOSITION (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2065 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2066 goto invalid_code;
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2067 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2068 else if (c < 0xA0 && emacs_mule_bytes[c] > 1)
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2069 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2070 int nbytes, nchars;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2071 int id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2072
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2073 src = src_base;
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2074 consumed_chars = consumed_chars_base;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2075 c = emacs_mule_char (coding, src, &nbytes, &nchars, &id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2076 if (c < 0)
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2077 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2078 if (c == -2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2079 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2080 goto invalid_code;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2081 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2082 if (last_id != id)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2083 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2084 if (last_id != charset_ascii)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2085 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2086 last_id = id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2087 last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2088 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2089 *charbuf++ = c;
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2090 src += nbytes;
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2091 consumed_chars += nchars;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2092 char_offset++;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2093 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2094 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2095
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2096 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2097 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2098 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2099 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2100 *charbuf++ = ASCII_BYTE_P (c) ? c : BYTE8_TO_CHAR (c);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2101 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2102 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2103 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2104
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2105 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2106 if (last_id != charset_ascii)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2107 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2108 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2109 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2110 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2111 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2112
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2113
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2114 #define EMACS_MULE_LEADING_CODES(id, codes) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2115 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2116 if (id < 0xA0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2117 codes[0] = id, codes[1] = 0; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2118 else if (id < 0xE0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2119 codes[0] = 0x9A, codes[1] = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2120 else if (id < 0xF0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2121 codes[0] = 0x9B, codes[1] = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2122 else if (id < 0xF5) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2123 codes[0] = 0x9C, codes[1] = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2124 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2125 codes[0] = 0x9D, codes[1] = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2126 } while (0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2127
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2128
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2129 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2130 encode_coding_emacs_mule (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2131 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2132 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2133 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2134 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2135 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2136 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2137 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2138 int safe_room = 8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2139 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2140 Lisp_Object attrs, charset_list;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2141 int c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2142 int preferred_charset_id = -1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2143
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2144 CODING_GET_INFO (coding, attrs, charset_list);
89644
fc9cda144ffc (encode_coding_emacs_mule): Resync charset_list to
Kenichi Handa <handa@m17n.org>
parents: 89642
diff changeset
2145 if (! EQ (charset_list, Vemacs_mule_charset_list))
fc9cda144ffc (encode_coding_emacs_mule): Resync charset_list to
Kenichi Handa <handa@m17n.org>
parents: 89642
diff changeset
2146 {
fc9cda144ffc (encode_coding_emacs_mule): Resync charset_list to
Kenichi Handa <handa@m17n.org>
parents: 89642
diff changeset
2147 CODING_ATTR_CHARSET_LIST (attrs)
fc9cda144ffc (encode_coding_emacs_mule): Resync charset_list to
Kenichi Handa <handa@m17n.org>
parents: 89642
diff changeset
2148 = charset_list = Vemacs_mule_charset_list;
fc9cda144ffc (encode_coding_emacs_mule): Resync charset_list to
Kenichi Handa <handa@m17n.org>
parents: 89642
diff changeset
2149 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2150
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2151 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2152 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2153 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2154 c = *charbuf++;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2155
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2156 if (c < 0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2157 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2158 /* Handle an annotation. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2159 switch (*charbuf)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2160 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2161 case CODING_ANNOTATE_COMPOSITION_MASK:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2162 /* Not yet implemented. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2163 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2164 case CODING_ANNOTATE_CHARSET_MASK:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2165 preferred_charset_id = charbuf[3];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2166 if (preferred_charset_id >= 0
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2167 && NILP (Fmemq (make_number (preferred_charset_id),
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2168 charset_list)))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2169 preferred_charset_id = -1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2170 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2171 default:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2172 abort ();
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2173 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2174 charbuf += -c - 1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2175 continue;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2176 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2177
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2178 if (ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2179 EMIT_ONE_ASCII_BYTE (c);
88690
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
2180 else if (CHAR_BYTE8_P (c))
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
2181 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
2182 c = CHAR_TO_BYTE8 (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
2183 EMIT_ONE_BYTE (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
2184 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2185 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2186 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2187 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2188 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2189 int dimension;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2190 int emacs_mule_id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2191 unsigned char leading_codes[2];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2192
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2193 if (preferred_charset_id >= 0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2194 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2195 charset = CHARSET_FROM_ID (preferred_charset_id);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2196 if (! CHAR_CHARSET_P (c, charset))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2197 charset = char_charset (c, charset_list, NULL);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2198 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2199 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2200 charset = char_charset (c, charset_list, &code);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2201 if (! charset)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2202 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2203 c = coding->default_char;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2204 if (ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2205 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2206 EMIT_ONE_ASCII_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2207 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2208 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2209 charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2210 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2211 dimension = CHARSET_DIMENSION (charset);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2212 emacs_mule_id = CHARSET_EMACS_MULE_ID (charset);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2213 EMACS_MULE_LEADING_CODES (emacs_mule_id, leading_codes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2214 EMIT_ONE_BYTE (leading_codes[0]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2215 if (leading_codes[1])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2216 EMIT_ONE_BYTE (leading_codes[1]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2217 if (dimension == 1)
89642
e97441b6244b (encode_coding_emacs_mule): Emit bytes with MSB.
Kenichi Handa <handa@m17n.org>
parents: 89575
diff changeset
2218 EMIT_ONE_BYTE (code | 0x80);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2219 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2220 {
89642
e97441b6244b (encode_coding_emacs_mule): Emit bytes with MSB.
Kenichi Handa <handa@m17n.org>
parents: 89575
diff changeset
2221 code |= 0x8080;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2222 EMIT_ONE_BYTE (code >> 8);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2223 EMIT_ONE_BYTE (code & 0xFF);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2224 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2225 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2226 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2227 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2228 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2229 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2230 return 0;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2231 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2232
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2233
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2234 /*** 7. ISO2022 handlers ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2235
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2236 /* The following note describes the coding system ISO2022 briefly.
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2237 Since the intention of this note is to help understand the
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2238 functions in this file, some parts are NOT ACCURATE or are OVERLY
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2239 SIMPLIFIED. For thorough understanding, please refer to the
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2240 original document of ISO2022. This is equivalent to the standard
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2241 ECMA-35, obtainable from <URL:http://www.ecma.ch/> (*).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2242
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2243 ISO2022 provides many mechanisms to encode several character sets
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2244 in 7-bit and 8-bit environments. For 7-bit environments, all text
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2245 is encoded using bytes less than 128. This may make the encoded
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2246 text a little bit longer, but the text passes more easily through
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2247 several types of gateway, some of which strip off the MSB (Most
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2248 Significant Bit).
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2249
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2250 There are two kinds of character sets: control character sets and
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2251 graphic character sets. The former contain control characters such
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2252 as `newline' and `escape' to provide control functions (control
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2253 functions are also provided by escape sequences). The latter
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2254 contain graphic characters such as 'A' and '-'. Emacs recognizes
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2255 two control character sets and many graphic character sets.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2256
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2257 Graphic character sets are classified into one of the following
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2258 four classes, according to the number of bytes (DIMENSION) and
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2259 number of characters in one dimension (CHARS) of the set:
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2260 - DIMENSION1_CHARS94
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2261 - DIMENSION1_CHARS96
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2262 - DIMENSION2_CHARS94
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2263 - DIMENSION2_CHARS96
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2264
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2265 In addition, each character set is assigned an identification tag,
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2266 unique for each set, called the "final character" (denoted as <F>
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2267 hereafter). The <F> of each character set is decided by ECMA(*)
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2268 when it is registered in ISO. The code range of <F> is 0x30..0x7F
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2269 (0x30..0x3F are for private use only).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2270
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2271 Note (*): ECMA = European Computer Manufacturers Association
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2272
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2273 Here are examples of graphic character sets [NAME(<F>)]:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2274 o DIMENSION1_CHARS94 -- ASCII('B'), right-half-of-JISX0201('I'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2275 o DIMENSION1_CHARS96 -- right-half-of-ISO8859-1('A'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2276 o DIMENSION2_CHARS94 -- GB2312('A'), JISX0208('B'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2277 o DIMENSION2_CHARS96 -- none for the moment
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2278
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2279 A code area (1 byte=8 bits) is divided into 4 areas, C0, GL, C1, and GR.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2280 C0 [0x00..0x1F] -- control character plane 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2281 GL [0x20..0x7F] -- graphic character plane 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2282 C1 [0x80..0x9F] -- control character plane 1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2283 GR [0xA0..0xFF] -- graphic character plane 1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2284
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2285 A control character set is directly designated and invoked to C0 or
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2286 C1 by an escape sequence. The most common case is that:
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2287 - ISO646's control character set is designated/invoked to C0, and
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2288 - ISO6429's control character set is designated/invoked to C1,
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2289 and usually these designations/invocations are omitted in encoded
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2290 text. In a 7-bit environment, only C0 can be used, and a control
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2291 character for C1 is encoded by an appropriate escape sequence to
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2292 fit into the environment. All control characters for C1 are
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2293 defined to have corresponding escape sequences.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2294
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2295 A graphic character set is at first designated to one of four
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2296 graphic registers (G0 through G3), then these graphic registers are
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2297 invoked to GL or GR. These designations and invocations can be
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2298 done independently. The most common case is that G0 is invoked to
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2299 GL, G1 is invoked to GR, and ASCII is designated to G0. Usually
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2300 these invocations and designations are omitted in encoded text.
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2301 In a 7-bit environment, only GL can be used.
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2302
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2303 When a graphic character set of CHARS94 is invoked to GL, codes
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2304 0x20 and 0x7F of the GL area work as control characters SPACE and
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2305 DEL respectively, and codes 0xA0 and 0xFF of the GR area should not
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2306 be used.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2307
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2308 There are two ways of invocation: locking-shift and single-shift.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2309 With locking-shift, the invocation lasts until the next different
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2310 invocation, whereas with single-shift, the invocation affects the
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2311 following character only and doesn't affect the locking-shift
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2312 state. Invocations are done by the following control characters or
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2313 escape sequences:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2314
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2315 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2316 abbrev function cntrl escape seq description
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2317 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2318 SI/LS0 (shift-in) 0x0F none invoke G0 into GL
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2319 SO/LS1 (shift-out) 0x0E none invoke G1 into GL
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2320 LS2 (locking-shift-2) none ESC 'n' invoke G2 into GL
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2321 LS3 (locking-shift-3) none ESC 'o' invoke G3 into GL
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2322 LS1R (locking-shift-1 right) none ESC '~' invoke G1 into GR (*)
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2323 LS2R (locking-shift-2 right) none ESC '}' invoke G2 into GR (*)
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2324 LS3R (locking-shift 3 right) none ESC '|' invoke G3 into GR (*)
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2325 SS2 (single-shift-2) 0x8E ESC 'N' invoke G2 for one char
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2326 SS3 (single-shift-3) 0x8F ESC 'O' invoke G3 for one char
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2327 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2328 (*) These are not used by any known coding system.
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2329
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2330 Control characters for these functions are defined by macros
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2331 ISO_CODE_XXX in `coding.h'.
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2332
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2333 Designations are done by the following escape sequences:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2334 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2335 escape sequence description
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2336 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2337 ESC '(' <F> designate DIMENSION1_CHARS94<F> to G0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2338 ESC ')' <F> designate DIMENSION1_CHARS94<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2339 ESC '*' <F> designate DIMENSION1_CHARS94<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2340 ESC '+' <F> designate DIMENSION1_CHARS94<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2341 ESC ',' <F> designate DIMENSION1_CHARS96<F> to G0 (*)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2342 ESC '-' <F> designate DIMENSION1_CHARS96<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2343 ESC '.' <F> designate DIMENSION1_CHARS96<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2344 ESC '/' <F> designate DIMENSION1_CHARS96<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2345 ESC '$' '(' <F> designate DIMENSION2_CHARS94<F> to G0 (**)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2346 ESC '$' ')' <F> designate DIMENSION2_CHARS94<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2347 ESC '$' '*' <F> designate DIMENSION2_CHARS94<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2348 ESC '$' '+' <F> designate DIMENSION2_CHARS94<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2349 ESC '$' ',' <F> designate DIMENSION2_CHARS96<F> to G0 (*)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2350 ESC '$' '-' <F> designate DIMENSION2_CHARS96<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2351 ESC '$' '.' <F> designate DIMENSION2_CHARS96<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2352 ESC '$' '/' <F> designate DIMENSION2_CHARS96<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2353 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2354
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2355 In this list, "DIMENSION1_CHARS94<F>" means a graphic character set
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2356 of dimension 1, chars 94, and final character <F>, etc...
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2357
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2358 Note (*): Although these designations are not allowed in ISO2022,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2359 Emacs accepts them on decoding, and produces them on encoding
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2360 CHARS96 character sets in a coding system which is characterized as
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2361 7-bit environment, non-locking-shift, and non-single-shift.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2362
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2363 Note (**): If <F> is '@', 'A', or 'B', the intermediate character
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2364 '(' must be omitted. We refer to this as "short-form" hereafter.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2365
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2366 Now you may notice that there are a lot of ways of encoding the
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2367 same multilingual text in ISO2022. Actually, there exist many
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2368 coding systems such as Compound Text (used in X11's inter client
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2369 communication, ISO-2022-JP (used in Japanese Internet), ISO-2022-KR
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2370 (used in Korean Internet), EUC (Extended UNIX Code, used in Asian
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2371 localized platforms), and all of these are variants of ISO2022.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2372
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2373 In addition to the above, Emacs handles two more kinds of escape
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2374 sequences: ISO6429's direction specification and Emacs' private
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2375 sequence for specifying character composition.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2376
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2377 ISO6429's direction specification takes the following form:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2378 o CSI ']' -- end of the current direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2379 o CSI '0' ']' -- end of the current direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2380 o CSI '1' ']' -- start of left-to-right text
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2381 o CSI '2' ']' -- start of right-to-left text
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2382 The control character CSI (0x9B: control sequence introducer) is
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2383 abbreviated to the escape sequence ESC '[' in a 7-bit environment.
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2384
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2385 Character composition specification takes the following form:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2386 o ESC '0' -- start relative composition
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2387 o ESC '1' -- end composition
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2388 o ESC '2' -- start rule-base composition (*)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2389 o ESC '3' -- start relative composition with alternate chars (**)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2390 o ESC '4' -- start rule-base composition with alternate chars (**)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2391 Since these are not standard escape sequences of any ISO standard,
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2392 the use of them with these meanings is restricted to Emacs only.
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2393
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2394 (*) This form is used only in Emacs 20.7 and older versions,
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2395 but newer versions can safely decode it.
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2396 (**) This form is used only in Emacs 21.1 and newer versions,
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2397 and older versions can't decode it.
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2398
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2399 Here's a list of example usages of these composition escape
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2400 sequences (categorized by `enum composition_method').
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2401
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2402 COMPOSITION_RELATIVE:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2403 ESC 0 CHAR [ CHAR ] ESC 1
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2404 COMPOSITION_WITH_RULE:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2405 ESC 2 CHAR [ RULE CHAR ] ESC 1
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2406 COMPOSITION_WITH_ALTCHARS:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2407 ESC 3 ALTCHAR [ ALTCHAR ] ESC 0 CHAR [ CHAR ] ESC 1
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2408 COMPOSITION_WITH_RULE_ALTCHARS:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2409 ESC 4 ALTCHAR [ RULE ALTCHAR ] ESC 0 CHAR [ CHAR ] ESC 1 */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2410
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2411 enum iso_code_class_type iso_code_class[256];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2412
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2413 #define SAFE_CHARSET_P(coding, id) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2414 ((id) <= (coding)->max_charset_id \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2415 && (coding)->safe_charsets[id] >= 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2416
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2417
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2418 #define SHIFT_OUT_OK(category) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2419 (CODING_ISO_INITIAL (&coding_categories[category], 1) >= 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2420
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2421 static void
88631
780b91d4a7e5 (setup_iso_safe_charsets): Fix arg decl for K&R.
Dave Love <fx@gnu.org>
parents: 88607
diff changeset
2422 setup_iso_safe_charsets (attrs)
780b91d4a7e5 (setup_iso_safe_charsets): Fix arg decl for K&R.
Dave Love <fx@gnu.org>
parents: 88607
diff changeset
2423 Lisp_Object attrs;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2424 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2425 Lisp_Object charset_list, safe_charsets;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2426 Lisp_Object request;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2427 Lisp_Object reg_usage;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2428 Lisp_Object tail;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2429 int reg94, reg96;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2430 int flags = XINT (AREF (attrs, coding_attr_iso_flags));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2431 int max_charset_id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2432
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2433 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2434 if ((flags & CODING_ISO_FLAG_FULL_SUPPORT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2435 && ! EQ (charset_list, Viso_2022_charset_list))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2436 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2437 CODING_ATTR_CHARSET_LIST (attrs)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2438 = charset_list = Viso_2022_charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2439 ASET (attrs, coding_attr_safe_charsets, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2440 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2441
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2442 if (STRINGP (AREF (attrs, coding_attr_safe_charsets)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2443 return;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2444
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2445 max_charset_id = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2446 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2447 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2448 int id = XINT (XCAR (tail));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2449 if (max_charset_id < id)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2450 max_charset_id = id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2451 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2452
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2453 safe_charsets = Fmake_string (make_number (max_charset_id + 1),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2454 make_number (255));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2455 request = AREF (attrs, coding_attr_iso_request);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2456 reg_usage = AREF (attrs, coding_attr_iso_usage);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2457 reg94 = XINT (XCAR (reg_usage));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2458 reg96 = XINT (XCDR (reg_usage));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2459
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2460 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2461 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2462 Lisp_Object id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2463 Lisp_Object reg;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2464 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2465
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2466 id = XCAR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2467 charset = CHARSET_FROM_ID (XINT (id));
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2468 reg = Fcdr (Fassq (id, request));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2469 if (! NILP (reg))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2470 SSET (safe_charsets, XINT (id), XINT (reg));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2471 else if (charset->iso_chars_96)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2472 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2473 if (reg96 < 4)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2474 SSET (safe_charsets, XINT (id), reg96);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2475 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2476 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2477 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2478 if (reg94 < 4)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2479 SSET (safe_charsets, XINT (id), reg94);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2480 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2481 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2482 ASET (attrs, coding_attr_safe_charsets, safe_charsets);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2483 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2484
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2485
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2486 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2487 Check if a text is encoded in one of ISO-2022 based codig systems.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2488 If it is, return 1, else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2489
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2490 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2491 detect_coding_iso_2022 (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2492 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2493 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2494 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2495 const unsigned char *src = coding->source, *src_base = src;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2496 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2497 int multibytep = coding->src_multibyte;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2498 int single_shifting = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2499 int id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2500 int c, c1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2501 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2502 int i;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2503 int rejected = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2504 int found = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2505
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2506 detect_info->checked |= CATEGORY_MASK_ISO;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2507
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2508 for (i = coding_category_iso_7; i <= coding_category_iso_8_else; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2509 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2510 struct coding_system *this = &(coding_categories[i]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2511 Lisp_Object attrs, val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2512
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2513 attrs = CODING_ID_ATTRS (this->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2514 if (CODING_ISO_FLAGS (this) & CODING_ISO_FLAG_FULL_SUPPORT
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2515 && ! EQ (CODING_ATTR_SAFE_CHARSETS (attrs), Viso_2022_charset_list))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2516 setup_iso_safe_charsets (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2517 val = CODING_ATTR_SAFE_CHARSETS (attrs);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2518 this->max_charset_id = SCHARS (val) - 1;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2519 this->safe_charsets = (char *) SDATA (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2520 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2521
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2522 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2523 src += coding->head_ascii;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2524
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2525 while (rejected != CATEGORY_MASK_ISO)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2526 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2527 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2528 ONE_MORE_BYTE (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2529 switch (c)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2530 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2531 case ISO_CODE_ESC:
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
2532 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
2533 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
2534 single_shifting = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2535 ONE_MORE_BYTE (c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2536 if (c >= '(' && c <= '/')
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2537 {
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2538 /* Designation sequence for a charset of dimension 1. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2539 ONE_MORE_BYTE (c1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2540 if (c1 < ' ' || c1 >= 0x80
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2541 || (id = iso_charset_table[0][c >= ','][c1]) < 0)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2542 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2543 break;
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2544 }
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2545 else if (c == '$')
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2546 {
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2547 /* Designation sequence for a charset of dimension 2. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2548 ONE_MORE_BYTE (c);
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2549 if (c >= '@' && c <= 'B')
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2550 /* Designation for JISX0208.1978, GB2312, or JISX0208. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2551 id = 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
2552 else if (c >= '(' && c <= '/')
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
2553 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2554 ONE_MORE_BYTE (c1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2555 if (c1 < ' ' || c1 >= 0x80
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2556 || (id = iso_charset_table[1][c >= ','][c1]) < 0)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2557 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2558 break;
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
2559 }
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2560 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2561 /* Invalid designation sequence. Just ignore it. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2562 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2563 }
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
2564 else if (c == 'N' || c == 'O')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2565 {
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
2566 /* ESC <Fe> for SS2 or SS3. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2567 single_shifting = 1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2568 rejected |= CATEGORY_MASK_ISO_7BIT | CATEGORY_MASK_ISO_8BIT;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2569 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2570 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2571 else if (c >= '0' && c <= '4')
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2572 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2573 /* ESC <Fp> for start/end composition. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2574 found |= CATEGORY_MASK_ISO;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2575 break;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2576 }
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
2577 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2578 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2579 /* Invalid escape sequence. Just ignore it. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2580 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2581 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2582
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2583 /* We found a valid designation sequence for CHARSET. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2584 rejected |= CATEGORY_MASK_ISO_8BIT;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2585 if (SAFE_CHARSET_P (&coding_categories[coding_category_iso_7],
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2586 id))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2587 found |= CATEGORY_MASK_ISO_7;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2588 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2589 rejected |= CATEGORY_MASK_ISO_7;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2590 if (SAFE_CHARSET_P (&coding_categories[coding_category_iso_7_tight],
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2591 id))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2592 found |= CATEGORY_MASK_ISO_7_TIGHT;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2593 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2594 rejected |= CATEGORY_MASK_ISO_7_TIGHT;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2595 if (SAFE_CHARSET_P (&coding_categories[coding_category_iso_7_else],
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2596 id))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2597 found |= 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
2598 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2599 rejected |= CATEGORY_MASK_ISO_7_ELSE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2600 if (SAFE_CHARSET_P (&coding_categories[coding_category_iso_8_else],
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2601 id))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2602 found |= CATEGORY_MASK_ISO_8_ELSE;
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
2603 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2604 rejected |= CATEGORY_MASK_ISO_8_ELSE;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2605 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2606
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2607 case ISO_CODE_SO:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2608 case ISO_CODE_SI:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2609 /* Locking shift out/in. */
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
2610 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
2611 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
2612 single_shifting = 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2613 rejected |= CATEGORY_MASK_ISO_7BIT | CATEGORY_MASK_ISO_8BIT;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2614 found |= CATEGORY_MASK_ISO_ELSE;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2615 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2616
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2617 case ISO_CODE_CSI:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2618 /* Control sequence introducer. */
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
2619 single_shifting = 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2620 rejected |= CATEGORY_MASK_ISO_7BIT | CATEGORY_MASK_ISO_7_ELSE;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2621 found |= CATEGORY_MASK_ISO_8_ELSE;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2622 goto check_extra_latin;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2623
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2624 case ISO_CODE_SS2:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2625 case ISO_CODE_SS3:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2626 /* Single shift. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2627 if (inhibit_iso_escape_detection)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2628 break;
89780
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
2629 single_shifting = 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2630 rejected |= CATEGORY_MASK_ISO_7BIT;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2631 if (CODING_ISO_FLAGS (&coding_categories[coding_category_iso_8_1])
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2632 & CODING_ISO_FLAG_SINGLE_SHIFT)
89780
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
2633 found |= CATEGORY_MASK_ISO_8_1, single_shifting = 1;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2634 if (CODING_ISO_FLAGS (&coding_categories[coding_category_iso_8_2])
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2635 & CODING_ISO_FLAG_SINGLE_SHIFT)
89780
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
2636 found |= CATEGORY_MASK_ISO_8_2, single_shifting = 1;
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
2637 if (single_shifting)
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
2638 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2639 goto check_extra_latin;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2640
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2641 default:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2642 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2643 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2644 if (c < 0x80)
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
2645 {
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
2646 single_shifting = 0;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
2647 break;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
2648 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2649 if (c >= 0xA0)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
2650 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2651 rejected |= CATEGORY_MASK_ISO_7BIT | CATEGORY_MASK_ISO_7_ELSE;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2652 found |= 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
2653 /* Check the length of succeeding codes of the range
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2654 0xA0..0FF. If the byte length is even, we include
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2655 CATEGORY_MASK_ISO_8_2 in `found'. We can check this
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2656 only when we are not single shifting. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2657 if (! single_shifting
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2658 && ! (rejected & 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
2659 {
29299
b33b38d81020 (detect_coding_iso2022): Fix code for checking
Kenichi Handa <handa@m17n.org>
parents: 29275
diff changeset
2660 int i = 1;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2661 while (src < src_end)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2662 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2663 ONE_MORE_BYTE (c);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2664 if (c < 0xA0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2665 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2666 i++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2667 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2668
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2669 if (i & 1 && src < src_end)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2670 rejected |= 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
2671 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2672 found |= 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
2673 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2674 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2675 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2676 check_extra_latin:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2677 single_shifting = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2678 if (! VECTORP (Vlatin_extra_code_table)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2679 || NILP (XVECTOR (Vlatin_extra_code_table)->contents[c]))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2680 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2681 rejected = CATEGORY_MASK_ISO;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2682 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2683 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2684 if (CODING_ISO_FLAGS (&coding_categories[coding_category_iso_8_1])
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2685 & CODING_ISO_FLAG_LATIN_EXTRA)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2686 found |= CATEGORY_MASK_ISO_8_1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2687 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2688 rejected |= CATEGORY_MASK_ISO_8_1;
89780
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
2689 rejected |= CATEGORY_MASK_ISO_8_2;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2690 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2691 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2692 detect_info->rejected |= CATEGORY_MASK_ISO;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2693 return 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2694
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2695 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2696 detect_info->rejected |= rejected;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2697 detect_info->found |= (found & ~rejected);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2698 return 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2699 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2700
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2701
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2702 /* Set designation state into CODING. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2703 #define DECODE_DESIGNATION(reg, dim, chars_96, final) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2704 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2705 int id, prev; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2706 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2707 if (final < '0' || final >= 128 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2708 || ((id = ISO_CHARSET_TABLE (dim, chars_96, final)) < 0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2709 || !SAFE_CHARSET_P (coding, id)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2710 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2711 CODING_ISO_DESIGNATION (coding, reg) = -2; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2712 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2713 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2714 prev = CODING_ISO_DESIGNATION (coding, reg); \
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2715 if (id == charset_jisx0201_roman) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2716 { \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2717 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_USE_ROMAN) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2718 id = charset_ascii; \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2719 } \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2720 else if (id == charset_jisx0208_1978) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2721 { \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2722 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_USE_OLDJIS) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2723 id = charset_jisx0208; \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
2724 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2725 CODING_ISO_DESIGNATION (coding, reg) = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2726 /* If there was an invalid designation to REG previously, and this \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2727 designation is ASCII to REG, we should keep this designation \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2728 sequence. */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2729 if (prev == -2 && id == charset_ascii) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2730 goto invalid_code; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2731 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2732
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2733
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2734 #define MAYBE_FINISH_COMPOSITION() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2735 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2736 int i; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2737 if (composition_state == COMPOSING_NO) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2738 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2739 /* It is assured that we have enough room for producing \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2740 characters stored in the table `components'. */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2741 if (charbuf + component_idx > charbuf_end) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2742 goto no_more_source; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2743 composition_state = COMPOSING_NO; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2744 if (method == COMPOSITION_RELATIVE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2745 || method == COMPOSITION_WITH_ALTCHARS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2746 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2747 for (i = 0; i < component_idx; i++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2748 *charbuf++ = components[i]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2749 char_offset += component_idx; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2750 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2751 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2752 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2753 for (i = 0; i < component_idx; i += 2) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2754 *charbuf++ = components[i]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2755 char_offset += (component_idx / 2) + 1; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2756 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2757 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2758
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2759
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2760 /* Handle composition start sequence ESC 0, ESC 2, ESC 3, or ESC 4.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2761 ESC 0 : relative composition : ESC 0 CHAR ... ESC 1
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2762 ESC 2 : rulebase composition : ESC 2 CHAR RULE CHAR RULE ... CHAR ESC 1
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2763 ESC 3 : altchar composition : ESC 3 CHAR ... ESC 0 CHAR ... ESC 1
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2764 ESC 4 : alt&rule composition : ESC 4 CHAR RULE ... CHAR ESC 0 CHAR ... ESC 1
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2765 */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2766
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2767 #define DECODE_COMPOSITION_START(c1) \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2768 do { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2769 if (c1 == '0' \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2770 && composition_state == COMPOSING_COMPONENT_RULE) \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2771 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2772 component_len = component_idx; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2773 composition_state = COMPOSING_CHAR; \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2774 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2775 else \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2776 { \
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2777 const unsigned char *p; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2778 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2779 MAYBE_FINISH_COMPOSITION (); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2780 if (charbuf + MAX_COMPOSITION_COMPONENTS > charbuf_end) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2781 goto no_more_source; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2782 for (p = src; p < src_end - 1; p++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2783 if (*p == ISO_CODE_ESC && p[1] == '1') \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2784 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2785 if (p == src_end - 1) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2786 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2787 if (coding->mode & CODING_MODE_LAST_BLOCK) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2788 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2789 goto no_more_source; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2790 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2791 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2792 /* This is surely the start of a composition. */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2793 method = (c1 == '0' ? COMPOSITION_RELATIVE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2794 : c1 == '2' ? COMPOSITION_WITH_RULE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2795 : c1 == '3' ? COMPOSITION_WITH_ALTCHARS \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2796 : COMPOSITION_WITH_RULE_ALTCHARS); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2797 composition_state = (c1 <= '2' ? COMPOSING_CHAR \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2798 : COMPOSING_COMPONENT_CHAR); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2799 component_idx = component_len = 0; \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2800 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2801 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2802
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2803
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2804 /* Handle compositoin end sequence ESC 1. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2805
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2806 #define DECODE_COMPOSITION_END() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2807 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2808 int nchars = (component_len > 0 ? component_idx - component_len \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2809 : method == COMPOSITION_RELATIVE ? component_idx \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2810 : (component_idx + 1) / 2); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2811 int i; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2812 int *saved_charbuf = charbuf; \
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2813 int from = char_offset; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2814 int to = from + nchars; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2815 \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2816 ADD_COMPOSITION_DATA (charbuf, from, to, method); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2817 if (method != COMPOSITION_RELATIVE) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2818 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2819 if (component_len == 0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2820 for (i = 0; i < component_idx; i++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2821 *charbuf++ = components[i]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2822 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2823 for (i = 0; i < component_len; i++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2824 *charbuf++ = components[i]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2825 *saved_charbuf = saved_charbuf - charbuf; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2826 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2827 if (method == COMPOSITION_WITH_RULE) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2828 for (i = 0; i < component_idx; i += 2, char_offset++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2829 *charbuf++ = components[i]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2830 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2831 for (i = component_len; i < component_idx; i++, char_offset++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2832 *charbuf++ = components[i]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2833 coding->annotated = 1; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2834 composition_state = COMPOSING_NO; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2835 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2836
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2837
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2838 /* Decode a composition rule from the byte C1 (and maybe one more byte
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2839 from SRC) and store one encoded composition rule in
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2840 coding->cmp_data. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2841
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2842 #define DECODE_COMPOSITION_RULE(c1) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2843 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2844 (c1) -= 32; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2845 if (c1 < 81) /* old format (before ver.21) */ \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2846 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2847 int gref = (c1) / 9; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2848 int nref = (c1) % 9; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2849 if (gref == 4) gref = 10; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2850 if (nref == 4) nref = 10; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2851 c1 = COMPOSITION_ENCODE_RULE (gref, nref); \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2852 } \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2853 else if (c1 < 93) /* new format (after ver.21) */ \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2854 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2855 ONE_MORE_BYTE (c2); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2856 c1 = COMPOSITION_ENCODE_RULE (c1 - 81, c2 - 32); \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2857 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2858 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2859 c1 = 0; \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2860 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2861
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2862
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2863 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2864
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2865 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2866 decode_coding_iso_2022 (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2867 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2868 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2869 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2870 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2871 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2872 int *charbuf = coding->charbuf;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2873 int *charbuf_end
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2874 = charbuf + coding->charbuf_size - 4 - MAX_ANNOTATION_LENGTH;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2875 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2876 int multibytep = coding->src_multibyte;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2877 /* Charsets invoked to graphic plane 0 and 1 respectively. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2878 int charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2879 int charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2880 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2881 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2882 /* For handling composition sequence. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2883 #define COMPOSING_NO 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2884 #define COMPOSING_CHAR 1
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2885 #define COMPOSING_RULE 2
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2886 #define COMPOSING_COMPONENT_CHAR 3
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2887 #define COMPOSING_COMPONENT_RULE 4
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2888
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2889 int composition_state = COMPOSING_NO;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2890 enum composition_method method;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2891 int components[MAX_COMPOSITION_COMPONENTS * 2 + 1];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2892 int component_idx;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2893 int component_len;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2894 Lisp_Object attrs, charset_list;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2895 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2896 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2897 int last_id = charset_ascii;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2898
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2899 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2900 setup_iso_safe_charsets (attrs);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2901
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2902 while (1)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2903 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2904 int c1, c2;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2905
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2906 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2907 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2908
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2909 if (charbuf >= charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2910 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2911
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2912 ONE_MORE_BYTE (c1);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2913 if (c1 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2914 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2915
89279
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
2916 /* We produce at most one character. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2917 switch (iso_code_class [c1])
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2918 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2919 case ISO_0x20_or_0x7F:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2920 if (composition_state != COMPOSING_NO)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2921 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2922 if (composition_state == COMPOSING_RULE
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2923 || composition_state == COMPOSING_COMPONENT_RULE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2924 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2925 DECODE_COMPOSITION_RULE (c1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2926 components[component_idx++] = c1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2927 composition_state--;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2928 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2929 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2930 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2931 if (charset_id_0 < 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2932 || ! CHARSET_ISO_CHARS_96 (CHARSET_FROM_ID (charset_id_0)))
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2933 /* This is SPACE or DEL. */
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2934 charset = CHARSET_FROM_ID (charset_ascii);
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2935 else
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2936 charset = CHARSET_FROM_ID (charset_id_0);
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2937 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2938
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2939 case ISO_graphic_plane_0:
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2940 if (composition_state != COMPOSING_NO)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2941 {
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2942 if (composition_state == COMPOSING_RULE
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2943 || composition_state == COMPOSING_COMPONENT_RULE)
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2944 {
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2945 DECODE_COMPOSITION_RULE (c1);
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2946 components[component_idx++] = c1;
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2947 composition_state--;
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2948 continue;
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2949 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2950 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2951 charset = CHARSET_FROM_ID (charset_id_0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2952 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2953
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2954 case ISO_0xA0_or_0xFF:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2955 if (charset_id_1 < 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2956 || ! CHARSET_ISO_CHARS_96 (CHARSET_FROM_ID (charset_id_1))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2957 || CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2958 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2959 /* This is a graphic character, we fall down ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2960
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2961 case ISO_graphic_plane_1:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2962 if (charset_id_1 < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2963 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2964 charset = CHARSET_FROM_ID (charset_id_1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2965 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2966
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2967 case ISO_control_0:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2968 MAYBE_FINISH_COMPOSITION ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2969 charset = CHARSET_FROM_ID (charset_ascii);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2970 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2971
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2972 case ISO_control_1:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2973 MAYBE_FINISH_COMPOSITION ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2974 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2975
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2976 case ISO_shift_out:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2977 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LOCKING_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2978 || CODING_ISO_DESIGNATION (coding, 1) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2979 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2980 CODING_ISO_INVOCATION (coding, 0) = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2981 charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2982 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2983
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2984 case ISO_shift_in:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2985 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LOCKING_SHIFT))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2986 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2987 CODING_ISO_INVOCATION (coding, 0) = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2988 charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2989 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2990
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2991 case ISO_single_shift_2_7:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2992 case ISO_single_shift_2:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2993 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2994 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2995 /* SS2 is handled as an escape sequence of ESC 'N' */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2996 c1 = 'N';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2997 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2998
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2999 case ISO_single_shift_3:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3000 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3001 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3002 /* SS2 is handled as an escape sequence of ESC 'O' */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3003 c1 = 'O';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3004 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3005
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3006 case ISO_control_sequence_introducer:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3007 /* CSI is handled as an escape sequence of ESC '[' ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3008 c1 = '[';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3009 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3010
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3011 case ISO_escape:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3012 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3013 label_escape_sequence:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3014 /* Escape sequences handled here are invocation,
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3015 designation, direction specification, and character
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3016 composition specification. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3017 switch (c1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3018 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3019 case '&': /* revision of following character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3020 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3021 if (!(c1 >= '@' && c1 <= '~'))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3022 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3023 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3024 if (c1 != ISO_CODE_ESC)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3025 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3026 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3027 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3028
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3029 case '$': /* designation of 2-byte character set */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3030 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DESIGNATION))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3031 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3032 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3033 if (c1 >= '@' && c1 <= 'B')
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3034 { /* designation of JISX0208.1978, GB2312.1980,
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
3035 or JISX0208.1980 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3036 DECODE_DESIGNATION (0, 2, 0, c1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3037 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3038 else if (c1 >= 0x28 && c1 <= 0x2B)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3039 { /* designation of DIMENSION2_CHARS94 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3040 ONE_MORE_BYTE (c2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3041 DECODE_DESIGNATION (c1 - 0x28, 2, 0, c2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3042 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3043 else if (c1 >= 0x2C && c1 <= 0x2F)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3044 { /* designation of DIMENSION2_CHARS96 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3045 ONE_MORE_BYTE (c2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3046 DECODE_DESIGNATION (c1 - 0x2C, 2, 1, c2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3047 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3048 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3049 goto invalid_code;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3050 /* We must update these variables now. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3051 charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3052 charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3053 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3054
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3055 case 'n': /* invocation of locking-shift-2 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3056 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LOCKING_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3057 || CODING_ISO_DESIGNATION (coding, 2) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3058 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3059 CODING_ISO_INVOCATION (coding, 0) = 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3060 charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3061 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3062
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3063 case 'o': /* invocation of locking-shift-3 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3064 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LOCKING_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3065 || CODING_ISO_DESIGNATION (coding, 3) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3066 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3067 CODING_ISO_INVOCATION (coding, 0) = 3;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3068 charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3069 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3070
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3071 case 'N': /* invocation of single-shift-2 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3072 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3073 || CODING_ISO_DESIGNATION (coding, 2) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3074 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3075 charset = CHARSET_FROM_ID (CODING_ISO_DESIGNATION (coding, 2));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3076 ONE_MORE_BYTE (c1);
30578
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
3077 if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3078 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3079 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3080
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3081 case 'O': /* invocation of single-shift-3 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3082 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3083 || CODING_ISO_DESIGNATION (coding, 3) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3084 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3085 charset = CHARSET_FROM_ID (CODING_ISO_DESIGNATION (coding, 3));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3086 ONE_MORE_BYTE (c1);
30578
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
3087 if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3088 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3089 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3090
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3091 case '0': case '2': case '3': case '4': /* start composition */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3092 if (! (coding->common_flags & CODING_ANNOTATE_COMPOSITION_MASK))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3093 goto invalid_code;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3094 DECODE_COMPOSITION_START (c1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3095 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3096
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3097 case '1': /* end composition */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3098 if (composition_state == COMPOSING_NO)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3099 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3100 DECODE_COMPOSITION_END ();
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3101 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3102
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3103 case '[': /* specification of direction */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3104 if (! CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DIRECTION)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3105 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3106 /* 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
3107 So, `coding->mode & CODING_MODE_DIRECTION' zero means
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3108 left-to-right, and nozero means right-to-left. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3109 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3110 switch (c1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3111 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3112 case ']': /* end of the current direction */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3113 coding->mode &= ~CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3114
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3115 case '0': /* end of the current direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3116 case '1': /* start of left-to-right direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3117 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3118 if (c1 == ']')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3119 coding->mode &= ~CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3120 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3121 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3122 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3123
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3124 case '2': /* start of right-to-left direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3125 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3126 if (c1 == ']')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3127 coding->mode |= CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3128 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3129 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3130 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3131
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3132 default:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3133 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3134 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3135 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3136
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3137 case '%':
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3138 ONE_MORE_BYTE (c1);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3139 if (c1 == '/')
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3140 {
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3141 /* CTEXT extended segment:
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3142 ESC % / [0-4] M L --ENCODING-NAME-- \002 --BYTES--
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3143 We keep these bytes as is for the moment.
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3144 They may be decoded by post-read-conversion. */
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3145 int dim, M, L;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3146 int size;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3147
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3148 ONE_MORE_BYTE (dim);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3149 ONE_MORE_BYTE (M);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3150 ONE_MORE_BYTE (L);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3151 size = ((M - 128) * 128) + (L - 128);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3152 if (charbuf + 8 + size > charbuf_end)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3153 goto break_loop;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3154 *charbuf++ = ISO_CODE_ESC;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3155 *charbuf++ = '%';
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3156 *charbuf++ = '/';
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3157 *charbuf++ = dim;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3158 *charbuf++ = BYTE8_TO_CHAR (M);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3159 *charbuf++ = BYTE8_TO_CHAR (L);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3160 while (size-- > 0)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3161 {
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3162 ONE_MORE_BYTE (c1);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3163 *charbuf++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3164 }
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3165 }
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3166 else if (c1 == 'G')
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3167 {
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3168 /* XFree86 extension for embedding UTF-8 in CTEXT:
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3169 ESC % G --UTF-8-BYTES-- ESC % @
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3170 We keep these bytes as is for the moment.
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3171 They may be decoded by post-read-conversion. */
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3172 int *p = charbuf;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3173
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3174 if (p + 6 > charbuf_end)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3175 goto break_loop;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3176 *p++ = ISO_CODE_ESC;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3177 *p++ = '%';
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3178 *p++ = 'G';
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3179 while (p < charbuf_end)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3180 {
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3181 ONE_MORE_BYTE (c1);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3182 if (c1 == ISO_CODE_ESC
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3183 && src + 1 < src_end
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3184 && src[0] == '%'
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3185 && src[1] == '@')
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3186 break;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3187 *p++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3188 }
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3189 if (p + 3 > charbuf_end)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3190 goto break_loop;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3191 *p++ = ISO_CODE_ESC;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3192 *p++ = '%';
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3193 *p++ = '@';
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3194 charbuf = p;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3195 }
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3196 else
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3197 goto invalid_code;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3198 continue;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3199 break;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3200
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3201 default:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3202 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DESIGNATION))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3203 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3204 if (c1 >= 0x28 && c1 <= 0x2B)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3205 { /* designation of DIMENSION1_CHARS94 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3206 ONE_MORE_BYTE (c2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3207 DECODE_DESIGNATION (c1 - 0x28, 1, 0, c2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3208 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3209 else if (c1 >= 0x2C && c1 <= 0x2F)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3210 { /* designation of DIMENSION1_CHARS96 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3211 ONE_MORE_BYTE (c2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3212 DECODE_DESIGNATION (c1 - 0x2C, 1, 1, c2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3213 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3214 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3215 goto invalid_code;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3216 /* We must update these variables now. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3217 charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3218 charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3219 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3220 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3221 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3222
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3223 if (charset->id != charset_ascii
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3224 && last_id != charset->id)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3225 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3226 if (last_id != charset_ascii)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3227 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3228 last_id = charset->id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3229 last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3230 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3231
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3232 /* Now we know CHARSET and 1st position code C1 of a character.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3233 Produce a decoded character while getting 2nd position code
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3234 C2 if necessary. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3235 c1 &= 0x7F;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3236 if (CHARSET_DIMENSION (charset) > 1)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3237 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3238 ONE_MORE_BYTE (c2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3239 if (c2 < 0x20 || (c2 >= 0x80 && c2 < 0xA0))
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3240 /* C2 is not in a valid range. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3241 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3242 c1 = (c1 << 8) | (c2 & 0x7F);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3243 if (CHARSET_DIMENSION (charset) > 2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3244 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3245 ONE_MORE_BYTE (c2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3246 if (c2 < 0x20 || (c2 >= 0x80 && c2 < 0xA0))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3247 /* C2 is not in a valid range. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3248 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3249 c1 = (c1 << 8) | (c2 & 0x7F);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3250 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3251 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3252
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3253 CODING_DECODE_CHAR (coding, src, src_base, src_end, charset, c1, c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3254 if (c < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3255 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3256 MAYBE_FINISH_COMPOSITION ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3257 for (; src_base < src; src_base++, char_offset++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3258 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3259 if (ASCII_BYTE_P (*src_base))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3260 *charbuf++ = *src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3261 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3262 *charbuf++ = BYTE8_TO_CHAR (*src_base);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3263 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3264 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3265 else if (composition_state == COMPOSING_NO)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3266 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3267 *charbuf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3268 char_offset++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3269 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3270 else
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3271 {
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3272 components[component_idx++] = c;
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3273 if (method == COMPOSITION_WITH_RULE
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3274 || (method == COMPOSITION_WITH_RULE_ALTCHARS
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3275 && composition_state == COMPOSING_COMPONENT_CHAR))
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3276 composition_state++;
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3277 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3278 continue;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3279
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3280 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3281 MAYBE_FINISH_COMPOSITION ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3282 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3283 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3284 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3285 *charbuf++ = c < 0 ? -c : ASCII_BYTE_P (c) ? c : BYTE8_TO_CHAR (c);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3286 char_offset++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3287 coding->errors++;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3288 continue;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3289
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3290 break_loop:
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3291 break;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3292 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3293
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3294 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3295 if (last_id != charset_ascii)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3296 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3297 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3298 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3299 coding->charbuf_used = charbuf - coding->charbuf;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3300 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3301
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3302
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
3303 /* ISO2022 encoding stuff. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3304
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3305 /*
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
3306 It is not enough to say just "ISO2022" on encoding, we have to
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3307 specify more details. In Emacs, each coding system of ISO2022
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3308 variant has the following specifications:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3309 1. Initial designation to G0 thru G3.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3310 2. Allows short-form designation?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3311 3. ASCII should be designated to G0 before control characters?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3312 4. ASCII should be designated to G0 at end of line?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3313 5. 7-bit environment or 8-bit environment?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3314 6. Use locking-shift?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3315 7. Use Single-shift?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3316 And the following two are only for Japanese:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3317 8. Use ASCII in place of JIS0201-1976-Roman?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3318 9. Use JISX0208-1983 in place of JISX0208-1978?
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3319 These specifications are encoded in CODING_ISO_FLAGS (coding) as flag bits
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3320 defined by macros CODING_ISO_FLAG_XXX. See `coding.h' for more
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
3321 details.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3322 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3323
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3324 /* Produce codes (escape sequence) for designating CHARSET to graphic
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3325 register REG at DST, and increment DST. If <final-char> of CHARSET is
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3326 '@', 'A', or 'B' and the coding system CODING allows, produce
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3327 designation sequence of short-form. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3328
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3329 #define ENCODE_DESIGNATION(charset, reg, coding) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3330 do { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3331 unsigned char final_char = CHARSET_ISO_FINAL (charset); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3332 char *intermediate_char_94 = "()*+"; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3333 char *intermediate_char_96 = ",-./"; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3334 int revision = -1; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3335 int c; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3336 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3337 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_REVISION) \
88856
13a375bc220d (ENCODE_DESIGNATION, decode_eol)
Dave Love <fx@gnu.org>
parents: 88845
diff changeset
3338 revision = CHARSET_ISO_REVISION (charset); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3339 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3340 if (revision >= 0) \
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3341 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3342 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, '&'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3343 EMIT_ONE_BYTE ('@' + revision); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3344 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3345 EMIT_ONE_ASCII_BYTE (ISO_CODE_ESC); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3346 if (CHARSET_DIMENSION (charset) == 1) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3347 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3348 if (! CHARSET_ISO_CHARS_96 (charset)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3349 c = intermediate_char_94[reg]; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3350 else \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3351 c = intermediate_char_96[reg]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3352 EMIT_ONE_ASCII_BYTE (c); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3353 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3354 else \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3355 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3356 EMIT_ONE_ASCII_BYTE ('$'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3357 if (! CHARSET_ISO_CHARS_96 (charset)) \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3358 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3359 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LONG_FORM \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3360 || reg != 0 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3361 || final_char < '@' || final_char > 'B') \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3362 EMIT_ONE_ASCII_BYTE (intermediate_char_94[reg]); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3363 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3364 else \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3365 EMIT_ONE_ASCII_BYTE (intermediate_char_96[reg]); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3366 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3367 EMIT_ONE_ASCII_BYTE (final_char); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3368 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3369 CODING_ISO_DESIGNATION (coding, reg) = CHARSET_ID (charset); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3370 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3371
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3372
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3373 /* The following two macros produce codes (control character or escape
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3374 sequence) for ISO2022 single-shift functions (single-shift-2 and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3375 single-shift-3). */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3376
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3377 #define ENCODE_SINGLE_SHIFT_2 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3378 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3379 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3380 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, 'N'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3381 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3382 EMIT_ONE_BYTE (ISO_CODE_SS2); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3383 CODING_ISO_SINGLE_SHIFTING (coding) = 1; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3384 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3385
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3386
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3387 #define ENCODE_SINGLE_SHIFT_3 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3388 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3389 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3390 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, 'O'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3391 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3392 EMIT_ONE_BYTE (ISO_CODE_SS3); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3393 CODING_ISO_SINGLE_SHIFTING (coding) = 1; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3394 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3395
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3396
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3397 /* The following four macros produce codes (control character or
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3398 escape sequence) for ISO2022 locking-shift functions (shift-in,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3399 shift-out, locking-shift-2, and locking-shift-3). */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3400
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3401 #define ENCODE_SHIFT_IN \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3402 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3403 EMIT_ONE_ASCII_BYTE (ISO_CODE_SI); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3404 CODING_ISO_INVOCATION (coding, 0) = 0; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3405 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3406
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3407
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3408 #define ENCODE_SHIFT_OUT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3409 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3410 EMIT_ONE_ASCII_BYTE (ISO_CODE_SO); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3411 CODING_ISO_INVOCATION (coding, 0) = 1; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3412 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3413
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3414
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3415 #define ENCODE_LOCKING_SHIFT_2 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3416 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3417 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, 'n'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3418 CODING_ISO_INVOCATION (coding, 0) = 2; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3419 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3420
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3421
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3422 #define ENCODE_LOCKING_SHIFT_3 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3423 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3424 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, 'n'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3425 CODING_ISO_INVOCATION (coding, 0) = 3; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3426 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3427
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3428
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
3429 /* Produce codes for a DIMENSION1 character whose character set is
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
3430 CHARSET and whose position-code is C1. Designation and invocation
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3431 sequences are also produced in advance if necessary. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3432
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3433 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3434 do { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3435 int id = CHARSET_ID (charset); \
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3436 \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3437 if ((CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_USE_ROMAN) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3438 && id == charset_ascii) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3439 { \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3440 id = charset_jisx0201_roman; \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3441 charset = CHARSET_FROM_ID (id); \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3442 } \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3443 \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3444 if (CODING_ISO_SINGLE_SHIFTING (coding)) \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3445 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3446 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3447 EMIT_ONE_ASCII_BYTE (c1 & 0x7F); \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3448 else \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3449 EMIT_ONE_BYTE (c1 | 0x80); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3450 CODING_ISO_SINGLE_SHIFTING (coding) = 0; \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3451 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3452 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3453 else if (id == CODING_ISO_INVOKED_CHARSET (coding, 0)) \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3454 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3455 EMIT_ONE_ASCII_BYTE (c1 & 0x7F); \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3456 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3457 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3458 else if (id == CODING_ISO_INVOKED_CHARSET (coding, 1)) \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3459 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3460 EMIT_ONE_BYTE (c1 | 0x80); \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3461 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3462 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3463 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3464 /* 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
3465 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
3466 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
3467 character. */ \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3468 dst = encode_invocation_designation (charset, coding, dst, \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3469 &produced_chars); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3470 } while (1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3471
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3472
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3473 /* Produce codes for a DIMENSION2 character whose character set is
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3474 CHARSET and whose position-codes are C1 and C2. Designation and
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3475 invocation codes are also produced in advance if necessary. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3476
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3477 #define ENCODE_ISO_CHARACTER_DIMENSION2(charset, c1, c2) \
24506
219c99669e4b (ENCODE_ISO_CHARACTER): Check validity of CHARSET. If
Kenichi Handa <handa@m17n.org>
parents: 24460
diff changeset
3478 do { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3479 int id = CHARSET_ID (charset); \
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3480 \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3481 if ((CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_USE_OLDJIS) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3482 && id == charset_jisx0208) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3483 { \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3484 id = charset_jisx0208_1978; \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3485 charset = CHARSET_FROM_ID (id); \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3486 } \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3487 \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3488 if (CODING_ISO_SINGLE_SHIFTING (coding)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3489 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3490 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3491 EMIT_TWO_ASCII_BYTES ((c1) & 0x7F, (c2) & 0x7F); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3492 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3493 EMIT_TWO_BYTES ((c1) | 0x80, (c2) | 0x80); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3494 CODING_ISO_SINGLE_SHIFTING (coding) = 0; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3495 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3496 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3497 else if (id == CODING_ISO_INVOKED_CHARSET (coding, 0)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3498 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3499 EMIT_TWO_ASCII_BYTES ((c1) & 0x7F, (c2) & 0x7F); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3500 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3501 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3502 else if (id == CODING_ISO_INVOKED_CHARSET (coding, 1)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3503 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3504 EMIT_TWO_BYTES ((c1) | 0x80, (c2) | 0x80); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3505 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3506 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3507 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3508 /* Since CHARSET is not yet invoked to any graphic planes, we \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3509 must invoke it, or, at first, designate it to some graphic \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3510 register. Then repeat the loop to actually produce the \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3511 character. */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3512 dst = encode_invocation_designation (charset, coding, dst, \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3513 &produced_chars); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3514 } while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3515
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3516
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3517 #define ENCODE_ISO_CHARACTER(charset, c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3518 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3519 int code = ENCODE_CHAR ((charset),(c)); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3520 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3521 if (CHARSET_DIMENSION (charset) == 1) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3522 ENCODE_ISO_CHARACTER_DIMENSION1 ((charset), code); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3523 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3524 ENCODE_ISO_CHARACTER_DIMENSION2 ((charset), code >> 8, code & 0xFF); \
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
3525 } while (0)
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3526
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
3527
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3528 /* Produce designation and invocation codes at a place pointed by DST
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3529 to use CHARSET. The element `spec.iso_2022' of *CODING is updated.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3530 Return new DST. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3531
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3532 unsigned char *
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3533 encode_invocation_designation (charset, coding, dst, p_nchars)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3534 struct charset *charset;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3535 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3536 unsigned char *dst;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3537 int *p_nchars;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3538 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3539 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3540 int produced_chars = *p_nchars;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3541 int reg; /* graphic register number */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3542 int id = CHARSET_ID (charset);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3543
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3544 /* At first, check designations. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3545 for (reg = 0; reg < 4; reg++)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3546 if (id == CODING_ISO_DESIGNATION (coding, reg))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3547 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3548
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3549 if (reg >= 4)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3550 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3551 /* CHARSET is not yet designated to any graphic registers. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3552 /* At first check the requested designation. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3553 reg = CODING_ISO_REQUEST (coding, id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3554 if (reg < 0)
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
3555 /* Since CHARSET requests no special designation, designate it
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
3556 to graphic register 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3557 reg = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3558
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3559 ENCODE_DESIGNATION (charset, reg, coding);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3560 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3561
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3562 if (CODING_ISO_INVOCATION (coding, 0) != reg
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3563 && CODING_ISO_INVOCATION (coding, 1) != reg)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3564 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3565 /* Since the graphic register REG is not invoked to any graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3566 planes, invoke it to graphic plane 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3567 switch (reg)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3568 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3569 case 0: /* graphic register 0 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3570 ENCODE_SHIFT_IN;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3571 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3572
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3573 case 1: /* graphic register 1 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3574 ENCODE_SHIFT_OUT;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3575 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3576
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3577 case 2: /* graphic register 2 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3578 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3579 ENCODE_SINGLE_SHIFT_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3580 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3581 ENCODE_LOCKING_SHIFT_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3582 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3583
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3584 case 3: /* graphic register 3 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3585 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3586 ENCODE_SINGLE_SHIFT_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3587 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3588 ENCODE_LOCKING_SHIFT_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3589 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3590 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3591 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3592
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3593 *p_nchars = produced_chars;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3594 return dst;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3595 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3596
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3597 /* The following three macros produce codes for indicating direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3598 of text. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3599 #define ENCODE_CONTROL_SEQUENCE_INTRODUCER \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3600 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3601 if (CODING_ISO_FLAGS (coding) == CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3602 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, '['); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3603 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3604 EMIT_ONE_BYTE (ISO_CODE_CSI); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3605 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3606
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3607
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3608 #define ENCODE_DIRECTION_R2L() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3609 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3610 ENCODE_CONTROL_SEQUENCE_INTRODUCER (dst); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3611 EMIT_TWO_ASCII_BYTES ('2', ']'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3612 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3613
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3614
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3615 #define ENCODE_DIRECTION_L2R() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3616 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3617 ENCODE_CONTROL_SEQUENCE_INTRODUCER (dst); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3618 EMIT_TWO_ASCII_BYTES ('0', ']'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3619 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3620
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3621
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3622 /* Produce codes for designation and invocation to reset the graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3623 planes and registers to initial state. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3624 #define ENCODE_RESET_PLANE_AND_REGISTER() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3625 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3626 int reg; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3627 struct charset *charset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3628 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3629 if (CODING_ISO_INVOCATION (coding, 0) != 0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3630 ENCODE_SHIFT_IN; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3631 for (reg = 0; reg < 4; reg++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3632 if (CODING_ISO_INITIAL (coding, reg) >= 0 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3633 && (CODING_ISO_DESIGNATION (coding, reg) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3634 != CODING_ISO_INITIAL (coding, reg))) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3635 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3636 charset = CHARSET_FROM_ID (CODING_ISO_INITIAL (coding, reg)); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3637 ENCODE_DESIGNATION (charset, reg, coding); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3638 } \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3639 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3640
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3641
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3642 /* Produce designation sequences of charsets in the line started from
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3643 SRC to a place pointed by DST, and return updated DST.
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3644
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3645 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
3646 find all the necessary designations. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3647
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3648 static unsigned char *
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3649 encode_designation_at_bol (coding, charbuf, charbuf_end, dst)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3650 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3651 int *charbuf, *charbuf_end;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3652 unsigned char *dst;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3653 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3654 struct charset *charset;
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3655 /* 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
3656 int r[4];
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3657 int c, found = 0, reg;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3658 int produced_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3659 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3660 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3661 Lisp_Object charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3662
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3663 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3664 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3665 if (EQ (charset_list, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3666 charset_list = Viso_2022_charset_list;
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3667
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3668 for (reg = 0; reg < 4; reg++)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3669 r[reg] = -1;
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3670
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3671 while (found < 4)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3672 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3673 int id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3674
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3675 c = *charbuf++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3676 if (c == '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3677 break;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3678 charset = char_charset (c, charset_list, NULL);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3679 id = CHARSET_ID (charset);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3680 reg = CODING_ISO_REQUEST (coding, id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3681 if (reg >= 0 && r[reg] < 0)
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3682 {
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3683 found++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3684 r[reg] = id;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3685 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3686 }
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3687
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3688 if (found)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3689 {
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3690 for (reg = 0; reg < 4; reg++)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3691 if (r[reg] >= 0
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3692 && CODING_ISO_DESIGNATION (coding, reg) != r[reg])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3693 ENCODE_DESIGNATION (CHARSET_FROM_ID (r[reg]), reg, coding);
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3694 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3695
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3696 return dst;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3697 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3698
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3699 /* See the above "GENERAL NOTES on `encode_coding_XXX ()' functions". */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3700
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3701 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3702 encode_coding_iso_2022 (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3703 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3704 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3705 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3706 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3707 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3708 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3709 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3710 int safe_room = 16;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3711 int bol_designation
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3712 = (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DESIGNATE_AT_BOL
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3713 && CODING_ISO_BOL (coding));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3714 int produced_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3715 Lisp_Object attrs, eol_type, charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3716 int ascii_compatible;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3717 int c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3718 int preferred_charset_id = -1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3719
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
3720 CODING_GET_INFO (coding, attrs, charset_list);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
3721 eol_type = CODING_ID_EOL_TYPE (coding->id);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
3722 if (VECTORP (eol_type))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
3723 eol_type = Qunix;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
3724
88497
d2b9e0d4c2f6 (Fdecode_sjis_char): Fix typo (0x7F->0xFF). Fix the
Kenichi Handa <handa@m17n.org>
parents: 88485
diff changeset
3725 setup_iso_safe_charsets (attrs);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3726 /* Charset list may have been changed. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3727 charset_list = CODING_ATTR_CHARSET_LIST (attrs); \
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3728 coding->safe_charsets = (char *) SDATA (CODING_ATTR_SAFE_CHARSETS(attrs));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3729
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3730 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3731
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3732 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3733 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3734 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3735
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3736 if (bol_designation)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3737 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3738 unsigned char *dst_prev = dst;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3739
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
3740 /* We have to produce designation sequences if any now. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3741 dst = encode_designation_at_bol (coding, charbuf, charbuf_end, dst);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3742 bol_designation = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3743 /* We are sure that designation sequences are all ASCII bytes. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3744 produced_chars += dst - dst_prev;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3745 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3746
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3747 c = *charbuf++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3748
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3749 if (c < 0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3750 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3751 /* Handle an annotation. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3752 switch (*charbuf)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3753 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3754 case CODING_ANNOTATE_COMPOSITION_MASK:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3755 /* Not yet implemented. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3756 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3757 case CODING_ANNOTATE_CHARSET_MASK:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3758 preferred_charset_id = charbuf[3];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3759 if (preferred_charset_id >= 0
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3760 && NILP (Fmemq (make_number (preferred_charset_id),
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3761 charset_list)))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3762 preferred_charset_id = -1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3763 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3764 default:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3765 abort ();
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3766 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3767 charbuf += -c - 1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3768 continue;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3769 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3770
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3771 /* Now encode the character C. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3772 if (c < 0x20 || c == 0x7F)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3773 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3774 if (c == '\n'
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3775 || (c == '\r' && EQ (eol_type, Qmac)))
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3776 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3777 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_RESET_AT_EOL)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3778 ENCODE_RESET_PLANE_AND_REGISTER ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3779 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_INIT_AT_BOL)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3780 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3781 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3782
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3783 for (i = 0; i < 4; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3784 CODING_ISO_DESIGNATION (coding, i)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3785 = CODING_ISO_INITIAL (coding, i);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3786 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3787 bol_designation
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3788 = CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DESIGNATE_AT_BOL;
19052
302a7b2a6948 (encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents: 18910
diff changeset
3789 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3790 else if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_RESET_AT_CNTL)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3791 ENCODE_RESET_PLANE_AND_REGISTER ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3792 EMIT_ONE_ASCII_BYTE (c);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3793 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3794 else if (ASCII_CHAR_P (c))
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3795 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3796 if (ascii_compatible)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3797 EMIT_ONE_ASCII_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3798 else
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3799 {
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3800 struct charset *charset = CHARSET_FROM_ID (charset_ascii);
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3801 ENCODE_ISO_CHARACTER (charset, c);
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3802 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3803 }
88690
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
3804 else if (CHAR_BYTE8_P (c))
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
3805 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
3806 c = CHAR_TO_BYTE8 (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
3807 EMIT_ONE_BYTE (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
3808 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3809 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3810 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3811 struct charset *charset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3812
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3813 if (preferred_charset_id >= 0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3814 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3815 charset = CHARSET_FROM_ID (preferred_charset_id);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3816 if (! CHAR_CHARSET_P (c, charset))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3817 charset = char_charset (c, charset_list, NULL);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3818 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3819 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3820 charset = char_charset (c, charset_list, NULL);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3821 if (!charset)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3822 {
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3823 if (coding->mode & CODING_MODE_SAFE_ENCODING)
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3824 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3825 c = CODING_INHIBIT_CHARACTER_SUBSTITUTION;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3826 charset = CHARSET_FROM_ID (charset_ascii);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3827 }
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3828 else
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3829 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3830 c = coding->default_char;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3831 charset = char_charset (c, charset_list, NULL);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
3832 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3833 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3834 ENCODE_ISO_CHARACTER (charset, c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3835 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3836 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3837
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3838 if (coding->mode & CODING_MODE_LAST_BLOCK
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3839 && CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_RESET_AT_EOL)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3840 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3841 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3842 ENCODE_RESET_PLANE_AND_REGISTER ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3843 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3844 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3845 CODING_ISO_BOL (coding) = bol_designation;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3846 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3847 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3848 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3849 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3850
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3851
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3852 /*** 8,9. SJIS and BIG5 handlers ***/
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3853
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3854 /* Although SJIS and BIG5 are not ISO's coding system, they are used
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3855 quite widely. So, for the moment, Emacs supports them in the bare
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3856 C code. But, in the future, they may be supported only by CCL. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3857
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3858 /* SJIS is a coding system encoding three character sets: ASCII, right
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3859 half of JISX0201-Kana, and JISX0208. An ASCII character is encoded
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3860 as is. A character of charset katakana-jisx0201 is encoded by
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3861 "position-code + 0x80". A character of charset japanese-jisx0208
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3862 is encoded in 2-byte but two position-codes are divided and shifted
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3863 so that it fit in the range below.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3864
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3865 --- CODE RANGE of SJIS ---
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3866 (character set) (range)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3867 ASCII 0x00 .. 0x7F
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3868 KATAKANA-JISX0201 0xA0 .. 0xDF
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
3869 JISX0208 (1st byte) 0x81 .. 0x9F and 0xE0 .. 0xEF
23564
6eb3e346d1fd (DECODE_CHARACTER_ASCII): Check validity of inserted
Kenichi Handa <handa@m17n.org>
parents: 23542
diff changeset
3870 (2nd byte) 0x40 .. 0x7E and 0x80 .. 0xFC
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3871 -------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3872
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3873 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3874
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3875 /* BIG5 is a coding system encoding two character sets: ASCII and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3876 Big5. An ASCII character is encoded as is. Big5 is a two-byte
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3877 character set and is encoded in two-byte.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3878
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3879 --- CODE RANGE of BIG5 ---
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3880 (character set) (range)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3881 ASCII 0x00 .. 0x7F
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3882 Big5 (1st byte) 0xA1 .. 0xFE
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3883 (2nd byte) 0x40 .. 0x7E and 0xA1 .. 0xFE
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3884 --------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3885
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3886 */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3887
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3888 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3889 Check if a text is encoded in SJIS. If it is, return
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3890 CATEGORY_MASK_SJIS, else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3891
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3892 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3893 detect_coding_sjis (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3894 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3895 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3896 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3897 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3898 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3899 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3900 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3901 int found = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3902 int c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3903
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3904 detect_info->checked |= CATEGORY_MASK_SJIS;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3905 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3906 src += coding->head_ascii;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3907
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3908 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3909 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3910 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3911 ONE_MORE_BYTE (c);
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
3912 if (c < 0x80)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
3913 continue;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3914 if ((c >= 0x81 && c <= 0x9F) || (c >= 0xE0 && c <= 0xEF))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3915 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3916 ONE_MORE_BYTE (c);
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
3917 if (c < 0x40 || c == 0x7F || c > 0xFC)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3918 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3919 found = CATEGORY_MASK_SJIS;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3920 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3921 else if (c >= 0xA0 && c < 0xE0)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3922 found = CATEGORY_MASK_SJIS;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3923 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3924 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3925 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3926 detect_info->rejected |= CATEGORY_MASK_SJIS;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3927 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3928
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3929 no_more_source:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3930 if (src_base < src && coding->mode & CODING_MODE_LAST_BLOCK)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
3931 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3932 detect_info->rejected |= CATEGORY_MASK_SJIS;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
3933 return 0;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
3934 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3935 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3936 return 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3937 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3938
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3939 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3940 Check if a text is encoded in BIG5. If it is, return
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3941 CATEGORY_MASK_BIG5, else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3942
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3943 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3944 detect_coding_big5 (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3945 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3946 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3947 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3948 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3949 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3950 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3951 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3952 int found = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3953 int c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3954
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3955 detect_info->checked |= CATEGORY_MASK_BIG5;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3956 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3957 src += coding->head_ascii;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3958
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3959 while (1)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3960 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3961 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3962 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3963 if (c < 0x80)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3964 continue;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3965 if (c >= 0xA1)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3966 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3967 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3968 if (c < 0x40 || (c >= 0x7F && c <= 0xA0))
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3969 return 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3970 found = CATEGORY_MASK_BIG5;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3971 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3972 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3973 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3974 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3975 detect_info->rejected |= CATEGORY_MASK_BIG5;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3976 return 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3977
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3978 no_more_source:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3979 if (src_base < src && coding->mode & CODING_MODE_LAST_BLOCK)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
3980 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3981 detect_info->rejected |= CATEGORY_MASK_BIG5;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
3982 return 0;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
3983 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3984 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3985 return 1;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3986 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3987
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3988 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3989 If SJIS_P is 1, decode SJIS text, else decode BIG5 test. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3990
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3991 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3992 decode_coding_sjis (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3993 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3994 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3995 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3996 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3997 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3998 int *charbuf = coding->charbuf;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3999 int *charbuf_end = charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4000 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4001 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4002 struct charset *charset_roman, *charset_kanji, *charset_kana;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4003 struct charset *charset_kanji2;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4004 Lisp_Object attrs, charset_list, val;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4005 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4006 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4007 int last_id = charset_ascii;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4008
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4009 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4010
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4011 val = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4012 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
4013 charset_kana = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4014 charset_kanji = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4015 charset_kanji2 = NILP (val) ? NULL : CHARSET_FROM_ID (XINT (XCAR (val)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4016
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4017 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4018 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4019 int c, c1;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4020 struct charset *charset;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4021
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4022 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4023 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4024
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4025 if (charbuf >= charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4026 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4027
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4028 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4029 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4030 goto invalid_code;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4031 if (c < 0x80)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4032 charset = charset_roman;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4033 else if (c == 0x80 || c == 0xA0)
89730
d8fcefca5cf6 (decode_coding_sjis): Check the first byte rigidly.
Kenichi Handa <handa@m17n.org>
parents: 89686
diff changeset
4034 goto invalid_code;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4035 else if (c >= 0xA1 && c <= 0xDF)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4036 {
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4037 /* SJIS -> JISX0201-Kana */
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4038 c &= 0x7F;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4039 charset = charset_kana;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4040 }
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4041 else if (c <= 0xEF)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4042 {
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4043 /* SJIS -> JISX0208 */
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4044 ONE_MORE_BYTE (c1);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4045 if (c1 < 0x40 || c1 == 0x7F || c1 > 0xFC)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4046 goto invalid_code;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4047 c = (c << 8) | c1;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4048 SJIS_TO_JIS (c);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4049 charset = charset_kanji;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4050 }
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4051 else if (c <= 0xFC && charset_kanji2)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4052 {
89779
74c503490829 (decode_coding_sjis): Fix comment.
Kenichi Handa <handa@m17n.org>
parents: 89764
diff changeset
4053 /* SJIS -> JISX0213-2 */
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4054 ONE_MORE_BYTE (c1);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4055 if (c1 < 0x40 || c1 == 0x7F || c1 > 0xFC)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4056 goto invalid_code;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4057 c = (c << 8) | c1;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4058 SJIS_TO_JIS2 (c);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4059 charset = charset_kanji2;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4060 }
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4061 else
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4062 goto invalid_code;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4063 if (charset->id != charset_ascii
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4064 && last_id != charset->id)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4065 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4066 if (last_id != charset_ascii)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4067 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4068 last_id = charset->id;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4069 last_offset = char_offset;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4070 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4071 CODING_DECODE_CHAR (coding, src, src_base, src_end, charset, c, c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4072 *charbuf++ = c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4073 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4074 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4075
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4076 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4077 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4078 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4079 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4080 *charbuf++ = c < 0 ? -c : BYTE8_TO_CHAR (c);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4081 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4082 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4083 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4084
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4085 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4086 if (last_id != charset_ascii)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4087 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4088 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4089 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4090 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4091 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4092
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4093 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4094 decode_coding_big5 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4095 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4096 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4097 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4098 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4099 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4100 int *charbuf = coding->charbuf;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4101 int *charbuf_end = charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4102 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4103 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4104 struct charset *charset_roman, *charset_big5;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4105 Lisp_Object attrs, charset_list, val;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4106 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4107 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4108 int last_id = charset_ascii;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4109
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4110 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4111 val = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4112 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4113 charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4114
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4115 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4116 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4117 int c, c1;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4118 struct charset *charset;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4119
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4120 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4121 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4122
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4123 if (charbuf >= charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4124 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4125
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4126 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4127
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4128 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4129 goto invalid_code;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4130 if (c < 0x80)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4131 charset = charset_roman;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4132 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4133 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4134 /* BIG5 -> Big5 */
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4135 if (c < 0xA1 || c > 0xFE)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4136 goto invalid_code;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4137 ONE_MORE_BYTE (c1);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4138 if (c1 < 0x40 || (c1 > 0x7E && c1 < 0xA1) || c1 > 0xFE)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4139 goto invalid_code;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4140 c = c << 8 | c1;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4141 charset = charset_big5;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4142 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4143 if (charset->id != charset_ascii
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4144 && last_id != charset->id)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4145 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4146 if (last_id != charset_ascii)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4147 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4148 last_id = charset->id;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4149 last_offset = char_offset;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4150 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4151 CODING_DECODE_CHAR (coding, src, src_base, src_end, charset, c, c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4152 *charbuf++ = c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4153 char_offset++;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4154 continue;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4155
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4156 invalid_code:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4157 src = src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4158 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4159 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4160 *charbuf++ = c < 0 ? -c : BYTE8_TO_CHAR (c);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4161 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4162 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4163 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4164
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4165 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4166 if (last_id != charset_ascii)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4167 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4168 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4169 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4170 coding->charbuf_used = charbuf - coding->charbuf;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4171 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4172
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4173 /* See the above "GENERAL NOTES on `encode_coding_XXX ()' functions".
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4174 This function can encode charsets `ascii', `katakana-jisx0201',
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4175 `japanese-jisx0208', `chinese-big5-1', and `chinese-big5-2'. We
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4176 are sure that all these charsets are registered as official charset
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4177 (i.e. do not have extended leading-codes). Characters of other
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4178 charsets are produced without any encoding. If SJIS_P is 1, encode
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4179 SJIS text, else encode BIG5 text. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4180
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4181 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4182 encode_coding_sjis (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4183 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4184 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4185 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4186 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4187 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4188 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4189 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4190 int safe_room = 4;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4191 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4192 Lisp_Object attrs, charset_list, val;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4193 int ascii_compatible;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4194 struct charset *charset_roman, *charset_kanji, *charset_kana;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4195 struct charset *charset_kanji2;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4196 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4197
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4198 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4199 val = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4200 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4201 charset_kana = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4202 charset_kanji = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4203 charset_kanji2 = NILP (val) ? NULL : CHARSET_FROM_ID (XINT (XCAR (val)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4204
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4205 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4206
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4207 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4208 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4209 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4210 c = *charbuf++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4211 /* Now encode the character C. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4212 if (ASCII_CHAR_P (c) && ascii_compatible)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4213 EMIT_ONE_ASCII_BYTE (c);
88690
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4214 else if (CHAR_BYTE8_P (c))
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4215 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4216 c = CHAR_TO_BYTE8 (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4217 EMIT_ONE_BYTE (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4218 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4219 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4220 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4221 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4222 struct charset *charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4223
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4224 if (!charset)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4225 {
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4226 if (coding->mode & CODING_MODE_SAFE_ENCODING)
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4227 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4228 code = CODING_INHIBIT_CHARACTER_SUBSTITUTION;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4229 charset = CHARSET_FROM_ID (charset_ascii);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4230 }
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4231 else
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4232 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4233 c = coding->default_char;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4234 charset = char_charset (c, charset_list, &code);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4235 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4236 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4237 if (code == CHARSET_INVALID_CODE (charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4238 abort ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4239 if (charset == charset_kanji)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4240 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4241 int c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4242 JIS_TO_SJIS (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4243 c1 = code >> 8, c2 = code & 0xFF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4244 EMIT_TWO_BYTES (c1, c2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4245 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4246 else if (charset == charset_kana)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4247 EMIT_ONE_BYTE (code | 0x80);
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4248 else if (charset_kanji2 && charset == charset_kanji2)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4249 {
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4250 int c1, c2;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4251
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4252 c1 = code >> 8;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4253 if (c1 == 0x21 || (c1 >= 0x23 && c1 < 0x25)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4254 || (c1 >= 0x2C && c1 <= 0x2F) || c1 >= 0x6E)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4255 {
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4256 JIS_TO_SJIS2 (code);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4257 c1 = code >> 8, c2 = code & 0xFF;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4258 EMIT_TWO_BYTES (c1, c2);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4259 }
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4260 else
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4261 EMIT_ONE_ASCII_BYTE (code & 0x7F);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4262 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4263 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4264 EMIT_ONE_ASCII_BYTE (code & 0x7F);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4265 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4266 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4267 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4268 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4269 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4270 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4271 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4272
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4273 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4274 encode_coding_big5 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4275 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4276 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4277 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4278 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4279 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4280 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4281 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4282 int safe_room = 4;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4283 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4284 Lisp_Object attrs, charset_list, val;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4285 int ascii_compatible;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4286 struct charset *charset_roman, *charset_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4287 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4288
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4289 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4290 val = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4291 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4292 charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4293 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4294
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4295 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4296 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4297 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4298 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4299 /* Now encode the character C. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4300 if (ASCII_CHAR_P (c) && ascii_compatible)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4301 EMIT_ONE_ASCII_BYTE (c);
88690
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4302 else if (CHAR_BYTE8_P (c))
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4303 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4304 c = CHAR_TO_BYTE8 (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4305 EMIT_ONE_BYTE (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4306 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4307 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4308 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4309 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4310 struct charset *charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4311
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4312 if (! charset)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4313 {
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4314 if (coding->mode & CODING_MODE_SAFE_ENCODING)
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4315 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4316 code = CODING_INHIBIT_CHARACTER_SUBSTITUTION;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4317 charset = CHARSET_FROM_ID (charset_ascii);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4318 }
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4319 else
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4320 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4321 c = coding->default_char;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4322 charset = char_charset (c, charset_list, &code);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4323 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4324 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4325 if (code == CHARSET_INVALID_CODE (charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4326 abort ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4327 if (charset == charset_big5)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4328 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4329 int c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4330
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4331 c1 = code >> 8, c2 = code & 0xFF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4332 EMIT_TWO_BYTES (c1, c2);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4333 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4334 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4335 EMIT_ONE_ASCII_BYTE (code & 0x7F);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4336 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4337 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4338 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4339 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4340 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4341 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4342 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4343
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4344
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4345 /*** 10. CCL handlers ***/
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4346
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4347 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4348 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
4349 encoder/decoder are written in CCL program. If it is, return
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4350 CATEGORY_MASK_CCL, else return 0. */
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4351
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4352 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4353 detect_coding_ccl (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4354 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4355 struct coding_detection_info *detect_info;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4356 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4357 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4358 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4359 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4360 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4361 int found = 0;
89848
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
4362 unsigned char *valids;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4363 int head_ascii = coding->head_ascii;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4364 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4365
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4366 detect_info->checked |= CATEGORY_MASK_CCL;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4367
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4368 coding = &coding_categories[coding_category_ccl];
89848
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
4369 valids = CODING_CCL_VALIDS (coding);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4370 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4371 if (! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4372 src += head_ascii;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4373
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4374 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4375 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4376 int c;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4377
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4378 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4379 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4380 if (c < 0 || ! valids[c])
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4381 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4382 if ((valids[c] > 1))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4383 found = CATEGORY_MASK_CCL;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4384 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4385 detect_info->rejected |= CATEGORY_MASK_CCL;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4386 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4387
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4388 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4389 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4390 return 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4391 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4392
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4393 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4394 decode_coding_ccl (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4395 struct coding_system *coding;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4396 {
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
4397 const unsigned char *src = coding->source + coding->consumed;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4398 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4399 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4400 int *charbuf_end = charbuf + coding->charbuf_size;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4401 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4402 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4403 struct ccl_program ccl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4404 int source_charbuf[1024];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4405 int source_byteidx[1024];
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4406 Lisp_Object attrs, charset_list;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4407
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4408 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4409 setup_ccl_program (&ccl, CODING_CCL_DECODER (coding));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4410
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4411 while (src < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4412 {
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
4413 const unsigned char *p = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4414 int *source, *source_end;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4415 int i = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4416
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4417 if (multibytep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4418 while (i < 1024 && p < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4419 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4420 source_byteidx[i] = p - src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4421 source_charbuf[i++] = STRING_CHAR_ADVANCE (p);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4422 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4423 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4424 while (i < 1024 && p < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4425 source_charbuf[i++] = *p++;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4426
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4427 if (p == src_end && coding->mode & CODING_MODE_LAST_BLOCK)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4428 ccl.last_block = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4429
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4430 source = source_charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4431 source_end = source + i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4432 while (source < source_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4433 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4434 ccl_driver (&ccl, source, charbuf,
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
4435 source_end - source, charbuf_end - charbuf,
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
4436 charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4437 source += ccl.consumed;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4438 charbuf += ccl.produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4439 if (ccl.status != CCL_STAT_SUSPEND_BY_DST)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4440 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4441 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4442 if (source < source_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4443 src += source_byteidx[source - source_charbuf];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4444 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4445 src = p;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4446 consumed_chars += source - source_charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4447
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4448 if (ccl.status != CCL_STAT_SUSPEND_BY_SRC
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4449 && ccl.status != CODING_RESULT_INSUFFICIENT_SRC)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4450 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4451 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4452
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4453 switch (ccl.status)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4454 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4455 case CCL_STAT_SUSPEND_BY_SRC:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4456 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_SRC);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4457 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4458 case CCL_STAT_SUSPEND_BY_DST:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4459 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4460 case CCL_STAT_QUIT:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4461 case CCL_STAT_INVALID_CMD:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4462 record_conversion_result (coding, CODING_RESULT_INTERRUPT);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4463 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4464 default:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4465 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4466 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4467 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4468 coding->consumed_char += consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4469 coding->consumed = src - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4470 coding->charbuf_used = charbuf - coding->charbuf;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4471 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4472
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4473 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4474 encode_coding_ccl (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4475 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4476 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4477 struct ccl_program ccl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4478 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4479 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4480 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4481 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4482 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4483 unsigned char *adjusted_dst_end = dst_end - 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4484 int destination_charbuf[1024];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4485 int i, produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4486 Lisp_Object attrs, charset_list;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4487
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4488 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4489 setup_ccl_program (&ccl, CODING_CCL_ENCODER (coding));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4490
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4491 ccl.last_block = coding->mode & CODING_MODE_LAST_BLOCK;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4492 ccl.dst_multibyte = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4493
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4494 while (charbuf < charbuf_end && dst < adjusted_dst_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4495 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4496 int dst_bytes = dst_end - dst;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4497 if (dst_bytes > 1024)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4498 dst_bytes = 1024;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4499
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4500 ccl_driver (&ccl, charbuf, destination_charbuf,
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
4501 charbuf_end - charbuf, dst_bytes, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4502 charbuf += ccl.consumed;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4503 if (multibytep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4504 for (i = 0; i < ccl.produced; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4505 EMIT_ONE_BYTE (destination_charbuf[i] & 0xFF);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4506 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4507 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4508 for (i = 0; i < ccl.produced; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4509 *dst++ = destination_charbuf[i] & 0xFF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4510 produced_chars += ccl.produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4511 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4512 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4513
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4514 switch (ccl.status)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4515 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4516 case CCL_STAT_SUSPEND_BY_SRC:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4517 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_SRC);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4518 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4519 case CCL_STAT_SUSPEND_BY_DST:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4520 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_DST);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4521 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4522 case CCL_STAT_QUIT:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4523 case CCL_STAT_INVALID_CMD:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4524 record_conversion_result (coding, CODING_RESULT_INTERRUPT);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4525 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4526 default:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4527 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4528 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4529 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4530
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4531 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4532 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4533 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4534 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4535
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4536
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4537
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4538 /*** 10, 11. no-conversion handlers ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4539
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4540 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4541
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4542 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4543 decode_coding_raw_text (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4544 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4545 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4546 coding->chars_at_source = 1;
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
4547 coding->consumed_char = 0;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
4548 coding->consumed = 0;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4549 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4550 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4551
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4552 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4553 encode_coding_raw_text (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4554 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4555 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4556 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4557 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4558 int *charbuf_end = coding->charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4559 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4560 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4561 int produced_chars = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4562 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4563
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4564 if (multibytep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4565 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4566 int safe_room = MAX_MULTIBYTE_LENGTH * 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4567
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4568 if (coding->src_multibyte)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4569 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4570 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4571 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4572 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4573 if (ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4574 EMIT_ONE_ASCII_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4575 else if (CHAR_BYTE8_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4576 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4577 c = CHAR_TO_BYTE8 (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4578 EMIT_ONE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4579 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4580 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4581 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4582 unsigned char str[MAX_MULTIBYTE_LENGTH], *p0 = str, *p1 = str;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4583
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4584 CHAR_STRING_ADVANCE (c, p1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4585 while (p0 < p1)
88950
ad258ee59fbb * coding.c (make_conversion_work_buffer): Adjusted for the change
Kenichi Handa <handa@m17n.org>
parents: 88936
diff changeset
4586 {
ad258ee59fbb * coding.c (make_conversion_work_buffer): Adjusted for the change
Kenichi Handa <handa@m17n.org>
parents: 88936
diff changeset
4587 EMIT_ONE_BYTE (*p0);
ad258ee59fbb * coding.c (make_conversion_work_buffer): Adjusted for the change
Kenichi Handa <handa@m17n.org>
parents: 88936
diff changeset
4588 p0++;
ad258ee59fbb * coding.c (make_conversion_work_buffer): Adjusted for the change
Kenichi Handa <handa@m17n.org>
parents: 88936
diff changeset
4589 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4590 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4591 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4592 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4593 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4594 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4595 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4596 c = *charbuf++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4597 EMIT_ONE_BYTE (c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4598 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4599 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4600 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4601 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4602 if (coding->src_multibyte)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4603 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4604 int safe_room = MAX_MULTIBYTE_LENGTH;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4605
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4606 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4607 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4608 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4609 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4610 if (ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4611 *dst++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4612 else if (CHAR_BYTE8_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4613 *dst++ = CHAR_TO_BYTE8 (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4614 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4615 CHAR_STRING_ADVANCE (c, dst);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4616 produced_chars++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4617 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4618 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4619 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4620 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4621 ASSURE_DESTINATION (charbuf_end - charbuf);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4622 while (charbuf < charbuf_end && dst < dst_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4623 *dst++ = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4624 produced_chars = dst - (coding->destination + coding->dst_bytes);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4625 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4626 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4627 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4628 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4629 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4630 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4631 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4632
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4633 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4634 Check if a text is encoded in a charset-based coding system. If it
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4635 is, return 1, else return 0. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4636
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4637 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4638 detect_coding_charset (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4639 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4640 struct coding_detection_info *detect_info;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4641 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4642 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4643 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4644 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4645 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4646 Lisp_Object attrs, valids;
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
4647 int found = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4648
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4649 detect_info->checked |= CATEGORY_MASK_CHARSET;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4650
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4651 coding = &coding_categories[coding_category_charset];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4652 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4653 valids = AREF (attrs, coding_attr_charset_valids);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4654
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4655 if (! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4656 src += coding->head_ascii;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4657
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4658 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4659 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4660 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4661
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4662 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4663 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4664 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4665 continue;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4666 if (NILP (AREF (valids, c)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4667 break;
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
4668 if (c >= 0x80)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4669 found = CATEGORY_MASK_CHARSET;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4670 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4671 detect_info->rejected |= CATEGORY_MASK_CHARSET;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4672 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4673
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4674 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4675 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4676 return 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4677 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4678
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4679 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4680 decode_coding_charset (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4681 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4682 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4683 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4684 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4685 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4686 int *charbuf = coding->charbuf;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4687 int *charbuf_end = charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4688 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4689 int multibytep = coding->src_multibyte;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4690 Lisp_Object attrs, charset_list, valids;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4691 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4692 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4693 int last_id = charset_ascii;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4694
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4695 CODING_GET_INFO (coding, attrs, charset_list);
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4696 valids = AREF (attrs, coding_attr_charset_valids);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4697
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4698 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4699 {
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4700 int c;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4701 Lisp_Object val;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4702 struct charset *charset;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4703 int dim;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4704 int len = 1;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4705 unsigned code;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4706
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4707 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4708 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4709
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4710 if (charbuf >= charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4711 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4712
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4713 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4714 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4715 goto invalid_code;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4716 code = c;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4717
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4718 val = AREF (valids, c);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4719 if (NILP (val))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4720 goto invalid_code;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4721 if (INTEGERP (val))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4722 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4723 charset = CHARSET_FROM_ID (XFASTINT (val));
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4724 dim = CHARSET_DIMENSION (charset);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4725 while (len < dim)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4726 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4727 ONE_MORE_BYTE (c);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4728 code = (code << 8) | c;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4729 len++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4730 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4731 CODING_DECODE_CHAR (coding, src, src_base, src_end,
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4732 charset, code, c);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4733 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4734 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4735 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4736 /* VAL is a list of charset IDs. It is assured that the
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4737 list is sorted by charset dimensions (smaller one
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4738 comes first). */
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4739 while (CONSP (val))
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4740 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4741 charset = CHARSET_FROM_ID (XFASTINT (XCAR (val)));
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
4742 dim = CHARSET_DIMENSION (charset);
88607
18436bf3d6dd (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88598
diff changeset
4743 while (len < dim)
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4744 {
88598
b88195f69856 (decode_coding_charset): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88597
diff changeset
4745 ONE_MORE_BYTE (c);
b88195f69856 (decode_coding_charset): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88597
diff changeset
4746 code = (code << 8) | c;
88607
18436bf3d6dd (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88598
diff changeset
4747 len++;
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4748 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4749 CODING_DECODE_CHAR (coding, src, src_base,
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4750 src_end, charset, code, c);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4751 if (c >= 0)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4752 break;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4753 val = XCDR (val);
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4754 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4755 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4756 if (c < 0)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4757 goto invalid_code;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4758 if (charset->id != charset_ascii
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4759 && last_id != charset->id)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4760 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4761 if (last_id != charset_ascii)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4762 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4763 last_id = charset->id;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4764 last_offset = char_offset;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4765 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4766
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4767 *charbuf++ = c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4768 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4769 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4770
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4771 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4772 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4773 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4774 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4775 *charbuf++ = c < 0 ? -c : ASCII_BYTE_P (c) ? c : BYTE8_TO_CHAR (c);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4776 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4777 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4778 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4779
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4780 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4781 if (last_id != charset_ascii)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4782 ADD_CHARSET_DATA (charbuf, last_offset, char_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4783 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4784 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4785 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4786 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4787
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4788 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4789 encode_coding_charset (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4790 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4791 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4792 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4793 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4794 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4795 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4796 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4797 int safe_room = MAX_MULTIBYTE_LENGTH;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4798 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4799 Lisp_Object attrs, charset_list;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4800 int ascii_compatible;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4801 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4802
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4803 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4804 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4805
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4806 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4807 {
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4808 struct charset *charset;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4809 unsigned code;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4810
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4811 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4812 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4813 if (ascii_compatible && ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4814 EMIT_ONE_ASCII_BYTE (c);
88690
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4815 else if (CHAR_BYTE8_P (c))
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4816 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4817 c = CHAR_TO_BYTE8 (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4818 EMIT_ONE_BYTE (c);
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4819 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4820 else
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4821 {
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4822 charset = char_charset (c, charset_list, &code);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4823 if (charset)
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4824 {
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4825 if (CHARSET_DIMENSION (charset) == 1)
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4826 EMIT_ONE_BYTE (code);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4827 else if (CHARSET_DIMENSION (charset) == 2)
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4828 EMIT_TWO_BYTES (code >> 8, code & 0xFF);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4829 else if (CHARSET_DIMENSION (charset) == 3)
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4830 EMIT_THREE_BYTES (code >> 16, (code >> 8) & 0xFF, code & 0xFF);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4831 else
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4832 EMIT_FOUR_BYTES (code >> 24, (code >> 16) & 0xFF,
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4833 (code >> 8) & 0xFF, code & 0xFF);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4834 }
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4835 else
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4836 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4837 if (coding->mode & CODING_MODE_SAFE_ENCODING)
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4838 c = CODING_INHIBIT_CHARACTER_SUBSTITUTION;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4839 else
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4840 c = coding->default_char;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4841 EMIT_ONE_BYTE (c);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4842 }
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
4843 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4844 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4845
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4846 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4847 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4848 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4849 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4850 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4851
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4852
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4853 /*** 7. C library functions ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4854
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4855 /* Setup coding context CODING from information about CODING_SYSTEM.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4856 If CODING_SYSTEM is nil, `no-conversion' is assumed. If
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4857 CODING_SYSTEM is invalid, signal an error. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4858
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4859 void
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4860 setup_coding_system (coding_system, coding)
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4861 Lisp_Object coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4862 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4863 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4864 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4865 Lisp_Object eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4866 Lisp_Object coding_type;
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
4867 Lisp_Object val;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4868
24460
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
4869 if (NILP (coding_system))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4870 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4871
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4872 CHECK_CODING_SYSTEM_GET_ID (coding_system, coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4873
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4874 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4875 eol_type = CODING_ID_EOL_TYPE (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4876
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4877 coding->mode = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4878 coding->head_ascii = -1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4879 coding->common_flags
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4880 = (VECTORP (eol_type) ? CODING_REQUIRE_DETECTION_MASK : 0);
89448
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
4881 if (! NILP (CODING_ATTR_POST_READ (attrs)))
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
4882 coding->common_flags |= CODING_REQUIRE_DECODING_MASK;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
4883 if (! NILP (CODING_ATTR_PRE_WRITE (attrs)))
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
4884 coding->common_flags |= CODING_REQUIRE_ENCODING_MASK;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4885 if (! NILP (CODING_ATTR_FOR_UNIBYTE (attrs)))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4886 coding->common_flags |= CODING_FOR_UNIBYTE_MASK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4887
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4888 val = CODING_ATTR_SAFE_CHARSETS (attrs);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4889 coding->max_charset_id = SCHARS (val) - 1;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4890 coding->safe_charsets = (char *) SDATA (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4891 coding->default_char = XINT (CODING_ATTR_DEFAULT_CHAR (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4892
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4893 coding_type = CODING_ATTR_TYPE (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4894 if (EQ (coding_type, Qundecided))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4895 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4896 coding->detector = NULL;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4897 coding->decoder = decode_coding_raw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4898 coding->encoder = encode_coding_raw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4899 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4900 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4901 else if (EQ (coding_type, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4902 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4903 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4904 int flags = XINT (AREF (attrs, coding_attr_iso_flags));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4905
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4906 /* Invoke graphic register 0 to plane 0. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4907 CODING_ISO_INVOCATION (coding, 0) = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4908 /* Invoke graphic register 1 to plane 1 if we can use 8-bit. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4909 CODING_ISO_INVOCATION (coding, 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4910 = (flags & CODING_ISO_FLAG_SEVEN_BITS ? -1 : 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4911 /* Setup the initial status of designation. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4912 for (i = 0; i < 4; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4913 CODING_ISO_DESIGNATION (coding, i) = CODING_ISO_INITIAL (coding, i);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4914 /* Not single shifting initially. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4915 CODING_ISO_SINGLE_SHIFTING (coding) = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4916 /* Beginning of buffer should also be regarded as bol. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4917 CODING_ISO_BOL (coding) = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4918 coding->detector = detect_coding_iso_2022;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4919 coding->decoder = decode_coding_iso_2022;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4920 coding->encoder = encode_coding_iso_2022;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4921 if (flags & CODING_ISO_FLAG_SAFE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4922 coding->mode |= CODING_MODE_SAFE_ENCODING;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
4923 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4924 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4925 | CODING_REQUIRE_FLUSHING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4926 if (flags & CODING_ISO_FLAG_COMPOSITION)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4927 coding->common_flags |= CODING_ANNOTATE_COMPOSITION_MASK;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4928 if (flags & CODING_ISO_FLAG_DESIGNATION)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4929 coding->common_flags |= CODING_ANNOTATE_CHARSET_MASK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4930 if (flags & CODING_ISO_FLAG_FULL_SUPPORT)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4931 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4932 setup_iso_safe_charsets (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4933 val = CODING_ATTR_SAFE_CHARSETS (attrs);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4934 coding->max_charset_id = SCHARS (val) - 1;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4935 coding->safe_charsets = (char *) SDATA (val);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4936 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4937 CODING_ISO_FLAGS (coding) = flags;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4938 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4939 else if (EQ (coding_type, Qcharset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4940 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4941 coding->detector = detect_coding_charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4942 coding->decoder = decode_coding_charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4943 coding->encoder = encode_coding_charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4944 coding->common_flags
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4945 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4946 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4947 else if (EQ (coding_type, Qutf_8))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4948 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4949 coding->detector = detect_coding_utf_8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4950 coding->decoder = decode_coding_utf_8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4951 coding->encoder = encode_coding_utf_8;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
4952 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4953 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4954 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4955 else if (EQ (coding_type, Qutf_16))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4956 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4957 val = AREF (attrs, coding_attr_utf_16_bom);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4958 CODING_UTF_16_BOM (coding) = (CONSP (val) ? utf_16_detect_bom
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4959 : EQ (val, Qt) ? utf_16_with_bom
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4960 : utf_16_without_bom);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4961 val = AREF (attrs, coding_attr_utf_16_endian);
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
4962 CODING_UTF_16_ENDIAN (coding) = (EQ (val, Qbig) ? utf_16_big_endian
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4963 : utf_16_little_endian);
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
4964 CODING_UTF_16_SURROGATE (coding) = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4965 coding->detector = detect_coding_utf_16;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4966 coding->decoder = decode_coding_utf_16;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4967 coding->encoder = encode_coding_utf_16;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
4968 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4969 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
4970 if (CODING_UTF_16_BOM (coding) == utf_16_detect_bom)
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
4971 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4972 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4973 else if (EQ (coding_type, Qccl))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4974 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4975 coding->detector = detect_coding_ccl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4976 coding->decoder = decode_coding_ccl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4977 coding->encoder = encode_coding_ccl;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
4978 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4979 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4980 | CODING_REQUIRE_FLUSHING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4981 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4982 else if (EQ (coding_type, Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4983 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4984 coding->detector = detect_coding_emacs_mule;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4985 coding->decoder = decode_coding_emacs_mule;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4986 coding->encoder = encode_coding_emacs_mule;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4987 coding->common_flags
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4988 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4989 if (! NILP (AREF (attrs, coding_attr_emacs_mule_full))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4990 && ! EQ (CODING_ATTR_CHARSET_LIST (attrs), Vemacs_mule_charset_list))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4991 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4992 Lisp_Object tail, safe_charsets;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4993 int max_charset_id = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4994
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4995 for (tail = Vemacs_mule_charset_list; CONSP (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4996 tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4997 if (max_charset_id < XFASTINT (XCAR (tail)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4998 max_charset_id = XFASTINT (XCAR (tail));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4999 safe_charsets = Fmake_string (make_number (max_charset_id + 1),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5000 make_number (255));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5001 for (tail = Vemacs_mule_charset_list; CONSP (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5002 tail = XCDR (tail))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5003 SSET (safe_charsets, XFASTINT (XCAR (tail)), 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5004 coding->max_charset_id = max_charset_id;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5005 coding->safe_charsets = (char *) SDATA (safe_charsets);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5006 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5007 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5008 else if (EQ (coding_type, Qshift_jis))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5009 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5010 coding->detector = detect_coding_sjis;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5011 coding->decoder = decode_coding_sjis;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5012 coding->encoder = encode_coding_sjis;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5013 coding->common_flags
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5014 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5015 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5016 else if (EQ (coding_type, Qbig5))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5017 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5018 coding->detector = detect_coding_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5019 coding->decoder = decode_coding_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5020 coding->encoder = encode_coding_big5;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
5021 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5022 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5023 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5024 else /* EQ (coding_type, Qraw_text) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5025 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5026 coding->detector = NULL;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5027 coding->decoder = decode_coding_raw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5028 coding->encoder = encode_coding_raw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5029 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5030
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5031 return;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5032 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5033
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5034 /* Return raw-text or one of its subsidiaries that has the same
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5035 eol_type as CODING-SYSTEM. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5036
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5037 Lisp_Object
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5038 raw_text_coding_system (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5039 Lisp_Object coding_system;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5040 {
88430
6418a272b97e * coding.c: Delete unused variables.
Kenichi Handa <handa@m17n.org>
parents: 88365
diff changeset
5041 Lisp_Object spec, attrs;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5042 Lisp_Object eol_type, raw_text_eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5043
89462
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5044 if (NILP (coding_system))
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5045 return Qraw_text;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5046 spec = CODING_SYSTEM_SPEC (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5047 attrs = AREF (spec, 0);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5048
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5049 if (EQ (CODING_ATTR_TYPE (attrs), Qraw_text))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5050 return coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5051
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5052 eol_type = AREF (spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5053 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5054 return Qraw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5055 spec = CODING_SYSTEM_SPEC (Qraw_text);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5056 raw_text_eol_type = AREF (spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5057 return (EQ (eol_type, Qunix) ? AREF (raw_text_eol_type, 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5058 : EQ (eol_type, Qdos) ? AREF (raw_text_eol_type, 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5059 : AREF (raw_text_eol_type, 2));
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5060 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5061
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5062
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5063 /* If CODING_SYSTEM doesn't specify end-of-line format but PARENT
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5064 does, return one of the subsidiary that has the same eol-spec as
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5065 PARENT. Otherwise, return CODING_SYSTEM. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5066
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5067 Lisp_Object
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5068 coding_inherit_eol_type (coding_system, parent)
88473
b47ee8b1ce03 (coding_inherit_eol_type)
Dave Love <fx@gnu.org>
parents: 88465
diff changeset
5069 Lisp_Object coding_system, parent;
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
5070 {
89545
4f394eed6ff2 (inhibit_pre_post_conversion): Removed (unused).
Dave Love <fx@gnu.org>
parents: 89519
diff changeset
5071 Lisp_Object spec, eol_type;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5072
89462
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5073 if (NILP (coding_system))
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5074 coding_system = Qraw_text;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5075 spec = CODING_SYSTEM_SPEC (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5076 eol_type = AREF (spec, 2);
89462
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5077 if (VECTORP (eol_type)
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5078 && ! NILP (parent))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5079 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5080 Lisp_Object parent_spec;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5081 Lisp_Object parent_eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5082
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5083 parent_spec
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5084 = CODING_SYSTEM_SPEC (buffer_defaults.buffer_file_coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5085 parent_eol_type = AREF (parent_spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5086 if (EQ (parent_eol_type, Qunix))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5087 coding_system = AREF (eol_type, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5088 else if (EQ (parent_eol_type, Qdos))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5089 coding_system = AREF (eol_type, 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5090 else if (EQ (parent_eol_type, Qmac))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5091 coding_system = AREF (eol_type, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5092 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5093 return coding_system;
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
5094 }
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
5095
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5096 /* Emacs has a mechanism to automatically detect a coding system if it
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5097 is one of Emacs' internal format, ISO2022, SJIS, and BIG5. But,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5098 it's impossible to distinguish some coding systems accurately
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5099 because they use the same range of codes. So, at first, coding
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5100 systems are categorized into 7, those are:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5101
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
5102 o coding-category-emacs-mule
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5103
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5104 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5105 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
5106 symbol) `emacs-mule' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5107
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5108 o coding-category-sjis
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5109
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5110 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5111 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
5112 symbol) `japanese-shift-jis' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5113
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5114 o coding-category-iso-7
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5115
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5116 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
5117 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
5118 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
5119 charsets. Assigned the coding-system (Lisp symbol)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5120 `iso-2022-7bit' by default.
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5121
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5122 o coding-category-iso-7-tight
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 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
5125 encode/decode only the specified charsets.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5126
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5127 o coding-category-iso-8-1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5128
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5129 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5130 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
5131 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
5132 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
5133 symbol) `iso-latin-1' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5134
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5135 o coding-category-iso-8-2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5136
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5137 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5138 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
5139 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
5140 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
5141 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
5142
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
5143 o coding-category-iso-7-else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5144
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5145 The category for a coding system which has the same code range
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5146 as ISO2022 of 7-bit environemnt but uses locking shift or
18787
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
5147 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
5148 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
5149
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
5150 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
5151
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
5152 The category for a coding system which has the same code range
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5153 as ISO2022 of 8-bit environemnt but uses locking shift or
18787
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
5154 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
5155 symbol) `iso-2022-8bit-ss2' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5156
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5157 o coding-category-big5
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5158
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5159 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5160 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
5161 `cn-big5' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5162
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5163 o coding-category-utf-8
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5164
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5165 The category for a coding system which has the same code range
89851
b2d1259417e3 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 89848
diff changeset
5166 as UTF-8 (cf. RFC3629). Assigned the coding-system (Lisp
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5167 symbol) `utf-8' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5168
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5169 o coding-category-utf-16-be
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5170
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5171 The category for a coding system in which a text has an
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5172 Unicode signature (cf. Unicode Standard) in the order of BIG
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5173 endian at the head. Assigned the coding-system (Lisp symbol)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5174 `utf-16-be' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5175
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5176 o coding-category-utf-16-le
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5177
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5178 The category for a coding system in which a text has an
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5179 Unicode signature (cf. Unicode Standard) in the order of
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5180 LITTLE endian at the head. Assigned the coding-system (Lisp
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5181 symbol) `utf-16-le' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5182
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5183 o coding-category-ccl
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5184
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5185 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
5186 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
5187 coding system is assigned.
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5188
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5189 o coding-category-binary
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5190
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5191 The category for a coding system not categorized in any of the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5192 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
5193 `no-conversion' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5194
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5195 Each of them is a Lisp symbol and the value is an actual
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5196 `coding-system's (this is also a Lisp symbol) assigned by a user.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5197 What Emacs does actually is to detect a category of coding system.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5198 Then, it uses a `coding-system' assigned to it. If Emacs can't
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5199 decide only one possible category, it selects a category of the
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5200 highest priority. Priorities of categories are also specified by a
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5201 user in a Lisp variable `coding-category-list'.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5202
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5203 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5204
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5205 #define EOL_SEEN_NONE 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5206 #define EOL_SEEN_LF 1
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5207 #define EOL_SEEN_CR 2
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5208 #define EOL_SEEN_CRLF 4
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5209
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5210 /* Detect how end-of-line of a text of length SRC_BYTES pointed by
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5211 SOURCE is encoded. If CATEGORY is one of
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5212 coding_category_utf_16_XXXX, assume that CR and LF are encoded by
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5213 two-byte, else they are encoded by one-byte.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5214
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5215 Return one of EOL_SEEN_XXX. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5216
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
5217 #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
5218
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5219 static int
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
5220 detect_eol (source, src_bytes, category)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5221 unsigned char *source;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5222 EMACS_INT src_bytes;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
5223 enum coding_category category;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5224 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5225 unsigned char *src = source, *src_end = src + src_bytes;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5226 unsigned char c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5227 int total = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5228 int eol_seen = EOL_SEEN_NONE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5229
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
5230 if ((1 << category) & CATEGORY_MASK_UTF_16)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5231 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5232 int msb, lsb;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5233
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
5234 msb = category == (coding_category_utf_16_le
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
5235 | coding_category_utf_16_le_nosig);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5236 lsb = 1 - msb;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5237
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5238 while (src + 1 < src_end)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5239 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5240 c = src[lsb];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5241 if (src[msb] == 0 && (c == '\n' || c == '\r'))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5242 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5243 int this_eol;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5244
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5245 if (c == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5246 this_eol = EOL_SEEN_LF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5247 else if (src + 3 >= src_end
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5248 || src[msb + 2] != 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5249 || src[lsb + 2] != '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5250 this_eol = EOL_SEEN_CR;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5251 else
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5252 this_eol = EOL_SEEN_CRLF;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5253
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5254 if (eol_seen == EOL_SEEN_NONE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5255 /* This is the first end-of-line. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5256 eol_seen = this_eol;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5257 else if (eol_seen != this_eol)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5258 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5259 /* The found type is different from what found before. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5260 eol_seen = EOL_SEEN_LF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5261 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5262 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5263 if (++total == MAX_EOL_CHECK_COUNT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5264 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5265 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5266 src += 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5267 }
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5268 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5269 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5270 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5271 while (src < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5272 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5273 c = *src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5274 if (c == '\n' || c == '\r')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5275 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5276 int this_eol;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5277
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5278 if (c == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5279 this_eol = EOL_SEEN_LF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5280 else if (src >= src_end || *src != '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5281 this_eol = EOL_SEEN_CR;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5282 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5283 this_eol = EOL_SEEN_CRLF, src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5284
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5285 if (eol_seen == EOL_SEEN_NONE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5286 /* This is the first end-of-line. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5287 eol_seen = this_eol;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5288 else if (eol_seen != this_eol)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5289 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5290 /* The found type is different from what found before. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5291 eol_seen = EOL_SEEN_LF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5292 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5293 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5294 if (++total == MAX_EOL_CHECK_COUNT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5295 break;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5296 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5297 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5298 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5299 return eol_seen;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5300 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5301
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5302
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5303 static Lisp_Object
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5304 adjust_coding_eol_type (coding, eol_seen)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5305 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5306 int eol_seen;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5307 {
88430
6418a272b97e * coding.c: Delete unused variables.
Kenichi Handa <handa@m17n.org>
parents: 88365
diff changeset
5308 Lisp_Object eol_type;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5309
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5310 eol_type = CODING_ID_EOL_TYPE (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5311 if (eol_seen & EOL_SEEN_LF)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5312 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5313 coding->id = CODING_SYSTEM_ID (AREF (eol_type, 0));
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5314 eol_type = Qunix;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5315 }
88862
108e2535280d (adjust_coding_eol_type): Fix eol_type/eol_seen mixup.
Dave Love <fx@gnu.org>
parents: 88856
diff changeset
5316 else if (eol_seen & EOL_SEEN_CRLF)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5317 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5318 coding->id = CODING_SYSTEM_ID (AREF (eol_type, 1));
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5319 eol_type = Qdos;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5320 }
88862
108e2535280d (adjust_coding_eol_type): Fix eol_type/eol_seen mixup.
Dave Love <fx@gnu.org>
parents: 88856
diff changeset
5321 else if (eol_seen & EOL_SEEN_CR)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5322 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5323 coding->id = CODING_SYSTEM_ID (AREF (eol_type, 2));
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5324 eol_type = Qmac;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5325 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5326 return eol_type;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5327 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5328
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5329 /* Detect how a text specified in CODING is encoded. If a coding
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5330 system is detected, update fields of CODING by the detected coding
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5331 system. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5332
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5333 void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5334 detect_coding (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5335 struct coding_system *coding;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5336 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5337 const unsigned char *src, *src_end;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5338 Lisp_Object attrs, coding_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5339
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5340 coding->consumed = coding->consumed_char = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5341 coding->produced = coding->produced_char = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5342 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5343
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5344 src_end = coding->source + coding->src_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5345
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5346 /* If we have not yet decided the text encoding type, detect it
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5347 now. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5348 if (EQ (CODING_ATTR_TYPE (CODING_ID_ATTRS (coding->id)), Qundecided))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5349 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5350 int c, i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5351
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5352 for (i = 0, src = coding->source; src < src_end; i++, src++)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5353 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5354 c = *src;
89780
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
5355 if (c & 0x80 || (c < 0x20 && (c == ISO_CODE_ESC
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5356 || c == ISO_CODE_SI
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5357 || c == ISO_CODE_SO)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5358 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5359 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5360 coding->head_ascii = src - (coding->source + coding->consumed);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5361
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5362 if (coding->head_ascii < coding->src_bytes)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5363 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5364 struct coding_detection_info detect_info;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5365 enum coding_category category;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5366 struct coding_system *this;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5367
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5368 detect_info.checked = detect_info.found = detect_info.rejected = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5369 for (i = 0; i < coding_category_raw_text; i++)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5370 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5371 category = coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5372 this = coding_categories + category;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5373 if (this->id < 0)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5374 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5375 /* No coding system of this category is defined. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5376 detect_info.rejected |= (1 << category);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5377 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5378 else if (category >= coding_category_raw_text)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
5379 continue;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5380 else if (detect_info.checked & (1 << category))
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5381 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5382 if (detect_info.found & (1 << category))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5383 break;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5384 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5385 else if ((*(this->detector)) (coding, &detect_info)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5386 && detect_info.found & (1 << category))
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5387 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5388 if (category == coding_category_utf_16_auto)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5389 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5390 if (detect_info.found & CATEGORY_MASK_UTF_16_LE)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5391 category = coding_category_utf_16_le;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5392 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5393 category = coding_category_utf_16_be;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5394 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5395 break;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5396 }
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5397 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5398 if (i < coding_category_raw_text)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5399 setup_coding_system (CODING_ID_NAME (this->id), coding);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5400 else if (detect_info.rejected == CATEGORY_MASK_ANY)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5401 setup_coding_system (Qraw_text, coding);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5402 else if (detect_info.rejected)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5403 for (i = 0; i < coding_category_raw_text; i++)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5404 if (! (detect_info.rejected & (1 << coding_priorities[i])))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5405 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5406 this = coding_categories + coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5407 setup_coding_system (CODING_ID_NAME (this->id), coding);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5408 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5409 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5410 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5411 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5412 else if (XINT (CODING_ATTR_CATEGORY (CODING_ID_ATTRS (coding->id)))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5413 == coding_category_utf_16_auto)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5414 {
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5415 Lisp_Object coding_systems;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5416 struct coding_detection_info detect_info;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5417
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5418 coding_systems
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5419 = AREF (CODING_ID_ATTRS (coding->id), coding_attr_utf_16_bom);
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5420 detect_info.found = detect_info.rejected = 0;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5421 if (CONSP (coding_systems)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5422 && detect_coding_utf_16 (coding, &detect_info))
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5423 {
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5424 if (detect_info.found & CATEGORY_MASK_UTF_16_LE)
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5425 setup_coding_system (XCAR (coding_systems), coding);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5426 else if (detect_info.found & CATEGORY_MASK_UTF_16_BE)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5427 setup_coding_system (XCDR (coding_systems), coding);
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5428 }
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5429 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5430 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5431
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5432
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5433 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5434 decode_eol (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5435 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5436 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5437 Lisp_Object eol_type;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5438 unsigned char *p, *pbeg, *pend;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5439
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5440 eol_type = CODING_ID_EOL_TYPE (coding->id);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5441 if (EQ (eol_type, Qunix))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5442 return;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5443
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5444 if (NILP (coding->dst_object))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5445 pbeg = coding->destination;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5446 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5447 pbeg = BYTE_POS_ADDR (coding->dst_pos_byte);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5448 pend = pbeg + coding->produced;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5449
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5450 if (VECTORP (eol_type))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5451 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5452 int eol_seen = EOL_SEEN_NONE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5453
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5454 for (p = pbeg; p < pend; p++)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5455 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5456 if (*p == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5457 eol_seen |= EOL_SEEN_LF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5458 else if (*p == '\r')
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5459 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5460 if (p + 1 < pend && *(p + 1) == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5461 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5462 eol_seen |= EOL_SEEN_CRLF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5463 p++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5464 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5465 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5466 eol_seen |= EOL_SEEN_CR;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5467 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
5468 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5469 if (eol_seen != EOL_SEEN_NONE
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5470 && eol_seen != EOL_SEEN_LF
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5471 && eol_seen != EOL_SEEN_CRLF
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5472 && eol_seen != EOL_SEEN_CR)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5473 eol_seen = EOL_SEEN_LF;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5474 if (eol_seen != EOL_SEEN_NONE)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5475 eol_type = adjust_coding_eol_type (coding, eol_seen);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5476 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5477
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5478 if (EQ (eol_type, Qmac))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5479 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5480 for (p = pbeg; p < pend; p++)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5481 if (*p == '\r')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5482 *p = '\n';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5483 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5484 else if (EQ (eol_type, Qdos))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5485 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5486 int n = 0;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5487
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5488 if (NILP (coding->dst_object))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5489 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5490 for (p = pend - 2; p >= pbeg; p--)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5491 if (*p == '\r')
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5492 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5493 safe_bcopy ((char *) (p + 1), (char *) p, pend-- - p - 1);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5494 n++;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5495 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5496 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5497 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5498 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5499 for (p = pend - 2; p >= pbeg; p--)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5500 if (*p == '\r')
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5501 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5502 int pos_byte = coding->dst_pos_byte + (p - pbeg);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5503 int pos = BYTE_TO_CHAR (pos_byte);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5504
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5505 del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5506 n++;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5507 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5508 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5509 coding->produced -= n;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5510 coding->produced_char -= n;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5511 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5512 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5513
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5514
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5515 /* Return a translation table (or list of them) from coding system
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5516 attribute vector ATTRS for encoding (ENCODEP is nonzero) or
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5517 decoding (ENCODEP is zero). */
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5518
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5519 static INLINE
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5520 get_translation_table (attrs, encodep)
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5521 {
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5522 Lisp_Object standard, translation_table;
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5523
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5524 if (encodep)
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5525 translation_table = CODING_ATTR_ENCODE_TBL (attrs),
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5526 standard = Vstandard_translation_table_for_encode;
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5527 else
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5528 translation_table = CODING_ATTR_DECODE_TBL (attrs),
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5529 standard = Vstandard_translation_table_for_decode;
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5530 if (NILP (translation_table))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5531 return standard;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5532 if (SYMBOLP (translation_table))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5533 translation_table = Fget (translation_table, Qtranslation_table);
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5534 else if (CONSP (translation_table))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5535 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5536 Lisp_Object val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5537
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5538 translation_table = Fcopy_sequence (translation_table);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5539 for (val = translation_table; CONSP (val); val = XCDR (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5540 if (SYMBOLP (XCAR (val)))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5541 XSETCAR (val, Fget (XCAR (val), Qtranslation_table));
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5542 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5543 if (! NILP (standard))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5544 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5545 if (CONSP (translation_table))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5546 translation_table = nconc2 (translation_table, Fcons (standard, Qnil));
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5547 else
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5548 translation_table = Fcons (translation_table, Fcons (standard, Qnil));
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5549 }
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5550 return translation_table;
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5551 }
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5552
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5553
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5554 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5555 translate_chars (coding, table)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5556 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5557 Lisp_Object table;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5558 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5559 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5560 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5561 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5562
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5563 if (coding->chars_at_source)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5564 return;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5565
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5566 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5567 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5568 c = *charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5569 if (c < 0)
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5570 charbuf += -c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5571 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5572 *charbuf++ = translate_char (table, c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5573 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5574 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5575
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5576 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5577 produce_chars (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5578 struct coding_system *coding;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5579 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5580 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5581 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5582 int produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5583 int produced_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5584
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5585 if (! coding->chars_at_source)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5586 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5587 /* Characters are in coding->charbuf. */
89575
59d10ebd2a0b (produce_chars): Revert last change.
Andreas Schwab <schwab@suse.de>
parents: 89571
diff changeset
5588 int *buf = coding->charbuf;
59d10ebd2a0b (produce_chars): Revert last change.
Andreas Schwab <schwab@suse.de>
parents: 89571
diff changeset
5589 int *buf_end = buf + coding->charbuf_used;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5590 unsigned char *adjusted_dst_end;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5591
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5592 if (BUFFERP (coding->src_object)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5593 && EQ (coding->src_object, coding->dst_object))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5594 dst_end = ((unsigned char *) coding->source) + coding->consumed;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5595 adjusted_dst_end = dst_end - MAX_MULTIBYTE_LENGTH;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5596
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5597 while (buf < buf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5598 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5599 int c = *buf++;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5600
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5601 if (dst >= adjusted_dst_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5602 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5603 dst = alloc_destination (coding,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5604 buf_end - buf + MAX_MULTIBYTE_LENGTH,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5605 dst);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5606 dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5607 adjusted_dst_end = dst_end - MAX_MULTIBYTE_LENGTH;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5608 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5609 if (c >= 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5610 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5611 if (coding->dst_multibyte
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5612 || ! CHAR_BYTE8_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5613 CHAR_STRING_ADVANCE (c, dst);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5614 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5615 *dst++ = CHAR_TO_BYTE8 (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5616 produced_chars++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5617 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5618 else
89462
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5619 /* This is an annotation datum. (-C) is the length of
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5620 it. */
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
5621 buf += -c - 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5622 }
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5623 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5624 else
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5625 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5626 const unsigned char *src = coding->source;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5627 const unsigned char *src_end = src + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5628 Lisp_Object eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5629
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5630 eol_type = CODING_ID_EOL_TYPE (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5631
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5632 if (coding->src_multibyte != coding->dst_multibyte)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
5633 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5634 if (coding->src_multibyte)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
5635 {
88443
6b86cf30a0b9 (produce_chars): Set the variable `multibytep' correctly.
Kenichi Handa <handa@m17n.org>
parents: 88438
diff changeset
5636 int multibytep = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5637 int consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5638
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5639 while (1)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
5640 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5641 const unsigned char *src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5642 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5643
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5644 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5645 if (c == '\r')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5646 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5647 if (EQ (eol_type, Qdos))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5648 {
89279
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
5649 if (src == src_end)
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
5650 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5651 record_conversion_result
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5652 (coding, CODING_RESULT_INSUFFICIENT_SRC);
89279
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
5653 goto no_more_source;
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
5654 }
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
5655 if (*src == '\n')
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5656 c = *src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5657 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5658 else if (EQ (eol_type, Qmac))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5659 c = '\n';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5660 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5661 if (dst == dst_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5662 {
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5663 coding->consumed = src - coding->source;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5664
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5665 if (EQ (coding->src_object, coding->dst_object))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5666 dst_end = (unsigned char *) src;
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5667 if (dst == dst_end)
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5668 {
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5669 dst = alloc_destination (coding, src_end - src + 1,
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5670 dst);
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5671 dst_end = coding->destination + coding->dst_bytes;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5672 coding_set_source (coding);
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5673 src = coding->source + coding->consumed;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5674 src_end = coding->source + coding->src_bytes;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5675 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5676 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5677 *dst++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5678 produced_chars++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5679 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5680 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5681 ;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5682 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5683 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5684 while (src < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5685 {
88443
6b86cf30a0b9 (produce_chars): Set the variable `multibytep' correctly.
Kenichi Handa <handa@m17n.org>
parents: 88438
diff changeset
5686 int multibytep = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5687 int c = *src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5688
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5689 if (c == '\r')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5690 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5691 if (EQ (eol_type, Qdos))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5692 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5693 if (src < src_end
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5694 && *src == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5695 c = *src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5696 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5697 else if (EQ (eol_type, Qmac))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5698 c = '\n';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5699 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5700 if (dst >= dst_end - 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5701 {
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5702 coding->consumed = src - coding->source;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5703
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5704 if (EQ (coding->src_object, coding->dst_object))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5705 dst_end = (unsigned char *) src;
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5706 if (dst >= dst_end - 1)
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5707 {
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5708 dst = alloc_destination (coding, src_end - src + 2,
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5709 dst);
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5710 dst_end = coding->destination + coding->dst_bytes;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5711 coding_set_source (coding);
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5712 src = coding->source + coding->consumed;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5713 src_end = coding->source + coding->src_bytes;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5714 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5715 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5716 EMIT_ONE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5717 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5718 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5719 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5720 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5721 if (!EQ (coding->src_object, coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5722 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5723 int require = coding->src_bytes - coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5724
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5725 if (require > 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5726 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5727 EMACS_INT offset = src - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5728
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5729 dst = alloc_destination (coding, require, dst);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5730 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5731 src = coding->source + offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5732 src_end = coding->source + coding->src_bytes;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
5733 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
5734 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5735 produced_chars = coding->src_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5736 while (src < src_end)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
5737 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5738 int c = *src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5739
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5740 if (c == '\r')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5741 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5742 if (EQ (eol_type, Qdos))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5743 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5744 if (src < src_end
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5745 && *src == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5746 c = *src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5747 produced_chars--;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5748 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5749 else if (EQ (eol_type, Qmac))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5750 c = '\n';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5751 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5752 *dst++ = c;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
5753 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
5754 }
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5755 coding->consumed = coding->src_bytes;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
5756 coding->consumed_char = coding->src_chars;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5757 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5758
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5759 produced = dst - (coding->destination + coding->produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5760 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5761 insert_from_gap (produced_chars, produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5762 coding->produced += produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5763 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5764 return produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5765 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5766
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5767 /* Compose text in CODING->object according to the annotation data at
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5768 CHARBUF. CHARBUF is an array:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5769 [ -LENGTH ANNOTATION_MASK FROM TO METHOD COMP_LEN [ COMPONENTS... ] ]
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5770 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5771
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5772 static INLINE void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5773 produce_composition (coding, charbuf)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5774 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5775 int *charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5776 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5777 int len;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5778 EMACS_INT from, to;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5779 enum composition_method method;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5780 Lisp_Object components;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5781
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5782 len = -charbuf[0];
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5783 from = coding->dst_pos + charbuf[2];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5784 to = coding->dst_pos + charbuf[3];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5785 method = (enum composition_method) (charbuf[4]);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5786
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5787 if (method == COMPOSITION_RELATIVE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5788 components = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5789 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5790 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5791 Lisp_Object args[MAX_COMPOSITION_COMPONENTS * 2 - 1];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5792 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5793
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5794 len -= 5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5795 charbuf += 5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5796 for (i = 0; i < len; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5797 args[i] = make_number (charbuf[i]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5798 components = (method == COMPOSITION_WITH_ALTCHARS
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5799 ? Fstring (len, args) : Fvector (len, args));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5800 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5801 compose_text (from, to, components, Qnil, coding->dst_object);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5802 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5803
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5804
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5805 /* Put `charset' property on text in CODING->object according to
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5806 the annotation data at CHARBUF. CHARBUF is an array:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5807 [ -LENGTH ANNOTATION_MASK FROM TO CHARSET-ID ]
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5808 */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5809
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5810 static INLINE void
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5811 produce_charset (coding, charbuf)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5812 struct coding_system *coding;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5813 int *charbuf;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5814 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5815 EMACS_INT from = coding->dst_pos + charbuf[2];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5816 EMACS_INT to = coding->dst_pos + charbuf[3];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5817 struct charset *charset = CHARSET_FROM_ID (charbuf[4]);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5818
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5819 Fput_text_property (make_number (from), make_number (to),
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5820 Qcharset, CHARSET_NAME (charset),
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5821 coding->dst_object);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5822 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5823
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5824
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5825 #define CHARBUF_SIZE 0x4000
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5826
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5827 #define ALLOC_CONVERSION_WORK_AREA(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5828 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5829 int size = CHARBUF_SIZE;; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5830 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5831 coding->charbuf = NULL; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5832 while (size > 1024) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5833 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5834 coding->charbuf = (int *) alloca (sizeof (int) * size); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5835 if (coding->charbuf) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5836 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5837 size >>= 1; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5838 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5839 if (! coding->charbuf) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5840 { \
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5841 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_MEM); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5842 return coding->result; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5843 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5844 coding->charbuf_size = size; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5845 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5846
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5847
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5848 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5849 produce_annotation (coding)
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5850 struct coding_system *coding;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5851 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5852 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5853 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5854
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5855 if (NILP (coding->dst_object))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5856 return;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5857
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5858 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5859 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5860 if (*charbuf >= 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5861 charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5862 else
29877
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
5863 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5864 int len = -*charbuf;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5865 switch (charbuf[1])
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5866 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5867 case CODING_ANNOTATE_COMPOSITION_MASK:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5868 produce_composition (coding, charbuf);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5869 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5870 case CODING_ANNOTATE_CHARSET_MASK:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5871 produce_charset (coding, charbuf);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5872 break;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5873 default:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5874 abort ();
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5875 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5876 charbuf += len;
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5877 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5878 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5879 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5880
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5881 /* Decode the data at CODING->src_object into CODING->dst_object.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5882 CODING->src_object is a buffer, a string, or nil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5883 CODING->dst_object is a buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5884
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5885 If CODING->src_object is a buffer, it must be the current buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5886 In this case, if CODING->src_pos is positive, it is a position of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5887 the source text in the buffer, otherwise, the source text is in the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5888 gap area of the buffer, and CODING->src_pos specifies the offset of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5889 the text from GPT (which must be the same as PT). If this is the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5890 same buffer as CODING->dst_object, CODING->src_pos must be
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5891 negative.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5892
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5893 If CODING->src_object is a string, CODING->src_pos in an index to
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5894 that string.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5895
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5896 If CODING->src_object is nil, CODING->source must already point to
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5897 the non-relocatable memory area. In this case, CODING->src_pos is
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5898 an offset from CODING->source.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5899
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5900 The decoded data is inserted at the current point of the buffer
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5901 CODING->dst_object.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5902 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5903
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5904 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5905 decode_coding (coding)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5906 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5907 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5908 Lisp_Object attrs;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5909 Lisp_Object undo_list;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5910 Lisp_Object translation_table;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5911
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5912 if (BUFFERP (coding->src_object)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5913 && coding->src_pos > 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5914 && coding->src_pos < GPT
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5915 && coding->src_pos + coding->src_chars > GPT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5916 move_gap_both (coding->src_pos, coding->src_pos_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5917
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5918 undo_list = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5919 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5920 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5921 if (current_buffer != XBUFFER (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5922 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5923 if (GPT != PT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5924 move_gap_both (PT, PT_BYTE);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5925 undo_list = current_buffer->undo_list;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5926 current_buffer->undo_list = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5927 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5928
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5929 coding->consumed = coding->consumed_char = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5930 coding->produced = coding->produced_char = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5931 coding->chars_at_source = 0;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5932 record_conversion_result (coding, CODING_RESULT_SUCCESS);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5933 coding->errors = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5934
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5935 ALLOC_CONVERSION_WORK_AREA (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5936
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5937 attrs = CODING_ID_ATTRS (coding->id);
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
5938 translation_table = get_translation_table (attrs, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5939
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5940 do
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5941 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5942 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5943 coding->annotated = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5944 (*(coding->decoder)) (coding);
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5945 if (!NILP (translation_table))
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
5946 translate_chars (coding, translation_table);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5947 coding_set_destination (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5948 produce_chars (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5949 if (coding->annotated)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5950 produce_annotation (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5951 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5952 while (coding->consumed < coding->src_bytes
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5953 && ! coding->result);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5954
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5955 coding->carryover_bytes = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5956 if (coding->consumed < coding->src_bytes)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5957 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5958 int nbytes = coding->src_bytes - coding->consumed;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5959 const unsigned char *src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5960
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5961 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5962 coding_set_destination (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5963 src = coding->source + coding->consumed;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5964
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5965 if (coding->mode & CODING_MODE_LAST_BLOCK)
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5966 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5967 /* Flush out unprocessed data as binary chars. We are sure
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5968 that the number of data is less than the size of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5969 coding->charbuf. */
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5970 coding->charbuf_used = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5971 while (nbytes-- > 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5972 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5973 int c = *src++;
89279
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
5974
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
5975 coding->charbuf[coding->charbuf_used++] = (c & 0x80 ? - c : c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5976 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5977 produce_chars (coding);
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5978 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5979 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5980 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5981 /* Record unprocessed bytes in coding->carryover. We are
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5982 sure that the number of data is less than the size of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5983 coding->carryover. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5984 unsigned char *p = coding->carryover;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5985
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5986 coding->carryover_bytes = nbytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5987 while (nbytes-- > 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5988 *p++ = *src++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5989 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5990 coding->consumed = coding->src_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5991 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5992
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5993 if (BUFFERP (coding->dst_object))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5994 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5995 current_buffer->undo_list = undo_list;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5996 record_insert (coding->dst_pos, coding->produced_char);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5997 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5998 if (! EQ (CODING_ID_EOL_TYPE (coding->id), Qunix))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5999 decode_eol (coding);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6000 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6001 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6002
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6003
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
6004 /* Extract an annotation datum from a composition starting at POS and
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6005 ending before LIMIT of CODING->src_object (buffer or string), store
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6006 the data in BUF, set *STOP to a starting position of the next
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6007 composition (if any) or to LIMIT, and return the address of the
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6008 next element of BUF.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6009
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6010 If such an annotation is not found, set *STOP to a starting
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6011 position of a composition after POS (if any) or to LIMIT, and
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6012 return BUF. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6013
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6014 static INLINE int *
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6015 handle_composition_annotation (pos, limit, coding, buf, stop)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6016 EMACS_INT pos, limit;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6017 struct coding_system *coding;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6018 int *buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6019 EMACS_INT *stop;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6020 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6021 EMACS_INT start, end;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6022 Lisp_Object prop;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6023
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6024 if (! find_composition (pos, limit, &start, &end, &prop, coding->src_object)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6025 || end > limit)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6026 *stop = limit;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6027 else if (start > pos)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6028 *stop = start;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6029 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6030 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6031 if (start == pos)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6032 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6033 /* We found a composition. Store the corresponding
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6034 annotation data in BUF. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6035 int *head = buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6036 enum composition_method method = COMPOSITION_METHOD (prop);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6037 int nchars = COMPOSITION_LENGTH (prop);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6038
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6039 ADD_COMPOSITION_DATA (buf, 0, nchars, method);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6040 if (method != COMPOSITION_RELATIVE)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6041 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6042 Lisp_Object components;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6043 int len, i, i_byte;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6044
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6045 components = COMPOSITION_COMPONENTS (prop);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6046 if (VECTORP (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6047 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6048 len = XVECTOR (components)->size;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6049 for (i = 0; i < len; i++)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6050 *buf++ = XINT (AREF (components, i));
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6051 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6052 else if (STRINGP (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6053 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6054 len = SCHARS (components);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6055 i = i_byte = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6056 while (i < len)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6057 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6058 FETCH_STRING_CHAR_ADVANCE (*buf, components, i, i_byte);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6059 buf++;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6060 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6061 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6062 else if (INTEGERP (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6063 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6064 len = 1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6065 *buf++ = XINT (components);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6066 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6067 else if (CONSP (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6068 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6069 for (len = 0; CONSP (components);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6070 len++, components = XCDR (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6071 *buf++ = XINT (XCAR (components));
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6072 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6073 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6074 abort ();
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6075 *head -= len;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6076 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6077 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6078
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6079 if (find_composition (end, limit, &start, &end, &prop,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6080 coding->src_object)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6081 && end <= limit)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6082 *stop = start;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6083 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6084 *stop = limit;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6085 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6086 return buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6087 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6088
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6089
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
6090 /* Extract an annotation datum from a text property `charset' at POS of
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6091 CODING->src_object (buffer of string), store the data in BUF, set
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6092 *STOP to the position where the value of `charset' property changes
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6093 (limiting by LIMIT), and return the address of the next element of
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6094 BUF.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6095
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6096 If the property value is nil, set *STOP to the position where the
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6097 property value is non-nil (limiting by LIMIT), and return BUF. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6098
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6099 static INLINE int *
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6100 handle_charset_annotation (pos, limit, coding, buf, stop)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6101 EMACS_INT pos, limit;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6102 struct coding_system *coding;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6103 int *buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6104 EMACS_INT *stop;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6105 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6106 Lisp_Object val, next;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6107 int id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6108
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6109 val = Fget_text_property (make_number (pos), Qcharset, coding->src_object);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6110 if (! NILP (val) && CHARSETP (val))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6111 id = XINT (CHARSET_SYMBOL_ID (val));
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6112 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6113 id = -1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6114 ADD_CHARSET_DATA (buf, 0, 0, id);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6115 next = Fnext_single_property_change (make_number (pos), Qcharset,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6116 coding->src_object,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6117 make_number (limit));
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6118 *stop = XINT (next);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6119 return buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6120 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6121
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6122
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6123 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6124 consume_chars (coding)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6125 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6126 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6127 int *buf = coding->charbuf;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6128 int *buf_end = coding->charbuf + coding->charbuf_size;
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
6129 const unsigned char *src = coding->source + coding->consumed;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6130 const unsigned char *src_end = coding->source + coding->src_bytes;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6131 EMACS_INT pos = coding->src_pos + coding->consumed_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6132 EMACS_INT end_pos = coding->src_pos + coding->src_chars;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6133 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6134 Lisp_Object eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6135 int c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6136 EMACS_INT stop, stop_composition, stop_charset;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6137
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6138 eol_type = CODING_ID_EOL_TYPE (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6139 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6140 eol_type = Qunix;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6141
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6142 /* Note: composition handling is not yet implemented. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6143 coding->common_flags &= ~CODING_ANNOTATE_COMPOSITION_MASK;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6144
89562
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6145 if (NILP (coding->src_object))
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6146 stop = stop_composition = stop_charset = end_pos;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6147 else
89562
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6148 {
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6149 if (coding->common_flags & CODING_ANNOTATE_COMPOSITION_MASK)
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6150 stop = stop_composition = pos;
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6151 else
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6152 stop = stop_composition = end_pos;
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6153 if (coding->common_flags & CODING_ANNOTATE_CHARSET_MASK)
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6154 stop = stop_charset = pos;
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6155 else
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6156 stop_charset = end_pos;
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
6157 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6158
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6159 /* Compensate for CRLF and conversion. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6160 buf_end -= 1 + MAX_ANNOTATION_LENGTH;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6161 while (buf < buf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6162 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6163 if (pos == stop)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6164 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6165 if (pos == end_pos)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6166 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6167 if (pos == stop_composition)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6168 buf = handle_composition_annotation (pos, end_pos, coding,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6169 buf, &stop_composition);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6170 if (pos == stop_charset)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6171 buf = handle_charset_annotation (pos, end_pos, coding,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6172 buf, &stop_charset);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6173 stop = (stop_composition < stop_charset
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6174 ? stop_composition : stop_charset);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6175 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6176
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6177 if (! multibytep)
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6178 {
89462
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
6179 EMACS_INT bytes;
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
6180
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
6181 if (! CODING_FOR_UNIBYTE (coding)
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
6182 && (bytes = MULTIBYTE_LENGTH (src, src_end)) > 0)
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6183 c = STRING_CHAR_ADVANCE (src), pos += bytes;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6184 else
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6185 c = *src++, pos++;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6186 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6187 else
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6188 c = STRING_CHAR_ADVANCE (src), pos++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6189 if ((c == '\r') && (coding->mode & CODING_MODE_SELECTIVE_DISPLAY))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6190 c = '\n';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6191 if (! EQ (eol_type, Qunix))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6192 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6193 if (c == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6194 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6195 if (EQ (eol_type, Qdos))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6196 *buf++ = '\r';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6197 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6198 c = '\r';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6199 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6200 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6201 *buf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6202 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6203
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6204 coding->consumed = src - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6205 coding->consumed_char = pos - coding->src_pos;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6206 coding->charbuf_used = buf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6207 coding->chars_at_source = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6208 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6209
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6210
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6211 /* Encode the text at CODING->src_object into CODING->dst_object.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6212 CODING->src_object is a buffer or a string.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6213 CODING->dst_object is a buffer or nil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6214
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6215 If CODING->src_object is a buffer, it must be the current buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6216 In this case, if CODING->src_pos is positive, it is a position of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6217 the source text in the buffer, otherwise. the source text is in the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6218 gap area of the buffer, and coding->src_pos specifies the offset of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6219 the text from GPT (which must be the same as PT). If this is the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6220 same buffer as CODING->dst_object, CODING->src_pos must be
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6221 negative and CODING should not have `pre-write-conversion'.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6222
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6223 If CODING->src_object is a string, CODING should not have
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6224 `pre-write-conversion'.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6225
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6226 If CODING->dst_object is a buffer, the encoded data is inserted at
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6227 the current point of that buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6228
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6229 If CODING->dst_object is nil, the encoded data is placed at the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6230 memory area specified by CODING->destination. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6231
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6232 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6233 encode_coding (coding)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6234 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6235 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6236 Lisp_Object attrs;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6237 Lisp_Object translation_table;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6238
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6239 attrs = CODING_ID_ATTRS (coding->id);
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6240 translation_table = get_translation_table (attrs, 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6241
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6242 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6243 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6244 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6245 coding->dst_multibyte
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6246 = ! NILP (current_buffer->enable_multibyte_characters);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6247 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6248
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6249 coding->consumed = coding->consumed_char = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6250 coding->produced = coding->produced_char = 0;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6251 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6252 coding->errors = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6253
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6254 ALLOC_CONVERSION_WORK_AREA (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6255
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6256 do {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6257 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6258 consume_chars (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6259
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6260 if (!NILP (translation_table))
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6261 translate_chars (coding, translation_table);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6262
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6263 coding_set_destination (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6264 (*(coding->encoder)) (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6265 } while (coding->consumed_char < coding->src_chars);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6266
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6267 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6268 insert_from_gap (coding->produced_char, coding->produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6269
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6270 return (coding->result);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6271 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6272
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6273
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6274 /* Name (or base name) of work buffer for code conversion. */
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6275 static Lisp_Object Vcode_conversion_workbuf_name;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6276
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6277 /* A working buffer used by the top level conversion. Once it is
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6278 created, it is never destroyed. It has the name
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6279 Vcode_conversion_workbuf_name. The other working buffers are
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6280 destroyed after the use is finished, and their names are modified
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6281 versions of Vcode_conversion_workbuf_name. */
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6282 static Lisp_Object Vcode_conversion_reused_workbuf;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6283
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6284 /* 1 iff Vcode_conversion_reused_workbuf is already in use. */
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6285 static int reused_workbuf_in_use;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6286
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6287
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6288 /* Return a working buffer of code convesion. MULTIBYTE specifies the
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6289 multibyteness of returning buffer. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6290
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6291 Lisp_Object
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6292 make_conversion_work_buffer (multibyte)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6293 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6294 Lisp_Object name, workbuf;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6295 struct buffer *current;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6296
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6297 if (reused_workbuf_in_use++)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6298 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6299 name = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6300 workbuf = Fget_buffer_create (name);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6301 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6302 else
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6303 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6304 name = Vcode_conversion_workbuf_name;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6305 workbuf = Fget_buffer_create (name);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6306 if (NILP (Vcode_conversion_reused_workbuf))
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6307 Vcode_conversion_reused_workbuf = workbuf;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6308 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6309 current = current_buffer;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6310 set_buffer_internal (XBUFFER (workbuf));
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6311 Ferase_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6312 current_buffer->undo_list = Qt;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6313 current_buffer->enable_multibyte_characters = multibyte ? Qt : Qnil;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6314 set_buffer_internal (current);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6315 return workbuf;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6316 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6317
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6318
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6319 static Lisp_Object
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6320 code_conversion_restore (arg)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6321 Lisp_Object arg;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
6322 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6323 Lisp_Object current, workbuf;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6324
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6325 current = XCAR (arg);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6326 workbuf = XCDR (arg);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6327 if (! NILP (workbuf))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6328 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6329 if (EQ (workbuf, Vcode_conversion_reused_workbuf))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6330 reused_workbuf_in_use = 0;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6331 else if (! NILP (Fbuffer_live_p (workbuf)))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6332 Fkill_buffer (workbuf);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6333 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6334 set_buffer_internal (XBUFFER (current));
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6335 return Qnil;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
6336 }
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
6337
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6338 Lisp_Object
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6339 code_conversion_save (with_work_buf, multibyte)
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6340 int with_work_buf, multibyte;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6341 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6342 Lisp_Object workbuf = Qnil;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6343
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6344 if (with_work_buf)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6345 workbuf = make_conversion_work_buffer (multibyte);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6346 record_unwind_protect (code_conversion_restore,
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6347 Fcons (Fcurrent_buffer (), workbuf));
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6348 return workbuf;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6349 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6350
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6351 int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6352 decode_coding_gap (coding, chars, bytes)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6353 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6354 EMACS_INT chars, bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6355 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6356 int count = specpdl_ptr - specpdl;
89448
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6357 Lisp_Object attrs;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6358
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6359 code_conversion_save (0, 0);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6360
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6361 coding->src_object = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6362 coding->src_chars = chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6363 coding->src_bytes = bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6364 coding->src_pos = -chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6365 coding->src_pos_byte = -bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6366 coding->src_multibyte = chars < bytes;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6367 coding->dst_object = coding->src_object;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6368 coding->dst_pos = PT;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6369 coding->dst_pos_byte = PT_BYTE;
88443
6b86cf30a0b9 (produce_chars): Set the variable `multibytep' correctly.
Kenichi Handa <handa@m17n.org>
parents: 88438
diff changeset
6370 coding->dst_multibyte = ! NILP (current_buffer->enable_multibyte_characters);
89279
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
6371 coding->mode |= CODING_MODE_LAST_BLOCK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6372
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6373 if (CODING_REQUIRE_DETECTION (coding))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6374 detect_coding (coding);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6375
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6376 decode_coding (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6377
89448
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6378 attrs = CODING_ID_ATTRS (coding->id);
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6379 if (! NILP (CODING_ATTR_POST_READ (attrs)))
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6380 {
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6381 EMACS_INT prev_Z = Z, prev_Z_BYTE = Z_BYTE;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6382 Lisp_Object val;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6383
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6384 TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte);
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6385 val = call1 (CODING_ATTR_POST_READ (attrs),
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6386 make_number (coding->produced_char));
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6387 CHECK_NATNUM (val);
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6388 coding->produced_char += Z - prev_Z;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6389 coding->produced += Z_BYTE - prev_Z_BYTE;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6390 }
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
6391
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6392 unbind_to (count, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6393 return coding->result;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6394 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6395
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6396 int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6397 encode_coding_gap (coding, chars, bytes)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6398 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6399 EMACS_INT chars, bytes;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6400 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6401 int count = specpdl_ptr - specpdl;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6402
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6403 code_conversion_save (0, 0);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6404
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6405 coding->src_object = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6406 coding->src_chars = chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6407 coding->src_bytes = bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6408 coding->src_pos = -chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6409 coding->src_pos_byte = -bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6410 coding->src_multibyte = chars < bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6411 coding->dst_object = coding->src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6412 coding->dst_pos = PT;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6413 coding->dst_pos_byte = PT_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6414
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6415 encode_coding (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6416
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6417 unbind_to (count, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6418 return coding->result;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6419 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6420
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6421
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6422 /* Decode the text in the range FROM/FROM_BYTE and TO/TO_BYTE in
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6423 SRC_OBJECT into DST_OBJECT by coding context CODING.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6424
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6425 SRC_OBJECT is a buffer, a string, or Qnil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6426
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6427 If it is a buffer, the text is at point of the buffer. FROM and TO
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6428 are positions in the buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6429
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6430 If it is a string, the text is at the beginning of the string.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6431 FROM and TO are indices to the string.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6432
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6433 If it is nil, the text is at coding->source. FROM and TO are
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6434 indices to coding->source.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6435
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6436 DST_OBJECT is a buffer, Qt, or Qnil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6437
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6438 If it is a buffer, the decoded text is inserted at point of the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6439 buffer. If the buffer is the same as SRC_OBJECT, the source text
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6440 is deleted.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6441
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6442 If it is Qt, a string is made from the decoded text, and
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6443 set in CODING->dst_object.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6444
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6445 If it is Qnil, the decoded text is stored at CODING->destination.
89418
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
6446 The caller must allocate CODING->dst_bytes bytes at
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6447 CODING->destination by xmalloc. If the decoded text is longer than
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6448 CODING->dst_bytes, CODING->destination is relocated by xrealloc.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6449 */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6450
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
6451 void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6452 decode_coding_object (coding, src_object, from, from_byte, to, to_byte,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6453 dst_object)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6454 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6455 Lisp_Object src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6456 EMACS_INT from, from_byte, to, to_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6457 Lisp_Object dst_object;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6458 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6459 int count = specpdl_ptr - specpdl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6460 unsigned char *destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6461 EMACS_INT dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6462 EMACS_INT chars = to - from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6463 EMACS_INT bytes = to_byte - from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6464 Lisp_Object attrs;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6465 Lisp_Object buffer;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6466 int saved_pt = -1, saved_pt_byte;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6467
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6468 buffer = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6469
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6470 if (NILP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6471 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6472 destination = coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6473 dst_bytes = coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6474 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6475
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6476 coding->src_object = src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6477 coding->src_chars = chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6478 coding->src_bytes = bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6479 coding->src_multibyte = chars < bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6480
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6481 if (STRINGP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6482 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6483 coding->src_pos = from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6484 coding->src_pos_byte = from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6485 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6486 else if (BUFFERP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6487 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6488 set_buffer_internal (XBUFFER (src_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6489 if (from != GPT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6490 move_gap_both (from, from_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6491 if (EQ (src_object, dst_object))
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6492 {
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6493 saved_pt = PT, saved_pt_byte = PT_BYTE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6494 TEMP_SET_PT_BOTH (from, from_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6495 del_range_both (from, from_byte, to, to_byte, 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6496 coding->src_pos = -chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6497 coding->src_pos_byte = -bytes;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6498 }
42661
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
6499 else
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
6500 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6501 coding->src_pos = from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6502 coding->src_pos_byte = from_byte;
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6503 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6504 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6505
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6506 if (CODING_REQUIRE_DETECTION (coding))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6507 detect_coding (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6508 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6509
89418
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
6510 if (EQ (dst_object, Qt)
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
6511 || (! NILP (CODING_ATTR_POST_READ (attrs))
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
6512 && NILP (dst_object)))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6513 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6514 coding->dst_object = code_conversion_save (1, 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6515 coding->dst_pos = BEG;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6516 coding->dst_pos_byte = BEG_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6517 coding->dst_multibyte = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6518 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6519 else if (BUFFERP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6520 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6521 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6522 coding->dst_object = dst_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6523 coding->dst_pos = BUF_PT (XBUFFER (dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6524 coding->dst_pos_byte = BUF_PT_BYTE (XBUFFER (dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6525 coding->dst_multibyte
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6526 = ! NILP (XBUFFER (dst_object)->enable_multibyte_characters);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6527 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6528 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6529 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6530 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6531 coding->dst_object = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6532 coding->dst_multibyte = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6533 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6534
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6535 decode_coding (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6536
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6537 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6538 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6539
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6540 if (! NILP (CODING_ATTR_POST_READ (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6541 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6542 struct gcpro gcpro1, gcpro2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6543 EMACS_INT prev_Z = Z, prev_Z_BYTE = Z_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6544 Lisp_Object val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6545
88506
a7f0d13affa5 (decode_coding_object): Move point to coding->dst_pos before
Kenichi Handa <handa@m17n.org>
parents: 88497
diff changeset
6546 TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6547 GCPRO2 (coding->src_object, coding->dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6548 val = call1 (CODING_ATTR_POST_READ (attrs),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6549 make_number (coding->produced_char));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6550 UNGCPRO;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6551 CHECK_NATNUM (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6552 coding->produced_char += Z - prev_Z;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6553 coding->produced += Z_BYTE - prev_Z_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6554 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6555
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6556 if (EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6557 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6558 coding->dst_object = Fbuffer_string ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6559 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6560 else if (NILP (dst_object) && BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6561 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6562 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6563 if (dst_bytes < coding->produced)
42105
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
6564 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6565 destination
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6566 = (unsigned char *) xrealloc (destination, coding->produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6567 if (! destination)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6568 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6569 record_conversion_result (coding,
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6570 CODING_RESULT_INSUFFICIENT_DST);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6571 unbind_to (count, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6572 return;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6573 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6574 if (BEGV < GPT && GPT < BEGV + coding->produced_char)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6575 move_gap_both (BEGV, BEGV_BYTE);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6576 bcopy (BEGV_ADDR, destination, coding->produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6577 coding->destination = destination;
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
6578 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6579 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6580
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6581 if (saved_pt >= 0)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6582 {
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6583 /* This is the case of:
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6584 (BUFFERP (src_object) && EQ (src_object, dst_object))
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6585 As we have moved PT while replacing the original buffer
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6586 contents, we must recover it now. */
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6587 set_buffer_internal (XBUFFER (src_object));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6588 if (saved_pt < from)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6589 TEMP_SET_PT_BOTH (saved_pt, saved_pt_byte);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6590 else if (saved_pt < from + chars)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6591 TEMP_SET_PT_BOTH (from, from_byte);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6592 else if (! NILP (current_buffer->enable_multibyte_characters))
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6593 TEMP_SET_PT_BOTH (saved_pt + (coding->produced_char - chars),
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6594 saved_pt_byte + (coding->produced - bytes));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6595 else
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6596 TEMP_SET_PT_BOTH (saved_pt + (coding->produced - bytes),
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6597 saved_pt_byte + (coding->produced - bytes));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6598 }
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6599
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
6600 unbind_to (count, coding->dst_object);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6601 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6602
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6603
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6604 void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6605 encode_coding_object (coding, src_object, from, from_byte, to, to_byte,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6606 dst_object)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6607 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6608 Lisp_Object src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6609 EMACS_INT from, from_byte, to, to_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6610 Lisp_Object dst_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6611 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6612 int count = specpdl_ptr - specpdl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6613 EMACS_INT chars = to - from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6614 EMACS_INT bytes = to_byte - from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6615 Lisp_Object attrs;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6616 Lisp_Object buffer;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6617 int saved_pt = -1, saved_pt_byte;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6618
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6619 buffer = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6620
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6621 coding->src_object = src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6622 coding->src_chars = chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6623 coding->src_bytes = bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6624 coding->src_multibyte = chars < bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6625
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6626 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6627
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6628 if (! NILP (CODING_ATTR_PRE_WRITE (attrs)))
21062
839b22ad1e42 (code_convert_region): Handle the case that codes
Kenichi Handa <handa@m17n.org>
parents: 20999
diff changeset
6629 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6630 coding->src_object = code_conversion_save (1, coding->src_multibyte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6631 set_buffer_internal (XBUFFER (coding->src_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6632 if (STRINGP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6633 insert_from_string (src_object, from, from_byte, chars, bytes, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6634 else if (BUFFERP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6635 insert_from_buffer (XBUFFER (src_object), from, chars, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6636 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6637 insert_1_both (coding->source + from, chars, bytes, 0, 0, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6638
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6639 if (EQ (src_object, dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6640 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6641 set_buffer_internal (XBUFFER (src_object));
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6642 saved_pt = PT, saved_pt_byte = PT_BYTE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6643 del_range_both (from, from_byte, to, to_byte, 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6644 set_buffer_internal (XBUFFER (coding->src_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6645 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6646
88510
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
6647 call2 (CODING_ATTR_PRE_WRITE (attrs),
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
6648 make_number (BEG), make_number (Z));
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
6649 coding->src_object = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6650 if (BEG != GPT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6651 move_gap_both (BEG, BEG_BYTE);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6652 coding->src_chars = Z - BEG;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6653 coding->src_bytes = Z_BYTE - BEG_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6654 coding->src_pos = BEG;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6655 coding->src_pos_byte = BEG_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6656 coding->src_multibyte = Z < Z_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6657 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6658 else if (STRINGP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6659 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6660 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6661 coding->src_pos = from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6662 coding->src_pos_byte = from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6663 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6664 else if (BUFFERP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6665 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6666 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6667 set_buffer_internal (XBUFFER (src_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6668 if (EQ (src_object, dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6669 {
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6670 saved_pt = PT, saved_pt_byte = PT_BYTE;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6671 coding->src_object = del_range_1 (from, to, 1, 1);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6672 coding->src_pos = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6673 coding->src_pos_byte = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6674 }
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
6675 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6676 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6677 if (from < GPT && to >= GPT)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6678 move_gap_both (from, from_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6679 coding->src_pos = from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6680 coding->src_pos_byte = from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6681 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6682 }
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6683 else
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6684 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6685
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6686 if (BUFFERP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6687 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6688 coding->dst_object = dst_object;
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6689 if (EQ (src_object, dst_object))
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6690 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6691 coding->dst_pos = from;
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6692 coding->dst_pos_byte = from_byte;
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6693 }
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6694 else
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6695 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6696 coding->dst_pos = BUF_PT (XBUFFER (dst_object));
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6697 coding->dst_pos_byte = BUF_PT_BYTE (XBUFFER (dst_object));
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
6698 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6699 coding->dst_multibyte
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6700 = ! NILP (XBUFFER (dst_object)->enable_multibyte_characters);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6701 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6702 else if (EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6703 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6704 coding->dst_object = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6705 coding->dst_bytes = coding->src_chars;
88510
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
6706 if (coding->dst_bytes == 0)
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
6707 coding->dst_bytes = 1;
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
6708 coding->destination = (unsigned char *) xmalloc (coding->dst_bytes);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6709 coding->dst_multibyte = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6710 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6711 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6712 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6713 coding->dst_object = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6714 coding->dst_multibyte = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6715 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6716
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6717 encode_coding (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6718
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6719 if (EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6720 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6721 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6722 coding->dst_object = Fbuffer_string ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6723 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6724 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6725 coding->dst_object
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6726 = make_unibyte_string ((char *) coding->destination,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6727 coding->produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6728 xfree (coding->destination);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6729 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6730 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6731
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6732 if (saved_pt >= 0)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6733 {
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6734 /* This is the case of:
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6735 (BUFFERP (src_object) && EQ (src_object, dst_object))
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6736 As we have moved PT while replacing the original buffer
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6737 contents, we must recover it now. */
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6738 set_buffer_internal (XBUFFER (src_object));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6739 if (saved_pt < from)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6740 TEMP_SET_PT_BOTH (saved_pt, saved_pt_byte);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6741 else if (saved_pt < from + chars)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6742 TEMP_SET_PT_BOTH (from, from_byte);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6743 else if (! NILP (current_buffer->enable_multibyte_characters))
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6744 TEMP_SET_PT_BOTH (saved_pt + (coding->produced_char - chars),
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6745 saved_pt_byte + (coding->produced - bytes));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6746 else
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6747 TEMP_SET_PT_BOTH (saved_pt + (coding->produced - bytes),
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6748 saved_pt_byte + (coding->produced - bytes));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6749 }
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
6750
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6751 unbind_to (count, Qnil);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6752 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6753
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6754
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6755 Lisp_Object
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6756 preferred_coding_system ()
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6757 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6758 int id = coding_categories[coding_priorities[0]].id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6759
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6760 return CODING_ID_NAME (id);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6761 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6762
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6763
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6764 #ifdef emacs
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
6765 /*** 8. Emacs Lisp library functions ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6766
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6767 DEFUN ("coding-system-p", Fcoding_system_p, Scoding_system_p, 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6768 doc: /* Return t if OBJECT is nil or a coding-system.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6769 See the documentation of `define-coding-system' for information
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6770 about coding-system objects. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6771 (obj)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6772 Lisp_Object obj;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6773 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6774 return ((NILP (obj) || CODING_SYSTEM_P (obj)) ? Qt : Qnil);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6775 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6776
17717
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6777 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
6778 Sread_non_nil_coding_system, 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6779 doc: /* Read a coding system from the minibuffer, prompting with string PROMPT. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6780 (prompt)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6781 Lisp_Object prompt;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6782 {
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6783 Lisp_Object val;
17717
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6784 do
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6785 {
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6786 val = Fcompleting_read (prompt, Vcoding_system_alist, Qnil,
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6787 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
6788 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6789 while (SCHARS (val) == 0);
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6790 return (Fintern (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6791 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6792
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
6793 DEFUN ("read-coding-system", Fread_coding_system, Sread_coding_system, 1, 2, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6794 doc: /* Read a coding system from the minibuffer, prompting with string PROMPT.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6795 If the user enters null input, return second argument DEFAULT-CODING-SYSTEM. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6796 (prompt, default_coding_system)
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
6797 Lisp_Object prompt, default_coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6798 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
6799 Lisp_Object val;
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
6800 if (SYMBOLP (default_coding_system))
89519
040a08a2a879 (Fread_coding_system): Fix arg of XSETSTRING.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
6801 XSETSTRING (default_coding_system, XPNTR (SYMBOL_NAME (default_coding_system)));
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6802 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
6803 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
6804 default_coding_system, Qnil);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6805 return (SCHARS (val) == 0 ? Qnil : Fintern (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6806 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6807
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6808 DEFUN ("check-coding-system", Fcheck_coding_system, Scheck_coding_system,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6809 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6810 doc: /* Check validity of CODING-SYSTEM.
89218
00d976320a16 (Fcheck_coding_system): Doc fix.
Dave Love <fx@gnu.org>
parents: 89207
diff changeset
6811 If valid, return CODING-SYSTEM, else signal a `coding-system-error' error. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6812 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6813 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6814 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6815 CHECK_SYMBOL (coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6816 if (!NILP (Fcoding_system_p (coding_system)))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6817 return coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6818 while (1)
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
6819 Fsignal (Qcoding_system_error, Fcons (coding_system, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6820 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6821
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6822
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6823 /* Detect how the bytes at SRC of length SRC_BYTES are encoded. If
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6824 HIGHEST is nonzero, return the coding system of the highest
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6825 priority among the detected coding systems. Otherwize return a
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6826 list of detected coding systems sorted by their priorities. If
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6827 MULTIBYTEP is nonzero, it is assumed that the bytes are in correct
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6828 multibyte form but contains only ASCII and eight-bit chars.
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6829 Otherwise, the bytes are raw bytes.
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6830
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6831 CODING-SYSTEM controls the detection as below:
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6832
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6833 If it is nil, detect both text-format and eol-format. If the
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6834 text-format part of CODING-SYSTEM is already specified
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6835 (e.g. `iso-latin-1'), detect only eol-format. If the eol-format
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6836 part of CODING-SYSTEM is already specified (e.g. `undecided-unix'),
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6837 detect only text-format. */
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6838
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6839 Lisp_Object
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6840 detect_coding_system (src, src_chars, src_bytes, highest, multibytep,
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6841 coding_system)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6842 const unsigned char *src;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6843 int src_chars, src_bytes, highest;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6844 int multibytep;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6845 Lisp_Object coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6846 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6847 const unsigned char *src_end = src + src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6848 Lisp_Object attrs, eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6849 Lisp_Object val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6850 struct coding_system coding;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6851 int id;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6852 struct coding_detection_info detect_info;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6853 enum coding_category base_category;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6854
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6855 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6856 coding_system = Qundecided;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6857 setup_coding_system (coding_system, &coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6858 attrs = CODING_ID_ATTRS (coding.id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6859 eol_type = CODING_ID_EOL_TYPE (coding.id);
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6860 coding_system = CODING_ATTR_BASE_NAME (attrs);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6861
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6862 coding.source = src;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6863 coding.src_chars = src_chars;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6864 coding.src_bytes = src_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6865 coding.src_multibyte = multibytep;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6866 coding.consumed = 0;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6867 coding.mode |= CODING_MODE_LAST_BLOCK;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6868
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6869 detect_info.checked = detect_info.found = detect_info.rejected = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6870
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6871 /* At first, detect text-format if necessary. */
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6872 base_category = XINT (CODING_ATTR_CATEGORY (attrs));
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6873 if (base_category == coding_category_undecided)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6874 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6875 enum coding_category category;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6876 struct coding_system *this;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6877 int c, i;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6878
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6879 /* Skip all ASCII bytes except for a few ISO2022 controls. */
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6880 for (i = 0; src < src_end; i++, src++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6881 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6882 c = *src;
89780
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
6883 if (c & 0x80 || (c < 0x20 && (c == ISO_CODE_ESC
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6884 || c == ISO_CODE_SI
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6885 || c == ISO_CODE_SO)))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6886 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6887 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6888 coding.head_ascii = src - coding.source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6889
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6890 if (src < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6891 for (i = 0; i < coding_category_raw_text; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6892 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6893 category = coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6894 this = coding_categories + category;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6895
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6896 if (this->id < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6897 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6898 /* No coding system of this category is defined. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6899 detect_info.rejected |= (1 << category);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6900 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6901 else if (category >= coding_category_raw_text)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6902 continue;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6903 else if (detect_info.checked & (1 << category))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6904 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6905 if (highest
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6906 && (detect_info.found & (1 << category)))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6907 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6908 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6909 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6910 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6911 if ((*(this->detector)) (&coding, &detect_info)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6912 && highest
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6913 && (detect_info.found & (1 << category)))
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6914 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6915 if (category == coding_category_utf_16_auto)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6916 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6917 if (detect_info.found & CATEGORY_MASK_UTF_16_LE)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6918 category = coding_category_utf_16_le;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6919 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6920 category = coding_category_utf_16_be;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6921 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6922 break;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6923 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6924 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6925 }
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6926
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6927 if (detect_info.rejected == CATEGORY_MASK_ANY)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6928 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6929 detect_info.found = CATEGORY_MASK_RAW_TEXT;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6930 id = coding_categories[coding_category_raw_text].id;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6931 val = Fcons (make_number (id), Qnil);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6932 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6933 else if (! detect_info.rejected && ! detect_info.found)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6934 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6935 detect_info.found = CATEGORY_MASK_ANY;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6936 id = coding_categories[coding_category_undecided].id;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6937 val = Fcons (make_number (id), Qnil);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6938 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6939 else if (highest)
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6940 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6941 if (detect_info.found)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6942 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6943 detect_info.found = 1 << category;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6944 val = Fcons (make_number (this->id), Qnil);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6945 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6946 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6947 for (i = 0; i < coding_category_raw_text; i++)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6948 if (! (detect_info.rejected & (1 << coding_priorities[i])))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6949 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6950 detect_info.found = 1 << coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6951 id = coding_categories[coding_priorities[i]].id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6952 val = Fcons (make_number (id), Qnil);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6953 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6954 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6955 }
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6956 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6957 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6958 int mask = detect_info.rejected | detect_info.found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6959 int found = 0;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6960 val = Qnil;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6961
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6962 for (i = coding_category_raw_text - 1; i >= 0; i--)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6963 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6964 category = coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6965 if (! (mask & (1 << category)))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6966 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6967 found |= 1 << category;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6968 id = coding_categories[category].id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6969 val = Fcons (make_number (id), val);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6970 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6971 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6972 for (i = coding_category_raw_text - 1; i >= 0; i--)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6973 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6974 category = coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6975 if (detect_info.found & (1 << category))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6976 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6977 id = coding_categories[category].id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6978 val = Fcons (make_number (id), val);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6979 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6980 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6981 detect_info.found |= found;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6982 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6983 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6984 else if (base_category == coding_category_utf_16_auto)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6985 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6986 if (detect_coding_utf_16 (&coding, &detect_info))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6987 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6988 enum coding_category category;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6989 struct coding_system *this;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6990
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6991 if (detect_info.found & CATEGORY_MASK_UTF_16_LE)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6992 this = coding_categories + coding_category_utf_16_le;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6993 else if (detect_info.found & CATEGORY_MASK_UTF_16_BE)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6994 this = coding_categories + coding_category_utf_16_be;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6995 else if (detect_info.rejected & CATEGORY_MASK_UTF_16_LE_NOSIG)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6996 this = coding_categories + coding_category_utf_16_be_nosig;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6997 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6998 this = coding_categories + coding_category_utf_16_le_nosig;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6999 val = Fcons (make_number (this->id), Qnil);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7000 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7001 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7002 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7003 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7004 detect_info.found = 1 << XINT (CODING_ATTR_CATEGORY (attrs));
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7005 val = Fcons (make_number (coding.id), Qnil);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7006 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7007
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7008 /* Then, detect eol-format if necessary. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7009 {
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7010 int normal_eol = -1, utf_16_be_eol = -1, utf_16_le_eol;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7011 Lisp_Object tail;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7012
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7013 if (VECTORP (eol_type))
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7014 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7015 if (detect_info.found & ~CATEGORY_MASK_UTF_16)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7016 normal_eol = detect_eol (coding.source, src_bytes,
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7017 coding_category_raw_text);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7018 if (detect_info.found & (CATEGORY_MASK_UTF_16_BE
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7019 | CATEGORY_MASK_UTF_16_BE_NOSIG))
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7020 utf_16_be_eol = detect_eol (coding.source, src_bytes,
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7021 coding_category_utf_16_be);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7022 if (detect_info.found & (CATEGORY_MASK_UTF_16_LE
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7023 | CATEGORY_MASK_UTF_16_LE_NOSIG))
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7024 utf_16_le_eol = detect_eol (coding.source, src_bytes,
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7025 coding_category_utf_16_le);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7026 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7027 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7028 {
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7029 if (EQ (eol_type, Qunix))
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7030 normal_eol = utf_16_be_eol = utf_16_le_eol = EOL_SEEN_LF;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7031 else if (EQ (eol_type, Qdos))
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7032 normal_eol = utf_16_be_eol = utf_16_le_eol = EOL_SEEN_CRLF;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7033 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7034 normal_eol = utf_16_be_eol = utf_16_le_eol = EOL_SEEN_CR;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7035 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7036
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7037 for (tail = val; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7038 {
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7039 enum coding_category category;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7040 int this_eol;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7041
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7042 id = XINT (XCAR (tail));
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7043 attrs = CODING_ID_ATTRS (id);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7044 category = XINT (CODING_ATTR_CATEGORY (attrs));
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7045 eol_type = CODING_ID_EOL_TYPE (id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7046 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7047 {
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7048 if (category == coding_category_utf_16_be
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7049 || category == coding_category_utf_16_be_nosig)
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7050 this_eol = utf_16_be_eol;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7051 else if (category == coding_category_utf_16_le
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7052 || category == coding_category_utf_16_le_nosig)
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7053 this_eol = utf_16_le_eol;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7054 else
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7055 this_eol = normal_eol;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7056
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7057 if (this_eol == EOL_SEEN_LF)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7058 XSETCAR (tail, AREF (eol_type, 0));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7059 else if (this_eol == EOL_SEEN_CRLF)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7060 XSETCAR (tail, AREF (eol_type, 1));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7061 else if (this_eol == EOL_SEEN_CR)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7062 XSETCAR (tail, AREF (eol_type, 2));
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7063 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7064 XSETCAR (tail, CODING_ID_NAME (id));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7065 }
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7066 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
7067 XSETCAR (tail, CODING_ID_NAME (id));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7068 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7069 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7070
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7071 return (highest ? XCAR (val) : val);
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
7072 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7073
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7074
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7075 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
7076 2, 3, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7077 doc: /* Detect coding system of the text in the region between START and END.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7078 Return a list of possible coding systems ordered by priority.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7079
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7080 If only ASCII characters are found, it returns a list of single element
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7081 `undecided' or its subsidiary coding system according to a detected
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7082 end-of-line format.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7083
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7084 If optional argument HIGHEST is non-nil, return the coding system of
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7085 highest priority. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7086 (start, end, highest)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7087 Lisp_Object start, end, highest;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7088 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7089 int from, to;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7090 int from_byte, to_byte;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7091
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7092 CHECK_NUMBER_COERCE_MARKER (start);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7093 CHECK_NUMBER_COERCE_MARKER (end);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7094
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7095 validate_region (&start, &end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7096 from = XINT (start), to = XINT (end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7097 from_byte = CHAR_TO_BYTE (from);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7098 to_byte = CHAR_TO_BYTE (to);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7099
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7100 if (from < GPT && to >= GPT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7101 move_gap_both (to, to_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7102
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7103 return detect_coding_system (BYTE_POS_ADDR (from_byte),
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7104 to - from, to_byte - from_byte,
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
7105 !NILP (highest),
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
7106 !NILP (current_buffer
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7107 ->enable_multibyte_characters),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7108 Qnil);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7109 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7110
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7111 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
7112 1, 2, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7113 doc: /* Detect coding system of the text in STRING.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7114 Return a list of possible coding systems ordered by priority.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7115
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7116 If only ASCII characters are found, it returns a list of single element
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7117 `undecided' or its subsidiary coding system according to a detected
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7118 end-of-line format.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7119
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7120 If optional argument HIGHEST is non-nil, return the coding system of
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7121 highest priority. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7122 (string, highest)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7123 Lisp_Object string, highest;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7124 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7125 CHECK_STRING (string);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7126
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7127 return detect_coding_system (SDATA (string),
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7128 SCHARS (string), SBYTES (string),
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7129 !NILP (highest), STRING_MULTIBYTE (string),
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7130 Qnil);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7131 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7132
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7133
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7134 static INLINE int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7135 char_encodable_p (c, attrs)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7136 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7137 Lisp_Object attrs;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7138 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7139 Lisp_Object tail;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7140 struct charset *charset;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7141 Lisp_Object translation_table;
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7142
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7143 translation_table = CODING_ATTR_TRANS_TBL (attrs);
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
7144 if (! NILP (translation_table))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7145 c = translate_char (translation_table, c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7146 for (tail = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7147 CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7148 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7149 charset = CHARSET_FROM_ID (XINT (XCAR (tail)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7150 if (CHAR_CHARSET_P (c, charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7151 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7152 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7153 return (! NILP (tail));
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7154 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7155
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7156
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7157 /* Return a list of coding systems that safely encode the text between
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7158 START and END. If EXCLUDE is non-nil, it is a list of coding
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7159 systems not to check. The returned list doesn't contain any such
88889
4548f224c603 (Ffind_coding_systems_region_internal): Detect an
Kenichi Handa <handa@m17n.org>
parents: 88876
diff changeset
7160 coding systems. In any case, if the text contains only ASCII or is
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7161 unibyte, return t. */
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7162
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7163 DEFUN ("find-coding-systems-region-internal",
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7164 Ffind_coding_systems_region_internal,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7165 Sfind_coding_systems_region_internal, 2, 3, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7166 doc: /* Internal use only. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7167 (start, end, exclude)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7168 Lisp_Object start, end, exclude;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7169 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7170 Lisp_Object coding_attrs_list, safe_codings;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7171 EMACS_INT start_byte, end_byte;
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
7172 const unsigned char *p, *pbeg, *pend;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7173 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7174 Lisp_Object tail, elt;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7175
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7176 if (STRINGP (start))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7177 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7178 if (!STRING_MULTIBYTE (start)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7179 || SCHARS (start) == SBYTES (start))
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7180 return Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7181 start_byte = 0;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7182 end_byte = SBYTES (start);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7183 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7184 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7185 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7186 CHECK_NUMBER_COERCE_MARKER (start);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7187 CHECK_NUMBER_COERCE_MARKER (end);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7188 if (XINT (start) < BEG || XINT (end) > Z || XINT (start) > XINT (end))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7189 args_out_of_range (start, end);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7190 if (NILP (current_buffer->enable_multibyte_characters))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7191 return Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7192 start_byte = CHAR_TO_BYTE (XINT (start));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7193 end_byte = CHAR_TO_BYTE (XINT (end));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7194 if (XINT (end) - XINT (start) == end_byte - start_byte)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7195 return Qt;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7196
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7197 if (XINT (start) < GPT && XINT (end) > GPT)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7198 {
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7199 if ((GPT - XINT (start)) < (XINT (end) - GPT))
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7200 move_gap_both (XINT (start), start_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7201 else
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7202 move_gap_both (XINT (end), end_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7203 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7204 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7205
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7206 coding_attrs_list = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7207 for (tail = Vcoding_system_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7208 if (NILP (exclude)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7209 || NILP (Fmemq (XCAR (tail), exclude)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7210 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7211 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7212
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7213 attrs = AREF (CODING_SYSTEM_SPEC (XCAR (tail)), 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7214 if (EQ (XCAR (tail), CODING_ATTR_BASE_NAME (attrs))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7215 && ! EQ (CODING_ATTR_TYPE (attrs), Qundecided))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7216 {
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7217 ASET (attrs, coding_attr_trans_tbl,
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7218 get_translation_table (attrs, 1));
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7219 coding_attrs_list = Fcons (attrs, coding_attrs_list);
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7220 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7221 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7222
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7223 if (STRINGP (start))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7224 p = pbeg = SDATA (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7225 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7226 p = pbeg = BYTE_POS_ADDR (start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7227 pend = p + (end_byte - start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7228
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7229 while (p < pend && ASCII_BYTE_P (*p)) p++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7230 while (p < pend && ASCII_BYTE_P (*(pend - 1))) pend--;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7231
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7232 while (p < pend)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7233 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7234 if (ASCII_BYTE_P (*p))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7235 p++;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7236 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7237 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7238 c = STRING_CHAR_ADVANCE (p);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7239
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7240 charset_map_loaded = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7241 for (tail = coding_attrs_list; CONSP (tail);)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7242 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7243 elt = XCAR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7244 if (NILP (elt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7245 tail = XCDR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7246 else if (char_encodable_p (c, elt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7247 tail = XCDR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7248 else if (CONSP (XCDR (tail)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7249 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7250 XSETCAR (tail, XCAR (XCDR (tail)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7251 XSETCDR (tail, XCDR (XCDR (tail)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7252 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7253 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7254 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7255 XSETCAR (tail, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7256 tail = XCDR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7257 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7258 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7259 if (charset_map_loaded)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7260 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7261 EMACS_INT p_offset = p - pbeg, pend_offset = pend - pbeg;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7262
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7263 if (STRINGP (start))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7264 pbeg = SDATA (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7265 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7266 pbeg = BYTE_POS_ADDR (start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7267 p = pbeg + p_offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7268 pend = pbeg + pend_offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7269 }
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7270 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7271 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7272
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7273 safe_codings = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7274 for (tail = coding_attrs_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7275 if (! NILP (XCAR (tail)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7276 safe_codings = Fcons (CODING_ATTR_BASE_NAME (XCAR (tail)), safe_codings);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7277
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7278 return safe_codings;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7279 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7280
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7281
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7282 DEFUN ("unencodable-char-position", Funencodable_char_position,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7283 Sunencodable_char_position, 3, 5, 0,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7284 doc: /*
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7285 Return position of first un-encodable character in a region.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7286 START and END specfiy the region and CODING-SYSTEM specifies the
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7287 encoding to check. Return nil if CODING-SYSTEM does encode the region.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7288
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7289 If optional 4th argument COUNT is non-nil, it specifies at most how
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7290 many un-encodable characters to search. In this case, the value is a
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7291 list of positions.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7292
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7293 If optional 5th argument STRING is non-nil, it is a string to search
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7294 for un-encodable characters. In that case, START and END are indexes
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7295 to the string. */)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7296 (start, end, coding_system, count, string)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7297 Lisp_Object start, end, coding_system, count, string;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7298 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7299 int n;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7300 struct coding_system coding;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7301 Lisp_Object attrs, charset_list, translation_table;
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7302 Lisp_Object positions;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7303 int from, to;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7304 const unsigned char *p, *stop, *pend;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7305 int ascii_compatible;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7306
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7307 setup_coding_system (Fcheck_coding_system (coding_system), &coding);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7308 attrs = CODING_ID_ATTRS (coding.id);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7309 if (EQ (CODING_ATTR_TYPE (attrs), Qraw_text))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7310 return Qnil;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7311 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7312 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7313 translation_table = get_translation_table (attrs, 1);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7314
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7315 if (NILP (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7316 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7317 validate_region (&start, &end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7318 from = XINT (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7319 to = XINT (end);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7320 if (NILP (current_buffer->enable_multibyte_characters)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7321 || (ascii_compatible
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7322 && (to - from) == (CHAR_TO_BYTE (to) - (CHAR_TO_BYTE (from)))))
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7323 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7324 p = CHAR_POS_ADDR (from);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7325 pend = CHAR_POS_ADDR (to);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7326 if (from < GPT && to >= GPT)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7327 stop = GPT_ADDR;
48829
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
7328 else
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7329 stop = pend;
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7330 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7331 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7332 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7333 CHECK_STRING (string);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7334 CHECK_NATNUM (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7335 CHECK_NATNUM (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7336 from = XINT (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7337 to = XINT (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7338 if (from > to
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7339 || to > SCHARS (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7340 args_out_of_range_3 (string, start, end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7341 if (! STRING_MULTIBYTE (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7342 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7343 p = SDATA (string) + string_char_to_byte (string, from);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7344 stop = pend = SDATA (string) + string_char_to_byte (string, to);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7345 if (ascii_compatible && (to - from) == (pend - p))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7346 return Qnil;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7347 }
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7348
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7349 if (NILP (count))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7350 n = 1;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7351 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7352 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7353 CHECK_NATNUM (count);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7354 n = XINT (count);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7355 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7356
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7357 positions = Qnil;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7358 while (1)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7359 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7360 int c;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7361
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7362 if (ascii_compatible)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7363 while (p < stop && ASCII_BYTE_P (*p))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7364 p++, from++;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7365 if (p >= stop)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7366 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7367 if (p >= pend)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7368 break;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7369 stop = pend;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7370 p = GAP_END_ADDR;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7371 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7372
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7373 c = STRING_CHAR_ADVANCE (p);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7374 if (! (ASCII_CHAR_P (c) && ascii_compatible)
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7375 && ! char_charset (translate_char (translation_table, c),
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7376 charset_list, NULL))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7377 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7378 positions = Fcons (make_number (from), positions);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7379 n--;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7380 if (n == 0)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7381 break;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7382 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7383
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7384 from++;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7385 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7386
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7387 return (NILP (count) ? Fcar (positions) : Fnreverse (positions));
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7388 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7389
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7390
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7391 DEFUN ("check-coding-systems-region", Fcheck_coding_systems_region,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7392 Scheck_coding_systems_region, 3, 3, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7393 doc: /* Check if the region is encodable by coding systems.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7394
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7395 START and END are buffer positions specifying the region.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7396 CODING-SYSTEM-LIST is a list of coding systems to check.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7397
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7398 The value is an alist ((CODING-SYSTEM POS0 POS1 ...) ...), where
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7399 CODING-SYSTEM is a member of CODING-SYSTEM-LIst and can't encode the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7400 whole region, POS0, POS1, ... are buffer positions where non-encodable
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7401 characters are found.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7402
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7403 If all coding systems in CODING-SYSTEM-LIST can encode the region, the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7404 value is nil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7405
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7406 START may be a string. In that case, check if the string is
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7407 encodable, and the value contains indices to the string instead of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7408 buffer positions. END is ignored. */)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7409 (start, end, coding_system_list)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7410 Lisp_Object start, end, coding_system_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7411 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7412 Lisp_Object list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7413 EMACS_INT start_byte, end_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7414 int pos;
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
7415 const unsigned char *p, *pbeg, *pend;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7416 int c;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7417 Lisp_Object tail, elt, attrs;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7418
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7419 if (STRINGP (start))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7420 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7421 if (!STRING_MULTIBYTE (start)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7422 && SCHARS (start) != SBYTES (start))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7423 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7424 start_byte = 0;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7425 end_byte = SBYTES (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7426 pos = 0;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7427 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7428 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7429 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7430 CHECK_NUMBER_COERCE_MARKER (start);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7431 CHECK_NUMBER_COERCE_MARKER (end);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7432 if (XINT (start) < BEG || XINT (end) > Z || XINT (start) > XINT (end))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7433 args_out_of_range (start, end);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7434 if (NILP (current_buffer->enable_multibyte_characters))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7435 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7436 start_byte = CHAR_TO_BYTE (XINT (start));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7437 end_byte = CHAR_TO_BYTE (XINT (end));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7438 if (XINT (end) - XINT (start) == end_byte - start_byte)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7439 return Qt;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7440
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7441 if (XINT (start) < GPT && XINT (end) > GPT)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7442 {
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7443 if ((GPT - XINT (start)) < (XINT (end) - GPT))
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7444 move_gap_both (XINT (start), start_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7445 else
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7446 move_gap_both (XINT (end), end_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7447 }
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7448 pos = XINT (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7449 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7450
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7451 list = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7452 for (tail = coding_system_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7453 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7454 elt = XCAR (tail);
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7455 attrs = AREF (CODING_SYSTEM_SPEC (elt), 0);
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7456 ASET (attrs, coding_attr_trans_tbl, get_translation_table (attrs, 1));
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7457 list = Fcons (Fcons (elt, Fcons (attrs, Qnil)), list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7458 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7459
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7460 if (STRINGP (start))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7461 p = pbeg = SDATA (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7462 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7463 p = pbeg = BYTE_POS_ADDR (start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7464 pend = p + (end_byte - start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7465
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7466 while (p < pend && ASCII_BYTE_P (*p)) p++, pos++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7467 while (p < pend && ASCII_BYTE_P (*(pend - 1))) pend--;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7468
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7469 while (p < pend)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7470 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7471 if (ASCII_BYTE_P (*p))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7472 p++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7473 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7474 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7475 c = STRING_CHAR_ADVANCE (p);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7476
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7477 charset_map_loaded = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7478 for (tail = list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7479 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7480 elt = XCDR (XCAR (tail));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7481 if (! char_encodable_p (c, XCAR (elt)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7482 XSETCDR (elt, Fcons (make_number (pos), XCDR (elt)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7483 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7484 if (charset_map_loaded)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7485 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7486 EMACS_INT p_offset = p - pbeg, pend_offset = pend - pbeg;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7487
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7488 if (STRINGP (start))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7489 pbeg = SDATA (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7490 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7491 pbeg = BYTE_POS_ADDR (start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7492 p = pbeg + p_offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7493 pend = pbeg + pend_offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7494 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7495 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7496 pos++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7497 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7498
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7499 tail = list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7500 list = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7501 for (; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7502 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7503 elt = XCAR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7504 if (CONSP (XCDR (XCDR (elt))))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7505 list = Fcons (Fcons (XCAR (elt), Fnreverse (XCDR (XCDR (elt)))),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7506 list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7507 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7508
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7509 return list;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7510 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7511
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7512
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7513 Lisp_Object
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7514 code_convert_region (start, end, coding_system, dst_object, encodep, norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7515 Lisp_Object start, end, coding_system, dst_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7516 int encodep, norecord;
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7517 {
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7518 struct coding_system coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7519 EMACS_INT from, from_byte, to, to_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7520 Lisp_Object src_object;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7521
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7522 CHECK_NUMBER_COERCE_MARKER (start);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7523 CHECK_NUMBER_COERCE_MARKER (end);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7524 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7525 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7526 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7527 CHECK_CODING_SYSTEM (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7528 src_object = Fcurrent_buffer ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7529 if (NILP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7530 dst_object = src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7531 else if (! EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7532 CHECK_BUFFER (dst_object);
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7533
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7534 validate_region (&start, &end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7535 from = XFASTINT (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7536 from_byte = CHAR_TO_BYTE (from);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7537 to = XFASTINT (end);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7538 to_byte = CHAR_TO_BYTE (to);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7539
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7540 setup_coding_system (coding_system, &coding);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7541 coding.mode |= CODING_MODE_LAST_BLOCK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7542
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7543 if (encodep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7544 encode_coding_object (&coding, src_object, from, from_byte, to, to_byte,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7545 dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7546 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7547 decode_coding_object (&coding, src_object, from, from_byte, to, to_byte,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7548 dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7549 if (! norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7550 Vlast_coding_system_used = CODING_ID_NAME (coding.id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7551
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7552 return (BUFFERP (dst_object)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7553 ? make_number (coding.produced_char)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7554 : coding.dst_object);
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7555 }
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7556
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7557
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7558 DEFUN ("decode-coding-region", Fdecode_coding_region, Sdecode_coding_region,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7559 3, 4, "r\nzCoding system: ",
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7560 doc: /* Decode the current region from the specified coding system.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7561 When called from a program, takes four arguments:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7562 START, END, CODING-SYSTEM, and DESTINATION.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7563 START and END are buffer positions.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7564
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7565 Optional 4th arguments DESTINATION specifies where the decoded text goes.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7566 If nil, the region between START and END is replace by the decoded text.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7567 If buffer, the decoded text is inserted in the buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7568 If t, the decoded text is returned.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7569
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7570 This function sets `last-coding-system-used' to the precise coding system
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7571 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7572 not fully specified.)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7573 It returns the length of the decoded text. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7574 (start, end, coding_system, destination)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7575 Lisp_Object start, end, coding_system, destination;
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7576 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7577 return code_convert_region (start, end, coding_system, destination, 0, 0);
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7578 }
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7579
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7580 DEFUN ("encode-coding-region", Fencode_coding_region, Sencode_coding_region,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7581 3, 4, "r\nzCoding system: ",
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7582 doc: /* Encode the current region by specified coding system.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7583 When called from a program, takes three arguments:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7584 START, END, and CODING-SYSTEM. START and END are buffer positions.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7585
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7586 Optional 4th arguments DESTINATION specifies where the encoded text goes.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7587 If nil, the region between START and END is replace by the encoded text.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7588 If buffer, the encoded text is inserted in the buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7589 If t, the encoded text is returned.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7590
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7591 This function sets `last-coding-system-used' to the precise coding system
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7592 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7593 not fully specified.)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7594 It returns the length of the encoded text. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7595 (start, end, coding_system, destination)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7596 Lisp_Object start, end, coding_system, destination;
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7597 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7598 return code_convert_region (start, end, coding_system, destination, 1, 0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7599 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7600
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7601 Lisp_Object
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7602 code_convert_string (string, coding_system, dst_object,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7603 encodep, nocopy, norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7604 Lisp_Object string, coding_system, dst_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7605 int encodep, nocopy, norecord;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7606 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7607 struct coding_system coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7608 EMACS_INT chars, bytes;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7609
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7610 CHECK_STRING (string);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7611 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7612 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7613 if (! norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7614 Vlast_coding_system_used = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7615 if (NILP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7616 return (nocopy ? Fcopy_sequence (string) : string);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7617 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7618
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7619 if (NILP (coding_system))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7620 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7621 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7622 CHECK_CODING_SYSTEM (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7623 if (NILP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7624 dst_object = Qt;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7625 else if (! EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7626 CHECK_BUFFER (dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7627
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7628 setup_coding_system (coding_system, &coding);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7629 coding.mode |= CODING_MODE_LAST_BLOCK;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7630 chars = SCHARS (string);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7631 bytes = SBYTES (string);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7632 if (encodep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7633 encode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7634 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7635 decode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7636 if (! norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7637 Vlast_coding_system_used = CODING_ID_NAME (coding.id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7638
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7639 return (BUFFERP (dst_object)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7640 ? make_number (coding.produced_char)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7641 : coding.dst_object);
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7642 }
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7643
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7644
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7645 /* Encode or decode STRING according to CODING_SYSTEM.
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7646 Do not set Vlast_coding_system_used.
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7647
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7648 This function is called only from macros DECODE_FILE and
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7649 ENCODE_FILE, thus we ignore character composition. */
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7650
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7651 Lisp_Object
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7652 code_convert_string_norecord (string, coding_system, encodep)
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7653 Lisp_Object string, coding_system;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7654 int encodep;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7655 {
88430
6418a272b97e * coding.c: Delete unused variables.
Kenichi Handa <handa@m17n.org>
parents: 88365
diff changeset
7656 return code_convert_string (string, coding_system, Qt, encodep, 0, 1);
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7657 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7658
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7659
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7660 DEFUN ("decode-coding-string", Fdecode_coding_string, Sdecode_coding_string,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7661 2, 4, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7662 doc: /* Decode STRING which is encoded in CODING-SYSTEM, and return the result.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7663
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7664 Optional third arg NOCOPY non-nil means it is OK to return STRING itself
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7665 if the decoding operation is trivial.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7666
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7667 Optional fourth arg BUFFER non-nil meant that the decoded text is
88845
64b8f6168269 (Fset_coding_system_priority): Allow null arg list.
Dave Love <fx@gnu.org>
parents: 88771
diff changeset
7668 inserted in BUFFER instead of returned as a string. In this case,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7669 the return value is BUFFER.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7670
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7671 This function sets `last-coding-system-used' to the precise coding system
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7672 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7673 not fully specified. */)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7674 (string, coding_system, nocopy, buffer)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7675 Lisp_Object string, coding_system, nocopy, buffer;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7676 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7677 return code_convert_string (string, coding_system, buffer,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7678 0, ! NILP (nocopy), 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7679 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7680
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7681 DEFUN ("encode-coding-string", Fencode_coding_string, Sencode_coding_string,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7682 2, 4, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7683 doc: /* Encode STRING to CODING-SYSTEM, and return the result.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7684
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7685 Optional third arg NOCOPY non-nil means it is OK to return STRING
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7686 itself if the encoding operation is trivial.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7687
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7688 Optional fourth arg BUFFER non-nil meant that the encoded text is
88845
64b8f6168269 (Fset_coding_system_priority): Allow null arg list.
Dave Love <fx@gnu.org>
parents: 88771
diff changeset
7689 inserted in BUFFER instead of returned as a string. In this case,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7690 the return value is BUFFER.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7691
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7692 This function sets `last-coding-system-used' to the precise coding system
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7693 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7694 not fully specified.) */)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7695 (string, coding_system, nocopy, buffer)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7696 Lisp_Object string, coding_system, nocopy, buffer;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7697 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7698 return code_convert_string (string, coding_system, buffer,
88856
13a375bc220d (ENCODE_DESIGNATION, decode_eol)
Dave Love <fx@gnu.org>
parents: 88845
diff changeset
7699 1, ! NILP (nocopy), 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7700 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7701
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7702
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7703 DEFUN ("decode-sjis-char", Fdecode_sjis_char, Sdecode_sjis_char, 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7704 doc: /* Decode a Japanese character which has CODE in shift_jis encoding.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7705 Return the corresponding character. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7706 (code)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7707 Lisp_Object code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7708 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7709 Lisp_Object spec, attrs, val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7710 struct charset *charset_roman, *charset_kanji, *charset_kana, *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7711 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7712
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7713 CHECK_NATNUM (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7714 c = XFASTINT (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7715 CHECK_CODING_SYSTEM_GET_SPEC (Vsjis_coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7716 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7717
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7718 if (ASCII_BYTE_P (c)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7719 && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7720 return code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7721
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7722 val = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7723 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
88497
d2b9e0d4c2f6 (Fdecode_sjis_char): Fix typo (0x7F->0xFF). Fix the
Kenichi Handa <handa@m17n.org>
parents: 88485
diff changeset
7724 charset_kana = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d2b9e0d4c2f6 (Fdecode_sjis_char): Fix typo (0x7F->0xFF). Fix the
Kenichi Handa <handa@m17n.org>
parents: 88485
diff changeset
7725 charset_kanji = CHARSET_FROM_ID (XINT (XCAR (val)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7726
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7727 if (c <= 0x7F)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7728 charset = charset_roman;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7729 else if (c >= 0xA0 && c < 0xDF)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7730 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7731 charset = charset_kana;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7732 c -= 0x80;
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7733 }
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7734 else
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7735 {
88497
d2b9e0d4c2f6 (Fdecode_sjis_char): Fix typo (0x7F->0xFF). Fix the
Kenichi Handa <handa@m17n.org>
parents: 88485
diff changeset
7736 int s1 = c >> 8, s2 = c & 0xFF;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7737
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7738 if (s1 < 0x81 || (s1 > 0x9F && s1 < 0xE0) || s1 > 0xEF
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7739 || s2 < 0x40 || s2 == 0x7F || s2 > 0xFC)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7740 error ("Invalid code: %d", code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7741 SJIS_TO_JIS (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7742 charset = charset_kanji;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7743 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7744 c = DECODE_CHAR (charset, c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7745 if (c < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7746 error ("Invalid code: %d", code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7747 return make_number (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7748 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7749
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7750
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7751 DEFUN ("encode-sjis-char", Fencode_sjis_char, Sencode_sjis_char, 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7752 doc: /* Encode a Japanese character CHAR to shift_jis encoding.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7753 Return the corresponding code in SJIS. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7754 (ch)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7755 Lisp_Object ch;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7756 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7757 Lisp_Object spec, attrs, charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7758 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7759 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7760 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7761
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7762 CHECK_CHARACTER (ch);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7763 c = XFASTINT (ch);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7764 CHECK_CODING_SYSTEM_GET_SPEC (Vsjis_coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7765 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7766
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7767 if (ASCII_CHAR_P (c)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7768 && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7769 return ch;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7770
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7771 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7772 charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7773 if (code == CHARSET_INVALID_CODE (charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7774 error ("Can't encode by shift_jis encoding: %d", c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7775 JIS_TO_SJIS (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7776
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7777 return make_number (code);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7778 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7779
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7780 DEFUN ("decode-big5-char", Fdecode_big5_char, Sdecode_big5_char, 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7781 doc: /* Decode a Big5 character which has CODE in BIG5 coding system.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7782 Return the corresponding character. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7783 (code)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7784 Lisp_Object code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7785 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7786 Lisp_Object spec, attrs, val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7787 struct charset *charset_roman, *charset_big5, *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7788 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7789
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7790 CHECK_NATNUM (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7791 c = XFASTINT (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7792 CHECK_CODING_SYSTEM_GET_SPEC (Vbig5_coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7793 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7794
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7795 if (ASCII_BYTE_P (c)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7796 && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7797 return code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7798
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7799 val = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7800 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7801 charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7802
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7803 if (c <= 0x7F)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7804 charset = charset_roman;
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7805 else
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7806 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7807 int b1 = c >> 8, b2 = c & 0x7F;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7808 if (b1 < 0xA1 || b1 > 0xFE
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7809 || b2 < 0x40 || (b2 > 0x7E && b2 < 0xA1) || b2 > 0xFE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7810 error ("Invalid code: %d", code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7811 charset = charset_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7812 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7813 c = DECODE_CHAR (charset, (unsigned )c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7814 if (c < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7815 error ("Invalid code: %d", code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7816 return make_number (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7817 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7818
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7819 DEFUN ("encode-big5-char", Fencode_big5_char, Sencode_big5_char, 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7820 doc: /* Encode the Big5 character CHAR to BIG5 coding system.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7821 Return the corresponding character code in Big5. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7822 (ch)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7823 Lisp_Object ch;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7824 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7825 Lisp_Object spec, attrs, charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7826 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7827 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7828 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7829
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7830 CHECK_CHARACTER (ch);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7831 c = XFASTINT (ch);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7832 CHECK_CODING_SYSTEM_GET_SPEC (Vbig5_coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7833 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7834 if (ASCII_CHAR_P (c)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7835 && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7836 return ch;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7837
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7838 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7839 charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7840 if (code == CHARSET_INVALID_CODE (charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7841 error ("Can't encode by Big5 encoding: %d", c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7842
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7843 return make_number (code);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7844 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7845
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7846
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
7847 DEFUN ("set-terminal-coding-system-internal",
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
7848 Fset_terminal_coding_system_internal,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7849 Sset_terminal_coding_system_internal, 1, 1, 0,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7850 doc: /* Internal use only. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7851 (coding_system)
88473
b47ee8b1ce03 (coding_inherit_eol_type)
Dave Love <fx@gnu.org>
parents: 88465
diff changeset
7852 Lisp_Object coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7853 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7854 CHECK_SYMBOL (coding_system);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7855 setup_coding_system (Fcheck_coding_system (coding_system),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7856 &terminal_coding);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7857
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
7858 /* We had better not send unsafe characters to terminal. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7859 terminal_coding.mode |= CODING_MODE_SAFE_ENCODING;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7860 /* Characer composition should be disabled. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7861 terminal_coding.common_flags &= ~CODING_ANNOTATE_COMPOSITION_MASK;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7862 terminal_coding.src_multibyte = 1;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7863 terminal_coding.dst_multibyte = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7864 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7865 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7866
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7867 DEFUN ("set-safe-terminal-coding-system-internal",
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7868 Fset_safe_terminal_coding_system_internal,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7869 Sset_safe_terminal_coding_system_internal, 1, 1, 0,
41006
fd83ec62a495 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 40842
diff changeset
7870 doc: /* Internal use only. */)
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7871 (coding_system)
88473
b47ee8b1ce03 (coding_inherit_eol_type)
Dave Love <fx@gnu.org>
parents: 88465
diff changeset
7872 Lisp_Object coding_system;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7873 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7874 CHECK_SYMBOL (coding_system);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7875 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
7876 &safe_terminal_coding);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7877 /* Characer composition should be disabled. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7878 safe_terminal_coding.common_flags &= ~CODING_ANNOTATE_COMPOSITION_MASK;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7879 safe_terminal_coding.src_multibyte = 1;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7880 safe_terminal_coding.dst_multibyte = 0;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7881 return Qnil;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7882 }
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7883
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7884 DEFUN ("terminal-coding-system",
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7885 Fterminal_coding_system, Sterminal_coding_system, 0, 0, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7886 doc: /* Return coding system specified for terminal output. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7887 ()
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7888 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7889 return CODING_ID_NAME (terminal_coding.id);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7890 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7891
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
7892 DEFUN ("set-keyboard-coding-system-internal",
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
7893 Fset_keyboard_coding_system_internal,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7894 Sset_keyboard_coding_system_internal, 1, 1, 0,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7895 doc: /* Internal use only. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7896 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7897 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7898 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7899 CHECK_SYMBOL (coding_system);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7900 setup_coding_system (Fcheck_coding_system (coding_system),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7901 &keyboard_coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7902 /* Characer composition should be disabled. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7903 keyboard_coding.common_flags &= ~CODING_ANNOTATE_COMPOSITION_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7904 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7905 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7906
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7907 DEFUN ("keyboard-coding-system",
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7908 Fkeyboard_coding_system, Skeyboard_coding_system, 0, 0, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7909 doc: /* Return coding system specified for decoding keyboard input. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7910 ()
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7911 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7912 return CODING_ID_NAME (keyboard_coding.id);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7913 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7914
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7915
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
7916 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
7917 Sfind_operation_coding_system, 1, MANY, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7918 doc: /* Choose a coding system for an operation based on the target name.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7919 The value names a pair of coding systems: (DECODING-SYSTEM . ENCODING-SYSTEM).
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7920 DECODING-SYSTEM is the coding system to use for decoding
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7921 \(in case OPERATION does decoding), and ENCODING-SYSTEM is the coding system
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7922 for encoding (in case OPERATION does encoding).
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7923
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7924 The first argument OPERATION specifies an I/O primitive:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7925 For file I/O, `insert-file-contents' or `write-region'.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7926 For process I/O, `call-process', `call-process-region', or `start-process'.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7927 For network I/O, `open-network-stream'.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7928
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7929 The remaining arguments should be the same arguments that were passed
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7930 to the primitive. Depending on which primitive, one of those arguments
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7931 is selected as the TARGET. For example, if OPERATION does file I/O,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7932 whichever argument specifies the file name is TARGET.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7933
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7934 TARGET has a meaning which depends on OPERATION:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7935 For file I/O, TARGET is a file name.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7936 For process I/O, TARGET is a process name.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7937 For network I/O, TARGET is a service name or a port number
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7938
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7939 This function looks up what specified for TARGET in,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7940 `file-coding-system-alist', `process-coding-system-alist',
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7941 or `network-coding-system-alist' depending on OPERATION.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7942 They may specify a coding system, a cons of coding systems,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7943 or a function symbol to call.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7944 In the last case, we call the function with one argument,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7945 which is a list of all the arguments given to this function.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7946
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7947 usage: (find-operation-coding-system OPERATION ARGUMENTS ...) */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7948 (nargs, args)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7949 int nargs;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7950 Lisp_Object *args;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7951 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7952 Lisp_Object operation, target_idx, target, val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7953 register Lisp_Object chain;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7954
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7955 if (nargs < 2)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7956 error ("Too few arguments");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7957 operation = args[0];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7958 if (!SYMBOLP (operation)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7959 || !INTEGERP (target_idx = Fget (operation, Qtarget_idx)))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7960 error ("Invalid first arguement");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7961 if (nargs < 1 + XINT (target_idx))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7962 error ("Too few arguments for operation: %s",
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7963 SDATA (SYMBOL_NAME (operation)));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7964 target = args[XINT (target_idx) + 1];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7965 if (!(STRINGP (target)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7966 || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7967 error ("Invalid %dth argument", XINT (target_idx) + 1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7968
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18536
diff changeset
7969 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
7970 || EQ (operation, Qwrite_region))
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7971 ? 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
7972 : (EQ (operation, Qopen_network_stream)
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7973 ? Vnetwork_coding_system_alist
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7974 : Vprocess_coding_system_alist));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7975 if (NILP (chain))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7976 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7977
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7978 for (; CONSP (chain); chain = XCDR (chain))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7979 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
7980 Lisp_Object elt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7981
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7982 elt = XCAR (chain);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7983 if (CONSP (elt)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7984 && ((STRINGP (target)
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7985 && STRINGP (XCAR (elt))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7986 && fast_string_match (XCAR (elt), target) >= 0)
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7987 || (INTEGERP (target) && EQ (target, XCAR (elt)))))
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7988 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7989 val = XCDR (elt);
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7990 /* 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
7991 function symbol, we return VAL as a coding system. */
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7992 if (CONSP (val))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7993 return val;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7994 if (! SYMBOLP (val))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7995 return Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7996 if (! NILP (Fcoding_system_p (val)))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7997 return Fcons (val, val);
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7998 if (! NILP (Ffboundp (val)))
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7999 {
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
8000 val = call1 (val, Flist (nargs, args));
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
8001 if (CONSP (val))
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
8002 return val;
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
8003 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
8004 return Fcons (val, val);
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
8005 }
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
8006 return Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
8007 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8008 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8009 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8010 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8011
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8012 DEFUN ("set-coding-system-priority", Fset_coding_system_priority,
88845
64b8f6168269 (Fset_coding_system_priority): Allow null arg list.
Dave Love <fx@gnu.org>
parents: 88771
diff changeset
8013 Sset_coding_system_priority, 0, MANY, 0,
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
8014 doc: /* Assign higher priority to the coding systems given as arguments.
89467
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8015 If multiple coding systems belongs to the same category,
89519
040a08a2a879 (Fread_coding_system): Fix arg of XSETSTRING.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
8016 all but the first one are ignored.
040a08a2a879 (Fread_coding_system): Fix arg of XSETSTRING.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
8017
040a08a2a879 (Fread_coding_system): Fix arg of XSETSTRING.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
8018 usage: (set-coding-system-priority ...) */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8019 (nargs, args)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8020 int nargs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8021 Lisp_Object *args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8022 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8023 int i, j;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8024 int changed[coding_category_max];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8025 enum coding_category priorities[coding_category_max];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8026
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8027 bzero (changed, sizeof changed);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8028
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8029 for (i = j = 0; i < nargs; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8030 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8031 enum coding_category category;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8032 Lisp_Object spec, attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8033
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8034 CHECK_CODING_SYSTEM_GET_SPEC (args[i], spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8035 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8036 category = XINT (CODING_ATTR_CATEGORY (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8037 if (changed[category])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8038 /* Ignore this coding system because a coding system of the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8039 same category already had a higher priority. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8040 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8041 changed[category] = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8042 priorities[j++] = category;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8043 if (coding_categories[category].id >= 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8044 && ! EQ (args[i], CODING_ID_NAME (coding_categories[category].id)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8045 setup_coding_system (args[i], &coding_categories[category]);
89467
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8046 Fset (AREF (Vcoding_category_table, category), args[i]);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8047 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8048
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8049 /* Now we have decided top J priorities. Reflect the order of the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8050 original priorities to the remaining priorities. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8051
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8052 for (i = j, j = 0; i < coding_category_max; i++, j++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8053 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8054 while (j < coding_category_max
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8055 && changed[coding_priorities[j]])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8056 j++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8057 if (j == coding_category_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8058 abort ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8059 priorities[i] = coding_priorities[j];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8060 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8061
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8062 bcopy (priorities, coding_priorities, sizeof priorities);
89467
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8063
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8064 /* Update `coding-category-list'. */
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8065 Vcoding_category_list = Qnil;
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8066 for (i = coding_category_max - 1; i >= 0; i--)
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8067 Vcoding_category_list
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8068 = Fcons (AREF (Vcoding_category_table, priorities[i]),
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8069 Vcoding_category_list);
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8070
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8071 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8072 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8073
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8074 DEFUN ("coding-system-priority-list", Fcoding_system_priority_list,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8075 Scoding_system_priority_list, 0, 1, 0,
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
8076 doc: /* Return a list of coding systems ordered by their priorities.
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
8077 HIGHESTP non-nil means just return the highest priority one. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8078 (highestp)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8079 Lisp_Object highestp;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8080 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8081 int i;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8082 Lisp_Object val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8083
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8084 for (i = 0, val = Qnil; i < coding_category_max; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8085 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8086 enum coding_category category = coding_priorities[i];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8087 int id = coding_categories[category].id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8088 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8089
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8090 if (id < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8091 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8092 attrs = CODING_ID_ATTRS (id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8093 if (! NILP (highestp))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8094 return CODING_ATTR_BASE_NAME (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8095 val = Fcons (CODING_ATTR_BASE_NAME (attrs), val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8096 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8097 return Fnreverse (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8098 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8099
88631
780b91d4a7e5 (setup_iso_safe_charsets): Fix arg decl for K&R.
Dave Love <fx@gnu.org>
parents: 88607
diff changeset
8100 static char *suffixes[] = { "-unix", "-dos", "-mac" };
780b91d4a7e5 (setup_iso_safe_charsets): Fix arg decl for K&R.
Dave Love <fx@gnu.org>
parents: 88607
diff changeset
8101
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8102 static Lisp_Object
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8103 make_subsidiaries (base)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8104 Lisp_Object base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8105 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8106 Lisp_Object subsidiaries;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8107 int base_name_len = SBYTES (SYMBOL_NAME (base));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8108 char *buf = (char *) alloca (base_name_len + 6);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8109 int i;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8110
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8111 bcopy (SDATA (SYMBOL_NAME (base)), buf, base_name_len);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8112 subsidiaries = Fmake_vector (make_number (3), Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8113 for (i = 0; i < 3; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8114 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8115 bcopy (suffixes[i], buf + base_name_len, strlen (suffixes[i]) + 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8116 ASET (subsidiaries, i, intern (buf));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8117 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8118 return subsidiaries;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8119 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8120
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8121
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8122 DEFUN ("define-coding-system-internal", Fdefine_coding_system_internal,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8123 Sdefine_coding_system_internal, coding_arg_max, MANY, 0,
88544
f464d728344c (Vchar_coding_system_table, Qchar_coding_system):
Dave Love <fx@gnu.org>
parents: 88510
diff changeset
8124 doc: /* For internal use only.
f464d728344c (Vchar_coding_system_table, Qchar_coding_system):
Dave Love <fx@gnu.org>
parents: 88510
diff changeset
8125 usage: (define-coding-system-internal ...) */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8126 (nargs, args)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8127 int nargs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8128 Lisp_Object *args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8129 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8130 Lisp_Object name;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8131 Lisp_Object spec_vec; /* [ ATTRS ALIASE EOL_TYPE ] */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8132 Lisp_Object attrs; /* Vector of attributes. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8133 Lisp_Object eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8134 Lisp_Object aliases;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8135 Lisp_Object coding_type, charset_list, safe_charsets;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8136 enum coding_category category;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8137 Lisp_Object tail, val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8138 int max_charset_id = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8139 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8140
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8141 if (nargs < coding_arg_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8142 goto short_args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8143
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8144 attrs = Fmake_vector (make_number (coding_attr_last_index), Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8145
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8146 name = args[coding_arg_name];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8147 CHECK_SYMBOL (name);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8148 CODING_ATTR_BASE_NAME (attrs) = name;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8149
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8150 val = args[coding_arg_mnemonic];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8151 if (! STRINGP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8152 CHECK_CHARACTER (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8153 CODING_ATTR_MNEMONIC (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8154
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8155 coding_type = args[coding_arg_coding_type];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8156 CHECK_SYMBOL (coding_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8157 CODING_ATTR_TYPE (attrs) = coding_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8158
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8159 charset_list = args[coding_arg_charset_list];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8160 if (SYMBOLP (charset_list))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8161 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8162 if (EQ (charset_list, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8163 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8164 if (! EQ (coding_type, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8165 error ("Invalid charset-list");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8166 charset_list = Viso_2022_charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8167 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8168 else if (EQ (charset_list, Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8169 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8170 if (! EQ (coding_type, Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8171 error ("Invalid charset-list");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8172 charset_list = Vemacs_mule_charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8173 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8174 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8175 if (max_charset_id < XFASTINT (XCAR (tail)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8176 max_charset_id = XFASTINT (XCAR (tail));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8177 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8178 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8179 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8180 charset_list = Fcopy_sequence (charset_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8181 for (tail = charset_list; !NILP (tail); tail = Fcdr (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8182 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8183 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8184
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8185 val = Fcar (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8186 CHECK_CHARSET_GET_CHARSET (val, charset);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8187 if (EQ (coding_type, Qiso_2022)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8188 ? CHARSET_ISO_FINAL (charset) < 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8189 : EQ (coding_type, Qemacs_mule)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8190 ? CHARSET_EMACS_MULE_ID (charset) < 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8191 : 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8192 error ("Can't handle charset `%s'",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8193 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8194
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8195 XSETCAR (tail, make_number (charset->id));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8196 if (max_charset_id < charset->id)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8197 max_charset_id = charset->id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8198 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8199 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8200 CODING_ATTR_CHARSET_LIST (attrs) = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8201
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8202 safe_charsets = Fmake_string (make_number (max_charset_id + 1),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8203 make_number (255));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8204 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8205 SSET (safe_charsets, XFASTINT (XCAR (tail)), 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8206 CODING_ATTR_SAFE_CHARSETS (attrs) = safe_charsets;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8207
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8208 CODING_ATTR_ASCII_COMPAT (attrs) = args[coding_arg_ascii_compatible_p];
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8209
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8210 val = args[coding_arg_decode_translation_table];
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8211 if (! CHAR_TABLE_P (val) && ! CONSP (val))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8212 CHECK_SYMBOL (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8213 CODING_ATTR_DECODE_TBL (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8214
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8215 val = args[coding_arg_encode_translation_table];
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8216 if (! CHAR_TABLE_P (val) && ! CONSP (val))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8217 CHECK_SYMBOL (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8218 CODING_ATTR_ENCODE_TBL (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8219
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8220 val = args[coding_arg_post_read_conversion];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8221 CHECK_SYMBOL (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8222 CODING_ATTR_POST_READ (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8223
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8224 val = args[coding_arg_pre_write_conversion];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8225 CHECK_SYMBOL (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8226 CODING_ATTR_PRE_WRITE (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8227
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8228 val = args[coding_arg_default_char];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8229 if (NILP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8230 CODING_ATTR_DEFAULT_CHAR (attrs) = make_number (' ');
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8231 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8232 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8233 CHECK_CHARACTER (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8234 CODING_ATTR_DEFAULT_CHAR (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8235 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8236
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8237 val = args[coding_arg_for_unibyte];
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8238 CODING_ATTR_FOR_UNIBYTE (attrs) = NILP (val) ? Qnil : Qt;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8239
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8240 val = args[coding_arg_plist];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8241 CHECK_LIST (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8242 CODING_ATTR_PLIST (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8243
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8244 if (EQ (coding_type, Qcharset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8245 {
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8246 /* Generate a lisp vector of 256 elements. Each element is nil,
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8247 integer, or a list of charset IDs.
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8248
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8249 If Nth element is nil, the byte code N is invalid in this
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8250 coding system.
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8251
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8252 If Nth element is a number NUM, N is the first byte of a
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8253 charset whose ID is NUM.
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8254
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8255 If Nth element is a list of charset IDs, N is the first byte
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8256 of one of them. The list is sorted by dimensions of the
89648
d5641a606e08 (Fdefine_coding_system_internal): Fix checking of ascii compatibility.
Kenichi Handa <handa@m17n.org>
parents: 89644
diff changeset
8257 charsets. A charset of smaller dimension comes firtst. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8258 val = Fmake_vector (make_number (256), Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8259
89653
cbaa9fd1aa5c (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89648
diff changeset
8260 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8261 {
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8262 struct charset *charset = CHARSET_FROM_ID (XFASTINT (XCAR (tail)));
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8263 int dim = CHARSET_DIMENSION (charset);
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8264 int idx = (dim - 1) * 4;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8265
89653
cbaa9fd1aa5c (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89648
diff changeset
8266 if (CHARSET_ASCII_COMPATIBLE_P (charset))
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8267 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8268
88477
5f974cbba7b3 (coding_set_source): Delete the local variable beg_byte.
Kenichi Handa <handa@m17n.org>
parents: 88473
diff changeset
8269 for (i = charset->code_space[idx];
5f974cbba7b3 (coding_set_source): Delete the local variable beg_byte.
Kenichi Handa <handa@m17n.org>
parents: 88473
diff changeset
8270 i <= charset->code_space[idx + 1]; i++)
5f974cbba7b3 (coding_set_source): Delete the local variable beg_byte.
Kenichi Handa <handa@m17n.org>
parents: 88473
diff changeset
8271 {
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8272 Lisp_Object tmp, tmp2;
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8273 int dim2;
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8274
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8275 tmp = AREF (val, i);
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8276 if (NILP (tmp))
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8277 tmp = XCAR (tail);
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8278 else if (NUMBERP (tmp))
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8279 {
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8280 dim2 = CHARSET_DIMENSION (CHARSET_FROM_ID (XFASTINT (tmp)));
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8281 if (dim < dim2)
88607
18436bf3d6dd (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88598
diff changeset
8282 tmp = Fcons (XCAR (tail), Fcons (tmp, Qnil));
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8283 else
88607
18436bf3d6dd (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88598
diff changeset
8284 tmp = Fcons (tmp, Fcons (XCAR (tail), Qnil));
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8285 }
88477
5f974cbba7b3 (coding_set_source): Delete the local variable beg_byte.
Kenichi Handa <handa@m17n.org>
parents: 88473
diff changeset
8286 else
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8287 {
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8288 for (tmp2 = tmp; CONSP (tmp2); tmp2 = XCDR (tmp2))
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8289 {
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8290 dim2 = CHARSET_DIMENSION (CHARSET_FROM_ID (XFASTINT (XCAR (tmp2))));
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8291 if (dim < dim2)
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8292 break;
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8293 }
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8294 if (NILP (tmp2))
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8295 tmp = nconc2 (tmp, Fcons (XCAR (tail), Qnil));
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8296 else
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8297 {
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8298 XSETCDR (tmp2, Fcons (XCAR (tmp2), XCDR (tmp2)));
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8299 XSETCAR (tmp2, XCAR (tail));
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8300 }
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8301 }
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
8302 ASET (val, i, tmp);
88477
5f974cbba7b3 (coding_set_source): Delete the local variable beg_byte.
Kenichi Handa <handa@m17n.org>
parents: 88473
diff changeset
8303 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8304 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8305 ASET (attrs, coding_attr_charset_valids, val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8306 category = coding_category_charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8307 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8308 else if (EQ (coding_type, Qccl))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8309 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8310 Lisp_Object valids;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8311
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8312 if (nargs < coding_arg_ccl_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8313 goto short_args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8314
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8315 val = args[coding_arg_ccl_decoder];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8316 CHECK_CCL_PROGRAM (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8317 if (VECTORP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8318 val = Fcopy_sequence (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8319 ASET (attrs, coding_attr_ccl_decoder, val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8320
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8321 val = args[coding_arg_ccl_encoder];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8322 CHECK_CCL_PROGRAM (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8323 if (VECTORP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8324 val = Fcopy_sequence (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8325 ASET (attrs, coding_attr_ccl_encoder, val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8326
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8327 val = args[coding_arg_ccl_valids];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8328 valids = Fmake_string (make_number (256), make_number (0));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8329 for (tail = val; !NILP (tail); tail = Fcdr (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8330 {
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8331 int from, to;
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8332
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8333 val = Fcar (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8334 if (INTEGERP (val))
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8335 {
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8336 from = to = XINT (val);
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8337 if (from < 0 || from > 255)
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8338 args_out_of_range_3 (val, make_number (0), make_number (255));
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8339 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8340 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8341 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8342 CHECK_CONS (val);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8343 CHECK_NATNUM_CAR (val);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8344 CHECK_NATNUM_CDR (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8345 from = XINT (XCAR (val));
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8346 if (from > 255)
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8347 args_out_of_range_3 (XCAR (val),
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8348 make_number (0), make_number (255));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8349 to = XINT (XCDR (val));
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8350 if (to < from || to > 255)
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8351 args_out_of_range_3 (XCDR (val),
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8352 XCAR (val), make_number (255));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8353 }
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
8354 for (i = from; i <= to; i++)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8355 SSET (valids, i, 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8356 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8357 ASET (attrs, coding_attr_ccl_valids, valids);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8358
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8359 category = coding_category_ccl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8360 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8361 else if (EQ (coding_type, Qutf_16))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8362 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8363 Lisp_Object bom, endian;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8364
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8365 CODING_ATTR_ASCII_COMPAT (attrs) = Qnil;
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8366
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8367 if (nargs < coding_arg_utf16_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8368 goto short_args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8369
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8370 bom = args[coding_arg_utf16_bom];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8371 if (! NILP (bom) && ! EQ (bom, Qt))
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
8372 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8373 CHECK_CONS (bom);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8374 val = XCAR (bom);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8375 CHECK_CODING_SYSTEM (val);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8376 val = XCDR (bom);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8377 CHECK_CODING_SYSTEM (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8378 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8379 ASET (attrs, coding_attr_utf_16_bom, bom);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8380
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8381 endian = args[coding_arg_utf16_endian];
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
8382 CHECK_SYMBOL (endian);
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
8383 if (NILP (endian))
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
8384 endian = Qbig;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
8385 else if (! EQ (endian, Qbig) && ! EQ (endian, Qlittle))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8386 error ("Invalid endian: %s", SDATA (SYMBOL_NAME (endian)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8387 ASET (attrs, coding_attr_utf_16_endian, endian);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8388
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8389 category = (CONSP (bom)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8390 ? coding_category_utf_16_auto
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8391 : NILP (bom)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
8392 ? (EQ (endian, Qbig)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8393 ? coding_category_utf_16_be_nosig
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8394 : coding_category_utf_16_le_nosig)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
8395 : (EQ (endian, Qbig)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8396 ? coding_category_utf_16_be
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8397 : coding_category_utf_16_le));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8398 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8399 else if (EQ (coding_type, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8400 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8401 Lisp_Object initial, reg_usage, request, flags;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8402 int i;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8403
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8404 if (nargs < coding_arg_iso2022_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8405 goto short_args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8406
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8407 initial = Fcopy_sequence (args[coding_arg_iso2022_initial]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8408 CHECK_VECTOR (initial);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8409 for (i = 0; i < 4; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8410 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8411 val = Faref (initial, make_number (i));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8412 if (! NILP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8413 {
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8414 struct charset *charset;
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8415
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8416 CHECK_CHARSET_GET_CHARSET (val, charset);
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8417 ASET (initial, i, make_number (CHARSET_ID (charset)));
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8418 if (i == 0 && CHARSET_ASCII_COMPATIBLE_P (charset))
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8419 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8420 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8421 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8422 ASET (initial, i, make_number (-1));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8423 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8424
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8425 reg_usage = args[coding_arg_iso2022_reg_usage];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8426 CHECK_CONS (reg_usage);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8427 CHECK_NUMBER_CAR (reg_usage);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8428 CHECK_NUMBER_CDR (reg_usage);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8429
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8430 request = Fcopy_sequence (args[coding_arg_iso2022_request]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8431 for (tail = request; ! NILP (tail); tail = Fcdr (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8432 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8433 int id;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8434 Lisp_Object tmp;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8435
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8436 val = Fcar (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8437 CHECK_CONS (val);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8438 tmp = XCAR (val);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8439 CHECK_CHARSET_GET_ID (tmp, id);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8440 CHECK_NATNUM_CDR (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8441 if (XINT (XCDR (val)) >= 4)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8442 error ("Invalid graphic register number: %d", XINT (XCDR (val)));
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8443 XSETCAR (val, make_number (id));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8444 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8445
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8446 flags = args[coding_arg_iso2022_flags];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8447 CHECK_NATNUM (flags);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8448 i = XINT (flags);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8449 if (EQ (args[coding_arg_charset_list], Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8450 flags = make_number (i | CODING_ISO_FLAG_FULL_SUPPORT);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8451
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8452 ASET (attrs, coding_attr_iso_initial, initial);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8453 ASET (attrs, coding_attr_iso_usage, reg_usage);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8454 ASET (attrs, coding_attr_iso_request, request);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8455 ASET (attrs, coding_attr_iso_flags, flags);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8456 setup_iso_safe_charsets (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8457
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8458 if (i & CODING_ISO_FLAG_SEVEN_BITS)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8459 category = ((i & (CODING_ISO_FLAG_LOCKING_SHIFT
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8460 | CODING_ISO_FLAG_SINGLE_SHIFT))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8461 ? coding_category_iso_7_else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8462 : EQ (args[coding_arg_charset_list], Qiso_2022)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8463 ? coding_category_iso_7
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8464 : coding_category_iso_7_tight);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8465 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8466 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8467 int id = XINT (AREF (initial, 1));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8468
88977
3b05c02eebf2 (Fdefine_coding_system_internal): Fix category setting
Kenichi Handa <handa@m17n.org>
parents: 88950
diff changeset
8469 category = (((i & CODING_ISO_FLAG_LOCKING_SHIFT)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8470 || EQ (args[coding_arg_charset_list], Qiso_2022)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8471 || id < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8472 ? coding_category_iso_8_else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8473 : (CHARSET_DIMENSION (CHARSET_FROM_ID (id)) == 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8474 ? coding_category_iso_8_1
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8475 : coding_category_iso_8_2);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
8476 }
89227
101ee928c088 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89225
diff changeset
8477 if (category != coding_category_iso_8_1
101ee928c088 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89225
diff changeset
8478 && category != coding_category_iso_8_2)
101ee928c088 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89225
diff changeset
8479 CODING_ATTR_ASCII_COMPAT (attrs) = Qnil;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8480 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8481 else if (EQ (coding_type, Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8482 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8483 if (EQ (args[coding_arg_charset_list], Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8484 ASET (attrs, coding_attr_emacs_mule_full, Qt);
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8485 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8486 category = coding_category_emacs_mule;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8487 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8488 else if (EQ (coding_type, Qshift_jis))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8489 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8490
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8491 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8492
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8493 if (XINT (Flength (charset_list)) != 3
89739
293c9235be3f (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89732
diff changeset
8494 && XINT (Flength (charset_list)) != 4)
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8495 error ("There should be three or four charsets");
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8496
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8497 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8498 if (CHARSET_DIMENSION (charset) != 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8499 error ("Dimension of charset %s is not one",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8500 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8501 if (CHARSET_ASCII_COMPATIBLE_P (charset))
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8502 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8503
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8504 charset_list = XCDR (charset_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8505 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8506 if (CHARSET_DIMENSION (charset) != 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8507 error ("Dimension of charset %s is not one",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8508 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8509
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8510 charset_list = XCDR (charset_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8511 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8512 if (CHARSET_DIMENSION (charset) != 2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8513 error ("Dimension of charset %s is not two",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8514 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8515
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8516 charset_list = XCDR (charset_list);
89740
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
8517 if (! NILP (charset_list))
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
8518 {
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
8519 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
8520 if (CHARSET_DIMENSION (charset) != 2)
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
8521 error ("Dimension of charset %s is not two",
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
8522 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
8523 }
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8524
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8525 category = coding_category_sjis;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8526 Vsjis_coding_system = name;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8527 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8528 else if (EQ (coding_type, Qbig5))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8529 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8530 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8531
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8532 if (XINT (Flength (charset_list)) != 2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8533 error ("There should be just two charsets");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8534
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8535 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8536 if (CHARSET_DIMENSION (charset) != 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8537 error ("Dimension of charset %s is not one",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8538 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8539 if (CHARSET_ASCII_COMPATIBLE_P (charset))
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8540 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8541
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8542 charset_list = XCDR (charset_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8543 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8544 if (CHARSET_DIMENSION (charset) != 2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8545 error ("Dimension of charset %s is not two",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8546 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8547
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8548 category = coding_category_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8549 Vbig5_coding_system = name;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8550 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8551 else if (EQ (coding_type, Qraw_text))
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8552 {
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8553 category = coding_category_raw_text;
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8554 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8555 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8556 else if (EQ (coding_type, Qutf_8))
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8557 {
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8558 category = coding_category_utf_8;
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8559 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
8560 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8561 else if (EQ (coding_type, Qundecided))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8562 category = coding_category_undecided;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8563 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8564 error ("Invalid coding system type: %s",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8565 SDATA (SYMBOL_NAME (coding_type)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8566
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8567 CODING_ATTR_CATEGORY (attrs) = make_number (category);
89468
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
8568 CODING_ATTR_PLIST (attrs)
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
8569 = Fcons (QCcategory, Fcons (AREF (Vcoding_category_table, category),
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
8570 CODING_ATTR_PLIST (attrs)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8571
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8572 eol_type = args[coding_arg_eol_type];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8573 if (! NILP (eol_type)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8574 && ! EQ (eol_type, Qunix)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8575 && ! EQ (eol_type, Qdos)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8576 && ! EQ (eol_type, Qmac))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8577 error ("Invalid eol-type");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8578
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8579 aliases = Fcons (name, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8580
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8581 if (NILP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8582 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8583 eol_type = make_subsidiaries (name);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8584 for (i = 0; i < 3; i++)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
8585 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8586 Lisp_Object this_spec, this_name, this_aliases, this_eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8587
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8588 this_name = AREF (eol_type, i);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8589 this_aliases = Fcons (this_name, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8590 this_eol_type = (i == 0 ? Qunix : i == 1 ? Qdos : Qmac);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8591 this_spec = Fmake_vector (make_number (3), attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8592 ASET (this_spec, 1, this_aliases);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8593 ASET (this_spec, 2, this_eol_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8594 Fputhash (this_name, this_spec, Vcoding_system_hash_table);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8595 Vcoding_system_list = Fcons (this_name, Vcoding_system_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8596 Vcoding_system_alist = Fcons (Fcons (Fsymbol_name (this_name), Qnil),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8597 Vcoding_system_alist);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
8598 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8599 }
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
8600
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8601 spec_vec = Fmake_vector (make_number (3), attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8602 ASET (spec_vec, 1, aliases);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8603 ASET (spec_vec, 2, eol_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8604
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8605 Fputhash (name, spec_vec, Vcoding_system_hash_table);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8606 Vcoding_system_list = Fcons (name, Vcoding_system_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8607 Vcoding_system_alist = Fcons (Fcons (Fsymbol_name (name), Qnil),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8608 Vcoding_system_alist);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8609
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8610 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8611 int id = coding_categories[category].id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8612
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8613 if (id < 0 || EQ (name, CODING_ID_NAME (id)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8614 setup_coding_system (name, &coding_categories[category]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8615 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8616
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8617 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8618
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8619 short_args:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8620 return Fsignal (Qwrong_number_of_arguments,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8621 Fcons (intern ("define-coding-system-internal"),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8622 make_number (nargs)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8623 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8624
89571
242f2cc0134b (Fdefine_coding_system_alias): Update Vcoding_system_list.
Kenichi Handa <handa@m17n.org>
parents: 89562
diff changeset
8625
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8626 DEFUN ("coding-system-put", Fcoding_system_put, Scoding_system_put,
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8627 3, 3, 0,
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8628 doc: /* Change value in CODING-SYSTEM's property list PROP to VAL. */)
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8629 (coding_system, prop, val)
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8630 Lisp_Object coding_system, prop, val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8631 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8632 Lisp_Object spec, attrs, plist;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8633
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8634 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8635 attrs = AREF (spec, 0);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8636 if (EQ (prop, QCmnemonic))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8637 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8638 if (! STRINGP (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8639 CHECK_CHARACTER (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8640 CODING_ATTR_MNEMONIC (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8641 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8642 else if (EQ (prop, QCdefalut_char))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8643 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8644 if (NILP (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8645 val = make_number (' ');
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8646 else
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8647 CHECK_CHARACTER (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8648 CODING_ATTR_DEFAULT_CHAR (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8649 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8650 else if (EQ (prop, QCdecode_translation_table))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8651 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8652 if (! CHAR_TABLE_P (val) && ! CONSP (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8653 CHECK_SYMBOL (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8654 CODING_ATTR_DECODE_TBL (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8655 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8656 else if (EQ (prop, QCencode_translation_table))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8657 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8658 if (! CHAR_TABLE_P (val) && ! CONSP (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8659 CHECK_SYMBOL (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8660 CODING_ATTR_ENCODE_TBL (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8661 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8662 else if (EQ (prop, QCpost_read_conversion))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8663 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8664 CHECK_SYMBOL (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8665 CODING_ATTR_POST_READ (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8666 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8667 else if (EQ (prop, QCpre_write_conversion))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8668 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8669 CHECK_SYMBOL (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8670 CODING_ATTR_PRE_WRITE (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8671 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8672
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8673 CODING_ATTR_PLIST (attrs)
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8674 = Fplist_put (CODING_ATTR_PLIST (attrs), prop, val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8675 return val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8676 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8677
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8678
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8679 DEFUN ("define-coding-system-alias", Fdefine_coding_system_alias,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8680 Sdefine_coding_system_alias, 2, 2, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8681 doc: /* Define ALIAS as an alias for CODING-SYSTEM. */)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8682 (alias, coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8683 Lisp_Object alias, coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8684 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8685 Lisp_Object spec, aliases, eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8686
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8687 CHECK_SYMBOL (alias);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8688 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8689 aliases = AREF (spec, 1);
89571
242f2cc0134b (Fdefine_coding_system_alias): Update Vcoding_system_list.
Kenichi Handa <handa@m17n.org>
parents: 89562
diff changeset
8690 /* ALISES should be a list of length more than zero, and the first
242f2cc0134b (Fdefine_coding_system_alias): Update Vcoding_system_list.
Kenichi Handa <handa@m17n.org>
parents: 89562
diff changeset
8691 element is a base coding system. Append ALIAS at the tail of the
242f2cc0134b (Fdefine_coding_system_alias): Update Vcoding_system_list.
Kenichi Handa <handa@m17n.org>
parents: 89562
diff changeset
8692 list. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8693 while (!NILP (XCDR (aliases)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8694 aliases = XCDR (aliases);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8695 XSETCDR (aliases, Fcons (alias, Qnil));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8696
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8697 eol_type = AREF (spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8698 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8699 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8700 Lisp_Object subsidiaries;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8701 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8702
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8703 subsidiaries = make_subsidiaries (alias);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8704 for (i = 0; i < 3; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8705 Fdefine_coding_system_alias (AREF (subsidiaries, i),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8706 AREF (eol_type, i));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8707 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8708
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8709 Fputhash (alias, spec, Vcoding_system_hash_table);
89571
242f2cc0134b (Fdefine_coding_system_alias): Update Vcoding_system_list.
Kenichi Handa <handa@m17n.org>
parents: 89562
diff changeset
8710 Vcoding_system_list = Fcons (alias, Vcoding_system_list);
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
8711 Vcoding_system_alist = Fcons (Fcons (Fsymbol_name (alias), Qnil),
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
8712 Vcoding_system_alist);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8713
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8714 return Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8715 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8716
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8717 DEFUN ("coding-system-base", Fcoding_system_base, Scoding_system_base,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8718 1, 1, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8719 doc: /* Return the base of CODING-SYSTEM.
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
8720 Any alias or subsidiary coding system is not a base coding system. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8721 (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8722 Lisp_Object coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8723 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8724 Lisp_Object spec, attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8725
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8726 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8727 return (Qno_conversion);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8728 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8729 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8730 return CODING_ATTR_BASE_NAME (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8731 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8732
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8733 DEFUN ("coding-system-plist", Fcoding_system_plist, Scoding_system_plist,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8734 1, 1, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8735 doc: "Return the property list of CODING-SYSTEM.")
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8736 (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8737 Lisp_Object coding_system;
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
8738 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8739 Lisp_Object spec, attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8740
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8741 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8742 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8743 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8744 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8745 return CODING_ATTR_PLIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8746 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8747
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8748
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8749 DEFUN ("coding-system-aliases", Fcoding_system_aliases, Scoding_system_aliases,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8750 1, 1, 0,
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
8751 doc: /* Return the list of aliases of CODING-SYSTEM. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8752 (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8753 Lisp_Object coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8754 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8755 Lisp_Object spec;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8756
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8757 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8758 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8759 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
8760 return AREF (spec, 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8761 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8762
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8763 DEFUN ("coding-system-eol-type", Fcoding_system_eol_type,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8764 Scoding_system_eol_type, 1, 1, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8765 doc: /* Return eol-type of CODING-SYSTEM.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8766 An eol-type is integer 0, 1, 2, or a vector of coding systems.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8767
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8768 Integer values 0, 1, and 2 indicate a format of end-of-line; LF, CRLF,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8769 and CR respectively.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8770
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8771 A vector value indicates that a format of end-of-line should be
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8772 detected automatically. Nth element of the vector is the subsidiary
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8773 coding system whose eol-type is N. */)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8774 (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8775 Lisp_Object coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8776 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8777 Lisp_Object spec, eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8778 int n;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8779
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8780 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8781 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8782 if (! CODING_SYSTEM_P (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8783 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8784 spec = CODING_SYSTEM_SPEC (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8785 eol_type = AREF (spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8786 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8787 return Fcopy_sequence (eol_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8788 n = EQ (eol_type, Qunix) ? 0 : EQ (eol_type, Qdos) ? 1 : 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8789 return make_number (n);
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
8790 }
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
8791
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8792 #endif /* emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8793
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8794
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
8795 /*** 9. Post-amble ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8796
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21505
diff changeset
8797 void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8798 init_coding_once ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8799 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8800 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8801
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8802 for (i = 0; i < coding_category_max; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8803 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8804 coding_categories[i].id = -1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8805 coding_priorities[i] = i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8806 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8807
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8808 /* ISO2022 specific initialize routine. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8809 for (i = 0; i < 0x20; i++)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
8810 iso_code_class[i] = ISO_control_0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8811 for (i = 0x21; i < 0x7F; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8812 iso_code_class[i] = ISO_graphic_plane_0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8813 for (i = 0x80; i < 0xA0; i++)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
8814 iso_code_class[i] = ISO_control_1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8815 for (i = 0xA1; i < 0xFF; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8816 iso_code_class[i] = ISO_graphic_plane_1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8817 iso_code_class[0x20] = iso_code_class[0x7F] = ISO_0x20_or_0x7F;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8818 iso_code_class[0xA0] = iso_code_class[0xFF] = ISO_0xA0_or_0xFF;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8819 iso_code_class[ISO_CODE_SO] = ISO_shift_out;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8820 iso_code_class[ISO_CODE_SI] = ISO_shift_in;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8821 iso_code_class[ISO_CODE_SS2_7] = ISO_single_shift_2_7;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8822 iso_code_class[ISO_CODE_ESC] = ISO_escape;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8823 iso_code_class[ISO_CODE_SS2] = ISO_single_shift_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8824 iso_code_class[ISO_CODE_SS3] = ISO_single_shift_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8825 iso_code_class[ISO_CODE_CSI] = ISO_control_sequence_introducer;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8826
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8827 for (i = 0; i < 256; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8828 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8829 emacs_mule_bytes[i] = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8830 }
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
8831 emacs_mule_bytes[EMACS_MULE_LEADING_CODE_PRIVATE_11] = 3;
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
8832 emacs_mule_bytes[EMACS_MULE_LEADING_CODE_PRIVATE_12] = 3;
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
8833 emacs_mule_bytes[EMACS_MULE_LEADING_CODE_PRIVATE_21] = 4;
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
8834 emacs_mule_bytes[EMACS_MULE_LEADING_CODE_PRIVATE_22] = 4;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
8835 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
8836
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
8837 #ifdef emacs
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
8838
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21505
diff changeset
8839 void
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
8840 syms_of_coding ()
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
8841 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8842 staticpro (&Vcoding_system_hash_table);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8843 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8844 Lisp_Object args[2];
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8845 args[0] = QCtest;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8846 args[1] = Qeq;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8847 Vcoding_system_hash_table = Fmake_hash_table (2, args);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8848 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8849
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8850 staticpro (&Vsjis_coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8851 Vsjis_coding_system = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8852
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8853 staticpro (&Vbig5_coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8854 Vbig5_coding_system = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8855
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8856 staticpro (&Vcode_conversion_reused_workbuf);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8857 Vcode_conversion_reused_workbuf = Qnil;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8858
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8859 staticpro (&Vcode_conversion_workbuf_name);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8860 Vcode_conversion_workbuf_name = build_string (" *code-conversion-work*");
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8861
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8862 reused_workbuf_in_use = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8863
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8864 DEFSYM (Qcharset, "charset");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8865 DEFSYM (Qtarget_idx, "target-idx");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8866 DEFSYM (Qcoding_system_history, "coding-system-history");
19750
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
8867 Fset (Qcoding_system_history, Qnil);
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
8868
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
8869 /* 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
8870 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
8871 /* 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
8872 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
8873
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8874 DEFSYM (Qcall_process, "call-process");
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
8875 /* 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
8876 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
8877
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8878 DEFSYM (Qcall_process_region, "call-process-region");
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
8879 /* 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
8880 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
8881
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8882 DEFSYM (Qstart_process, "start-process");
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
8883 /* 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
8884 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
8885
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8886 DEFSYM (Qopen_network_stream, "open-network-stream");
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
8887 /* 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
8888 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
8889
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8890 DEFSYM (Qcoding_system, "coding-system");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8891 DEFSYM (Qcoding_aliases, "coding-aliases");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8892
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8893 DEFSYM (Qeol_type, "eol-type");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8894 DEFSYM (Qunix, "unix");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8895 DEFSYM (Qdos, "dos");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8896
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8897 DEFSYM (Qbuffer_file_coding_system, "buffer-file-coding-system");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8898 DEFSYM (Qpost_read_conversion, "post-read-conversion");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8899 DEFSYM (Qpre_write_conversion, "pre-write-conversion");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8900 DEFSYM (Qdefault_char, "default-char");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8901 DEFSYM (Qundecided, "undecided");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8902 DEFSYM (Qno_conversion, "no-conversion");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8903 DEFSYM (Qraw_text, "raw-text");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8904
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8905 DEFSYM (Qiso_2022, "iso-2022");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8906
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8907 DEFSYM (Qutf_8, "utf-8");
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8908 DEFSYM (Qutf_8_emacs, "utf-8-emacs");
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8909
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8910 DEFSYM (Qutf_16, "utf-16");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8911 DEFSYM (Qbig, "big");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8912 DEFSYM (Qlittle, "little");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8913
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8914 DEFSYM (Qshift_jis, "shift-jis");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8915 DEFSYM (Qbig5, "big5");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8916
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8917 DEFSYM (Qcoding_system_p, "coding-system-p");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8918
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8919 DEFSYM (Qcoding_system_error, "coding-system-error");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8920 Fput (Qcoding_system_error, Qerror_conditions,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8921 Fcons (Qcoding_system_error, Fcons (Qerror, Qnil)));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8922 Fput (Qcoding_system_error, Qerror_message,
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
8923 build_string ("Invalid coding system"));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8924
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8925 /* Intern this now in case it isn't already done.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8926 Setting this variable twice is harmless.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8927 But don't staticpro it here--that is done in alloc.c. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8928 Qchar_table_extra_slots = intern ("char-table-extra-slots");
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8929
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8930 DEFSYM (Qtranslation_table, "translation-table");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8931 Fput (Qtranslation_table, Qchar_table_extra_slots, make_number (1));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8932 DEFSYM (Qtranslation_table_id, "translation-table-id");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8933 DEFSYM (Qtranslation_table_for_decode, "translation-table-for-decode");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8934 DEFSYM (Qtranslation_table_for_encode, "translation-table-for-encode");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8935
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8936 DEFSYM (Qvalid_codes, "valid-codes");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8937
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8938 DEFSYM (Qemacs_mule, "emacs-mule");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8939
89468
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
8940 DEFSYM (QCcategory, ":category");
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8941 DEFSYM (QCmnemonic, ":mnemonic");
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8942 DEFSYM (QCdefalut_char, ":default-char");
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8943 DEFSYM (QCdecode_translation_table, ":decode-translation-table");
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8944 DEFSYM (QCencode_translation_table, ":encode-translation-table");
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8945 DEFSYM (QCpost_read_conversion, ":post-read-conversion");
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8946 DEFSYM (QCpre_write_conversion, ":pre-write-conversion");
89468
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
8947
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8948 Vcoding_category_table
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8949 = Fmake_vector (make_number (coding_category_max), Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8950 staticpro (&Vcoding_category_table);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8951 /* Followings are target of code detection. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8952 ASET (Vcoding_category_table, coding_category_iso_7,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8953 intern ("coding-category-iso-7"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8954 ASET (Vcoding_category_table, coding_category_iso_7_tight,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8955 intern ("coding-category-iso-7-tight"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8956 ASET (Vcoding_category_table, coding_category_iso_8_1,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8957 intern ("coding-category-iso-8-1"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8958 ASET (Vcoding_category_table, coding_category_iso_8_2,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8959 intern ("coding-category-iso-8-2"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8960 ASET (Vcoding_category_table, coding_category_iso_7_else,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8961 intern ("coding-category-iso-7-else"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8962 ASET (Vcoding_category_table, coding_category_iso_8_else,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8963 intern ("coding-category-iso-8-else"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8964 ASET (Vcoding_category_table, coding_category_utf_8,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8965 intern ("coding-category-utf-8"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8966 ASET (Vcoding_category_table, coding_category_utf_16_be,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8967 intern ("coding-category-utf-16-be"));
89467
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8968 ASET (Vcoding_category_table, coding_category_utf_16_auto,
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
8969 intern ("coding-category-utf-16-auto"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8970 ASET (Vcoding_category_table, coding_category_utf_16_le,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8971 intern ("coding-category-utf-16-le"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8972 ASET (Vcoding_category_table, coding_category_utf_16_be_nosig,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8973 intern ("coding-category-utf-16-be-nosig"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8974 ASET (Vcoding_category_table, coding_category_utf_16_le_nosig,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8975 intern ("coding-category-utf-16-le-nosig"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8976 ASET (Vcoding_category_table, coding_category_charset,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8977 intern ("coding-category-charset"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8978 ASET (Vcoding_category_table, coding_category_sjis,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8979 intern ("coding-category-sjis"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8980 ASET (Vcoding_category_table, coding_category_big5,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8981 intern ("coding-category-big5"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8982 ASET (Vcoding_category_table, coding_category_ccl,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8983 intern ("coding-category-ccl"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8984 ASET (Vcoding_category_table, coding_category_emacs_mule,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8985 intern ("coding-category-emacs-mule"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8986 /* Followings are NOT target of code detection. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8987 ASET (Vcoding_category_table, coding_category_raw_text,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8988 intern ("coding-category-raw-text"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8989 ASET (Vcoding_category_table, coding_category_undecided,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8990 intern ("coding-category-undecided"));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8991
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
8992 DEFSYM (Qinsufficient_source, "insufficient-source");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
8993 DEFSYM (Qinconsistent_eol, "inconsistent-eol");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
8994 DEFSYM (Qinvalid_source, "invalid-source");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
8995 DEFSYM (Qinterrupted, "interrupted");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
8996 DEFSYM (Qinsufficient_memory, "insufficient-memory");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
8997
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8998 defsubr (&Scoding_system_p);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8999 defsubr (&Sread_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9000 defsubr (&Sread_non_nil_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9001 defsubr (&Scheck_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9002 defsubr (&Sdetect_coding_region);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9003 defsubr (&Sdetect_coding_string);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
9004 defsubr (&Sfind_coding_systems_region_internal);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
9005 defsubr (&Sunencodable_char_position);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9006 defsubr (&Scheck_coding_systems_region);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9007 defsubr (&Sdecode_coding_region);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9008 defsubr (&Sencode_coding_region);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9009 defsubr (&Sdecode_coding_string);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9010 defsubr (&Sencode_coding_string);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9011 defsubr (&Sdecode_sjis_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9012 defsubr (&Sencode_sjis_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9013 defsubr (&Sdecode_big5_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9014 defsubr (&Sencode_big5_char);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
9015 defsubr (&Sset_terminal_coding_system_internal);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9016 defsubr (&Sset_safe_terminal_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9017 defsubr (&Sterminal_coding_system);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
9018 defsubr (&Sset_keyboard_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9019 defsubr (&Skeyboard_coding_system);
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
9020 defsubr (&Sfind_operation_coding_system);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9021 defsubr (&Sset_coding_system_priority);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9022 defsubr (&Sdefine_coding_system_internal);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9023 defsubr (&Sdefine_coding_system_alias);
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
9024 defsubr (&Scoding_system_put);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9025 defsubr (&Scoding_system_base);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9026 defsubr (&Scoding_system_plist);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9027 defsubr (&Scoding_system_aliases);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9028 defsubr (&Scoding_system_eol_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9029 defsubr (&Scoding_system_priority_list);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9030
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
9031 DEFVAR_LISP ("coding-system-list", &Vcoding_system_list,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9032 doc: /* List of coding systems.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9033
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9034 Do not alter the value of this variable manually. This variable should be
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9035 updated by the functions `define-coding-system' and
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9036 `define-coding-system-alias'. */);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
9037 Vcoding_system_list = Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
9038
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
9039 DEFVAR_LISP ("coding-system-alist", &Vcoding_system_alist,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9040 doc: /* Alist of coding system names.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9041 Each element is one element list of coding system name.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9042 This variable is given to `completing-read' as TABLE argument.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9043
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9044 Do not alter the value of this variable manually. This variable should be
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9045 updated by the functions `make-coding-system' and
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9046 `define-coding-system-alias'. */);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
9047 Vcoding_system_alist = Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
9048
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9049 DEFVAR_LISP ("coding-category-list", &Vcoding_category_list,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9050 doc: /* List of coding-categories (symbols) ordered by priority.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9051
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9052 On detecting a coding system, Emacs tries code detection algorithms
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9053 associated with each coding-category one by one in this order. When
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9054 one algorithm agrees with a byte sequence of source text, the coding
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9055 system bound to the corresponding coding-category is selected. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9056 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9057 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9058
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9059 Vcoding_category_list = Qnil;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9060 for (i = coding_category_max - 1; i >= 0; i--)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9061 Vcoding_category_list
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9062 = Fcons (XVECTOR (Vcoding_category_table)->contents[i],
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9063 Vcoding_category_list);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9064 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9065
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9066 DEFVAR_LISP ("coding-system-for-read", &Vcoding_system_for_read,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9067 doc: /* Specify the coding system for read operations.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9068 It is useful to bind this variable with `let', but do not set it globally.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9069 If the value is a coding system, it is used for decoding on read operation.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9070 If not, an appropriate element is used from one of the coding system alists:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9071 There are three such tables, `file-coding-system-alist',
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9072 `process-coding-system-alist', and `network-coding-system-alist'. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9073 Vcoding_system_for_read = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9074
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9075 DEFVAR_LISP ("coding-system-for-write", &Vcoding_system_for_write,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9076 doc: /* Specify the coding system for write operations.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9077 Programs bind this variable with `let', but you should not set it globally.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9078 If the value is a coding system, it is used for encoding of output,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9079 when writing it to a file and when sending it to a file or subprocess.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9080
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9081 If this does not specify a coding system, an appropriate element
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9082 is used from one of the coding system alists:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9083 There are three such tables, `file-coding-system-alist',
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9084 `process-coding-system-alist', and `network-coding-system-alist'.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9085 For output to files, if the above procedure does not specify a coding system,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9086 the value of `buffer-file-coding-system' is used. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9087 Vcoding_system_for_write = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9088
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9089 DEFVAR_LISP ("last-coding-system-used", &Vlast_coding_system_used,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9090 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9091 Coding system used in the latest file or process I/O. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9092 Vlast_coding_system_used = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9093
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9094 DEFVAR_LISP ("last-code-conversion-error", &Vlast_code_conversion_error,
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9095 doc: /*
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9096 Error status of the last code conversion.
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9097
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9098 When an error was detected in the last code conversion, this variable
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9099 is set to one of the following symbols.
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9100 `insufficient-source'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9101 `inconsistent-eol'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9102 `invalid-source'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9103 `interrupted'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9104 `insufficient-memory'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9105 When no error was detected, the value doesn't change. So, to check
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9106 the error status of a code conversion by this variable, you must
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9107 explicitly set this variable to nil before performing code
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9108 conversion. */);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9109 Vlast_code_conversion_error = Qnil;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
9110
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
9111 DEFVAR_BOOL ("inhibit-eol-conversion", &inhibit_eol_conversion,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9112 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9113 *Non-nil means always inhibit code conversion of end-of-line format.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9114 See info node `Coding Systems' and info node `Text and Binary' concerning
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9115 such conversion. */);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
9116 inhibit_eol_conversion = 0;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
9117
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
9118 DEFVAR_BOOL ("inherit-process-coding-system", &inherit_process_coding_system,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9119 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9120 Non-nil means process buffer inherits coding system of process output.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9121 Bind it to t if the process output is to be treated as if it were a file
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9122 read from some filesystem. */);
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
9123 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
9124
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9125 DEFVAR_LISP ("file-coding-system-alist", &Vfile_coding_system_alist,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9126 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9127 Alist to decide a coding system to use for a file I/O operation.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9128 The format is ((PATTERN . VAL) ...),
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9129 where PATTERN is a regular expression matching a file name,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9130 VAL is a coding system, a cons of coding systems, or a function symbol.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9131 If VAL is a coding system, it is used for both decoding and encoding
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9132 the file contents.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9133 If VAL is a cons of coding systems, the car part is used for decoding,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9134 and the cdr part is used for encoding.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9135 If VAL is a function symbol, the function must return a coding system
41678
5aa97e545399 (syms_of_coding) <Qchar_coding_system>: Give it an
Dave Love <fx@gnu.org>
parents: 41624
diff changeset
9136 or a cons of coding systems which are used as above. The function gets
5aa97e545399 (syms_of_coding) <Qchar_coding_system>: Give it an
Dave Love <fx@gnu.org>
parents: 41624
diff changeset
9137 the arguments with which `find-operation-coding-systems' was called.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9138
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9139 See also the function `find-operation-coding-system'
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9140 and the variable `auto-coding-alist'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9141 Vfile_coding_system_alist = Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9142
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9143 DEFVAR_LISP ("process-coding-system-alist", &Vprocess_coding_system_alist,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9144 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9145 Alist to decide a coding system to use for a process I/O operation.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9146 The format is ((PATTERN . VAL) ...),
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9147 where PATTERN is a regular expression matching a program name,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9148 VAL is a coding system, a cons of coding systems, or a function symbol.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9149 If VAL is a coding system, it is used for both decoding what received
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9150 from the program and encoding what sent to the program.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9151 If VAL is a cons of coding systems, the car part is used for decoding,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9152 and the cdr part is used for encoding.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9153 If VAL is a function symbol, the function must return a coding system
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9154 or a cons of coding systems which are used as above.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9155
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9156 See also the function `find-operation-coding-system'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9157 Vprocess_coding_system_alist = Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9158
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9159 DEFVAR_LISP ("network-coding-system-alist", &Vnetwork_coding_system_alist,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9160 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9161 Alist to decide a coding system to use for a network I/O operation.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9162 The format is ((PATTERN . VAL) ...),
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9163 where PATTERN is a regular expression matching a network service name
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9164 or is a port number to connect to,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9165 VAL is a coding system, a cons of coding systems, or a function symbol.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9166 If VAL is a coding system, it is used for both decoding what received
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9167 from the network stream and encoding what sent to the network stream.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9168 If VAL is a cons of coding systems, the car part is used for decoding,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9169 and the cdr part is used for encoding.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9170 If VAL is a function symbol, the function must return a coding system
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9171 or a cons of coding systems which are used as above.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9172
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9173 See also the function `find-operation-coding-system'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9174 Vnetwork_coding_system_alist = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9175
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9176 DEFVAR_LISP ("locale-coding-system", &Vlocale_coding_system,
41026
6f20449b7e12 (syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 41006
diff changeset
9177 doc: /* Coding system to use with system messages.
6f20449b7e12 (syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 41006
diff changeset
9178 Also used for decoding keyboard input on X Window system. */);
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9179 Vlocale_coding_system = Qnil;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9180
29182
1d1c27067af4 (encode_eol): Add null statement after label.
Dave Love <fx@gnu.org>
parents: 29172
diff changeset
9181 /* The eol mnemonics are reset in startup.el system-dependently. */
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9182 DEFVAR_LISP ("eol-mnemonic-unix", &eol_mnemonic_unix,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9183 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9184 *String displayed in mode line for UNIX-like (LF) end-of-line format. */);
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9185 eol_mnemonic_unix = build_string (":");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9186
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9187 DEFVAR_LISP ("eol-mnemonic-dos", &eol_mnemonic_dos,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9188 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9189 *String displayed in mode line for DOS-like (CRLF) end-of-line format. */);
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9190 eol_mnemonic_dos = build_string ("\\");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9191
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9192 DEFVAR_LISP ("eol-mnemonic-mac", &eol_mnemonic_mac,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9193 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9194 *String displayed in mode line for MAC-like (CR) end-of-line format. */);
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9195 eol_mnemonic_mac = build_string ("/");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9196
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9197 DEFVAR_LISP ("eol-mnemonic-undecided", &eol_mnemonic_undecided,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9198 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9199 *String displayed in mode line when end-of-line format is not yet determined. */);
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
9200 eol_mnemonic_undecided = build_string (":");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9201
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
9202 DEFVAR_LISP ("enable-character-translation", &Venable_character_translation,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9203 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9204 *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
9205 Venable_character_translation = Qt;
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
9206
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
9207 DEFVAR_LISP ("standard-translation-table-for-decode",
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9208 &Vstandard_translation_table_for_decode,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9209 doc: /* 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
9210 Vstandard_translation_table_for_decode = Qnil;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
9211
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
9212 DEFVAR_LISP ("standard-translation-table-for-encode",
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9213 &Vstandard_translation_table_for_encode,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9214 doc: /* Table for translating characters while encoding. */);
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
9215 Vstandard_translation_table_for_encode = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9216
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9217 DEFVAR_LISP ("charset-revision-table", &Vcharset_revision_table,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9218 doc: /* Alist of charsets vs revision numbers.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9219 While encoding, if a charset (car part of an element) is found,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9220 designate it with the escape sequence identifying revision (cdr part
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9221 of the element). */);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9222 Vcharset_revision_table = Qnil;
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9223
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9224 DEFVAR_LISP ("default-process-coding-system",
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9225 &Vdefault_process_coding_system,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9226 doc: /* Cons of coding systems used for process I/O by default.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9227 The car part is used for decoding a process output,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9228 the cdr part is used for encoding a text to be sent to a process. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9229 Vdefault_process_coding_system = Qnil;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9230
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
9231 DEFVAR_LISP ("latin-extra-code-table", &Vlatin_extra_code_table,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9232 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9233 Table of extra Latin codes in the range 128..159 (inclusive).
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9234 This is a vector of length 256.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9235 If Nth element is non-nil, the existence of code N in a file
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9236 \(or output of subprocess) doesn't prevent it to be detected as
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9237 a coding system of ISO 2022 variant which has a flag
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9238 `accept-latin-extra-code' t (e.g. iso-latin-1) on reading a file
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9239 or reading output of a subprocess.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9240 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
9241 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
9242
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9243 DEFVAR_LISP ("select-safe-coding-system-function",
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9244 &Vselect_safe_coding_system_function,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9245 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9246 Function to call to select safe coding system for encoding a text.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9247
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9248 If set, this function is called to force a user to select a proper
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9249 coding system which can encode the text in the case that a default
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9250 coding system used in each operation can't encode the text.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9251
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9252 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
9253 Vselect_safe_coding_system_function = Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9254
48874
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
9255 DEFVAR_BOOL ("coding-system-require-warning",
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
9256 &coding_system_require_warning,
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
9257 doc: /* Internal use only.
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
9258 If non-nil, on writing a file, `select-safe-coding-system-function' is
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
9259 called even if `coding-system-for-write' is non-nil. The command
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
9260 `universal-coding-system-argument' binds this variable to t temporarily. */);
48874
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
9261 coding_system_require_warning = 0;
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
9262
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
9263
30292
14a9937df1f5 (syms_of_coding): Fix typo in spelling of variable
Gerd Moellmann <gerd@gnu.org>
parents: 30263
diff changeset
9264 DEFVAR_BOOL ("inhibit-iso-escape-detection",
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
9265 &inhibit_iso_escape_detection,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9266 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9267 If non-nil, Emacs ignores ISO2022's escape sequence on code detection.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9268
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9269 By default, on reading a file, Emacs tries to detect how the text is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9270 encoded. This code detection is sensitive to escape sequences. If
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9271 the sequence is valid as ISO2022, the code is determined as one of
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9272 the ISO2022 encodings, and the file is decoded by the corresponding
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9273 coding system (e.g. `iso-2022-7bit').
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9274
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9275 However, there may be a case that you want to read escape sequences in
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9276 a file as is. In such a case, you can set this variable to non-nil.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9277 Then, as the code detection ignores any escape sequences, no file is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9278 detected as encoded in some ISO2022 encoding. The result is that all
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9279 escape sequences become visible in a buffer.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9280
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9281 The default value is nil, and it is strongly recommended not to change
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9282 it. That is because many Emacs Lisp source files that contain
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9283 non-ASCII characters are encoded by the coding system `iso-2022-7bit'
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9284 in Emacs's distribution, and they won't be decoded correctly on
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9285 reading if you suppress escape sequence detection.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9286
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9287 The other way to read escape sequences in a file without decoding is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9288 to explicitly specify some coding system that doesn't use ISO2022's
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9289 escape sequence (e.g `latin-1') on reading by \\[universal-coding-system-argument]. */);
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
9290 inhibit_iso_escape_detection = 0;
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9291
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
9292 DEFVAR_LISP ("translation-table-for-input", &Vtranslation_table_for_input,
48230
c2ce8280fb97 (Vtranslation_table_for_input): New.
Dave Love <fx@gnu.org>
parents: 48182
diff changeset
9293 doc: /* Char table for translating self-inserting characters.
c2ce8280fb97 (Vtranslation_table_for_input): New.
Dave Love <fx@gnu.org>
parents: 48182
diff changeset
9294 This is applied to the result of input methods, not their input. See also
c2ce8280fb97 (Vtranslation_table_for_input): New.
Dave Love <fx@gnu.org>
parents: 48182
diff changeset
9295 `keyboard-translate-table'. */);
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
9296 Vtranslation_table_for_input = Qnil;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9297
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9298 {
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9299 Lisp_Object args[coding_arg_max];
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9300 Lisp_Object plist[16];
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9301 int i;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9302
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9303 for (i = 0; i < coding_arg_max; i++)
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9304 args[i] = Qnil;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9305
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9306 plist[0] = intern (":name");
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9307 plist[1] = args[coding_arg_name] = Qno_conversion;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9308 plist[2] = intern (":mnemonic");
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9309 plist[3] = args[coding_arg_mnemonic] = make_number ('=');
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9310 plist[4] = intern (":coding-type");
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9311 plist[5] = args[coding_arg_coding_type] = Qraw_text;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9312 plist[6] = intern (":ascii-compatible-p");
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9313 plist[7] = args[coding_arg_ascii_compatible_p] = Qt;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9314 plist[8] = intern (":default-char");
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9315 plist[9] = args[coding_arg_default_char] = make_number (0);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9316 plist[10] = intern (":for-unibyte");
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9317 plist[11] = args[coding_arg_for_unibyte] = Qt;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9318 plist[12] = intern (":docstring");
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9319 plist[13] = build_string ("Do no conversion.\n\
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9320 \n\
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9321 When you visit a file with this coding, the file is read into a\n\
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9322 unibyte buffer as is, thus each byte of a file is treated as a\n\
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9323 character.");
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9324 plist[14] = intern (":eol-type");
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9325 plist[15] = args[coding_arg_eol_type] = Qunix;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9326 args[coding_arg_plist] = Flist (16, plist);
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9327 Fdefine_coding_system_internal (coding_arg_max, args);
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9328 }
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9329
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9330 setup_coding_system (Qno_conversion, &keyboard_coding);
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9331 setup_coding_system (Qno_conversion, &terminal_coding);
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
9332 setup_coding_system (Qno_conversion, &safe_terminal_coding);
89467
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9333
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9334 {
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9335 int i;
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9336
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9337 for (i = 0; i < coding_category_max; i++)
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9338 Fset (AREF (Vcoding_category_table, i), Qno_conversion);
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9339 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9340 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9341
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9342 char *
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9343 emacs_strerror (error_number)
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9344 int error_number;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9345 {
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9346 char *str;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9347
26526
b7438760079b * callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents: 26240
diff changeset
9348 synchronize_system_messages_locale ();
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9349 str = strerror (error_number);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9350
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9351 if (! NILP (Vlocale_coding_system))
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9352 {
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9353 Lisp_Object dec = code_convert_string_norecord (build_string (str),
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9354 Vlocale_coding_system,
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9355 0);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
9356 str = (char *) SDATA (dec);
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9357 }
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9358
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9359 return str;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9360 }
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
9361
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9362 #endif /* emacs */