annotate src/coding.c @ 112418:106bf56d370e

* lisp/subr.el (shell-quote-argument): Properly quote \n. Suggested by Flo <sensorflo@gmail.com>.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 21 Jan 2011 13:07:41 -0500
parents 376148b31b5e
children 417b1e4d63cd
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).
68651
3bd95f4f2941 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 68567
diff changeset
2 Copyright (C) 2001, 2002, 2003, 2004, 2005,
112218
376148b31b5e Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents: 111743
diff changeset
3 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
74605
6ee41fdd69ff Update AIST copyright years.
Kenichi Handa <handa@m17n.org>
parents: 73995
diff changeset
4 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
112218
376148b31b5e Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents: 111743
diff changeset
5 2005, 2006, 2007, 2008, 2009, 2010, 2011
67658
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 67555
diff changeset
6 National Institute of Advanced Industrial Science and Technology (AIST)
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 67555
diff changeset
7 Registration Number H14PRO021
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8 Copyright (C) 2003
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9 National Institute of Advanced Industrial Science and Technology (AIST)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10 Registration Number H13PRO009
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
12 This file is part of GNU Emacs.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
13
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94944
diff changeset
14 GNU Emacs is free software: you can redistribute it and/or modify
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
15 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94944
diff changeset
16 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94944
diff changeset
17 (at your option) any later version.
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
18
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
19 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
20 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
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
22 GNU General Public License for more details.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
23
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
24 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94944
diff changeset
25 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
26
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
27 /*** TABLE OF CONTENTS ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
28
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
29 0. General comments
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
30 1. Preamble
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
31 2. Emacs' internal format (emacs-utf-8) handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
32 3. UTF-8 handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
33 4. UTF-16 handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
34 5. Charset-base coding systems handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
35 6. emacs-mule (old Emacs' internal format) handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
36 7. ISO2022 handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
37 8. Shift-JIS and BIG5 handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
38 9. CCL handlers
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
39 10. C library functions
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
40 11. Emacs Lisp library functions
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
41 12. Postamble
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
42
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
43 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
44
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
45 /*** 0. General comments ***
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
48 CODING SYSTEM
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
49
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
50 A coding system is an object for an encoding mechanism that contains
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
51 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
52 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
53 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
54 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
55 `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
56 character sequence of emacs-utf-8 to a byte sequence of a specific
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
57 coding system.
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
58
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
59 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
60 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
61 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
62 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
63 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
64
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
65 Coding systems are classified into the following types depending on
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
66 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
67
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
68 o UTF-8
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
69
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
70 o UTF-16
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
71
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
72 o Charset-base coding system
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
73
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
74 A coding system defined by one or more (coded) character sets.
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
75 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
76 character set.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
77
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
78 o Old Emacs internal format (emacs-mule)
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
79
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
80 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
81
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
82 o ISO2022-base coding system
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
83
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
84 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
85 Compound Text, various EUCs (Extended Unix Code), and coding systems
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
86 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
87 variants of ISO2022.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
88
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
89 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
90
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
91 A coding system to encode character sets: ASCII, JISX0201, and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
92 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
93 section 8.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
94
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
95 o BIG5
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
96
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
97 A coding system to encode character sets: ASCII and Big5. Widely
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
98 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
99 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
100 lowercase), we mean the coding system, and when we write "Big5"
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
101 (capitalized), we mean the character set.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
102
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
103 o CCL
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
104
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
105 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
106 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
107 CCL (Code Conversion Language) programs. Emacs executes the CCL
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
108 program while decoding/encoding.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
109
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
110 o Raw-text
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
111
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
112 A coding system for text containing raw eight-bit data. Emacs
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
113 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
114 end-of-line conversion).
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
115
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
116 o No-conversion
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
117
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
118 Like raw text, but don't do end-of-line conversion.
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
121 END-OF-LINE FORMAT
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
122
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
123 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
124 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
125 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
126 `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
127 `carriage-return'.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
128
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
129 Since text character encoding and end-of-line encoding are
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
130 independent, any coding system described above can take any format
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
131 of end-of-line (except for no-conversion).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
132
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
133 STRUCT CODING_SYSTEM
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
134
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
135 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
136 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
137 This structure keeps various information about a specific code
88485
e92f62c0073e Doc fixes.
Dave Love <fx@gnu.org>
parents: 88477
diff changeset
138 conversion (e.g. the location of source and destination data).
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 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
141
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
142 /* COMMON MACROS */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
143
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
144
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
145 /*** GENERAL NOTES on `detect_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
146
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
147 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
148 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
149 DETECT_INFO.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
150
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
151 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
152
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
153 Below is the template of these functions. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
154
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
155 #if 0
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
156 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
157 detect_coding_XXX (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
158 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
159 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
160 {
90070
95879cc1ed20 Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-81
Miles Bader <miles@gnu.org>
parents: 90061 59173
diff changeset
161 const unsigned char *src = coding->source;
95879cc1ed20 Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-81
Miles Bader <miles@gnu.org>
parents: 90061 59173
diff changeset
162 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
163 int multibytep = coding->src_multibyte;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
164 int consumed_chars = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
165 int found = 0;
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
168 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
169 {
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
170 /* Get one byte from the source. If the source is exhausted, jump
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
171 to no_more_source:. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
172 ONE_MORE_BYTE (c);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
173
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
174 if (! __C_conforms_to_XXX___ (c))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
175 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
176 if (! __C_strongly_suggests_XXX__ (c))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
177 found = CATEGORY_MASK_XXX;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
178 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
179 /* The byte sequence is invalid for XXX. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
180 detect_info->rejected |= CATEGORY_MASK_XXX;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
181 return 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
182
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
183 no_more_source:
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
184 /* The source exhausted successfully. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
185 detect_info->found |= found;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
186 return 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
187 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
188 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
189
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
190 /*** GENERAL NOTES on `decode_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
191
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
192 These functions decode a byte sequence specified as a source by
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
193 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
194 CODING->charbuf, the length of which should not exceed
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
195 CODING->charbuf_size;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
196
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
197 These functions set the information of original and decoded texts in
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
198 CODING->consumed, CODING->consumed_char, and CODING->charbuf_used.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
199 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
200 how the decoding is finished.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
201
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
202 Below is the template of these functions. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
203
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
204 #if 0
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
205 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
206 decode_coding_XXXX (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
207 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
208 {
90070
95879cc1ed20 Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-81
Miles Bader <miles@gnu.org>
parents: 90061 59173
diff changeset
209 const unsigned char *src = coding->source + coding->consumed;
95879cc1ed20 Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-81
Miles Bader <miles@gnu.org>
parents: 90061 59173
diff changeset
210 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
211 /* SRC_BASE remembers the start position in source in each loop.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
212 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
213 when there's no room in CHARBUF for a decoded character. */
90070
95879cc1ed20 Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-81
Miles Bader <miles@gnu.org>
parents: 90061 59173
diff changeset
214 const unsigned char *src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
215 /* A buffer to produce decoded characters. */
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
216 int *charbuf = coding->charbuf + coding->charbuf_used;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
217 int *charbuf_end = coding->charbuf + coding->charbuf_size;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
218 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
219
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
220 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
221 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
222 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
223 if (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
224 /* No more room to produce a decoded character. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
225 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
226 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
227 /* Decode it. */
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
230 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
231 if (src_base < src_end
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
232 && coding->mode & CODING_MODE_LAST_BLOCK)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
233 /* If the source ends by partial bytes to construct a character,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
234 treat them as eight-bit raw data. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
235 while (src_base < src_end && charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
236 *charbuf++ = *src_base++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
237 /* Remember how many bytes and characters we consumed. If the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
238 source is multibyte, the bytes and chars are not identical. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
239 coding->consumed = coding->consumed_char = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
240 /* Remember how many characters we produced. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
241 coding->charbuf_used = charbuf - coding->charbuf;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
242 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
243 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
245 /*** GENERAL NOTES on `encode_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
246
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
247 These functions encode SRC_BYTES length text at SOURCE of Emacs'
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
248 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
249 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
250 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
251
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
252 These functions set the information of original and encoded texts in
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
253 the members produced, produced_char, consumed, and consumed_char of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
254 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
255 CODING_RESULT_XXX indicating how the encoding finished.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
256
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
257 DST_BYTES zero means that source area and destination area are
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
258 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
259 reaches at the head of not-yet-encoded source text.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
260
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
261 Below is a template of these functions. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
262 #if 0
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
263 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
264 encode_coding_XXX (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
265 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
266 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
267 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
268 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
269 int *charbuf_end = charbuf->charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
270 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
271 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
272 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
273 int produced_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
274
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
275 for (; charbuf < charbuf_end && dst < adjusted_dst_end; charbuf++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
276 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
277 int c = *charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
278 /* Encode C into DST, and increment DST. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
279 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
280 label_no_more_destination:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
281 /* How many chars and bytes we produced. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
282 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
283 coding->produced = dst - coding->destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
284 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
285 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
286
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
287
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
288 /*** 1. Preamble ***/
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
289
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
290 #include <config.h>
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
291 #include <stdio.h>
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105179
diff changeset
292 #include <setjmp.h>
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
293
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
294 #include "lisp.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
295 #include "buffer.h"
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
296 #include "character.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
297 #include "charset.h"
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
298 #include "ccl.h"
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
299 #include "composite.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
300 #include "coding.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
301 #include "window.h"
83127
5182815e0ee1 Make terminal_coding and keyboard_coding display-local.
Karoly Lorentey <lorentey@elte.hu>
parents: 54320
diff changeset
302 #include "frame.h"
5182815e0ee1 Make terminal_coding and keyboard_coding display-local.
Karoly Lorentey <lorentey@elte.hu>
parents: 54320
diff changeset
303 #include "termhooks.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
304
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
305 Lisp_Object Vcoding_system_hash_table;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
306
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
307 Lisp_Object Qcoding_system, Qcoding_aliases, Qeol_type;
88646
d3b1f30e2267 (Qmac): Remove (duplicated) definition.
Dave Love <fx@gnu.org>
parents: 88645
diff changeset
308 Lisp_Object Qunix, Qdos;
d3b1f30e2267 (Qmac): Remove (duplicated) definition.
Dave Love <fx@gnu.org>
parents: 88645
diff changeset
309 extern Lisp_Object Qmac; /* frame.c */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
310 Lisp_Object Qbuffer_file_coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
311 Lisp_Object Qpost_read_conversion, Qpre_write_conversion;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
312 Lisp_Object Qdefault_char;
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
313 Lisp_Object Qno_conversion, Qundecided;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
314 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
315 Lisp_Object Qbig, Qlittle;
19750
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
316 Lisp_Object Qcoding_system_history;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
317 Lisp_Object Qvalid_codes;
100303
3e044fa54e4f * coding.c (QCdefault_char): Rename from QCdefalut_char.
Juanma Barranquero <lekktu@gmail.com>
parents: 100262
diff changeset
318 Lisp_Object QCcategory, QCmnemonic, QCdefault_char;
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
319 Lisp_Object QCdecode_translation_table, QCencode_translation_table;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
320 Lisp_Object QCpost_read_conversion, QCpre_write_conversion;
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
321 Lisp_Object QCascii_compatible_p;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
322
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
323 extern Lisp_Object Qinsert_file_contents, Qwrite_region;
64251
3de1b955c31a * coding.c (Qprocess_argument):
Kim F. Storm <storm@cua.dk>
parents: 64084
diff changeset
324 Lisp_Object Qcall_process, Qcall_process_region;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
325 Lisp_Object Qstart_process, Qopen_network_stream;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
326 Lisp_Object Qtarget_idx;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
327
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
328 Lisp_Object Qinsufficient_source, Qinconsistent_eol, Qinvalid_source;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
329 Lisp_Object Qinterrupted, Qinsufficient_memory;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
330
79107
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
331 extern Lisp_Object Qcompletion_ignore_case;
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
332
52794
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
333 /* If a symbol has this property, evaluate the value to define the
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
334 symbol as a coding system. */
90272
f1df126ec7de Sync to HEAD for handling autoload-coding-system.
Kenichi Handa <handa@m17n.org>
parents: 90263
diff changeset
335 static Lisp_Object Qcoding_system_define_form;
f1df126ec7de Sync to HEAD for handling autoload-coding-system.
Kenichi Handa <handa@m17n.org>
parents: 90263
diff changeset
336
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
337 int coding_system_require_warning;
52794
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
338
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
339 Lisp_Object Vselect_safe_coding_system_function;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
340
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
341 /* 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
342 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
343 /* Mnemonic string to indicate format of end-of-line is not yet
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
344 decided. */
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
345 Lisp_Object eol_mnemonic_undecided;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
346
90394
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
347 /* Format of end-of-line decided by system. This is Qunix on
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
348 Unix and Mac, Qdos on DOS/Windows.
70520
b6740a317343 (setup_coding_system): For invalid coding-system, set
Kenichi Handa <handa@m17n.org>
parents: 69995
diff changeset
349 This has an effect only for external encoding (i.e. for output to
b6740a317343 (setup_coding_system): For invalid coding-system, set
Kenichi Handa <handa@m17n.org>
parents: 69995
diff changeset
350 file and process), not for in-buffer or Lisp string encoding. */
90394
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
351 static Lisp_Object system_eol_type;
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
352
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
353 #ifdef emacs
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
354
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
355 Lisp_Object Vcoding_system_list, Vcoding_system_alist;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
356
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
357 Lisp_Object Qcoding_system_p, Qcoding_system_error;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
358
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
359 /* 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
360 end-of-line format. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
361 Lisp_Object Qemacs_mule, Qraw_text;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
362 Lisp_Object Qutf_8_emacs;
51406
3c675181c3d8 (Qutf_8): New.
Dave Love <fx@gnu.org>
parents: 51356
diff changeset
363
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
364 /* Coding-systems are handed between Emacs Lisp programs and C internal
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
365 routines by the following three variables. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
366 /* Coding-system for reading files and receiving data from process. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
367 Lisp_Object Vcoding_system_for_read;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
368 /* Coding-system for writing files and sending data to process. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
369 Lisp_Object Vcoding_system_for_write;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
370 /* Coding-system actually used in the latest I/O. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
371 Lisp_Object Vlast_coding_system_used;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
372 /* 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
373 Lisp_Object Vlast_code_conversion_error;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
374 /* A vector of length 256 which contains information about special
22529
d9eac134a41b Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22502
diff changeset
375 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
376 Lisp_Object Vlatin_extra_code_table;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
377
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
378 /* 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
379 int inhibit_eol_conversion;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
380
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
381 /* Flag to inhibit ISO2022 escape sequence detection. */
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
382 int inhibit_iso_escape_detection;
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
383
101040
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
384 /* Flag to inhibit detection of binary files through null bytes. */
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
385 int inhibit_null_byte_detection;
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
386
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
387 /* 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
388 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
389
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
390 /* 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
391 terminal coding system is nil. */
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
392 struct coding_system safe_terminal_coding;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
393
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
394 Lisp_Object Vfile_coding_system_alist;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
395 Lisp_Object Vprocess_coding_system_alist;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
396 Lisp_Object Vnetwork_coding_system_alist;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
397
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
398 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
399
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
400 #endif /* emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
401
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
402 /* 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
403 conversion. */
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
404 Lisp_Object Venable_character_translation;
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
405 /* 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
406 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
407 /* 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
408 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
409
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
410 Lisp_Object Qtranslation_table;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
411 Lisp_Object Qtranslation_table_id;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
412 Lisp_Object Qtranslation_table_for_decode;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
413 Lisp_Object Qtranslation_table_for_encode;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
414
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
415 /* Alist of charsets vs revision number. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
416 static Lisp_Object Vcharset_revision_table;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
417
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
418 /* Default coding systems used for process I/O. */
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
419 Lisp_Object Vdefault_process_coding_system;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
420
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
421 /* 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
422 Lisp_Object Vtranslation_table_for_input;
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
423
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
424 /* Two special coding systems. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
425 Lisp_Object Vsjis_coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
426 Lisp_Object Vbig5_coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
427
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
428 /* ISO2022 section */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
429
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
430 #define CODING_ISO_INITIAL(coding, reg) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
431 (XINT (AREF (AREF (CODING_ID_ATTRS ((coding)->id), \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
432 coding_attr_iso_initial), \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
433 reg)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
434
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
435
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
436 #define CODING_ISO_REQUEST(coding, charset_id) \
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
437 (((charset_id) <= (coding)->max_charset_id \
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
438 ? ((coding)->safe_charsets[charset_id] != 255 \
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
439 ? (coding)->safe_charsets[charset_id] \
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
440 : -1) \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
441 : -1))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
442
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
443
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
444 #define CODING_ISO_FLAGS(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
445 ((coding)->spec.iso_2022.flags)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
446 #define CODING_ISO_DESIGNATION(coding, reg) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
447 ((coding)->spec.iso_2022.current_designation[reg])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
448 #define CODING_ISO_INVOCATION(coding, plane) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
449 ((coding)->spec.iso_2022.current_invocation[plane])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
450 #define CODING_ISO_SINGLE_SHIFTING(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
451 ((coding)->spec.iso_2022.single_shifting)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
452 #define CODING_ISO_BOL(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
453 ((coding)->spec.iso_2022.bol)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
454 #define CODING_ISO_INVOKED_CHARSET(coding, plane) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
455 CODING_ISO_DESIGNATION ((coding), CODING_ISO_INVOCATION ((coding), (plane)))
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
456 #define CODING_ISO_CMP_STATUS(coding) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
457 (&(coding)->spec.iso_2022.cmp_status)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
458 #define CODING_ISO_EXTSEGMENT_LEN(coding) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
459 ((coding)->spec.iso_2022.ctext_extended_segment_len)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
460 #define CODING_ISO_EMBEDDED_UTF_8(coding) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
461 ((coding)->spec.iso_2022.embedded_utf_8)
88365
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 /* Control characters of ISO2022. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
464 /* code */ /* function */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
465 #define ISO_CODE_LF 0x0A /* line-feed */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
466 #define ISO_CODE_CR 0x0D /* carriage-return */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
467 #define ISO_CODE_SO 0x0E /* shift-out */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
468 #define ISO_CODE_SI 0x0F /* shift-in */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
469 #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
470 #define ISO_CODE_ESC 0x1B /* escape */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
471 #define ISO_CODE_SS2 0x8E /* single-shift-2 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
472 #define ISO_CODE_SS3 0x8F /* single-shift-3 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
473 #define ISO_CODE_CSI 0x9B /* control-sequence-introducer */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
474
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
475 /* 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
476 followings. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
477 enum iso_code_class_type
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
478 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
479 ISO_control_0, /* Control codes in the range
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
480 0x00..0x1F and 0x7F, except for the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
481 following 5 codes. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
482 ISO_shift_out, /* ISO_CODE_SO (0x0E) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
483 ISO_shift_in, /* ISO_CODE_SI (0x0F) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
484 ISO_single_shift_2_7, /* ISO_CODE_SS2_7 (0x19) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
485 ISO_escape, /* ISO_CODE_SO (0x1B) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
486 ISO_control_1, /* Control codes in the range
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
487 0x80..0x9F, except for the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
488 following 3 codes. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
489 ISO_single_shift_2, /* ISO_CODE_SS2 (0x8E) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
490 ISO_single_shift_3, /* ISO_CODE_SS3 (0x8F) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
491 ISO_control_sequence_introducer, /* ISO_CODE_CSI (0x9B) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
492 ISO_0x20_or_0x7F, /* Codes of the values 0x20 or 0x7F. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
493 ISO_graphic_plane_0, /* Graphic codes in the range 0x21..0x7E. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
494 ISO_0xA0_or_0xFF, /* Codes of the values 0xA0 or 0xFF. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
495 ISO_graphic_plane_1 /* Graphic codes in the range 0xA1..0xFE. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
496 };
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 /** 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
499 `iso-flags' attribute of an iso2022 coding system. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
500
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
501 /* If set, produce long-form designation sequence (e.g. ESC $ ( A)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
502 instead of the correct short-form sequence (e.g. ESC $ A). */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
503 #define CODING_ISO_FLAG_LONG_FORM 0x0001
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
504
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
505 /* 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
506 initial state. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
507 #define CODING_ISO_FLAG_RESET_AT_EOL 0x0002
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
508
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
509 /* If set, reset graphic planes and registers before any control
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
510 characters to the initial state. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
511 #define CODING_ISO_FLAG_RESET_AT_CNTL 0x0004
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
512
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
513 /* If set, encode by 7-bit environment. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
514 #define CODING_ISO_FLAG_SEVEN_BITS 0x0008
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 /* If set, use locking-shift function. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
517 #define CODING_ISO_FLAG_LOCKING_SHIFT 0x0010
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
518
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
519 /* If set, use single-shift function. Overwrite
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
520 CODING_ISO_FLAG_LOCKING_SHIFT. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
521 #define CODING_ISO_FLAG_SINGLE_SHIFT 0x0020
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
522
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
523 /* If set, use designation escape sequence. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
524 #define CODING_ISO_FLAG_DESIGNATION 0x0040
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
525
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
526 /* If set, produce revision number sequence. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
527 #define CODING_ISO_FLAG_REVISION 0x0080
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
528
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
529 /* If set, produce ISO6429's direction specifying sequence. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
530 #define CODING_ISO_FLAG_DIRECTION 0x0100
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, assume designation states are reset at beginning of line on
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
533 output. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
534 #define CODING_ISO_FLAG_INIT_AT_BOL 0x0200
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
535
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
536 /* If set, designation sequence should be placed at beginning of line
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
537 on output. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
538 #define CODING_ISO_FLAG_DESIGNATE_AT_BOL 0x0400
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
539
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
540 /* If set, do not encode unsafe characters on output. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
541 #define CODING_ISO_FLAG_SAFE 0x0800
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
542
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
543 /* 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
544 on input. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
545 #define CODING_ISO_FLAG_LATIN_EXTRA 0x1000
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
546
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
547 #define CODING_ISO_FLAG_COMPOSITION 0x2000
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
548
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
549 #define CODING_ISO_FLAG_EUC_TW_SHIFT 0x4000
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
550
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
551 #define CODING_ISO_FLAG_USE_ROMAN 0x8000
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
552
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
553 #define CODING_ISO_FLAG_USE_OLDJIS 0x10000
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
554
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
555 #define CODING_ISO_FLAG_FULL_SUPPORT 0x100000
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
556
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
557 /* 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
558 character is prohibited by CODING_ISO_FLAG_SAFE. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
559 #define CODING_INHIBIT_CHARACTER_SUBSTITUTION '?'
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
560
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
561 /* UTF-8 section */
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
562 #define CODING_UTF_8_BOM(coding) \
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
563 ((coding)->spec.utf_8_bom)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
564
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
565 /* UTF-16 section */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
566 #define CODING_UTF_16_BOM(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
567 ((coding)->spec.utf_16.bom)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
568
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
569 #define CODING_UTF_16_ENDIAN(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
570 ((coding)->spec.utf_16.endian)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
571
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
572 #define CODING_UTF_16_SURROGATE(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
573 ((coding)->spec.utf_16.surrogate)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
574
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 /* CCL section */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
577 #define CODING_CCL_DECODER(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
578 AREF (CODING_ID_ATTRS ((coding)->id), coding_attr_ccl_decoder)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
579 #define CODING_CCL_ENCODER(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
580 AREF (CODING_ID_ATTRS ((coding)->id), coding_attr_ccl_encoder)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
581 #define CODING_CCL_VALIDS(coding) \
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
582 (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
583
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
584 /* Index for each coding category in `coding_categories' */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
585
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
586 enum coding_category
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 coding_category_iso_7,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
589 coding_category_iso_7_tight,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
590 coding_category_iso_8_1,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
591 coding_category_iso_8_2,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
592 coding_category_iso_7_else,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
593 coding_category_iso_8_else,
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
594 coding_category_utf_8_auto,
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
595 coding_category_utf_8_nosig,
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
596 coding_category_utf_8_sig,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
597 coding_category_utf_16_auto,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
598 coding_category_utf_16_be,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
599 coding_category_utf_16_le,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
600 coding_category_utf_16_be_nosig,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
601 coding_category_utf_16_le_nosig,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
602 coding_category_charset,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
603 coding_category_sjis,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
604 coding_category_big5,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
605 coding_category_ccl,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
606 coding_category_emacs_mule,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
607 /* All above are targets of code detection. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
608 coding_category_raw_text,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
609 coding_category_undecided,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
610 coding_category_max
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
611 };
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
612
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
613 /* Definitions of flag bits used in detect_coding_XXXX. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
614 #define CATEGORY_MASK_ISO_7 (1 << coding_category_iso_7)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
615 #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
616 #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
617 #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
618 #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
619 #define CATEGORY_MASK_ISO_8_ELSE (1 << coding_category_iso_8_else)
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
620 #define CATEGORY_MASK_UTF_8_AUTO (1 << coding_category_utf_8_auto)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
621 #define CATEGORY_MASK_UTF_8_NOSIG (1 << coding_category_utf_8_nosig)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
622 #define CATEGORY_MASK_UTF_8_SIG (1 << coding_category_utf_8_sig)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
623 #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
624 #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
625 #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
626 #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
627 #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
628 #define CATEGORY_MASK_CHARSET (1 << coding_category_charset)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
629 #define CATEGORY_MASK_SJIS (1 << coding_category_sjis)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
630 #define CATEGORY_MASK_BIG5 (1 << coding_category_big5)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
631 #define CATEGORY_MASK_CCL (1 << coding_category_ccl)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
632 #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
633 #define CATEGORY_MASK_RAW_TEXT (1 << coding_category_raw_text)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
634
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
635 /* This value is returned if detect_coding_mask () find nothing other
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
636 than ASCII characters. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
637 #define CATEGORY_MASK_ANY \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
638 (CATEGORY_MASK_ISO_7 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
639 | CATEGORY_MASK_ISO_7_TIGHT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
640 | CATEGORY_MASK_ISO_8_1 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
641 | CATEGORY_MASK_ISO_8_2 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
642 | CATEGORY_MASK_ISO_7_ELSE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
643 | CATEGORY_MASK_ISO_8_ELSE \
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
644 | CATEGORY_MASK_UTF_8_AUTO \
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
645 | CATEGORY_MASK_UTF_8_NOSIG \
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
646 | CATEGORY_MASK_UTF_8_SIG \
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
647 | CATEGORY_MASK_UTF_16_AUTO \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
648 | CATEGORY_MASK_UTF_16_BE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
649 | CATEGORY_MASK_UTF_16_LE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
650 | CATEGORY_MASK_UTF_16_BE_NOSIG \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
651 | CATEGORY_MASK_UTF_16_LE_NOSIG \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
652 | CATEGORY_MASK_CHARSET \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
653 | CATEGORY_MASK_SJIS \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
654 | CATEGORY_MASK_BIG5 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
655 | CATEGORY_MASK_CCL \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
656 | CATEGORY_MASK_EMACS_MULE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
657
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
658
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
659 #define CATEGORY_MASK_ISO_7BIT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
660 (CATEGORY_MASK_ISO_7 | CATEGORY_MASK_ISO_7_TIGHT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
661
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
662 #define CATEGORY_MASK_ISO_8BIT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
663 (CATEGORY_MASK_ISO_8_1 | CATEGORY_MASK_ISO_8_2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
664
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
665 #define CATEGORY_MASK_ISO_ELSE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
666 (CATEGORY_MASK_ISO_7_ELSE | CATEGORY_MASK_ISO_8_ELSE)
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_ESCAPE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
669 (CATEGORY_MASK_ISO_7 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
670 | CATEGORY_MASK_ISO_7_TIGHT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
671 | CATEGORY_MASK_ISO_7_ELSE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
672 | CATEGORY_MASK_ISO_8_ELSE)
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 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
675 ( CATEGORY_MASK_ISO_7BIT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
676 | CATEGORY_MASK_ISO_8BIT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
677 | CATEGORY_MASK_ISO_ELSE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
678
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
679 #define CATEGORY_MASK_UTF_16 \
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
680 (CATEGORY_MASK_UTF_16_AUTO \
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
681 | CATEGORY_MASK_UTF_16_BE \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
682 | CATEGORY_MASK_UTF_16_LE \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
683 | CATEGORY_MASK_UTF_16_BE_NOSIG \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
684 | CATEGORY_MASK_UTF_16_LE_NOSIG)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
685
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
686 #define CATEGORY_MASK_UTF_8 \
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
687 (CATEGORY_MASK_UTF_8_AUTO \
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
688 | CATEGORY_MASK_UTF_8_NOSIG \
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
689 | CATEGORY_MASK_UTF_8_SIG)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
690
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
691 /* List of symbols `coding-category-xxx' ordered by priority. This
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
692 variable is exposed to Emacs Lisp. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
693 static Lisp_Object Vcoding_category_list;
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 /* Table of coding categories (Lisp symbols). This variable is for
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
696 internal use only. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
697 static Lisp_Object Vcoding_category_table;
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 ordered by priority. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
700 static enum coding_category coding_priorities[coding_category_max];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
701
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
702 /* 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
703 Nth coding category. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
704 static struct coding_system coding_categories[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 /*** Commonly used macros and functions ***/
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
707
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
708 #ifndef min
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
709 #define min(a, b) ((a) < (b) ? (a) : (b))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
710 #endif
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
711 #ifndef max
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
712 #define max(a, b) ((a) > (b) ? (a) : (b))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
713 #endif
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
714
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
715 #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
716 do { \
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
717 (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
718 (charset_list) = CODING_ATTR_CHARSET_LIST (attrs); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
719 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
720
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
721
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
722 /* 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
723 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
724 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
725 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
726 negative value of the character code. The caller should declare
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
727 and set these variables appropriately in advance:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
728 src, src_end, multibytep */
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
729
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
730 #define ONE_MORE_BYTE(c) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
731 do { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
732 if (src == src_end) \
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 if (src_base < src) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
735 record_conversion_result \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
736 (coding, CODING_RESULT_INSUFFICIENT_SRC); \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
737 goto no_more_source; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
738 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
739 c = *src++; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
740 if (multibytep && (c & 0x80)) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
741 { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
742 if ((c & 0xFE) == 0xC0) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
743 c = ((c & 1) << 6) | *src++; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
744 else \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
745 { \
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
746 src--; \
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
747 c = - string_char (src, &src, NULL); \
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
748 record_conversion_result \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
749 (coding, CODING_RESULT_INVALID_SRC); \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
750 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
751 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
752 consumed_chars++; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
753 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
754
101172
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
755 /* Safely get two bytes from the source text pointed by SRC which ends
101174
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
756 at SRC_END, and set C1 and C2 to those bytes while skipping the
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
757 heading multibyte characters. If there are not enough bytes in the
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
758 source, it jumps to `no_more_source'. If multibytep is nonzero and
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
759 a multibyte character is found for C2, set C2 to the negative value
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
760 of the character code. The caller should declare and set these
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
761 variables appropriately in advance:
101172
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
762 src, src_end, multibytep
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
763 It is intended that this macro is used in detect_coding_utf_16. */
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
764
101174
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
765 #define TWO_MORE_BYTES(c1, c2) \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
766 do { \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
767 do { \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
768 if (src == src_end) \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
769 goto no_more_source; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
770 c1 = *src++; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
771 if (multibytep && (c1 & 0x80)) \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
772 { \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
773 if ((c1 & 0xFE) == 0xC0) \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
774 c1 = ((c1 & 1) << 6) | *src++; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
775 else \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
776 { \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
777 src += BYTES_BY_CHAR_HEAD (c1) - 1; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
778 c1 = -1; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
779 } \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
780 } \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
781 } while (c1 < 0); \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
782 if (src == src_end) \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
783 goto no_more_source; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
784 c2 = *src++; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
785 if (multibytep && (c2 & 0x80)) \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
786 { \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
787 if ((c2 & 0xFE) == 0xC0) \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
788 c2 = ((c2 & 1) << 6) | *src++; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
789 else \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
790 c2 = -1; \
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
791 } \
101172
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
792 } while (0)
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
793
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
794
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
795 #define ONE_MORE_BYTE_NO_CHECK(c) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
796 do { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
797 c = *src++; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
798 if (multibytep && (c & 0x80)) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
799 { \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
800 if ((c & 0xFE) == 0xC0) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
801 c = ((c & 1) << 6) | *src++; \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
802 else \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
803 { \
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
804 src--; \
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
805 c = - string_char (src, &src, NULL); \
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
806 record_conversion_result \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
807 (coding, CODING_RESULT_INVALID_SRC); \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
808 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
809 } \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
810 consumed_chars++; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
811 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
812
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
813
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
814 /* 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
815 next free point, and increment PRODUCED_CHARS. The caller should
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
816 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
817 appropriately in advance.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
818 */
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 #define EMIT_ONE_ASCII_BYTE(c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
822 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
823 produced_chars++; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
824 *dst++ = (c); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
825 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
826
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
827
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
828 /* Like EMIT_ONE_ASCII_BYTE but store two bytes; C1 and C2. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
829
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
830 #define EMIT_TWO_ASCII_BYTES(c1, c2) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
831 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
832 produced_chars += 2; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
833 *dst++ = (c1), *dst++ = (c2); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
834 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
835
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
836
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
837 /* 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
838 next free point, and increment PRODUCED_CHARS. If MULTIBYTEP is
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
839 nonzero, store in an appropriate multibyte from. The caller should
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
840 declare and set the variables `dst' and `multibytep' appropriately
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
841 in advance. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
842
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
843 #define EMIT_ONE_BYTE(c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
844 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
845 produced_chars++; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
846 if (multibytep) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
847 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
848 int ch = (c); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
849 if (ch >= 0x80) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
850 ch = BYTE8_TO_CHAR (ch); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
851 CHAR_STRING_ADVANCE (ch, dst); \
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 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
854 *dst++ = (c); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
855 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
856
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
857
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
858 /* Like EMIT_ONE_BYTE, but emit two bytes; C1 and C2. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
859
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
860 #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
861 do { \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
862 produced_chars += 2; \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
863 if (multibytep) \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
864 { \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
865 int ch; \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
866 \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
867 ch = (c1); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
868 if (ch >= 0x80) \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
869 ch = BYTE8_TO_CHAR (ch); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
870 CHAR_STRING_ADVANCE (ch, dst); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
871 ch = (c2); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
872 if (ch >= 0x80) \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
873 ch = BYTE8_TO_CHAR (ch); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
874 CHAR_STRING_ADVANCE (ch, dst); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
875 } \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
876 else \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
877 { \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
878 *dst++ = (c1); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
879 *dst++ = (c2); \
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
880 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
881 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
882
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
883
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
884 #define EMIT_THREE_BYTES(c1, c2, c3) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
885 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
886 EMIT_ONE_BYTE (c1); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
887 EMIT_TWO_BYTES (c2, c3); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
888 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
889
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
890
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
891 #define EMIT_FOUR_BYTES(c1, c2, c3, c4) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
892 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
893 EMIT_TWO_BYTES (c1, c2); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
894 EMIT_TWO_BYTES (c3, c4); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
895 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
896
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
897
89863
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
898 /* Prototypes for static functions. */
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
899 static void record_conversion_result P_ ((struct coding_system *coding,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
900 enum coding_result_code result));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
901 static int detect_coding_utf_8 P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
902 struct coding_detection_info *info));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
903 static void decode_coding_utf_8 P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
904 static int encode_coding_utf_8 P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
905
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
906 static int detect_coding_utf_16 P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
907 struct coding_detection_info *info));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
908 static void decode_coding_utf_16 P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
909 static int encode_coding_utf_16 P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
910
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
911 static int detect_coding_iso_2022 P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
912 struct coding_detection_info *info));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
913 static void decode_coding_iso_2022 P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
914 static int encode_coding_iso_2022 P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
915
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
916 static int detect_coding_emacs_mule P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
917 struct coding_detection_info *info));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
918 static void decode_coding_emacs_mule P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
919 static int encode_coding_emacs_mule P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
920
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
921 static int detect_coding_sjis P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
922 struct coding_detection_info *info));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
923 static void decode_coding_sjis P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
924 static int encode_coding_sjis P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
925
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
926 static int detect_coding_big5 P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
927 struct coding_detection_info *info));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
928 static void decode_coding_big5 P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
929 static int encode_coding_big5 P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
930
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
931 static int detect_coding_ccl P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
932 struct coding_detection_info *info));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
933 static void decode_coding_ccl P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
934 static int encode_coding_ccl P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
935
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
936 static void decode_coding_raw_text P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
937 static int encode_coding_raw_text P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
938
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
939 static void coding_set_source P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
940 static void coding_set_destination P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
941 static void coding_alloc_by_realloc P_ ((struct coding_system *, EMACS_INT));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
942 static void coding_alloc_by_making_gap P_ ((struct coding_system *,
90772
b15334b4a9c3 (coding_alloc_by_making_gap): New arg offset.
Kenichi Handa <handa@m17n.org>
parents: 90737
diff changeset
943 EMACS_INT, EMACS_INT));
89863
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
944 static unsigned char *alloc_destination P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
945 EMACS_INT, unsigned char *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
946 static void setup_iso_safe_charsets P_ ((Lisp_Object));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
947 static unsigned char *encode_designation_at_bol P_ ((struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
948 int *, int *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
949 unsigned char *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
950 static int detect_eol P_ ((const unsigned char *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
951 EMACS_INT, enum coding_category));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
952 static Lisp_Object adjust_coding_eol_type P_ ((struct coding_system *, int));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
953 static void decode_eol P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
954 static Lisp_Object get_translation_table P_ ((Lisp_Object, int, int *));
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
955 static Lisp_Object get_translation P_ ((Lisp_Object, int *, int *));
89863
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
956 static int produce_chars P_ ((struct coding_system *, Lisp_Object, int));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
957 static INLINE void produce_charset P_ ((struct coding_system *, int *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
958 EMACS_INT));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
959 static void produce_annotation P_ ((struct coding_system *, EMACS_INT));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
960 static int decode_coding P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
961 static INLINE int *handle_composition_annotation P_ ((EMACS_INT, EMACS_INT,
93877
62d97ebb13a9 * coding.c (detect_coding_emacs_mule)
Michael Albinus <michael.albinus@gmx.de>
parents: 93595
diff changeset
962 struct coding_system *,
89863
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
963 int *, EMACS_INT *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
964 static INLINE int *handle_charset_annotation P_ ((EMACS_INT, EMACS_INT,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
965 struct coding_system *,
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
966 int *, EMACS_INT *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
967 static void consume_chars P_ ((struct coding_system *, Lisp_Object, int));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
968 static int encode_coding P_ ((struct coding_system *));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
969 static Lisp_Object make_conversion_work_buffer P_ ((int));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
970 static Lisp_Object code_conversion_restore P_ ((Lisp_Object));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
971 static INLINE int char_encodable_p P_ ((int, Lisp_Object));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
972 static Lisp_Object make_subsidiaries P_ ((Lisp_Object));
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
973
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
974 static void
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
975 record_conversion_result (struct coding_system *coding,
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
976 enum coding_result_code result)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
977 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
978 coding->result = result;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
979 switch (result)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
980 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
981 case CODING_RESULT_INSUFFICIENT_SRC:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
982 Vlast_code_conversion_error = Qinsufficient_source;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
983 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
984 case CODING_RESULT_INCONSISTENT_EOL:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
985 Vlast_code_conversion_error = Qinconsistent_eol;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
986 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
987 case CODING_RESULT_INVALID_SRC:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
988 Vlast_code_conversion_error = Qinvalid_source;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
989 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
990 case CODING_RESULT_INTERRUPT:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
991 Vlast_code_conversion_error = Qinterrupted;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
992 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
993 case CODING_RESULT_INSUFFICIENT_MEM:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
994 Vlast_code_conversion_error = Qinsufficient_memory;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
995 break;
107174
e98bd64897e0 Fix handling of CODING_RESULT_INSUFFICIENT_DST.
Kenichi Handa <handa@m17n.org>
parents: 107171
diff changeset
996 case CODING_RESULT_INSUFFICIENT_DST:
e98bd64897e0 Fix handling of CODING_RESULT_INSUFFICIENT_DST.
Kenichi Handa <handa@m17n.org>
parents: 107171
diff changeset
997 /* Don't record this error in Vlast_code_conversion_error
e98bd64897e0 Fix handling of CODING_RESULT_INSUFFICIENT_DST.
Kenichi Handa <handa@m17n.org>
parents: 107171
diff changeset
998 because it happens just temporarily and is resolved when the
e98bd64897e0 Fix handling of CODING_RESULT_INSUFFICIENT_DST.
Kenichi Handa <handa@m17n.org>
parents: 107171
diff changeset
999 whole conversion is finished. */
e98bd64897e0 Fix handling of CODING_RESULT_INSUFFICIENT_DST.
Kenichi Handa <handa@m17n.org>
parents: 107171
diff changeset
1000 break;
103133
2f7395806731 (record_conversion_result): Don't modify
Andreas Schwab <schwab@linux-m68k.org>
parents: 103052
diff changeset
1001 case CODING_RESULT_SUCCESS:
2f7395806731 (record_conversion_result): Don't modify
Andreas Schwab <schwab@linux-m68k.org>
parents: 103052
diff changeset
1002 break;
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
1003 default:
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
1004 Vlast_code_conversion_error = intern ("Unknown error");
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1005 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1006 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1007
107321
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
1008 /* This wrapper macro is used to preserve validity of pointers into
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
1009 buffer text across calls to decode_char, which could cause
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
1010 relocation of buffers if it loads a charset map, because loading a
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
1011 charset map allocates large structures. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1012 #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
1013 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1014 charset_map_loaded = 0; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1015 c = DECODE_CHAR (charset, code); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1016 if (charset_map_loaded) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1017 { \
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1018 const unsigned char *orig = coding->source; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1019 EMACS_INT offset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1020 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1021 coding_set_source (coding); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1022 offset = coding->source - orig; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1023 src += offset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1024 src_base += offset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1025 src_end += offset; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1026 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1027 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1028
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1029
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1030 /* If there are at least BYTES length of room at dst, allocate memory
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1031 for coding->destination and update dst and dst_end. We don't have
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1032 to take care of coding->source which will be relocated. It is
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1033 handled by calling coding_set_source in encode_coding. */
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1034
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1035 #define ASSURE_DESTINATION(bytes) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1036 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1037 if (dst + (bytes) >= dst_end) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1038 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1039 int more_bytes = charbuf_end - charbuf + (bytes); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1040 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1041 dst = alloc_destination (coding, more_bytes, dst); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1042 dst_end = coding->destination + coding->dst_bytes; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1043 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1044 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1045
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1046
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1047 /* Store multibyte form of the character C in P, and advance P to the
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1048 end of the multibyte form. This is like CHAR_STRING_ADVANCE but it
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1049 never calls MAYBE_UNIFY_CHAR. */
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1050
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1051 #define CHAR_STRING_ADVANCE_NO_UNIFY(c, p) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1052 do { \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1053 if ((c) <= MAX_1_BYTE_CHAR) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1054 *(p)++ = (c); \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1055 else if ((c) <= MAX_2_BYTE_CHAR) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1056 *(p)++ = (0xC0 | ((c) >> 6)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1057 *(p)++ = (0x80 | ((c) & 0x3F)); \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1058 else if ((c) <= MAX_3_BYTE_CHAR) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1059 *(p)++ = (0xE0 | ((c) >> 12)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1060 *(p)++ = (0x80 | (((c) >> 6) & 0x3F)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1061 *(p)++ = (0x80 | ((c) & 0x3F)); \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1062 else if ((c) <= MAX_4_BYTE_CHAR) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1063 *(p)++ = (0xF0 | (c >> 18)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1064 *(p)++ = (0x80 | ((c >> 12) & 0x3F)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1065 *(p)++ = (0x80 | ((c >> 6) & 0x3F)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1066 *(p)++ = (0x80 | (c & 0x3F)); \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1067 else if ((c) <= MAX_5_BYTE_CHAR) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1068 *(p)++ = 0xF8, \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1069 *(p)++ = (0x80 | ((c >> 18) & 0x0F)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1070 *(p)++ = (0x80 | ((c >> 12) & 0x3F)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1071 *(p)++ = (0x80 | ((c >> 6) & 0x3F)), \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1072 *(p)++ = (0x80 | (c & 0x3F)); \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1073 else \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1074 (p) += BYTE8_STRING ((c) - 0x3FFF80, p); \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1075 } while (0)
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1076
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1077
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1078 /* Return the character code of character whose multibyte form is at
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1079 P, and advance P to the end of the multibyte form. This is like
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1080 STRING_CHAR_ADVANCE, but it never calls MAYBE_UNIFY_CHAR. */
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1081
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1082 #define STRING_CHAR_ADVANCE_NO_UNIFY(p) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1083 (!((p)[0] & 0x80) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1084 ? *(p)++ \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1085 : ! ((p)[0] & 0x20) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1086 ? ((p) += 2, \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1087 ((((p)[-2] & 0x1F) << 6) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1088 | ((p)[-1] & 0x3F) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1089 | ((unsigned char) ((p)[-2]) < 0xC2 ? 0x3FFF80 : 0))) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1090 : ! ((p)[0] & 0x10) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1091 ? ((p) += 3, \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1092 ((((p)[-3] & 0x0F) << 12) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1093 | (((p)[-2] & 0x3F) << 6) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1094 | ((p)[-1] & 0x3F))) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1095 : ! ((p)[0] & 0x08) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1096 ? ((p) += 4, \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1097 ((((p)[-4] & 0xF) << 18) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1098 | (((p)[-3] & 0x3F) << 12) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1099 | (((p)[-2] & 0x3F) << 6) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1100 | ((p)[-1] & 0x3F))) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1101 : ((p) += 5, \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1102 ((((p)[-4] & 0x3F) << 18) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1103 | (((p)[-3] & 0x3F) << 12) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1104 | (((p)[-2] & 0x3F) << 6) \
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1105 | ((p)[-1] & 0x3F))))
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1106
88365
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 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1109 coding_set_source (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1110 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1111 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1112 if (BUFFERP (coding->src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1113 {
89418
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
1114 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
1115
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1116 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
1117 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
1118 else
89418
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
1119 coding->source = BUF_BYTE_ADDRESS (buf, coding->src_pos_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1120 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1121 else if (STRINGP (coding->src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1122 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1123 coding->source = SDATA (coding->src_object) + coding->src_pos_byte;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1124 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1125 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1126 /* Otherwise, the source is C string and is never relocated
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1127 automatically. Thus we don't have to update anything. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1128 ;
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1131 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1132 coding_set_destination (coding)
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1133 struct coding_system *coding;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1134 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1135 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1136 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1137 if (coding->src_pos < 0)
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1138 {
91807
507bcfb4342c * coding.c (coding_set_destination): Use BEG_BYTE rather than hardcoding 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91622
diff changeset
1139 coding->destination = BEG_ADDR + coding->dst_pos_byte - BEG_BYTE;
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1140 coding->dst_bytes = (GAP_END_ADDR
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1141 - (coding->src_bytes - coding->consumed)
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1142 - coding->destination);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1143 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1144 else
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1145 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1146 /* 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
1147 of the buffer. */
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1148 coding->destination = (BUF_BEG_ADDR (XBUFFER (coding->dst_object))
91807
507bcfb4342c * coding.c (coding_set_destination): Use BEG_BYTE rather than hardcoding 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91622
diff changeset
1149 + coding->dst_pos_byte - BEG_BYTE);
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1150 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
1151 - coding->destination);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1152 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1153 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1154 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1155 /* Otherwise, the destination is C string and is never relocated
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1156 automatically. Thus we don't have to update anything. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1157 ;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1158 }
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 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1162 coding_alloc_by_realloc (coding, bytes)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1163 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1164 EMACS_INT bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1165 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1166 coding->destination = (unsigned char *) xrealloc (coding->destination,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1167 coding->dst_bytes + bytes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1168 coding->dst_bytes += bytes;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1169 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1170
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1171 static void
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1172 coding_alloc_by_making_gap (coding, gap_head_used, bytes)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1173 struct coding_system *coding;
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1174 EMACS_INT gap_head_used, bytes;
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1175 {
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1176 if (EQ (coding->src_object, coding->dst_object))
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1177 {
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1178 /* The gap may contain the produced data at the head and not-yet
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1179 consumed data at the tail. To preserve those data, we at
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1180 first make the gap size to zero, then increase the gap
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1181 size. */
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1182 EMACS_INT add = GAP_SIZE;
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1183
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1184 GPT += gap_head_used, GPT_BYTE += gap_head_used;
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1185 GAP_SIZE = 0; ZV += add; Z += add; ZV_BYTE += add; Z_BYTE += add;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1186 make_gap (bytes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1187 GAP_SIZE += add; ZV -= add; Z -= add; ZV_BYTE -= add; Z_BYTE -= add;
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1188 GPT -= gap_head_used, GPT_BYTE -= gap_head_used;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1189 }
90292
697c08d95af7 Cancel incorrect synching with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90291
diff changeset
1190 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1191 {
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
1192 Lisp_Object this_buffer;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
1193
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
1194 this_buffer = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1195 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1196 make_gap (bytes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1197 set_buffer_internal (XBUFFER (this_buffer));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1198 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1199 }
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1200
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1201
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1202 static unsigned char *
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1203 alloc_destination (coding, nbytes, dst)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1204 struct coding_system *coding;
89545
4f394eed6ff2 (inhibit_pre_post_conversion): Removed (unused).
Dave Love <fx@gnu.org>
parents: 89519
diff changeset
1205 EMACS_INT nbytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1206 unsigned char *dst;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1207 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1208 EMACS_INT offset = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1209
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1210 if (BUFFERP (coding->dst_object))
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1211 {
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1212 struct buffer *buf = XBUFFER (coding->dst_object);
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1213
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1214 coding_alloc_by_making_gap (coding, dst - BUF_GPT_ADDR (buf), nbytes);
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1215 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1216 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1217 coding_alloc_by_realloc (coding, nbytes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1218 coding_set_destination (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1219 dst = coding->destination + offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1220 return dst;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1221 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1222
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1223 /** Macros for annotations. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1224
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1225 /* 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
1226 format:
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1227 [ -LENGTH ANNOTATION_MASK NCHARS ... ]
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1228 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
1229 ANNOTATION_MASK is one of CODING_ANNOTATE_XXX_MASK.
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1230 NCHARS is the number of characters in the text annotated.
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1231
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1232 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
1233
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1234 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
1235 follows:
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1236 ... NBYTES METHOD [ COMPOSITION-COMPONENTS ... ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1237
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1238 NBYTES is the number of bytes specified in the header part of
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1239 old-style emacs-mule encoding, or 0 for the other kind of
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1240 composition.
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1241
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1242 METHOD is one of enum composition_method.
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1243
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
1244 Optional COMPOSITION-COMPONENTS are characters and composition
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1245 rules.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1246
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1247 In the case of CODING_ANNOTATE_CHARSET_MASK, one element CHARSET-ID
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1248 follows.
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1249
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1250 If ANNOTATION_MASK is 0, this annotation is just a space holder to
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1251 recover from an invalid annotation, and should be skipped by
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1252 produce_annotation. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1253
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1254 /* Maximum length of the header of annotation data. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1255 #define MAX_ANNOTATION_LENGTH 5
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1256
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1257 #define ADD_ANNOTATION_DATA(buf, len, mask, nchars) \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1258 do { \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1259 *(buf)++ = -(len); \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1260 *(buf)++ = (mask); \
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1261 *(buf)++ = (nchars); \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1262 coding->annotated = 1; \
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1263 } while (0);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1264
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1265 #define ADD_COMPOSITION_DATA(buf, nchars, nbytes, method) \
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1266 do { \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1267 ADD_ANNOTATION_DATA (buf, 5, CODING_ANNOTATE_COMPOSITION_MASK, nchars); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1268 *buf++ = nbytes; \
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1269 *buf++ = method; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1270 } while (0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1271
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1272
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1273 #define ADD_CHARSET_DATA(buf, nchars, id) \
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1274 do { \
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1275 ADD_ANNOTATION_DATA (buf, 4, CODING_ANNOTATE_CHARSET_MASK, nchars); \
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1276 *buf++ = id; \
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1277 } while (0)
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1278
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1279
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1280 /*** 2. Emacs' internal format (emacs-utf-8) ***/
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1281
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1282
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1283
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1284
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1285 /*** 3. UTF-8 ***/
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 /* 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
1288 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
1289 return 0. */
88365
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 #define UTF_8_1_OCTET_P(c) ((c) < 0x80)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1292 #define UTF_8_EXTRA_OCTET_P(c) (((c) & 0xC0) == 0x80)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1293 #define UTF_8_2_OCTET_LEADING_P(c) (((c) & 0xE0) == 0xC0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1294 #define UTF_8_3_OCTET_LEADING_P(c) (((c) & 0xF0) == 0xE0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1295 #define UTF_8_4_OCTET_LEADING_P(c) (((c) & 0xF8) == 0xF0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1296 #define UTF_8_5_OCTET_LEADING_P(c) (((c) & 0xFC) == 0xF8)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1297
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1298 #define UTF_BOM 0xFEFF
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1299 #define UTF_8_BOM_1 0xEF
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1300 #define UTF_8_BOM_2 0xBB
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1301 #define UTF_8_BOM_3 0xBF
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1302
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1303 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1304 detect_coding_utf_8 (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1305 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1306 struct coding_detection_info *detect_info;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1307 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1308 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1309 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1310 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1311 int consumed_chars = 0;
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1312 int bom_found = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1313 int found = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1314
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1315 detect_info->checked |= CATEGORY_MASK_UTF_8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1316 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1317 src += coding->head_ascii;
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 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1320 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1321 int c, c1, c2, c3, c4;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1322
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1323 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1324 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1325 if (c < 0 || UTF_8_1_OCTET_P (c))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1326 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1327 ONE_MORE_BYTE (c1);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1328 if (c1 < 0 || ! UTF_8_EXTRA_OCTET_P (c1))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1329 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1330 if (UTF_8_2_OCTET_LEADING_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1331 {
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1332 found = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1333 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1334 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1335 ONE_MORE_BYTE (c2);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1336 if (c2 < 0 || ! UTF_8_EXTRA_OCTET_P (c2))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1337 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1338 if (UTF_8_3_OCTET_LEADING_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1339 {
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1340 found = 1;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1341 if (src_base == coding->source
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1342 && c == UTF_8_BOM_1 && c1 == UTF_8_BOM_2 && c2 == UTF_8_BOM_3)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1343 bom_found = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1344 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1345 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1346 ONE_MORE_BYTE (c3);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1347 if (c3 < 0 || ! UTF_8_EXTRA_OCTET_P (c3))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1348 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1349 if (UTF_8_4_OCTET_LEADING_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1350 {
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1351 found = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1352 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1353 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1354 ONE_MORE_BYTE (c4);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1355 if (c4 < 0 || ! UTF_8_EXTRA_OCTET_P (c4))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1356 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1357 if (UTF_8_5_OCTET_LEADING_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1358 {
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1359 found = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1360 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1361 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1362 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1363 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1364 detect_info->rejected |= CATEGORY_MASK_UTF_8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1365 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1366
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1367 no_more_source:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1368 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
1369 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1370 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
1371 return 0;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1372 }
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1373 if (bom_found)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1374 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1375 /* The first character 0xFFFE doesn't necessarily mean a BOM. */
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1376 detect_info->found |= CATEGORY_MASK_UTF_8_SIG | CATEGORY_MASK_UTF_8_NOSIG;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1377 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1378 else
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1379 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1380 detect_info->rejected |= CATEGORY_MASK_UTF_8_SIG;
96571
a3f2a5a4b492 (detect_coding_utf_8): Set detect_info->found only when
Kenichi Handa <handa@m17n.org>
parents: 95585
diff changeset
1381 if (found)
a3f2a5a4b492 (detect_coding_utf_8): Set detect_info->found only when
Kenichi Handa <handa@m17n.org>
parents: 95585
diff changeset
1382 detect_info->found |= CATEGORY_MASK_UTF_8_NOSIG;
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1383 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1384 return 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1385 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1386
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1387
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1388 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1389 decode_coding_utf_8 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1390 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1391 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1392 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1393 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1394 const unsigned char *src_base;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1395 int *charbuf = coding->charbuf + coding->charbuf_used;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1396 int *charbuf_end = coding->charbuf + coding->charbuf_size;
100133
bca35d7cb3ac (decode_coding_utf_8): Likewise.
Kenichi Handa <handa@m17n.org>
parents: 100131
diff changeset
1397 int consumed_chars = 0, consumed_chars_base = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1398 int multibytep = coding->src_multibyte;
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1399 enum utf_bom_type bom = CODING_UTF_8_BOM (coding);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1400 Lisp_Object attr, charset_list;
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
1401 int eol_crlf =
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
1402 !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1403 int byte_after_cr = -1;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1404
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1405 CODING_GET_INFO (coding, attr, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1406
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1407 if (bom != utf_without_bom)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1408 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1409 int c1, c2, c3;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1410
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1411 src_base = src;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1412 ONE_MORE_BYTE (c1);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1413 if (! UTF_8_3_OCTET_LEADING_P (c1))
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1414 src = src_base;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1415 else
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1416 {
99074
10cd979d05ca (make_conversion_work_buffer): Check that Vcode_conversion_reused_workbuf
Noah Friedman <friedman@splode.com>
parents: 98992
diff changeset
1417 ONE_MORE_BYTE (c2);
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1418 if (! UTF_8_EXTRA_OCTET_P (c2))
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1419 src = src_base;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1420 else
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1421 {
99074
10cd979d05ca (make_conversion_work_buffer): Check that Vcode_conversion_reused_workbuf
Noah Friedman <friedman@splode.com>
parents: 98992
diff changeset
1422 ONE_MORE_BYTE (c3);
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1423 if (! UTF_8_EXTRA_OCTET_P (c3))
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1424 src = src_base;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1425 else
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1426 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1427 if ((c1 != UTF_8_BOM_1)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1428 || (c2 != UTF_8_BOM_2) || (c3 != UTF_8_BOM_3))
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1429 src = src_base;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1430 else
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1431 CODING_UTF_8_BOM (coding) = utf_without_bom;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1432 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1433 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1434 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1435 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1436 CODING_UTF_8_BOM (coding) = utf_without_bom;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1437
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1438
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1439
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1440 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1441 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1442 int c, c1, c2, c3, c4, c5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1443
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1444 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1445 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1446
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1447 if (charbuf >= charbuf_end)
100936
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1448 {
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1449 if (byte_after_cr >= 0)
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1450 src_base--;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1451 break;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1452 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1453
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1454 if (byte_after_cr >= 0)
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1455 c1 = byte_after_cr, byte_after_cr = -1;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1456 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1457 ONE_MORE_BYTE (c1);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1458 if (c1 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1459 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1460 c = - c1;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1461 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1462 else if (UTF_8_1_OCTET_P(c1))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1463 {
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1464 if (eol_crlf && c1 == '\r')
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1465 ONE_MORE_BYTE (byte_after_cr);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1466 c = c1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1467 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1468 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1469 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1470 ONE_MORE_BYTE (c2);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1471 if (c2 < 0 || ! UTF_8_EXTRA_OCTET_P (c2))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1472 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1473 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
1474 {
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1475 c = ((c1 & 0x1F) << 6) | (c2 & 0x3F);
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1476 /* Reject overlong sequences here and below. Encoders
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1477 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
1478 and they mess up read/write invariance. */
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1479 if (c < 128)
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1480 goto invalid_code;
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1481 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1482 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1483 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1484 ONE_MORE_BYTE (c3);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1485 if (c3 < 0 || ! UTF_8_EXTRA_OCTET_P (c3))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1486 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1487 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
1488 {
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1489 c = (((c1 & 0xF) << 12)
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1490 | ((c2 & 0x3F) << 6) | (c3 & 0x3F));
89184
88a9e962e183 (decode_coding_utf_8): Treat surrogates as invalid.
Dave Love <fx@gnu.org>
parents: 89042
diff changeset
1491 if (c < 0x800
88a9e962e183 (decode_coding_utf_8): Treat surrogates as invalid.
Dave Love <fx@gnu.org>
parents: 89042
diff changeset
1492 || (c >= 0xd800 && c < 0xe000)) /* surrogates (invalid) */
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1493 goto invalid_code;
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1494 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1495 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1496 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1497 ONE_MORE_BYTE (c4);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1498 if (c4 < 0 || ! UTF_8_EXTRA_OCTET_P (c4))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1499 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1500 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
1501 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1502 c = (((c1 & 0x7) << 18) | ((c2 & 0x3F) << 12)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1503 | ((c3 & 0x3F) << 6) | (c4 & 0x3F));
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1504 if (c < 0x10000)
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1505 goto invalid_code;
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1506 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1507 else
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 ONE_MORE_BYTE (c5);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1510 if (c5 < 0 || ! UTF_8_EXTRA_OCTET_P (c5))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1511 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1512 if (UTF_8_5_OCTET_LEADING_P (c1))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1513 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1514 c = (((c1 & 0x3) << 24) | ((c2 & 0x3F) << 18)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1515 | ((c3 & 0x3F) << 12) | ((c4 & 0x3F) << 6)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1516 | (c5 & 0x3F));
88669
0bc5868f9f61 (decode_coding_utf_8): Reject overlong sequences.
Dave Love <fx@gnu.org>
parents: 88646
diff changeset
1517 if ((c > MAX_CHAR) || (c < 0x200000))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1518 goto invalid_code;
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 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1521 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1522 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1523 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1524 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1525 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1526
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1527 *charbuf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1528 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1529
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1530 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1531 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1532 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1533 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1534 *charbuf++ = ASCII_BYTE_P (c) ? c : BYTE8_TO_CHAR (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1535 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1536 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1537
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1538 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1539 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1540 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1541 coding->charbuf_used = charbuf - coding->charbuf;
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1545 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1546 encode_coding_utf_8 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1547 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1548 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1549 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1550 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1551 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1552 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1553 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
1554 int produced_chars = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1555 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1556
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1557 if (CODING_UTF_8_BOM (coding) == utf_with_bom)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1558 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1559 ASSURE_DESTINATION (3);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1560 EMIT_THREE_BYTES (UTF_8_BOM_1, UTF_8_BOM_2, UTF_8_BOM_3);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1561 CODING_UTF_8_BOM (coding) = utf_without_bom;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1562 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1563
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1564 if (multibytep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1565 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1566 int safe_room = MAX_MULTIBYTE_LENGTH * 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1567
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1568 while (charbuf < charbuf_end)
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 unsigned char str[MAX_MULTIBYTE_LENGTH], *p, *pend = str;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1571
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1572 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1573 c = *charbuf++;
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1574 if (CHAR_BYTE8_P (c))
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1575 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1576 c = CHAR_TO_BYTE8 (c);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1577 EMIT_ONE_BYTE (c);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1578 }
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1579 else
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1580 {
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1581 CHAR_STRING_ADVANCE_NO_UNIFY (c, pend);
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1582 for (p = str; p < pend; p++)
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1583 EMIT_ONE_BYTE (*p);
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
1584 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1585 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1586 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1587 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1588 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1589 int safe_room = MAX_MULTIBYTE_LENGTH;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1590
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1591 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1592 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1593 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1594 c = *charbuf++;
89917
1763eef5ad02 (encode_coding_utf_8): Fix handling of raw-byte char.
Kenichi Handa <handa@m17n.org>
parents: 89905
diff changeset
1595 if (CHAR_BYTE8_P (c))
1763eef5ad02 (encode_coding_utf_8): Fix handling of raw-byte char.
Kenichi Handa <handa@m17n.org>
parents: 89905
diff changeset
1596 *dst++ = CHAR_TO_BYTE8 (c);
1763eef5ad02 (encode_coding_utf_8): Fix handling of raw-byte char.
Kenichi Handa <handa@m17n.org>
parents: 89905
diff changeset
1597 else
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
1598 CHAR_STRING_ADVANCE_NO_UNIFY (c, dst);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1599 produced_chars++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1600 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1601 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1602 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1603 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1604 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1605 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1606 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1607
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1608
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1609 /* 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
1610 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
1611 If it is, return 1, else return 0. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1612
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1613 #define UTF_16_HIGH_SURROGATE_P(val) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1614 (((val) & 0xFC00) == 0xD800)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1615
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1616 #define UTF_16_LOW_SURROGATE_P(val) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1617 (((val) & 0xFC00) == 0xDC00)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1618
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1619 #define UTF_16_INVALID_P(val) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1620 (((val) == 0xFFFE) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1621 || ((val) == 0xFFFF) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1622 || UTF_16_LOW_SURROGATE_P (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1623
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1624
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1625 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1626 detect_coding_utf_16 (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1627 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1628 struct coding_detection_info *detect_info;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1629 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1630 const unsigned char *src = coding->source, *src_base = src;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1631 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1632 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1633 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1634 int c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1635
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1636 detect_info->checked |= CATEGORY_MASK_UTF_16;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1637 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
1638 && (coding->src_chars & 1))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1639 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1640 detect_info->rejected |= CATEGORY_MASK_UTF_16;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1641 return 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1642 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1643
101172
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
1644 TWO_MORE_BYTES (c1, c2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1645 if ((c1 == 0xFF) && (c2 == 0xFE))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1646 {
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1647 detect_info->found |= (CATEGORY_MASK_UTF_16_LE
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1648 | 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
1649 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
1650 | 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
1651 | CATEGORY_MASK_UTF_16_LE_NOSIG);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1652 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1653 else if ((c1 == 0xFE) && (c2 == 0xFF))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1654 {
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1655 detect_info->found |= (CATEGORY_MASK_UTF_16_BE
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1656 | 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
1657 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
1658 | 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
1659 | 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
1660 }
101174
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
1661 else if (c2 < 0)
101172
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
1662 {
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
1663 detect_info->rejected |= CATEGORY_MASK_UTF_16;
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
1664 return 0;
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
1665 }
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1666 else
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1667 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1668 /* We check the dispersion of Eth and Oth bytes where E is even and
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1669 O is odd. If both are high, we assume binary data.*/
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1670 unsigned char e[256], o[256];
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1671 unsigned e_num = 1, o_num = 1;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1672
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1673 memset (e, 0, 256);
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1674 memset (o, 0, 256);
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1675 e[c1] = 1;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1676 o[c2] = 1;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1677
103442
db4ec1a977bd (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103441
diff changeset
1678 detect_info->rejected |= (CATEGORY_MASK_UTF_16_AUTO
db4ec1a977bd (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103441
diff changeset
1679 |CATEGORY_MASK_UTF_16_BE
db4ec1a977bd (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103441
diff changeset
1680 | CATEGORY_MASK_UTF_16_LE);
db4ec1a977bd (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103441
diff changeset
1681
103448
73e7271dee09 (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103442
diff changeset
1682 while ((detect_info->rejected & CATEGORY_MASK_UTF_16)
73e7271dee09 (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103442
diff changeset
1683 != CATEGORY_MASK_UTF_16)
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1684 {
101172
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
1685 TWO_MORE_BYTES (c1, c2);
101174
198d8bf06a4f Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 101172
diff changeset
1686 if (c2 < 0)
101172
674e67257137 (TWO_MORE_BYTES): New macro.
Kenichi Handa <handa@m17n.org>
parents: 101040
diff changeset
1687 break;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1688 if (! e[c1])
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1689 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1690 e[c1] = 1;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1691 e_num++;
103442
db4ec1a977bd (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103441
diff changeset
1692 if (e_num >= 128)
db4ec1a977bd (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103441
diff changeset
1693 detect_info->rejected |= CATEGORY_MASK_UTF_16_BE_NOSIG;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1694 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1695 if (! o[c2])
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1696 {
103435
45564d023acc (detect_coding_utf_16): Fix typo counting odd bytes.
Andreas Schwab <schwab@linux-m68k.org>
parents: 103306
diff changeset
1697 o[c2] = 1;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1698 o_num++;
103442
db4ec1a977bd (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103441
diff changeset
1699 if (o_num >= 128)
db4ec1a977bd (detect_coding_utf_16): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 103441
diff changeset
1700 detect_info->rejected |= CATEGORY_MASK_UTF_16_LE_NOSIG;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1701 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1702 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1703 return 0;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1704 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
1705
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
1706 no_more_source:
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
1707 return 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1708 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1709
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1710 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1711 decode_coding_utf_16 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1712 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1713 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1714 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1715 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1716 const unsigned char *src_base;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
1717 int *charbuf = coding->charbuf + coding->charbuf_used;
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
1718 /* We may produces at most 3 chars in one loop. */
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
1719 int *charbuf_end = coding->charbuf + coding->charbuf_size - 2;
100131
0e4115b39b5d (decode_coding_utf_16): Initialize consumed_chars_base
Kenichi Handa <handa@m17n.org>
parents: 99753
diff changeset
1720 int consumed_chars = 0, consumed_chars_base = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1721 int multibytep = coding->src_multibyte;
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1722 enum utf_bom_type bom = CODING_UTF_16_BOM (coding);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1723 enum utf_16_endian_type endian = CODING_UTF_16_ENDIAN (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1724 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
1725 Lisp_Object attr, charset_list;
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
1726 int eol_crlf =
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
1727 !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1728 int byte_after_cr1 = -1, byte_after_cr2 = -1;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1729
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1730 CODING_GET_INFO (coding, attr, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1731
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1732 if (bom == utf_with_bom)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1733 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1734 int c, c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1735
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1736 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1737 ONE_MORE_BYTE (c1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1738 ONE_MORE_BYTE (c2);
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
1739 c = (c1 << 8) | c2;
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1740
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1741 if (endian == utf_16_big_endian
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1742 ? c != 0xFEFF : c != 0xFFFE)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1743 {
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1744 /* 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
1745 for a normal character. */
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1746 src = src_base;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1747 coding->errors++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1748 }
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1749 CODING_UTF_16_BOM (coding) = utf_without_bom;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1750 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1751 else if (bom == utf_detect_bom)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1752 {
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
1753 /* 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
1754 detect_coding. */
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1755 CODING_UTF_16_BOM (coding) = utf_without_bom;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1756 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1757
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1758 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1759 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1760 int c, c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1761
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1762 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1763 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1764
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
1765 if (charbuf >= charbuf_end)
100936
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1766 {
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1767 if (byte_after_cr1 >= 0)
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1768 src_base -= 2;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1769 break;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
1770 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1771
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1772 if (byte_after_cr1 >= 0)
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1773 c1 = byte_after_cr1, byte_after_cr1 = -1;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1774 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1775 ONE_MORE_BYTE (c1);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1776 if (c1 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1777 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1778 *charbuf++ = -c1;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1779 continue;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1780 }
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1781 if (byte_after_cr2 >= 0)
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1782 c2 = byte_after_cr2, byte_after_cr2 = -1;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1783 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1784 ONE_MORE_BYTE (c2);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1785 if (c2 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1786 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1787 *charbuf++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1788 *charbuf++ = -c2;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1789 continue;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1790 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1791 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
1792 ? ((c1 << 8) | c2) : ((c2 << 8) | c1));
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1793
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1794 if (surrogate)
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 (! UTF_16_LOW_SURROGATE_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1797 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1798 if (endian == utf_16_big_endian)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1799 c1 = surrogate >> 8, c2 = surrogate & 0xFF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1800 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1801 c1 = surrogate & 0xFF, c2 = surrogate >> 8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1802 *charbuf++ = c1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1803 *charbuf++ = c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1804 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1805 if (UTF_16_HIGH_SURROGATE_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1806 CODING_UTF_16_SURROGATE (coding) = surrogate = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1807 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1808 *charbuf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1809 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1810 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1811 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1812 c = ((surrogate - 0xD800) << 10) | (c - 0xDC00);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1813 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
1814 *charbuf++ = 0x10000 + c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1815 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1816 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1817 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1818 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1819 if (UTF_16_HIGH_SURROGATE_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1820 CODING_UTF_16_SURROGATE (coding) = surrogate = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1821 else
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1822 {
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1823 if (eol_crlf && c == '\r')
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1824 {
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1825 ONE_MORE_BYTE (byte_after_cr1);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1826 ONE_MORE_BYTE (byte_after_cr2);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1827 }
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1828 *charbuf++ = c;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
1829 }
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
1830 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1831 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1832
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1833 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1834 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1835 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1836 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1837 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1838
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1839 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1840 encode_coding_utf_16 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1841 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1842 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1843 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1844 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1845 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1846 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1847 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1848 int safe_room = 8;
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1849 enum utf_bom_type bom = CODING_UTF_16_BOM (coding);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1850 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
1851 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1852 Lisp_Object attrs, charset_list;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1853 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1854
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
1855 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1856
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1857 if (bom != utf_without_bom)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1858 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1859 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1860 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
1861 EMIT_TWO_BYTES (0xFE, 0xFF);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1862 else
89404
3e1d187b52c3 (Qutf_16_be_nosig, Qutf_16_be, Qutf_16_le_nosig)
Kenichi Handa <handa@m17n.org>
parents: 89394
diff changeset
1863 EMIT_TWO_BYTES (0xFF, 0xFE);
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
1864 CODING_UTF_16_BOM (coding) = utf_without_bom;
88365
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1867 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1868 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1869 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1870 c = *charbuf++;
104636
bc74846b9a54 (encode_coding_utf_16): Fix checking of an Unicode character.
Kenichi Handa <handa@m17n.org>
parents: 103762
diff changeset
1871 if (c > MAX_UNICODE_CHAR)
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
1872 c = coding->default_char;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1873
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1874 if (c < 0x10000)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1875 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1876 if (big_endian)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1877 EMIT_TWO_BYTES (c >> 8, c & 0xFF);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1878 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1879 EMIT_TWO_BYTES (c & 0xFF, c >> 8);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1880 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1881 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1882 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1883 int c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1884
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1885 c -= 0x10000;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1886 c1 = (c >> 10) + 0xD800;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1887 c2 = (c & 0x3FF) + 0xDC00;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1888 if (big_endian)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1889 EMIT_FOUR_BYTES (c1 >> 8, c1 & 0xFF, c2 >> 8, c2 & 0xFF);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1890 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1891 EMIT_FOUR_BYTES (c1 & 0xFF, c1 >> 8, c2 & 0xFF, c2 >> 8);
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 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
1894 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1895 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1896 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1897 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1898 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1899
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1900
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1901 /*** 6. Old Emacs' internal format (emacs-mule) ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1902
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1903 /* Emacs' internal format for representation of multiple character
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1904 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
1905 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
1906
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1907 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
1908 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
1909 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
1910
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1911 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
1912 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
1913 code + 0x20).
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1914
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1915 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
1916 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
1917
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1918 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
1919 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
1920 `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
1921 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
1922 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
1923 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
1924 and position-code.
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
1925
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1926 --- 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
1927 character set range
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1928 ------------- -----
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1929 ascii 0x00..0x7F
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1930 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
1931 eight-bit-graphic 0xA0..0xBF
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1932 ELSE 0x81..0x9D + [0xA0..0xFF]+
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1933 ---------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1934
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1935 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
1936 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
1937 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
1938 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
1939
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1940 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
1941 form.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1942
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1943 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
1944 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
1945
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1946 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
1947 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
1948 where,
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1949 METHOD is 0xF2 plus one of composition method (enum
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1950 composition_method),
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1951
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1952 BYTES is 0xA0 plus a byte length of this composition data,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1953
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1954 CHARS is 0xA0 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
1955 data,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1956
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
1957 COMPONENTs are characters of multibyte form or composition
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1958 rules encoded by two-byte of ASCII codes.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1959
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1960 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
1961 also recognized as composition data on decoding.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1962
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1963 0x80 MSEQ ...
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1964 0x80 0xFF MSEQ RULE MSEQ RULE ... MSEQ
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1965
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1966 Here,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1967 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
1968 ASCII: 0xA0 ASCII_CODE+0x80,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1969 other: LEADING_CODE+0x20 FOLLOWING-BYTE ...,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1970 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
1971 represents a composition rule.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1972 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1973
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1974 char emacs_mule_bytes[256];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
1975
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1976
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1977 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1978 Check if a text is encoded in `emacs-mule'. If it is, return 1,
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1979 else return 0. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1980
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1981 static int
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1982 detect_coding_emacs_mule (coding, detect_info)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1983 struct coding_system *coding;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1984 struct coding_detection_info *detect_info;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1985 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1986 const unsigned char *src = coding->source, *src_base;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1987 const unsigned char *src_end = coding->source + coding->src_bytes;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1988 int multibytep = coding->src_multibyte;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1989 int consumed_chars = 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1990 int c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1991 int found = 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1992
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1993 detect_info->checked |= CATEGORY_MASK_EMACS_MULE;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1994 /* A coding system of this category is always ASCII compatible. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1995 src += coding->head_ascii;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1996
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1997 while (1)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1998 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
1999 src_base = src;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2000 ONE_MORE_BYTE (c);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2001 if (c < 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2002 continue;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2003 if (c == 0x80)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2004 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2005 /* Perhaps the start of composite character. We simply skip
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2006 it because analyzing it is too heavy for detecting. But,
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2007 at least, we check that the composite character
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2008 constitutes of more than 4 bytes. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2009 const unsigned char *src_base;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2010
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2011 repeat:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2012 src_base = src;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2013 do
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2014 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2015 ONE_MORE_BYTE (c);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2016 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2017 while (c >= 0xA0);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2018
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2019 if (src - src_base <= 4)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2020 break;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2021 found = CATEGORY_MASK_EMACS_MULE;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2022 if (c == 0x80)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2023 goto repeat;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2024 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2025
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2026 if (c < 0x80)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2027 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2028 if (c < 0x20
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2029 && (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2030 break;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2031 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2032 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2033 {
110334
4ad4f097835e coding.c (detect_coding_emacs_mule): Fix checking of multibyte sequence when the source is multibyte.
Kenichi Handa <handa@m17n.org>
parents: 109710
diff changeset
2034 int more_bytes = emacs_mule_bytes[c] - 1;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2035
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2036 while (more_bytes > 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2037 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2038 ONE_MORE_BYTE (c);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2039 if (c < 0xA0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2040 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2041 src--; /* Unread the last byte. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2042 break;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2043 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2044 more_bytes--;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2045 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2046 if (more_bytes != 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2047 break;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2048 found = CATEGORY_MASK_EMACS_MULE;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2049 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2050 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2051 detect_info->rejected |= CATEGORY_MASK_EMACS_MULE;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2052 return 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2053
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2054 no_more_source:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2055 if (src_base < src && coding->mode & CODING_MODE_LAST_BLOCK)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2056 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2057 detect_info->rejected |= CATEGORY_MASK_EMACS_MULE;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2058 return 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2059 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2060 detect_info->found |= found;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2061 return 1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2062 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2063
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2064
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2065 /* Parse emacs-mule multibyte sequence at SRC and return the decoded
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2066 character. If CMP_STATUS indicates that we must expect MSEQ or
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2067 RULE described above, decode it and return the negative value of
107323
ebc10ed88b5c (emacs_mule_char): Fix a typo in commentary.
Eli Zaretskii <eliz@gnu.org>
parents: 107321
diff changeset
2068 the decoded character or rule. If an invalid byte is found, return
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2069 -1. If SRC is too short, return -2. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2070
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2071 int
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2072 emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2073 struct coding_system *coding;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2074 const unsigned char *src;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2075 int *nbytes, *nchars, *id;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2076 struct composition_status *cmp_status;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2077 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2078 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2079 const unsigned char *src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2080 int multibytep = coding->src_multibyte;
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2081 int charset_id;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2082 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2083 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2084 int consumed_chars = 0;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2085 int mseq_found = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2086
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2087 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2088 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2089 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2090 c = -c;
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2091 charset_id = emacs_mule_charset[0];
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2092 }
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2093 else
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2094 {
90354
450fb16a4bf4 (DECODE_COMPOSITION_START): If the source is short, set
Kenichi Handa <handa@m17n.org>
parents: 90350
diff changeset
2095 if (c >= 0xA0)
450fb16a4bf4 (DECODE_COMPOSITION_START): If the source is short, set
Kenichi Handa <handa@m17n.org>
parents: 90350
diff changeset
2096 {
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2097 if (cmp_status->state != COMPOSING_NO
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2098 && cmp_status->old_form)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2099 {
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2100 if (cmp_status->state == COMPOSING_CHAR)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2101 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2102 if (c == 0xA0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2103 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2104 ONE_MORE_BYTE (c);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2105 c -= 0x80;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2106 if (c < 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2107 goto invalid_code;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2108 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2109 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2110 c -= 0x20;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2111 mseq_found = 1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2112 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2113 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2114 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2115 *nbytes = src - src_base;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2116 *nchars = consumed_chars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2117 return -c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2118 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2119 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2120 else
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2121 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2122 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2123
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2124 switch (emacs_mule_bytes[c])
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2125 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2126 case 2:
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2127 if ((charset_id = emacs_mule_charset[c]) < 0)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2128 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2129 ONE_MORE_BYTE (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2130 if (c < 0xA0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2131 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2132 code = c & 0x7F;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2133 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2134
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2135 case 3:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2136 if (c == EMACS_MULE_LEADING_CODE_PRIVATE_11
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2137 || c == EMACS_MULE_LEADING_CODE_PRIVATE_12)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2138 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2139 ONE_MORE_BYTE (c);
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2140 if (c < 0xA0 || (charset_id = emacs_mule_charset[c]) < 0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2141 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2142 ONE_MORE_BYTE (c);
89892
a2109a2c25d5 Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 89873
diff changeset
2143 if (c < 0xA0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2144 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2145 code = c & 0x7F;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2146 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2147 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2148 {
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2149 if ((charset_id = emacs_mule_charset[c]) < 0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2150 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2151 ONE_MORE_BYTE (c);
89892
a2109a2c25d5 Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 89873
diff changeset
2152 if (c < 0xA0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2153 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2154 code = (c & 0x7F) << 8;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2155 ONE_MORE_BYTE (c);
89892
a2109a2c25d5 Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 89873
diff changeset
2156 if (c < 0xA0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2157 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2158 code |= c & 0x7F;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2159 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2160 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2161
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2162 case 4:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2163 ONE_MORE_BYTE (c);
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2164 if (c < 0 || (charset_id = emacs_mule_charset[c]) < 0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2165 goto invalid_code;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2166 ONE_MORE_BYTE (c);
89892
a2109a2c25d5 Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 89873
diff changeset
2167 if (c < 0xA0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2168 goto invalid_code;
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2169 code = (c & 0x7F) << 8;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2170 ONE_MORE_BYTE (c);
89892
a2109a2c25d5 Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 89873
diff changeset
2171 if (c < 0xA0)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2172 goto invalid_code;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2173 code |= c & 0x7F;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2174 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2175
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2176 case 1:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2177 code = c;
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2178 charset_id = ASCII_BYTE_P (code) ? charset_ascii : charset_eight_bit;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2179 break;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2180
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2181 default:
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2182 abort ();
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2183 }
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2184 CODING_DECODE_CHAR (coding, src, src_base, src_end,
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2185 CHARSET_FROM_ID (charset_id), code, c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2186 if (c < 0)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2187 goto invalid_code;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2188 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2189 *nbytes = src - src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2190 *nchars = consumed_chars;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2191 if (id)
111743
913b779aa4ee Fix decoding of emacs-mule coding system.
Kenichi Handa <handa@m17n.org>
parents: 110983
diff changeset
2192 *id = charset_id;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2193 return (mseq_found ? -c : c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2194
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2195 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2196 return -2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2197
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2198 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2199 return -1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2200 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2201
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2202
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2203 /* 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
2204
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2205 /* Handle these composition sequence ('|': the end of header elements,
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2206 BYTES and CHARS >= 0xA0):
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2207
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2208 (1) relative composition: 0x80 0xF2 BYTES CHARS | CHAR ...
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2209 (2) altchar composition: 0x80 0xF4 BYTES CHARS | ALT ... ALT CHAR ...
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2210 (3) alt&rule composition: 0x80 0xF5 BYTES CHARS | ALT RULE ... ALT CHAR ...
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2211
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2212 and these old form:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2213
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2214 (4) relative composition: 0x80 | MSEQ ... MSEQ
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2215 (5) rulebase composition: 0x80 0xFF | MSEQ MRULE ... MSEQ
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2216
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2217 When the starter 0x80 and the following header elements are found,
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2218 this annotation header is produced.
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2219
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2220 [ -LENGTH(==-5) CODING_ANNOTATE_COMPOSITION_MASK NCHARS NBYTES METHOD ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2221
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2222 NCHARS is CHARS - 0xA0 for (1), (2), (3), and 0 for (4), (5).
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2223 NBYTES is BYTES - 0xA0 for (1), (2), (3), and 0 for (4), (5).
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2224
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2225 Then, upon reading the following elements, these codes are produced
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2226 until the composition end is found:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2227
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2228 (1) CHAR ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2229 (2) ALT ... ALT CHAR ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2230 (3) ALT -2 DECODED-RULE ALT -2 DECODED-RULE ... ALT CHAR ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2231 (4) CHAR ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2232 (5) CHAR -2 DECODED-RULE CHAR -2 DECODED-RULE ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2233
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2234 When the composition end is found, LENGTH and NCHARS in the
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2235 annotation header is updated as below:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2236
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2237 (1) LENGTH: unchanged, NCHARS: unchanged
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2238 (2) LENGTH: length of the whole sequence minus NCHARS, NCHARS: unchanged
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2239 (3) LENGTH: length of the whole sequence minus NCHARS, NCHARS: unchanged
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2240 (4) LENGTH: unchanged, NCHARS: number of CHARs
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2241 (5) LENGTH: unchanged, NCHARS: number of CHARs
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2242
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2243 If an error is found while composing, the annotation header is
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2244 changed to the original composition header (plus filler -1s) as
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2245 below:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2246
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2247 (1),(2),(3) [ 0x80 0xF2+METHOD BYTES CHARS -1 ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2248 (5) [ 0x80 0xFF -1 -1- -1 ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2249
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2250 and the sequence [ -2 DECODED-RULE ] is changed to the original
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2251 byte sequence as below:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2252 o the original byte sequence is B: [ B -1 ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2253 o the original byte sequence is B1 B2: [ B1 B2 ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2254
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2255 Most of the routines are implemented by macros because many
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2256 variables and labels in the caller decode_coding_emacs_mule must be
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2257 accessible, and they are usually called just once (thus doesn't
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2258 increase the size of compiled object). */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2259
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2260 /* Decode a composition rule represented by C as a component of
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2261 composition sequence of Emacs 20 style. Set RULE to the decoded
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2262 rule. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2263
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2264 #define DECODE_EMACS_MULE_COMPOSITION_RULE_20(c, rule) \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2265 do { \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2266 int gref, nref; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2267 \
90354
450fb16a4bf4 (DECODE_COMPOSITION_START): If the source is short, set
Kenichi Handa <handa@m17n.org>
parents: 90350
diff changeset
2268 c -= 0xA0; \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2269 if (c < 0 || c >= 81) \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2270 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2271 gref = c / 9, nref = c % 9; \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2272 if (gref == 4) gref = 10; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2273 if (nref == 4) nref = 10; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2274 rule = COMPOSITION_ENCODE_RULE (gref, nref); \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2275 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2276
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2277
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2278 /* Decode a composition rule represented by C and the following byte
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2279 at SRC as a component of composition sequence of Emacs 21 style.
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2280 Set RULE to the decoded rule. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2281
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2282 #define DECODE_EMACS_MULE_COMPOSITION_RULE_21(c, rule) \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2283 do { \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2284 int gref, nref; \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2285 \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2286 gref = c - 0x20; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2287 if (gref < 0 || gref >= 81) \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2288 goto invalid_code; \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2289 ONE_MORE_BYTE (c); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2290 nref = c - 0x20; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2291 if (nref < 0 || nref >= 81) \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2292 goto invalid_code; \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2293 rule = COMPOSITION_ENCODE_RULE (gref, nref); \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2294 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2295
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2296
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2297 /* Start of Emacs 21 style format. The first three bytes at SRC are
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2298 (METHOD - 0xF2), (BYTES - 0xA0), (CHARS - 0xA0), where BYTES is the
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2299 byte length of this composition information, CHARS is the number of
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2300 characters composed by this composition. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2301
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2302 #define DECODE_EMACS_MULE_21_COMPOSITION() \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2303 do { \
88585
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2304 enum composition_method method = c - 0xF2; \
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
2305 int *charbuf_base = charbuf; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2306 int nbytes, nchars; \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2307 \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2308 ONE_MORE_BYTE (c); \
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2309 if (c < 0) \
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2310 goto invalid_code; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2311 nbytes = c - 0xA0; \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2312 if (nbytes < 3 || (method == COMPOSITION_RELATIVE && nbytes != 4)) \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2313 goto invalid_code; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2314 ONE_MORE_BYTE (c); \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2315 nchars = c - 0xA0; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2316 if (nchars <= 0 || nchars >= MAX_COMPOSITION_COMPONENTS) \
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2317 goto invalid_code; \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2318 cmp_status->old_form = 0; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2319 cmp_status->method = method; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2320 if (method == COMPOSITION_RELATIVE) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2321 cmp_status->state = COMPOSING_CHAR; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2322 else \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2323 cmp_status->state = COMPOSING_COMPONENT_CHAR; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2324 cmp_status->length = MAX_ANNOTATION_LENGTH; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2325 cmp_status->nchars = nchars; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2326 cmp_status->ncomps = nbytes - 4; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2327 ADD_COMPOSITION_DATA (charbuf, nchars, nbytes, method); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2328 } while (0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2329
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2330
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2331 /* Start of Emacs 20 style format for relative composition. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2332
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2333 #define DECODE_EMACS_MULE_20_RELATIVE_COMPOSITION() \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2334 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2335 cmp_status->old_form = 1; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2336 cmp_status->method = COMPOSITION_RELATIVE; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2337 cmp_status->state = COMPOSING_CHAR; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2338 cmp_status->length = MAX_ANNOTATION_LENGTH; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2339 cmp_status->nchars = cmp_status->ncomps = 0; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2340 ADD_COMPOSITION_DATA (charbuf, 0, 0, cmp_status->method); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2341 } while (0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2342
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2343
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2344 /* Start of Emacs 20 style format for rule-base composition. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2345
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2346 #define DECODE_EMACS_MULE_20_RULEBASE_COMPOSITION() \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2347 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2348 cmp_status->old_form = 1; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2349 cmp_status->method = COMPOSITION_WITH_RULE; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2350 cmp_status->state = COMPOSING_CHAR; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2351 cmp_status->length = MAX_ANNOTATION_LENGTH; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2352 cmp_status->nchars = cmp_status->ncomps = 0; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2353 ADD_COMPOSITION_DATA (charbuf, 0, 0, cmp_status->method); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2354 } while (0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2355
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2356
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2357 #define DECODE_EMACS_MULE_COMPOSITION_START() \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2358 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2359 const unsigned char *current_src = src; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2360 \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2361 ONE_MORE_BYTE (c); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2362 if (c < 0) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2363 goto invalid_code; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2364 if (c - 0xF2 >= COMPOSITION_RELATIVE \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2365 && c - 0xF2 <= COMPOSITION_WITH_RULE_ALTCHARS) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2366 DECODE_EMACS_MULE_21_COMPOSITION (); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2367 else if (c < 0xA0) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2368 goto invalid_code; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2369 else if (c < 0xC0) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2370 { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2371 DECODE_EMACS_MULE_20_RELATIVE_COMPOSITION (); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2372 /* Re-read C as a composition component. */ \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2373 src = current_src; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2374 } \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2375 else if (c == 0xFF) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2376 DECODE_EMACS_MULE_20_RULEBASE_COMPOSITION (); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2377 else \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2378 goto invalid_code; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2379 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2380
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2381 #define EMACS_MULE_COMPOSITION_END() \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2382 do { \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2383 int idx = - cmp_status->length; \
90354
450fb16a4bf4 (DECODE_COMPOSITION_START): If the source is short, set
Kenichi Handa <handa@m17n.org>
parents: 90350
diff changeset
2384 \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2385 if (cmp_status->old_form) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2386 charbuf[idx + 2] = cmp_status->nchars; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2387 else if (cmp_status->method > COMPOSITION_RELATIVE) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2388 charbuf[idx] = charbuf[idx + 2] - cmp_status->length; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2389 cmp_status->state = COMPOSING_NO; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2390 } while (0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2391
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2392
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2393 static int
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2394 emacs_mule_finish_composition (charbuf, cmp_status)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2395 int *charbuf;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2396 struct composition_status *cmp_status;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2397 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2398 int idx = - cmp_status->length;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2399 int new_chars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2400
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2401 if (cmp_status->old_form && cmp_status->nchars > 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2402 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2403 charbuf[idx + 2] = cmp_status->nchars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2404 new_chars = 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2405 if (cmp_status->method == COMPOSITION_WITH_RULE
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2406 && cmp_status->state == COMPOSING_CHAR)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2407 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2408 /* The last rule was invalid. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2409 int rule = charbuf[-1] + 0xA0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2410
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2411 charbuf[-2] = BYTE8_TO_CHAR (rule);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2412 charbuf[-1] = -1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2413 new_chars = 1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2414 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2415 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2416 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2417 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2418 charbuf[idx++] = BYTE8_TO_CHAR (0x80);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2419
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2420 if (cmp_status->method == COMPOSITION_WITH_RULE)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2421 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2422 charbuf[idx++] = BYTE8_TO_CHAR (0xFF);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2423 charbuf[idx++] = -3;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2424 charbuf[idx++] = 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2425 new_chars = 1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2426 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2427 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2428 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2429 int nchars = charbuf[idx + 1] + 0xA0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2430 int nbytes = charbuf[idx + 2] + 0xA0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2431
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2432 charbuf[idx++] = BYTE8_TO_CHAR (0xF2 + cmp_status->method);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2433 charbuf[idx++] = BYTE8_TO_CHAR (nbytes);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2434 charbuf[idx++] = BYTE8_TO_CHAR (nchars);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2435 charbuf[idx++] = -1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2436 new_chars = 4;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2437 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2438 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2439 cmp_status->state = COMPOSING_NO;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2440 return new_chars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2441 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2442
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2443 #define EMACS_MULE_MAYBE_FINISH_COMPOSITION() \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2444 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2445 if (cmp_status->state != COMPOSING_NO) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2446 char_offset += emacs_mule_finish_composition (charbuf, cmp_status); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2447 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2448
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2449
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2450 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2451 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
2452 struct coding_system *coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2453 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2454 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
2455 const unsigned char *src_end = coding->source + coding->src_bytes;
59168
0345f2b10f1d (decode_coding_XXX, decode_composition_emacs_mule)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59095
diff changeset
2456 const unsigned char *src_base;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
2457 int *charbuf = coding->charbuf + coding->charbuf_used;
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
2458 /* We may produce two annotations (charset and composition) in one
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
2459 loop and one more charset annotation at the end. */
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
2460 int *charbuf_end
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
2461 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2462 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2463 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
2464 Lisp_Object attrs, charset_list;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2465 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2466 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2467 int last_id = charset_ascii;
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
2468 int eol_crlf =
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
2469 !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
2470 int byte_after_cr = -1;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2471 struct composition_status *cmp_status = &coding->spec.emacs_mule.cmp_status;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2472
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2473 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2474
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2475 if (cmp_status->state != COMPOSING_NO)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2476 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2477 int i;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2478
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2479 for (i = 0; i < cmp_status->length; i++)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2480 *charbuf++ = cmp_status->carryover[i];
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2481 coding->annotated = 1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2482 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2483
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2484 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2485 {
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2486 int c, id;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2487
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2488 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2489 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2490
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2491 if (charbuf >= charbuf_end)
100936
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
2492 {
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
2493 if (byte_after_cr >= 0)
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
2494 src_base--;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
2495 break;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
2496 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2497
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
2498 if (byte_after_cr >= 0)
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
2499 c = byte_after_cr, byte_after_cr = -1;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
2500 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
2501 ONE_MORE_BYTE (c);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2502
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2503 if (c < 0 || c == 0x80)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2504 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2505 EMACS_MULE_MAYBE_FINISH_COMPOSITION ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2506 if (c < 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2507 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2508 *charbuf++ = -c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2509 char_offset++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2510 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2511 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2512 DECODE_EMACS_MULE_COMPOSITION_START ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2513 continue;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2514 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2515
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2516 if (c < 0x80)
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2517 {
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
2518 if (eol_crlf && c == '\r')
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
2519 ONE_MORE_BYTE (byte_after_cr);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2520 id = charset_ascii;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2521 if (cmp_status->state != COMPOSING_NO)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2522 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2523 if (cmp_status->old_form)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2524 EMACS_MULE_MAYBE_FINISH_COMPOSITION ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2525 else if (cmp_status->state >= COMPOSING_COMPONENT_CHAR)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2526 cmp_status->ncomps--;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2527 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2528 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2529 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2530 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2531 int nchars, nbytes;
107321
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2532 /* emacs_mule_char can load a charset map from a file, which
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2533 allocates a large structure and might cause buffer text
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2534 to be relocated as result. Thus, we need to remember the
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
2535 original pointer to buffer text, and fix up all related
107321
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2536 pointers after the call. */
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2537 const unsigned char *orig = coding->source;
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2538 EMACS_INT offset;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2539
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2540 c = emacs_mule_char (coding, src_base, &nbytes, &nchars, &id,
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2541 cmp_status);
107321
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2542 offset = coding->source - orig;
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2543 if (offset)
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2544 {
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2545 src += offset;
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2546 src_base += offset;
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2547 src_end += offset;
9b814b3ee348 Fix bug in decoding emacs-mule encoding.
Eli Zaretskii <eliz@gnu.org>
parents: 107174
diff changeset
2548 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2549 if (c < 0)
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2550 {
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2551 if (c == -1)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2552 goto invalid_code;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2553 if (c == -2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2554 break;
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2555 }
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2556 src = src_base + nbytes;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2557 consumed_chars = consumed_chars_base + nchars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2558 if (cmp_status->state >= COMPOSING_COMPONENT_CHAR)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2559 cmp_status->ncomps -= nchars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2560 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2561
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
2562 /* Now if C >= 0, we found a normally encoded character, if C <
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2563 0, we found an old-style composition component character or
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2564 rule. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2565
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2566 if (cmp_status->state == COMPOSING_NO)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2567 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2568 if (last_id != id)
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2569 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2570 if (last_id != charset_ascii)
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2571 ADD_CHARSET_DATA (charbuf, char_offset - last_offset,
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2572 last_id);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2573 last_id = id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2574 last_offset = char_offset;
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2575 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2576 *charbuf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2577 char_offset++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2578 }
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2579 else if (cmp_status->state == COMPOSING_CHAR)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2580 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2581 if (cmp_status->old_form)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2582 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2583 if (c >= 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2584 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2585 EMACS_MULE_MAYBE_FINISH_COMPOSITION ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2586 *charbuf++ = c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2587 char_offset++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2588 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2589 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2590 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2591 *charbuf++ = -c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2592 cmp_status->nchars++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2593 cmp_status->length++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2594 if (cmp_status->nchars == MAX_COMPOSITION_COMPONENTS)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2595 EMACS_MULE_COMPOSITION_END ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2596 else if (cmp_status->method == COMPOSITION_WITH_RULE)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2597 cmp_status->state = COMPOSING_RULE;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2598 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2599 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2600 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2601 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2602 *charbuf++ = c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2603 cmp_status->length++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2604 cmp_status->nchars--;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2605 if (cmp_status->nchars == 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2606 EMACS_MULE_COMPOSITION_END ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2607 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2608 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2609 else if (cmp_status->state == COMPOSING_RULE)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2610 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2611 int rule;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2612
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2613 if (c >= 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2614 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2615 EMACS_MULE_COMPOSITION_END ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2616 *charbuf++ = c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2617 char_offset++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2618 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2619 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2620 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2621 c = -c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2622 DECODE_EMACS_MULE_COMPOSITION_RULE_20 (c, rule);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2623 if (rule < 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2624 goto invalid_code;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2625 *charbuf++ = -2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2626 *charbuf++ = rule;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2627 cmp_status->length += 2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2628 cmp_status->state = COMPOSING_CHAR;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2629 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2630 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2631 else if (cmp_status->state == COMPOSING_COMPONENT_CHAR)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2632 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2633 *charbuf++ = c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2634 cmp_status->length++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2635 if (cmp_status->ncomps == 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2636 cmp_status->state = COMPOSING_CHAR;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2637 else if (cmp_status->ncomps > 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2638 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2639 if (cmp_status->method == COMPOSITION_WITH_RULE_ALTCHARS)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2640 cmp_status->state = COMPOSING_COMPONENT_RULE;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2641 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2642 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2643 EMACS_MULE_MAYBE_FINISH_COMPOSITION ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2644 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2645 else /* COMPOSING_COMPONENT_RULE */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2646 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2647 int rule;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2648
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2649 DECODE_EMACS_MULE_COMPOSITION_RULE_21 (c, rule);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2650 if (rule < 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2651 goto invalid_code;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2652 *charbuf++ = -2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2653 *charbuf++ = rule;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2654 cmp_status->length += 2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2655 cmp_status->ncomps--;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2656 if (cmp_status->ncomps > 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2657 cmp_status->state = COMPOSING_COMPONENT_CHAR;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2658 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2659 EMACS_MULE_MAYBE_FINISH_COMPOSITION ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2660 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2661 continue;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2662
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2663 retry:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2664 src = src_base;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2665 consumed_chars = consumed_chars_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2666 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2667
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2668 invalid_code:
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2669 EMACS_MULE_MAYBE_FINISH_COMPOSITION ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2670 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2671 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2672 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2673 *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
2674 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2675 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2676 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2677
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2678 no_more_source:
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2679 if (cmp_status->state != COMPOSING_NO)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2680 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2681 if (coding->mode & CODING_MODE_LAST_BLOCK)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2682 EMACS_MULE_MAYBE_FINISH_COMPOSITION ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2683 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2684 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2685 int i;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2686
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2687 charbuf -= cmp_status->length;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2688 for (i = 0; i < cmp_status->length; i++)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2689 cmp_status->carryover[i] = charbuf[i];
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2690 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
2691 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2692 if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
2693 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2694 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2695 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2696 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2697 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2698
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2699
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2700 #define EMACS_MULE_LEADING_CODES(id, codes) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2701 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2702 if (id < 0xA0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2703 codes[0] = id, codes[1] = 0; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2704 else if (id < 0xE0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2705 codes[0] = 0x9A, codes[1] = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2706 else if (id < 0xF0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2707 codes[0] = 0x9B, codes[1] = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2708 else if (id < 0xF5) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2709 codes[0] = 0x9C, codes[1] = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2710 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2711 codes[0] = 0x9D, codes[1] = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2712 } while (0);
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2715 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2716 encode_coding_emacs_mule (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2717 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2718 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2719 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2720 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2721 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2722 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2723 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2724 int safe_room = 8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2725 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2726 Lisp_Object attrs, charset_list;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2727 int c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2728 int preferred_charset_id = -1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2729
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
2730 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
2731 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
2732 {
fc9cda144ffc (encode_coding_emacs_mule): Resync charset_list to
Kenichi Handa <handa@m17n.org>
parents: 89642
diff changeset
2733 CODING_ATTR_CHARSET_LIST (attrs)
fc9cda144ffc (encode_coding_emacs_mule): Resync charset_list to
Kenichi Handa <handa@m17n.org>
parents: 89642
diff changeset
2734 = charset_list = Vemacs_mule_charset_list;
fc9cda144ffc (encode_coding_emacs_mule): Resync charset_list to
Kenichi Handa <handa@m17n.org>
parents: 89642
diff changeset
2735 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2736
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2737 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2738 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2739 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2740 c = *charbuf++;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2741
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2742 if (c < 0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2743 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2744 /* Handle an annotation. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2745 switch (*charbuf)
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2746 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2747 case CODING_ANNOTATE_COMPOSITION_MASK:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2748 /* Not yet implemented. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2749 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2750 case CODING_ANNOTATE_CHARSET_MASK:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2751 preferred_charset_id = charbuf[3];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2752 if (preferred_charset_id >= 0
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2753 && NILP (Fmemq (make_number (preferred_charset_id),
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2754 charset_list)))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2755 preferred_charset_id = -1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2756 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2757 default:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2758 abort ();
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2759 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2760 charbuf += -c - 1;
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2761 continue;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
2762 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2763
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2764 if (ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2765 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
2766 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
2767 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
2768 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
2769 EMIT_ONE_BYTE (c);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2770 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2771 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2772 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2773 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2774 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2775 int dimension;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2776 int emacs_mule_id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2777 unsigned char leading_codes[2];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2778
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2779 if (preferred_charset_id >= 0)
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2780 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2781 charset = CHARSET_FROM_ID (preferred_charset_id);
100176
5706ca7c3d02 (encode_coding_emacs_mule): Be sure to set `code'.
Kenichi Handa <handa@m17n.org>
parents: 100170
diff changeset
2782 if (CHAR_CHARSET_P (c, charset))
5706ca7c3d02 (encode_coding_emacs_mule): Be sure to set `code'.
Kenichi Handa <handa@m17n.org>
parents: 100170
diff changeset
2783 code = ENCODE_CHAR (charset, c);
5706ca7c3d02 (encode_coding_emacs_mule): Be sure to set `code'.
Kenichi Handa <handa@m17n.org>
parents: 100170
diff changeset
2784 else
5706ca7c3d02 (encode_coding_emacs_mule): Be sure to set `code'.
Kenichi Handa <handa@m17n.org>
parents: 100170
diff changeset
2785 charset = char_charset (c, charset_list, &code);
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2786 }
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2787 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
2788 charset = char_charset (c, charset_list, &code);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2789 if (! charset)
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2790 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2791 c = coding->default_char;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2792 if (ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2793 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2794 EMIT_ONE_ASCII_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2795 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2796 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2797 charset = char_charset (c, charset_list, &code);
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2798 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2799 dimension = CHARSET_DIMENSION (charset);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2800 emacs_mule_id = CHARSET_EMACS_MULE_ID (charset);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2801 EMACS_MULE_LEADING_CODES (emacs_mule_id, leading_codes);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2802 EMIT_ONE_BYTE (leading_codes[0]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2803 if (leading_codes[1])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2804 EMIT_ONE_BYTE (leading_codes[1]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2805 if (dimension == 1)
89642
e97441b6244b (encode_coding_emacs_mule): Emit bytes with MSB.
Kenichi Handa <handa@m17n.org>
parents: 89575
diff changeset
2806 EMIT_ONE_BYTE (code | 0x80);
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2807 else
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2808 {
89642
e97441b6244b (encode_coding_emacs_mule): Emit bytes with MSB.
Kenichi Handa <handa@m17n.org>
parents: 89575
diff changeset
2809 code |= 0x8080;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2810 EMIT_ONE_BYTE (code >> 8);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2811 EMIT_ONE_BYTE (code & 0xFF);
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
2812 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2813 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2814 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
2815 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2816 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2817 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2818 return 0;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
2819 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2820
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2821
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2822 /*** 7. ISO2022 handlers ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2823
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2824 /* 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
2825 Since the intention of this note is to help understand the
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2826 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
2827 SIMPLIFIED. For thorough understanding, please refer to the
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2828 original document of ISO2022. This is equivalent to the standard
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2829 ECMA-35, obtainable from <URL:http://www.ecma.ch/> (*).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2830
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2831 ISO2022 provides many mechanisms to encode several character sets
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2832 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
2833 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
2834 text a little bit longer, but the text passes more easily through
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2835 several types of gateway, some of which strip off the MSB (Most
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2836 Significant Bit).
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2837
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2838 There are two kinds of character sets: control character sets and
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2839 graphic character sets. The former contain control characters such
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2840 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
2841 functions are also provided by escape sequences). The latter
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2842 contain graphic characters such as 'A' and '-'. Emacs recognizes
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2843 two control character sets and many graphic character sets.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2844
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2845 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
2846 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
2847 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
2848 - DIMENSION1_CHARS94
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2849 - DIMENSION1_CHARS96
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2850 - DIMENSION2_CHARS94
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2851 - DIMENSION2_CHARS96
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2852
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2853 In addition, each character set is assigned an identification tag,
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2854 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
2855 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
2856 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
2857 (0x30..0x3F are for private use only).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2858
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2859 Note (*): ECMA = European Computer Manufacturers Association
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2860
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2861 Here are examples of graphic character sets [NAME(<F>)]:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2862 o DIMENSION1_CHARS94 -- ASCII('B'), right-half-of-JISX0201('I'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2863 o DIMENSION1_CHARS96 -- right-half-of-ISO8859-1('A'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2864 o DIMENSION2_CHARS94 -- GB2312('A'), JISX0208('B'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2865 o DIMENSION2_CHARS96 -- none for the moment
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2866
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2867 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
2868 C0 [0x00..0x1F] -- control character plane 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2869 GL [0x20..0x7F] -- graphic character plane 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2870 C1 [0x80..0x9F] -- control character plane 1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2871 GR [0xA0..0xFF] -- graphic character plane 1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2872
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2873 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
2874 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
2875 - 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
2876 - 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
2877 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
2878 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
2879 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
2880 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
2881 defined to have corresponding escape sequences.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2882
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2883 A graphic character set is at first designated to one of four
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2884 graphic registers (G0 through G3), then these graphic registers are
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2885 invoked to GL or GR. These designations and invocations can be
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2886 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
2887 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
2888 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
2889 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
2890
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2891 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
2892 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
2893 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
2894 be used.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2895
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2896 There are two ways of invocation: locking-shift and single-shift.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2897 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
2898 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
2899 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
2900 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
2901 escape sequences:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2902
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2903 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2904 abbrev function cntrl escape seq description
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2905 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2906 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
2907 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
2908 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
2909 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
2910 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
2911 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
2912 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
2913 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
2914 SS3 (single-shift-3) 0x8F ESC 'O' invoke G3 for one char
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2915 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2916 (*) 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
2917
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2918 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
2919 ISO_CODE_XXX in `coding.h'.
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2920
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2921 Designations are done by the following escape sequences:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2922 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2923 escape sequence description
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2924 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2925 ESC '(' <F> designate DIMENSION1_CHARS94<F> to G0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2926 ESC ')' <F> designate DIMENSION1_CHARS94<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2927 ESC '*' <F> designate DIMENSION1_CHARS94<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2928 ESC '+' <F> designate DIMENSION1_CHARS94<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2929 ESC ',' <F> designate DIMENSION1_CHARS96<F> to G0 (*)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2930 ESC '-' <F> designate DIMENSION1_CHARS96<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2931 ESC '.' <F> designate DIMENSION1_CHARS96<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2932 ESC '/' <F> designate DIMENSION1_CHARS96<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2933 ESC '$' '(' <F> designate DIMENSION2_CHARS94<F> to G0 (**)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2934 ESC '$' ')' <F> designate DIMENSION2_CHARS94<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2935 ESC '$' '*' <F> designate DIMENSION2_CHARS94<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2936 ESC '$' '+' <F> designate DIMENSION2_CHARS94<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2937 ESC '$' ',' <F> designate DIMENSION2_CHARS96<F> to G0 (*)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2938 ESC '$' '-' <F> designate DIMENSION2_CHARS96<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2939 ESC '$' '.' <F> designate DIMENSION2_CHARS96<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2940 ESC '$' '/' <F> designate DIMENSION2_CHARS96<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2941 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2942
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2943 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
2944 of dimension 1, chars 94, and final character <F>, etc...
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2945
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2946 Note (*): Although these designations are not allowed in ISO2022,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2947 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
2948 CHARS96 character sets in a coding system which is characterized as
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2949 7-bit environment, non-locking-shift, and non-single-shift.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2950
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2951 Note (**): If <F> is '@', 'A', or 'B', the intermediate character
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
2952 '(' must be omitted. We refer to this as "short-form" hereafter.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2953
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2954 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
2955 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
2956 coding systems such as Compound Text (used in X11's inter client
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2957 communication, ISO-2022-JP (used in Japanese Internet), ISO-2022-KR
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2958 (used in Korean Internet), EUC (Extended UNIX Code, used in Asian
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2959 localized platforms), and all of these are variants of ISO2022.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2960
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2961 In addition to the above, Emacs handles two more kinds of escape
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2962 sequences: ISO6429's direction specification and Emacs' private
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2963 sequence for specifying character composition.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2964
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2965 ISO6429's direction specification takes the following form:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2966 o CSI ']' -- end of the current direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2967 o CSI '0' ']' -- end of the current direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2968 o CSI '1' ']' -- start of left-to-right text
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2969 o CSI '2' ']' -- start of right-to-left text
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2970 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
2971 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
2972
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
2973 Character composition specification takes the following form:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2974 o ESC '0' -- start relative composition
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2975 o ESC '1' -- end composition
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2976 o ESC '2' -- start rule-base composition (*)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2977 o ESC '3' -- start relative composition with alternate chars (**)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2978 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
2979 Since these are not standard escape sequences of any ISO standard,
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2980 the use of them with these meanings is restricted to Emacs only.
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2981
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2982 (*) This form is used only in Emacs 20.7 and older versions,
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2983 but newer versions can safely decode it.
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2984 (**) This form is used only in Emacs 21.1 and newer versions,
88771
75c78754826d comments
Dave Love <fx@gnu.org>
parents: 88690
diff changeset
2985 and older versions can't decode it.
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2986
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2987 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
2988 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
2989
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2990 COMPOSITION_RELATIVE:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2991 ESC 0 CHAR [ CHAR ] ESC 1
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2992 COMPOSITION_WITH_RULE:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2993 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
2994 COMPOSITION_WITH_ALTCHARS:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2995 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
2996 COMPOSITION_WITH_RULE_ALTCHARS:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2997 ESC 4 ALTCHAR [ RULE ALTCHAR ] ESC 0 CHAR [ CHAR ] ESC 1 */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2998
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2999 enum iso_code_class_type iso_code_class[256];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3000
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3001 #define SAFE_CHARSET_P(coding, id) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3002 ((id) <= (coding)->max_charset_id \
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
3003 && (coding)->safe_charsets[id] != 255)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3004
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3005
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3006 #define SHIFT_OUT_OK(category) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3007 (CODING_ISO_INITIAL (&coding_categories[category], 1) >= 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3008
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3009 static void
88631
780b91d4a7e5 (setup_iso_safe_charsets): Fix arg decl for K&R.
Dave Love <fx@gnu.org>
parents: 88607
diff changeset
3010 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
3011 Lisp_Object attrs;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3012 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3013 Lisp_Object charset_list, safe_charsets;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3014 Lisp_Object request;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3015 Lisp_Object reg_usage;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3016 Lisp_Object tail;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3017 int reg94, reg96;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3018 int flags = XINT (AREF (attrs, coding_attr_iso_flags));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3019 int max_charset_id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3020
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3021 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3022 if ((flags & CODING_ISO_FLAG_FULL_SUPPORT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3023 && ! EQ (charset_list, Viso_2022_charset_list))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3024 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3025 CODING_ATTR_CHARSET_LIST (attrs)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3026 = charset_list = Viso_2022_charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3027 ASET (attrs, coding_attr_safe_charsets, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3028 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3029
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3030 if (STRINGP (AREF (attrs, coding_attr_safe_charsets)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3031 return;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3032
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3033 max_charset_id = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3034 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3035 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3036 int id = XINT (XCAR (tail));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3037 if (max_charset_id < id)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3038 max_charset_id = id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3039 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3040
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
3041 safe_charsets = make_uninit_string (max_charset_id + 1);
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
3042 memset (SDATA (safe_charsets), 255, max_charset_id + 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3043 request = AREF (attrs, coding_attr_iso_request);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3044 reg_usage = AREF (attrs, coding_attr_iso_usage);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3045 reg94 = XINT (XCAR (reg_usage));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3046 reg96 = XINT (XCDR (reg_usage));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3047
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3048 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3049 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3050 Lisp_Object id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3051 Lisp_Object reg;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3052 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3053
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3054 id = XCAR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3055 charset = CHARSET_FROM_ID (XINT (id));
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3056 reg = Fcdr (Fassq (id, request));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3057 if (! NILP (reg))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3058 SSET (safe_charsets, XINT (id), XINT (reg));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3059 else if (charset->iso_chars_96)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3060 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3061 if (reg96 < 4)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3062 SSET (safe_charsets, XINT (id), reg96);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3063 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3064 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3065 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3066 if (reg94 < 4)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3067 SSET (safe_charsets, XINT (id), reg94);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3068 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3069 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3070 ASET (attrs, coding_attr_safe_charsets, safe_charsets);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3071 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3072
50047
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
3073
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3074 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
3075 Check if a text is encoded in one of ISO-2022 based coding systems.
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3076 If it is, return 1, else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3077
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3078 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3079 detect_coding_iso_2022 (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3080 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3081 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3082 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3083 const unsigned char *src = coding->source, *src_base = src;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3084 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3085 int multibytep = coding->src_multibyte;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3086 int single_shifting = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3087 int id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3088 int c, c1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3089 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3090 int i;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3091 int rejected = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3092 int found = 0;
99753
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3093 int composition_count = -1;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3094
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3095 detect_info->checked |= CATEGORY_MASK_ISO;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3096
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3097 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
3098 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3099 struct coding_system *this = &(coding_categories[i]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3100 Lisp_Object attrs, val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3101
94944
c16046e21b90 (detect_coding_iso_2022): Ignore a coding category that
Kenichi Handa <handa@m17n.org>
parents: 93877
diff changeset
3102 if (this->id < 0)
c16046e21b90 (detect_coding_iso_2022): Ignore a coding category that
Kenichi Handa <handa@m17n.org>
parents: 93877
diff changeset
3103 continue;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3104 attrs = CODING_ID_ATTRS (this->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3105 if (CODING_ISO_FLAGS (this) & CODING_ISO_FLAG_FULL_SUPPORT
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
3106 && ! EQ (CODING_ATTR_CHARSET_LIST (attrs), Viso_2022_charset_list))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3107 setup_iso_safe_charsets (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3108 val = CODING_ATTR_SAFE_CHARSETS (attrs);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3109 this->max_charset_id = SCHARS (val) - 1;
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
3110 this->safe_charsets = SDATA (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3111 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3112
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3113 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3114 src += coding->head_ascii;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3115
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3116 while (rejected != CATEGORY_MASK_ISO)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3117 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3118 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3119 ONE_MORE_BYTE (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3120 switch (c)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3121 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3122 case ISO_CODE_ESC:
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
3123 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
3124 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3125 single_shifting = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3126 ONE_MORE_BYTE (c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3127 if (c >= '(' && c <= '/')
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3128 {
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3129 /* Designation sequence for a charset of dimension 1. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3130 ONE_MORE_BYTE (c1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3131 if (c1 < ' ' || c1 >= 0x80
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3132 || (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
3133 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3134 break;
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3135 }
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3136 else if (c == '$')
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3137 {
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3138 /* Designation sequence for a charset of dimension 2. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3139 ONE_MORE_BYTE (c);
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3140 if (c >= '@' && c <= 'B')
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3141 /* Designation for JISX0208.1978, GB2312, or JISX0208. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3142 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
3143 else if (c >= '(' && c <= '/')
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
3144 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3145 ONE_MORE_BYTE (c1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3146 if (c1 < ' ' || c1 >= 0x80
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3147 || (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
3148 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3149 break;
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
3150 }
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3151 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3152 /* Invalid designation sequence. Just ignore it. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3153 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3154 }
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
3155 else if (c == 'N' || c == 'O')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3156 {
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
3157 /* ESC <Fe> for SS2 or SS3. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3158 single_shifting = 1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3159 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
3160 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3161 }
99753
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3162 else if (c == '1')
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3163 {
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3164 /* End of composition. */
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3165 if (composition_count < 0
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3166 || composition_count > MAX_COMPOSITION_COMPONENTS)
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3167 /* Invalid */
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3168 break;
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3169 composition_count = -1;
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3170 found |= CATEGORY_MASK_ISO;
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3171 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3172 else if (c >= '0' && c <= '4')
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3173 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3174 /* ESC <Fp> for start/end composition. */
99753
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3175 composition_count = 0;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3176 break;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3177 }
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
3178 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3179 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3180 /* Invalid escape sequence. Just ignore it. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3181 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3182 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3183
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3184 /* 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
3185 rejected |= CATEGORY_MASK_ISO_8BIT;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3186 if (SAFE_CHARSET_P (&coding_categories[coding_category_iso_7],
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3187 id))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3188 found |= CATEGORY_MASK_ISO_7;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3189 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3190 rejected |= CATEGORY_MASK_ISO_7;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3191 if (SAFE_CHARSET_P (&coding_categories[coding_category_iso_7_tight],
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3192 id))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3193 found |= CATEGORY_MASK_ISO_7_TIGHT;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3194 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3195 rejected |= CATEGORY_MASK_ISO_7_TIGHT;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3196 if (SAFE_CHARSET_P (&coding_categories[coding_category_iso_7_else],
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3197 id))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3198 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
3199 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3200 rejected |= CATEGORY_MASK_ISO_7_ELSE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3201 if (SAFE_CHARSET_P (&coding_categories[coding_category_iso_8_else],
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3202 id))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3203 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
3204 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3205 rejected |= CATEGORY_MASK_ISO_8_ELSE;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3206 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3207
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3208 case ISO_CODE_SO:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3209 case ISO_CODE_SI:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3210 /* Locking shift out/in. */
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
3211 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
3212 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3213 single_shifting = 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3214 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
3215 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3216
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3217 case ISO_CODE_CSI:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3218 /* Control sequence introducer. */
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3219 single_shifting = 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3220 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
3221 found |= CATEGORY_MASK_ISO_8_ELSE;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3222 goto check_extra_latin;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3223
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3224 case ISO_CODE_SS2:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3225 case ISO_CODE_SS3:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3226 /* Single shift. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3227 if (inhibit_iso_escape_detection)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3228 break;
89780
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
3229 single_shifting = 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3230 rejected |= CATEGORY_MASK_ISO_7BIT;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3231 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
3232 & 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
3233 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
3234 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
3235 & 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
3236 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
3237 if (single_shifting)
a53cb5864a40 (detect_coding_iso_2022): Fix handling of SS2 and SS3.
Kenichi Handa <handa@m17n.org>
parents: 89779
diff changeset
3238 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3239 goto check_extra_latin;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3240
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3241 default:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3242 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3243 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3244 if (c < 0x80)
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3245 {
99753
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3246 if (composition_count >= 0)
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3247 composition_count++;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3248 single_shifting = 0;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3249 break;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3250 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3251 if (c >= 0xA0)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
3252 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3253 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
3254 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
3255 /* 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
3256 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
3257 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
3258 only when we are not single shifting. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3259 if (! single_shifting
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3260 && ! (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
3261 {
29299
b33b38d81020 (detect_coding_iso2022): Fix code for checking
Kenichi Handa <handa@m17n.org>
parents: 29275
diff changeset
3262 int i = 1;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3263 while (src < src_end)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3264 {
106826
64cd76243389 Fix handling of euc-xx coding systems.
Kenichi Handa <handa@m17n.org>
parents: 106815
diff changeset
3265 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3266 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
3267 if (c < 0xA0)
106826
64cd76243389 Fix handling of euc-xx coding systems.
Kenichi Handa <handa@m17n.org>
parents: 106815
diff changeset
3268 {
64cd76243389 Fix handling of euc-xx coding systems.
Kenichi Handa <handa@m17n.org>
parents: 106815
diff changeset
3269 src = src_base;
64cd76243389 Fix handling of euc-xx coding systems.
Kenichi Handa <handa@m17n.org>
parents: 106815
diff changeset
3270 break;
64cd76243389 Fix handling of euc-xx coding systems.
Kenichi Handa <handa@m17n.org>
parents: 106815
diff changeset
3271 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3272 i++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3273 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3274
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3275 if (i & 1 && src < src_end)
99753
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3276 {
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3277 rejected |= CATEGORY_MASK_ISO_8_2;
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3278 if (composition_count >= 0)
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3279 composition_count += i;
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3280 }
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3281 else
99753
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3282 {
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3283 found |= CATEGORY_MASK_ISO_8_2;
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3284 if (composition_count >= 0)
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3285 composition_count += i / 2;
c457d1e5edff (detect_coding_iso_2022): Reject invalid composition
Kenichi Handa <handa@m17n.org>
parents: 99074
diff changeset
3286 }
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
3287 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3288 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3289 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3290 check_extra_latin:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3291 single_shifting = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3292 if (! VECTORP (Vlatin_extra_code_table)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3293 || NILP (XVECTOR (Vlatin_extra_code_table)->contents[c]))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3294 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3295 rejected = CATEGORY_MASK_ISO;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3296 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3297 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3298 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
3299 & CODING_ISO_FLAG_LATIN_EXTRA)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3300 found |= CATEGORY_MASK_ISO_8_1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3301 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3302 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
3303 rejected |= CATEGORY_MASK_ISO_8_2;
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 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3306 detect_info->rejected |= CATEGORY_MASK_ISO;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3307 return 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3308
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3309 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3310 detect_info->rejected |= rejected;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3311 detect_info->found |= (found & ~rejected);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3312 return 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3313 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3314
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3315
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3316 /* Set designation state into CODING. Set CHARS_96 to -1 if the
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3317 escape sequence should be kept. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3318 #define DECODE_DESIGNATION(reg, dim, chars_96, final) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3319 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3320 int id, prev; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3321 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3322 if (final < '0' || final >= 128 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3323 || ((id = ISO_CHARSET_TABLE (dim, chars_96, final)) < 0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3324 || !SAFE_CHARSET_P (coding, id)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3325 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3326 CODING_ISO_DESIGNATION (coding, reg) = -2; \
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3327 chars_96 = -1; \
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3328 break; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3329 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3330 prev = CODING_ISO_DESIGNATION (coding, reg); \
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3331 if (id == charset_jisx0201_roman) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3332 { \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3333 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
3334 id = charset_ascii; \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3335 } \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3336 else if (id == charset_jisx0208_1978) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3337 { \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3338 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
3339 id = charset_jisx0208; \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
3340 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3341 CODING_ISO_DESIGNATION (coding, reg) = id; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3342 /* If there was an invalid designation to REG previously, and this \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3343 designation is ASCII to REG, we should keep this designation \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3344 sequence. */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3345 if (prev == -2 && id == charset_ascii) \
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3346 chars_96 = -1; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3347 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3348
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3349
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3350 /* Handle these composition sequence (ALT: alternate char):
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3351
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3352 (1) relative composition: ESC 0 CHAR ... ESC 1
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3353 (2) rulebase composition: ESC 2 CHAR RULE CHAR RULE ... CHAR ESC 1
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3354 (3) altchar composition: ESC 3 ALT ... ALT ESC 0 CHAR ... ESC 1
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3355 (4) alt&rule composition: ESC 4 ALT RULE ... ALT ESC 0 CHAR ... ESC 1
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3356
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3357 When the start sequence (ESC 0/2/3/4) is found, this annotation
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3358 header is produced.
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3359
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3360 [ -LENGTH(==-5) CODING_ANNOTATE_COMPOSITION_MASK NCHARS(==0) 0 METHOD ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3361
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3362 Then, upon reading CHAR or RULE (one or two bytes), these codes are
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3363 produced until the end sequence (ESC 1) is found:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3364
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3365 (1) CHAR ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3366 (2) CHAR -2 DECODED-RULE CHAR -2 DECODED-RULE ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3367 (3) ALT ... ALT -1 -1 CHAR ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3368 (4) ALT -2 DECODED-RULE ALT -2 DECODED-RULE ... ALT -1 -1 CHAR ... CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3369
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3370 When the end sequence (ESC 1) is found, LENGTH and NCHARS in the
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3371 annotation header is updated as below:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3372
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3373 (1) LENGTH: unchanged, NCHARS: number of CHARs
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3374 (2) LENGTH: unchanged, NCHARS: number of CHARs
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3375 (3) LENGTH: += number of ALTs + 2, NCHARS: number of CHARs
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3376 (4) LENGTH: += number of ALTs * 3, NCHARS: number of CHARs
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3377
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3378 If an error is found while composing, the annotation header is
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3379 changed to:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3380
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3381 [ ESC '0'/'2'/'3'/'4' -2 0 ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3382
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3383 and the sequence [ -2 DECODED-RULE ] is changed to the original
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3384 byte sequence as below:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3385 o the original byte sequence is B: [ B -1 ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3386 o the original byte sequence is B1 B2: [ B1 B2 ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3387 and the sequence [ -1 -1 ] is changed to the original byte
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3388 sequence:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3389 [ ESC '0' ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3390 */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3391
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3392 /* Decode a composition rule C1 and maybe one more byte from the
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3393 source, and set RULE to the encoded composition rule, NBYTES to the
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3394 length of the composition rule. If the rule is invalid, set RULE
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3395 to some negative value. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3396
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3397 #define DECODE_COMPOSITION_RULE(rule, nbytes) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3398 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3399 rule = c1 - 32; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3400 if (rule < 0) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3401 break; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3402 if (rule < 81) /* old format (before ver.21) */ \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3403 { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3404 int gref = (rule) / 9; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3405 int nref = (rule) % 9; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3406 if (gref == 4) gref = 10; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3407 if (nref == 4) nref = 10; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3408 rule = COMPOSITION_ENCODE_RULE (gref, nref); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3409 nbytes = 1; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3410 } \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3411 else /* new format (after ver.21) */ \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3412 { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3413 int c; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3414 \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3415 ONE_MORE_BYTE (c); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3416 rule = COMPOSITION_ENCODE_RULE (rule - 81, c - 32); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3417 if (rule >= 0) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3418 rule += 0x100; /* to destinguish it from the old format */ \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3419 nbytes = 2; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3420 } \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3421 } while (0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3423 #define ENCODE_COMPOSITION_RULE(rule) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3424 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3425 int gref = (rule % 0x100) / 12, nref = (rule % 0x100) % 12; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3426 \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3427 if (rule < 0x100) /* old format */ \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3428 { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3429 if (gref == 10) gref = 4; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3430 if (nref == 10) nref = 4; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3431 charbuf[idx] = 32 + gref * 9 + nref; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3432 charbuf[idx + 1] = -1; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3433 new_chars++; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3434 } \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3435 else /* new format */ \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3436 { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3437 charbuf[idx] = 32 + 81 + gref; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3438 charbuf[idx + 1] = 32 + nref; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3439 new_chars += 2; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3440 } \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3441 } while (0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3442
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3443 /* Finish the current composition as invalid. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3444
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3445 static int finish_composition P_ ((int *, struct composition_status *));
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3446
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3447 static int
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3448 finish_composition (charbuf, cmp_status)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3449 int *charbuf;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3450 struct composition_status *cmp_status;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3451 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3452 int idx = - cmp_status->length;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3453 int new_chars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3454
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3455 /* Recover the original ESC sequence */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3456 charbuf[idx++] = ISO_CODE_ESC;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3457 charbuf[idx++] = (cmp_status->method == COMPOSITION_RELATIVE ? '0'
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3458 : cmp_status->method == COMPOSITION_WITH_RULE ? '2'
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3459 : cmp_status->method == COMPOSITION_WITH_ALTCHARS ? '3'
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3460 /* cmp_status->method == COMPOSITION_WITH_RULE_ALTCHARS */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3461 : '4');
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3462 charbuf[idx++] = -2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3463 charbuf[idx++] = 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3464 charbuf[idx++] = -1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3465 new_chars = cmp_status->nchars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3466 if (cmp_status->method >= COMPOSITION_WITH_RULE)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3467 for (; idx < 0; idx++)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3468 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3469 int elt = charbuf[idx];
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3470
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3471 if (elt == -2)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3472 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3473 ENCODE_COMPOSITION_RULE (charbuf[idx + 1]);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3474 idx++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3475 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3476 else if (elt == -1)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3477 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3478 charbuf[idx++] = ISO_CODE_ESC;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3479 charbuf[idx] = '0';
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3480 new_chars += 2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3481 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3482 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3483 cmp_status->state = COMPOSING_NO;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3484 return new_chars;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3485 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3486
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
3487 /* If characters are under composition, finish the composition. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3488 #define MAYBE_FINISH_COMPOSITION() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3489 do { \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3490 if (cmp_status->state != COMPOSING_NO) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3491 char_offset += finish_composition (charbuf, cmp_status); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3492 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3493
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
3494 /* Handle composition start sequence ESC 0, ESC 2, ESC 3, or ESC 4.
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3495
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
3496 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
3497 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
3498 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
3499 ESC 4 : alt&rule composition : ESC 4 CHAR RULE ... CHAR ESC 0 CHAR ... ESC 1
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3500
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3501 Produce this annotation sequence now:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3502
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3503 [ -LENGTH(==-4) CODING_ANNOTATE_COMPOSITION_MASK NCHARS(==0) METHOD ]
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3504 */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3505
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3506 #define DECODE_COMPOSITION_START(c1) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3507 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3508 if (c1 == '0' \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3509 && ((cmp_status->state == COMPOSING_COMPONENT_CHAR \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3510 && cmp_status->method == COMPOSITION_WITH_ALTCHARS) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3511 || (cmp_status->state == COMPOSING_COMPONENT_RULE \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3512 && cmp_status->method == COMPOSITION_WITH_RULE_ALTCHARS))) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3513 { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3514 *charbuf++ = -1; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3515 *charbuf++= -1; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3516 cmp_status->state = COMPOSING_CHAR; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3517 cmp_status->length += 2; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3518 } \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3519 else \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3520 { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3521 MAYBE_FINISH_COMPOSITION (); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3522 cmp_status->method = (c1 == '0' ? COMPOSITION_RELATIVE \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3523 : c1 == '2' ? COMPOSITION_WITH_RULE \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3524 : c1 == '3' ? COMPOSITION_WITH_ALTCHARS \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3525 : COMPOSITION_WITH_RULE_ALTCHARS); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3526 cmp_status->state \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3527 = (c1 <= '2' ? COMPOSING_CHAR : COMPOSING_COMPONENT_CHAR); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3528 ADD_COMPOSITION_DATA (charbuf, 0, 0, cmp_status->method); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3529 cmp_status->length = MAX_ANNOTATION_LENGTH; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3530 cmp_status->nchars = cmp_status->ncomps = 0; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3531 coding->annotated = 1; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3532 } \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3533 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3534
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3535
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3536 /* Handle composition end sequence ESC 1. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3537
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3538 #define DECODE_COMPOSITION_END() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3539 do { \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3540 if (cmp_status->nchars == 0 \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3541 || ((cmp_status->state == COMPOSING_CHAR) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3542 == (cmp_status->method == COMPOSITION_WITH_RULE))) \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3543 { \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3544 MAYBE_FINISH_COMPOSITION (); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3545 goto invalid_code; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3546 } \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3547 if (cmp_status->method == COMPOSITION_WITH_ALTCHARS) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3548 charbuf[- cmp_status->length] -= cmp_status->ncomps + 2; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3549 else if (cmp_status->method == COMPOSITION_WITH_RULE_ALTCHARS) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3550 charbuf[- cmp_status->length] -= cmp_status->ncomps * 3; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3551 charbuf[- cmp_status->length + 2] = cmp_status->nchars; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3552 char_offset += cmp_status->nchars; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3553 cmp_status->state = COMPOSING_NO; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3554 } while (0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3555
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3556 /* Store a composition rule RULE in charbuf, and update cmp_status. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3557
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3558 #define STORE_COMPOSITION_RULE(rule) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3559 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3560 *charbuf++ = -2; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3561 *charbuf++ = rule; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3562 cmp_status->length += 2; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3563 cmp_status->state--; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3564 } while (0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3565
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3566 /* Store a composed char or a component char C in charbuf, and update
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3567 cmp_status. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3568
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3569 #define STORE_COMPOSITION_CHAR(c) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3570 do { \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3571 *charbuf++ = (c); \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3572 cmp_status->length++; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3573 if (cmp_status->state == COMPOSING_CHAR) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3574 cmp_status->nchars++; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3575 else \
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3576 cmp_status->ncomps++; \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3577 if (cmp_status->method == COMPOSITION_WITH_RULE \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3578 || (cmp_status->method == COMPOSITION_WITH_RULE_ALTCHARS \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3579 && cmp_status->state == COMPOSING_COMPONENT_CHAR)) \
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3580 cmp_status->state++; \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3581 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3582
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3583
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3584 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3585
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3586 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3587 decode_coding_iso_2022 (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3588 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3589 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3590 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3591 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
3592 const unsigned char *src_base;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
3593 int *charbuf = coding->charbuf + coding->charbuf_used;
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
3594 /* We may produce two annotations (charset and composition) in one
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
3595 loop and one more charset annotation at the end. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3596 int *charbuf_end
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
3597 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3598 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3599 int multibytep = coding->src_multibyte;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3600 /* Charsets invoked to graphic plane 0 and 1 respectively. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3601 int charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3602 int charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1);
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3603 int charset_id_2, charset_id_3;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3604 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3605 int c;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3606 struct composition_status *cmp_status = CODING_ISO_CMP_STATUS (coding);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
3607 Lisp_Object attrs, charset_list;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3608 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3609 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
3610 int last_id = charset_ascii;
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
3611 int eol_crlf =
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
3612 !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
3613 int byte_after_cr = -1;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3614 int i;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3615
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
3616 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3617 setup_iso_safe_charsets (attrs);
90772
b15334b4a9c3 (coding_alloc_by_making_gap): New arg offset.
Kenichi Handa <handa@m17n.org>
parents: 90737
diff changeset
3618 /* Charset list may have been changed. */
b15334b4a9c3 (coding_alloc_by_making_gap): New arg offset.
Kenichi Handa <handa@m17n.org>
parents: 90737
diff changeset
3619 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
3620 coding->safe_charsets = SDATA (CODING_ATTR_SAFE_CHARSETS (attrs));
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3621
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3622 if (cmp_status->state != COMPOSING_NO)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3623 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3624 for (i = 0; i < cmp_status->length; i++)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3625 *charbuf++ = cmp_status->carryover[i];
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3626 coding->annotated = 1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3627 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3628
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3629 while (1)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3630 {
103474
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
3631 int c1, c2, c3;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3632
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3633 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3634 consumed_chars_base = consumed_chars;
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 if (charbuf >= charbuf_end)
100936
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
3637 {
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
3638 if (byte_after_cr >= 0)
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
3639 src_base--;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
3640 break;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
3641 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3642
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
3643 if (byte_after_cr >= 0)
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
3644 c1 = byte_after_cr, byte_after_cr = -1;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
3645 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
3646 ONE_MORE_BYTE (c1);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3647 if (c1 < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
3648 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3649
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3650 if (CODING_ISO_EXTSEGMENT_LEN (coding) > 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3651 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3652 *charbuf++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3653 char_offset++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3654 CODING_ISO_EXTSEGMENT_LEN (coding)--;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3655 continue;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3656 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3657
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3658 if (CODING_ISO_EMBEDDED_UTF_8 (coding))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3659 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3660 if (c1 == ISO_CODE_ESC)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3661 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3662 if (src + 1 >= src_end)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3663 goto no_more_source;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3664 *charbuf++ = ISO_CODE_ESC;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3665 char_offset++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3666 if (src[0] == '%' && src[1] == '@')
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3667 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3668 src += 2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3669 consumed_chars += 2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3670 char_offset += 2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3671 /* We are sure charbuf can contain two more chars. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3672 *charbuf++ = '%';
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3673 *charbuf++ = '@';
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3674 CODING_ISO_EMBEDDED_UTF_8 (coding) = 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3675 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3676 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3677 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3678 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3679 *charbuf++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3680 char_offset++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3681 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3682 continue;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3683 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3684
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3685 if ((cmp_status->state == COMPOSING_RULE
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3686 || cmp_status->state == COMPOSING_COMPONENT_RULE)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3687 && c1 != ISO_CODE_ESC)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3688 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3689 int rule, nbytes;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3690
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3691 DECODE_COMPOSITION_RULE (rule, nbytes);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3692 if (rule < 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3693 goto invalid_code;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3694 STORE_COMPOSITION_RULE (rule);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3695 continue;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3696 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3697
89279
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
3698 /* We produce at most one character. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3699 switch (iso_code_class [c1])
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3700 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3701 case ISO_0x20_or_0x7F:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3702 if (charset_id_0 < 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3703 || ! 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
3704 /* This is SPACE or DEL. */
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3705 charset = CHARSET_FROM_ID (charset_ascii);
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3706 else
c7772f702227 (ONE_MORE_BYTE_NO_CHECK): Increment consumed_chars.
Kenichi Handa <handa@m17n.org>
parents: 88573
diff changeset
3707 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
3708 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3709
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3710 case ISO_graphic_plane_0:
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3711 if (charset_id_0 < 0)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3712 charset = CHARSET_FROM_ID (charset_ascii);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3713 else
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3714 charset = CHARSET_FROM_ID (charset_id_0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3715 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3716
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3717 case ISO_0xA0_or_0xFF:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3718 if (charset_id_1 < 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3719 || ! CHARSET_ISO_CHARS_96 (CHARSET_FROM_ID (charset_id_1))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3720 || CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3721 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3722 /* This is a graphic character, we fall down ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3723
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3724 case ISO_graphic_plane_1:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3725 if (charset_id_1 < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3726 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3727 charset = CHARSET_FROM_ID (charset_id_1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3728 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3729
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3730 case ISO_control_0:
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
3731 if (eol_crlf && c1 == '\r')
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
3732 ONE_MORE_BYTE (byte_after_cr);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3733 MAYBE_FINISH_COMPOSITION ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3734 charset = CHARSET_FROM_ID (charset_ascii);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3735 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3736
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3737 case ISO_control_1:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3738 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3739
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3740 case ISO_shift_out:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3741 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LOCKING_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3742 || CODING_ISO_DESIGNATION (coding, 1) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3743 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3744 CODING_ISO_INVOCATION (coding, 0) = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3745 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
3746 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3747
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3748 case ISO_shift_in:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3749 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LOCKING_SHIFT))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3750 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3751 CODING_ISO_INVOCATION (coding, 0) = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3752 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
3753 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3754
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3755 case ISO_single_shift_2_7:
106564
fea46c7aca79 (decode_coding_iso_2022): Ignore ISO_CODE_SS2_7 (0x19)
Kenichi Handa <handa@m17n.org>
parents: 105959
diff changeset
3756 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS))
fea46c7aca79 (decode_coding_iso_2022): Ignore ISO_CODE_SS2_7 (0x19)
Kenichi Handa <handa@m17n.org>
parents: 105959
diff changeset
3757 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3758 case ISO_single_shift_2:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3759 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3760 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3761 /* SS2 is handled as an escape sequence of ESC 'N' */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3762 c1 = 'N';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3763 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3764
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3765 case ISO_single_shift_3:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3766 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3767 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3768 /* SS2 is handled as an escape sequence of ESC 'O' */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3769 c1 = 'O';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3770 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3771
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3772 case ISO_control_sequence_introducer:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3773 /* CSI is handled as an escape sequence of ESC '[' ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3774 c1 = '[';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3775 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3776
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3777 case ISO_escape:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3778 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3779 label_escape_sequence:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3780 /* Escape sequences handled here are invocation,
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3781 designation, direction specification, and character
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3782 composition specification. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3783 switch (c1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3784 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3785 case '&': /* revision of following character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3786 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3787 if (!(c1 >= '@' && c1 <= '~'))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3788 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3789 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3790 if (c1 != ISO_CODE_ESC)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3791 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3792 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3793 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3794
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3795 case '$': /* designation of 2-byte character set */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3796 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DESIGNATION))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3797 goto invalid_code;
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3798 {
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3799 int reg, chars96;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3800
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3801 ONE_MORE_BYTE (c1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3802 if (c1 >= '@' && c1 <= 'B')
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3803 { /* 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
3804 or JISX0208.1980 */
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3805 reg = 0, chars96 = 0;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3806 }
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3807 else if (c1 >= 0x28 && c1 <= 0x2B)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3808 { /* designation of DIMENSION2_CHARS94 character set */
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3809 reg = c1 - 0x28, chars96 = 0;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3810 ONE_MORE_BYTE (c1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3811 }
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3812 else if (c1 >= 0x2C && c1 <= 0x2F)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3813 { /* designation of DIMENSION2_CHARS96 character set */
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3814 reg = c1 - 0x2C, chars96 = 1;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3815 ONE_MORE_BYTE (c1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3816 }
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3817 else
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3818 goto invalid_code;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3819 DECODE_DESIGNATION (reg, 2, chars96, c1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3820 /* We must update these variables now. */
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3821 if (reg == 0)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3822 charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3823 else if (reg == 1)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3824 charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3825 if (chars96 < 0)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3826 goto invalid_code;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3827 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3828 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3829
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3830 case 'n': /* invocation of locking-shift-2 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3831 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LOCKING_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3832 || CODING_ISO_DESIGNATION (coding, 2) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3833 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3834 CODING_ISO_INVOCATION (coding, 0) = 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3835 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
3836 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3837
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3838 case 'o': /* invocation of locking-shift-3 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3839 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_LOCKING_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3840 || CODING_ISO_DESIGNATION (coding, 3) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3841 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3842 CODING_ISO_INVOCATION (coding, 0) = 3;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3843 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
3844 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3845
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3846 case 'N': /* invocation of single-shift-2 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3847 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3848 || CODING_ISO_DESIGNATION (coding, 2) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3849 goto invalid_code;
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3850 charset_id_2 = CODING_ISO_DESIGNATION (coding, 2);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3851 if (charset_id_2 < 0)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3852 charset = CHARSET_FROM_ID (charset_ascii);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3853 else
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3854 charset = CHARSET_FROM_ID (charset_id_2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3855 ONE_MORE_BYTE (c1);
30578
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
3856 if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3857 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3858 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3859
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3860 case 'O': /* invocation of single-shift-3 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3861 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3862 || CODING_ISO_DESIGNATION (coding, 3) < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3863 goto invalid_code;
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3864 charset_id_3 = CODING_ISO_DESIGNATION (coding, 3);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3865 if (charset_id_3 < 0)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3866 charset = CHARSET_FROM_ID (charset_ascii);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3867 else
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3868 charset = CHARSET_FROM_ID (charset_id_3);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3869 ONE_MORE_BYTE (c1);
30578
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
3870 if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3871 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3872 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3873
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3874 case '0': case '2': case '3': case '4': /* start composition */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3875 if (! (coding->common_flags & CODING_ANNOTATE_COMPOSITION_MASK))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3876 goto invalid_code;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3877 if (last_id != charset_ascii)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3878 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3879 ADD_CHARSET_DATA (charbuf, char_offset- last_offset, last_id);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3880 last_id = charset_ascii;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3881 last_offset = char_offset;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3882 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3883 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
3884 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3885
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3886 case '1': /* end composition */
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3887 if (cmp_status->state == COMPOSING_NO)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3888 goto invalid_code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3889 DECODE_COMPOSITION_END ();
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3890 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3891
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3892 case '[': /* specification of direction */
105179
8143cdf4806f (decode_coding_iso_2022): Fix operator precedence.
Andreas Schwab <schwab@linux-m68k.org>
parents: 104636
diff changeset
3893 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DIRECTION))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3894 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3895 /* 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
3896 So, `coding->mode & CODING_MODE_DIRECTION' zero means
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
3897 left-to-right, and nonzero means right-to-left. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3898 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3899 switch (c1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3900 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3901 case ']': /* end of the current direction */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3902 coding->mode &= ~CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3903
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3904 case '0': /* end of the current direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3905 case '1': /* start of left-to-right direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3906 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3907 if (c1 == ']')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3908 coding->mode &= ~CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3909 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3910 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3911 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3912
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3913 case '2': /* start of right-to-left direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3914 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3915 if (c1 == ']')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3916 coding->mode |= CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3917 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3918 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3919 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3920
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3921 default:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3922 goto invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3923 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3924 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3925
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3926 case '%':
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3927 ONE_MORE_BYTE (c1);
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3928 if (c1 == '/')
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3929 {
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3930 /* CTEXT extended segment:
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3931 ESC % / [0-4] M L --ENCODING-NAME-- \002 --BYTES--
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3932 We keep these bytes as is for the moment.
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3933 They may be decoded by post-read-conversion. */
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3934 int dim, M, L;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3935 int size;
56191
75f56340b4f9 (MAX_ALLOCA): Remove define.
Kim F. Storm <storm@cua.dk>
parents: 56028
diff changeset
3936
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3937 ONE_MORE_BYTE (dim);
109710
62d9702eb261 Improve the encoding by compound-text-with-extensions.
Kenichi Handa <handa@etlken>
parents: 107507
diff changeset
3938 if (dim < '0' || dim > '4')
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3939 goto invalid_code;
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3940 ONE_MORE_BYTE (M);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3941 if (M < 128)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3942 goto invalid_code;
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3943 ONE_MORE_BYTE (L);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3944 if (L < 128)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3945 goto invalid_code;
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3946 size = ((M - 128) * 128) + (L - 128);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3947 if (charbuf + 6 > charbuf_end)
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3948 goto break_loop;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3949 *charbuf++ = ISO_CODE_ESC;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3950 *charbuf++ = '%';
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3951 *charbuf++ = '/';
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3952 *charbuf++ = dim;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3953 *charbuf++ = BYTE8_TO_CHAR (M);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3954 *charbuf++ = BYTE8_TO_CHAR (L);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3955 CODING_ISO_EXTSEGMENT_LEN (coding) = size;
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3956 }
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3957 else if (c1 == 'G')
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3958 {
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3959 /* XFree86 extension for embedding UTF-8 in CTEXT:
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3960 ESC % G --UTF-8-BYTES-- ESC % @
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3961 We keep these bytes as is for the moment.
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3962 They may be decoded by post-read-conversion. */
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3963 if (charbuf + 3 > charbuf_end)
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3964 goto break_loop;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3965 *charbuf++ = ISO_CODE_ESC;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3966 *charbuf++ = '%';
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3967 *charbuf++ = 'G';
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
3968 CODING_ISO_EMBEDDED_UTF_8 (coding) = 1;
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3969 }
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3970 else
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3971 goto invalid_code;
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3972 continue;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
3973 break;
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
3974
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3975 default:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3976 if (! (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DESIGNATION))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
3977 goto invalid_code;
89873
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3978 {
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3979 int reg, chars96;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3980
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3981 if (c1 >= 0x28 && c1 <= 0x2B)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3982 { /* designation of DIMENSION1_CHARS94 character set */
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3983 reg = c1 - 0x28, chars96 = 0;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3984 ONE_MORE_BYTE (c1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3985 }
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3986 else if (c1 >= 0x2C && c1 <= 0x2F)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3987 { /* designation of DIMENSION1_CHARS96 character set */
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3988 reg = c1 - 0x2C, chars96 = 1;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3989 ONE_MORE_BYTE (c1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3990 }
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3991 else
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3992 goto invalid_code;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3993 DECODE_DESIGNATION (reg, 1, chars96, c1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3994 /* We must update these variables now. */
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3995 if (reg == 0)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3996 charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3997 else if (reg == 1)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3998 charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1);
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
3999 if (chars96 < 0)
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
4000 goto invalid_code;
9a279ff9d245 (DECODE_DESIGNATION): Set chars_96 to -1 instead of
Kenichi Handa <handa@m17n.org>
parents: 89863
diff changeset
4001 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4002 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4003 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4004 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4005
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4006 if (cmp_status->state == COMPOSING_NO
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4007 && charset->id != charset_ascii
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4008 && last_id != charset->id)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4009 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4010 if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4011 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4012 last_id = charset->id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4013 last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4014 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4015
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4016 /* Now we know CHARSET and 1st position code C1 of a character.
103474
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4017 Produce a decoded character while getting 2nd and 3rd
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4018 position codes C2, C3 if necessary. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4019 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
4020 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4021 ONE_MORE_BYTE (c2);
103474
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4022 if (c2 < 0x20 || (c2 >= 0x80 && c2 < 0xA0)
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4023 || ((c1 & 0x80) != (c2 & 0x80)))
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4024 /* C2 is not in a valid range. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4025 goto invalid_code;
103474
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4026 if (CHARSET_DIMENSION (charset) == 2)
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4027 c1 = (c1 << 8) | c2;
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4028 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4029 {
103474
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4030 ONE_MORE_BYTE (c3);
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4031 if (c3 < 0x20 || (c3 >= 0x80 && c3 < 0xA0)
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4032 || ((c1 & 0x80) != (c3 & 0x80)))
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4033 /* C3 is not in a valid range. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4034 goto invalid_code;
103474
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4035 c1 = (c1 << 16) | (c2 << 8) | c2;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4036 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4037 }
103474
7ead50363544 (decode_coding_iso_2022): Check MSB of bytes more rigidly.
Kenichi Handa <handa@m17n.org>
parents: 103448
diff changeset
4038 c1 &= 0x7F7F7F;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4039 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
4040 if (c < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4041 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4042 MAYBE_FINISH_COMPOSITION ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4043 for (; src_base < src; src_base++, char_offset++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4044 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4045 if (ASCII_BYTE_P (*src_base))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4046 *charbuf++ = *src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4047 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4048 *charbuf++ = BYTE8_TO_CHAR (*src_base);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4049 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4050 }
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4051 else if (cmp_status->state == COMPOSING_NO)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4052 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4053 *charbuf++ = c;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4054 char_offset++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4055 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4056 else if ((cmp_status->state == COMPOSING_CHAR
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4057 ? cmp_status->nchars
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4058 : cmp_status->ncomps)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4059 >= MAX_COMPOSITION_COMPONENTS)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4060 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4061 /* Too long composition. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4062 MAYBE_FINISH_COMPOSITION ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4063 *charbuf++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4064 char_offset++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4065 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4066 else
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4067 STORE_COMPOSITION_CHAR (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4068 continue;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4069
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4070 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4071 MAYBE_FINISH_COMPOSITION ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4072 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4073 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4074 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4075 *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
4076 char_offset++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4077 coding->errors++;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
4078 continue;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
4079
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
4080 break_loop:
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
4081 break;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4082 }
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 no_more_source:
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4085 if (cmp_status->state != COMPOSING_NO)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4086 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4087 if (coding->mode & CODING_MODE_LAST_BLOCK)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4088 MAYBE_FINISH_COMPOSITION ();
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4089 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4090 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4091 charbuf -= cmp_status->length;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4092 for (i = 0; i < cmp_status->length; i++)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4093 cmp_status->carryover[i] = charbuf[i];
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4094 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4095 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
4096 else if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4097 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4098 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4099 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4100 coding->charbuf_used = charbuf - coding->charbuf;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4101 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4102
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4103
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
4104 /* ISO2022 encoding stuff. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4105
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4106 /*
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
4107 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
4108 specify more details. In Emacs, each coding system of ISO2022
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4109 variant has the following specifications:
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4110 1. Initial designation to G0 thru G3.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4111 2. Allows short-form designation?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4112 3. ASCII should be designated to G0 before control characters?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4113 4. ASCII should be designated to G0 at end of line?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4114 5. 7-bit environment or 8-bit environment?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4115 6. Use locking-shift?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4116 7. Use Single-shift?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4117 And the following two are only for Japanese:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4118 8. Use ASCII in place of JIS0201-1976-Roman?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4119 9. Use JISX0208-1983 in place of JISX0208-1978?
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4120 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
4121 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
4122 details.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4123 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4124
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4125 /* 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
4126 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
4127 '@', '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
4128 designation sequence of short-form. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4129
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4130 #define ENCODE_DESIGNATION(charset, reg, coding) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4131 do { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4132 unsigned char final_char = CHARSET_ISO_FINAL (charset); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4133 char *intermediate_char_94 = "()*+"; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4134 char *intermediate_char_96 = ",-./"; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4135 int revision = -1; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4136 int c; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4137 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4138 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_REVISION) \
88856
13a375bc220d (ENCODE_DESIGNATION, decode_eol)
Dave Love <fx@gnu.org>
parents: 88845
diff changeset
4139 revision = CHARSET_ISO_REVISION (charset); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4140 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4141 if (revision >= 0) \
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
4142 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4143 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, '&'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4144 EMIT_ONE_BYTE ('@' + revision); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4145 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4146 EMIT_ONE_ASCII_BYTE (ISO_CODE_ESC); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4147 if (CHARSET_DIMENSION (charset) == 1) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4148 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4149 if (! CHARSET_ISO_CHARS_96 (charset)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4150 c = intermediate_char_94[reg]; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4151 else \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4152 c = intermediate_char_96[reg]; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4153 EMIT_ONE_ASCII_BYTE (c); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4154 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4155 else \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4156 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4157 EMIT_ONE_ASCII_BYTE ('$'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4158 if (! CHARSET_ISO_CHARS_96 (charset)) \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4159 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4160 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
4161 || reg != 0 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4162 || final_char < '@' || final_char > 'B') \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4163 EMIT_ONE_ASCII_BYTE (intermediate_char_94[reg]); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4164 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4165 else \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4166 EMIT_ONE_ASCII_BYTE (intermediate_char_96[reg]); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4167 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4168 EMIT_ONE_ASCII_BYTE (final_char); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4169 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4170 CODING_ISO_DESIGNATION (coding, reg) = CHARSET_ID (charset); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4171 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4172
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4173
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4174 /* The following two macros produce codes (control character or escape
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4175 sequence) for ISO2022 single-shift functions (single-shift-2 and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4176 single-shift-3). */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4177
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4178 #define ENCODE_SINGLE_SHIFT_2 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4179 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4180 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4181 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, 'N'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4182 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4183 EMIT_ONE_BYTE (ISO_CODE_SS2); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4184 CODING_ISO_SINGLE_SHIFTING (coding) = 1; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4185 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4186
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4187
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4188 #define ENCODE_SINGLE_SHIFT_3 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4189 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4190 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4191 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, 'O'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4192 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4193 EMIT_ONE_BYTE (ISO_CODE_SS3); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4194 CODING_ISO_SINGLE_SHIFTING (coding) = 1; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4195 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4196
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4197
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4198 /* The following four macros produce codes (control character or
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4199 escape sequence) for ISO2022 locking-shift functions (shift-in,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4200 shift-out, locking-shift-2, and locking-shift-3). */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4201
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4202 #define ENCODE_SHIFT_IN \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4203 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4204 EMIT_ONE_ASCII_BYTE (ISO_CODE_SI); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4205 CODING_ISO_INVOCATION (coding, 0) = 0; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4206 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4207
88365
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 #define ENCODE_SHIFT_OUT \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4210 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4211 EMIT_ONE_ASCII_BYTE (ISO_CODE_SO); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4212 CODING_ISO_INVOCATION (coding, 0) = 1; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4213 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4214
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4215
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4216 #define ENCODE_LOCKING_SHIFT_2 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4217 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4218 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, 'n'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4219 CODING_ISO_INVOCATION (coding, 0) = 2; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4220 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4221
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4222
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4223 #define ENCODE_LOCKING_SHIFT_3 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4224 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4225 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, 'n'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4226 CODING_ISO_INVOCATION (coding, 0) = 3; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4227 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4228
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4229
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
4230 /* Produce codes for a DIMENSION1 character whose character set is
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
4231 CHARSET and whose position-code is C1. Designation and invocation
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4232 sequences are also produced in advance if necessary. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4233
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4234 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4235 do { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4236 int id = CHARSET_ID (charset); \
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4237 \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4238 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
4239 && id == charset_ascii) \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4240 { \
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4241 id = charset_jisx0201_roman; \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4242 charset = CHARSET_FROM_ID (id); \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4243 } \
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4244 \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4245 if (CODING_ISO_SINGLE_SHIFTING (coding)) \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4246 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4247 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4248 EMIT_ONE_ASCII_BYTE (c1 & 0x7F); \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4249 else \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4250 EMIT_ONE_BYTE (c1 | 0x80); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4251 CODING_ISO_SINGLE_SHIFTING (coding) = 0; \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4252 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4253 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4254 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
4255 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4256 EMIT_ONE_ASCII_BYTE (c1 & 0x7F); \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4257 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4258 } \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4259 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
4260 { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4261 EMIT_ONE_BYTE (c1 | 0x80); \
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4262 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4263 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4264 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
4265 /* 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
4266 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
4267 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
4268 character. */ \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4269 dst = encode_invocation_designation (charset, coding, dst, \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4270 &produced_chars); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4271 } while (1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4272
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4273
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4274 /* Produce codes for a DIMENSION2 character whose character set is
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4275 CHARSET and whose position-codes are C1 and C2. Designation and
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4276 invocation codes are also produced in advance if necessary. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4277
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4278 #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
4279 do { \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4280 int id = CHARSET_ID (charset); \
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4281 \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4282 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
4283 && id == charset_jisx0208) \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4284 { \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4285 id = charset_jisx0208_1978; \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4286 charset = CHARSET_FROM_ID (id); \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4287 } \
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4288 \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4289 if (CODING_ISO_SINGLE_SHIFTING (coding)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4290 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4291 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4292 EMIT_TWO_ASCII_BYTES ((c1) & 0x7F, (c2) & 0x7F); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4293 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4294 EMIT_TWO_BYTES ((c1) | 0x80, (c2) | 0x80); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4295 CODING_ISO_SINGLE_SHIFTING (coding) = 0; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4296 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4297 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4298 else if (id == CODING_ISO_INVOKED_CHARSET (coding, 0)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4299 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4300 EMIT_TWO_ASCII_BYTES ((c1) & 0x7F, (c2) & 0x7F); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4301 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4302 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4303 else if (id == CODING_ISO_INVOKED_CHARSET (coding, 1)) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4304 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4305 EMIT_TWO_BYTES ((c1) | 0x80, (c2) | 0x80); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4306 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4307 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4308 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4309 /* Since CHARSET is not yet invoked to any graphic planes, we \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4310 must invoke it, or, at first, designate it to some graphic \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4311 register. Then repeat the loop to actually produce the \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4312 character. */ \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4313 dst = encode_invocation_designation (charset, coding, dst, \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4314 &produced_chars); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4315 } while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4316
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4317
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4318 #define ENCODE_ISO_CHARACTER(charset, c) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4319 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4320 int code = ENCODE_CHAR ((charset),(c)); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4321 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4322 if (CHARSET_DIMENSION (charset) == 1) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4323 ENCODE_ISO_CHARACTER_DIMENSION1 ((charset), code); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4324 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4325 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
4326 } while (0)
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4327
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
4328
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4329 /* 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
4330 to use CHARSET. The element `spec.iso_2022' of *CODING is updated.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4331 Return new DST. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4332
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4333 unsigned char *
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4334 encode_invocation_designation (charset, coding, dst, p_nchars)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4335 struct charset *charset;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4336 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4337 unsigned char *dst;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4338 int *p_nchars;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4339 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4340 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4341 int produced_chars = *p_nchars;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4342 int reg; /* graphic register number */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4343 int id = CHARSET_ID (charset);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4344
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4345 /* At first, check designations. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4346 for (reg = 0; reg < 4; reg++)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4347 if (id == CODING_ISO_DESIGNATION (coding, reg))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4348 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4349
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4350 if (reg >= 4)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4351 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4352 /* CHARSET is not yet designated to any graphic registers. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4353 /* At first check the requested designation. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4354 reg = CODING_ISO_REQUEST (coding, id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4355 if (reg < 0)
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
4356 /* Since CHARSET requests no special designation, designate it
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
4357 to graphic register 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4358 reg = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4359
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4360 ENCODE_DESIGNATION (charset, reg, coding);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4361 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4362
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4363 if (CODING_ISO_INVOCATION (coding, 0) != reg
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4364 && CODING_ISO_INVOCATION (coding, 1) != reg)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4365 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4366 /* Since the graphic register REG is not invoked to any graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4367 planes, invoke it to graphic plane 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4368 switch (reg)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4369 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4370 case 0: /* graphic register 0 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4371 ENCODE_SHIFT_IN;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4372 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4373
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4374 case 1: /* graphic register 1 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4375 ENCODE_SHIFT_OUT;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4376 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4377
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4378 case 2: /* graphic register 2 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4379 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4380 ENCODE_SINGLE_SHIFT_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4381 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4382 ENCODE_LOCKING_SHIFT_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4383 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4384
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4385 case 3: /* graphic register 3 */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4386 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SINGLE_SHIFT)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4387 ENCODE_SINGLE_SHIFT_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4388 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4389 ENCODE_LOCKING_SHIFT_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4390 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4391 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4392 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4393
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4394 *p_nchars = produced_chars;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4395 return dst;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4396 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4397
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4398 /* The following three macros produce codes for indicating direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4399 of text. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4400 #define ENCODE_CONTROL_SEQUENCE_INTRODUCER \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4401 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4402 if (CODING_ISO_FLAGS (coding) == CODING_ISO_FLAG_SEVEN_BITS) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4403 EMIT_TWO_ASCII_BYTES (ISO_CODE_ESC, '['); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4404 else \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4405 EMIT_ONE_BYTE (ISO_CODE_CSI); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4406 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4407
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4408
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4409 #define ENCODE_DIRECTION_R2L() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4410 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4411 ENCODE_CONTROL_SEQUENCE_INTRODUCER (dst); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4412 EMIT_TWO_ASCII_BYTES ('2', ']'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4413 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4414
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4415
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4416 #define ENCODE_DIRECTION_L2R() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4417 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4418 ENCODE_CONTROL_SEQUENCE_INTRODUCER (dst); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4419 EMIT_TWO_ASCII_BYTES ('0', ']'); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4420 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4421
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4422
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4423 /* Produce codes for designation and invocation to reset the graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4424 planes and registers to initial state. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4425 #define ENCODE_RESET_PLANE_AND_REGISTER() \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4426 do { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4427 int reg; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4428 struct charset *charset; \
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 if (CODING_ISO_INVOCATION (coding, 0) != 0) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4431 ENCODE_SHIFT_IN; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4432 for (reg = 0; reg < 4; reg++) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4433 if (CODING_ISO_INITIAL (coding, reg) >= 0 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4434 && (CODING_ISO_DESIGNATION (coding, reg) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4435 != CODING_ISO_INITIAL (coding, reg))) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4436 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4437 charset = CHARSET_FROM_ID (CODING_ISO_INITIAL (coding, reg)); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4438 ENCODE_DESIGNATION (charset, reg, coding); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4439 } \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4440 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4441
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4442
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4443 /* 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
4444 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
4445
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4446 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
4447 find all the necessary designations. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4448
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4449 static unsigned char *
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4450 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
4451 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4452 int *charbuf, *charbuf_end;
59168
0345f2b10f1d (decode_coding_XXX, decode_composition_emacs_mule)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59095
diff changeset
4453 unsigned char *dst;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4454 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4455 struct charset *charset;
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4456 /* 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
4457 int r[4];
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4458 int c, found = 0, reg;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4459 int produced_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4460 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4461 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4462 Lisp_Object charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4463
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4464 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4465 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4466 if (EQ (charset_list, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4467 charset_list = Viso_2022_charset_list;
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4468
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4469 for (reg = 0; reg < 4; reg++)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4470 r[reg] = -1;
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4471
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4472 while (found < 4)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4473 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4474 int id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4475
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4476 c = *charbuf++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4477 if (c == '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4478 break;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4479 charset = char_charset (c, charset_list, NULL);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4480 id = CHARSET_ID (charset);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4481 reg = CODING_ISO_REQUEST (coding, id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4482 if (reg >= 0 && r[reg] < 0)
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4483 {
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4484 found++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4485 r[reg] = id;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4486 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4487 }
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4488
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4489 if (found)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4490 {
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4491 for (reg = 0; reg < 4; reg++)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4492 if (r[reg] >= 0
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4493 && CODING_ISO_DESIGNATION (coding, reg) != r[reg])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4494 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
4495 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4496
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4497 return dst;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4498 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4499
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4500 /* See the above "GENERAL NOTES on `encode_coding_XXX ()' functions". */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4501
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4502 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4503 encode_coding_iso_2022 (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4504 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4505 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4506 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4507 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4508 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4509 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4510 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4511 int safe_room = 16;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4512 int bol_designation
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4513 = (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_DESIGNATE_AT_BOL
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4514 && CODING_ISO_BOL (coding));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4515 int produced_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4516 Lisp_Object attrs, eol_type, charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4517 int ascii_compatible;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4518 int c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4519 int preferred_charset_id = -1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4520
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4521 CODING_GET_INFO (coding, attrs, charset_list);
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
4522 eol_type = inhibit_eol_conversion ? Qunix : CODING_ID_EOL_TYPE (coding->id);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4523 if (VECTORP (eol_type))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4524 eol_type = Qunix;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4525
88497
d2b9e0d4c2f6 (Fdecode_sjis_char): Fix typo (0x7F->0xFF). Fix the
Kenichi Handa <handa@m17n.org>
parents: 88485
diff changeset
4526 setup_iso_safe_charsets (attrs);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4527 /* Charset list may have been changed. */
90772
b15334b4a9c3 (coding_alloc_by_making_gap): New arg offset.
Kenichi Handa <handa@m17n.org>
parents: 90737
diff changeset
4528 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
4529 coding->safe_charsets = SDATA (CODING_ATTR_SAFE_CHARSETS (attrs));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4530
110336
3ffb3b102dae coding.c (encode_coding_iso_2022): Do not optimize for ASCII if we may use designation or locking-shift.
Kenichi Handa <handa@m17n.org>
parents: 110334
diff changeset
4531 ascii_compatible
3ffb3b102dae coding.c (encode_coding_iso_2022): Do not optimize for ASCII if we may use designation or locking-shift.
Kenichi Handa <handa@m17n.org>
parents: 110334
diff changeset
4532 = (! NILP (CODING_ATTR_ASCII_COMPAT (attrs))
3ffb3b102dae coding.c (encode_coding_iso_2022): Do not optimize for ASCII if we may use designation or locking-shift.
Kenichi Handa <handa@m17n.org>
parents: 110334
diff changeset
4533 && ! (CODING_ISO_FLAGS (coding) & (CODING_ISO_FLAG_DESIGNATION
3ffb3b102dae coding.c (encode_coding_iso_2022): Do not optimize for ASCII if we may use designation or locking-shift.
Kenichi Handa <handa@m17n.org>
parents: 110334
diff changeset
4534 | CODING_ISO_FLAG_LOCKING_SHIFT)));
88365
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 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4537 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4538 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4539
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4540 if (bol_designation)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4541 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4542 unsigned char *dst_prev = dst;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4543
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
4544 /* We have to produce designation sequences if any now. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4545 dst = encode_designation_at_bol (coding, charbuf, charbuf_end, dst);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4546 bol_designation = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4547 /* We are sure that designation sequences are all ASCII bytes. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4548 produced_chars += dst - dst_prev;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4549 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
4550
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4551 c = *charbuf++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4552
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4553 if (c < 0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4554 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4555 /* Handle an annotation. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4556 switch (*charbuf)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4557 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4558 case CODING_ANNOTATE_COMPOSITION_MASK:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4559 /* Not yet implemented. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4560 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4561 case CODING_ANNOTATE_CHARSET_MASK:
90014
ade0c9a12f99 (encode_coding_iso_2022): Fix handling of charset
Kenichi Handa <handa@m17n.org>
parents: 90011
diff changeset
4562 preferred_charset_id = charbuf[2];
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4563 if (preferred_charset_id >= 0
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4564 && NILP (Fmemq (make_number (preferred_charset_id),
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4565 charset_list)))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4566 preferred_charset_id = -1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4567 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4568 default:
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4569 abort ();
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
4570 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4571 charbuf += -c - 1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4572 continue;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4573 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4574
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4575 /* 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
4576 if (c < 0x20 || c == 0x7F)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4577 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4578 if (c == '\n'
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4579 || (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
4580 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4581 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_RESET_AT_EOL)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4582 ENCODE_RESET_PLANE_AND_REGISTER ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4583 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_INIT_AT_BOL)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4584 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4585 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4586
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4587 for (i = 0; i < 4; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4588 CODING_ISO_DESIGNATION (coding, i)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4589 = CODING_ISO_INITIAL (coding, i);
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 bol_designation
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4592 = 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
4593 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4594 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
4595 ENCODE_RESET_PLANE_AND_REGISTER ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4596 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
4597 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4598 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
4599 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4600 if (ascii_compatible)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4601 EMIT_ONE_ASCII_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4602 else
88681
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4603 {
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4604 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
4605 ENCODE_ISO_CHARACTER (charset, c);
2cdfbffa8a0d (CODING_ISO_FLAG_USE_ROMAN): New macro
Kenichi Handa <handa@m17n.org>
parents: 88669
diff changeset
4606 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4607 }
88690
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4608 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
4609 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
4610 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
4611 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
4612 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4613 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4614 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4615 struct charset *charset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4616
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4617 if (preferred_charset_id >= 0)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4618 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4619 charset = CHARSET_FROM_ID (preferred_charset_id);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4620 if (! CHAR_CHARSET_P (c, charset))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4621 charset = char_charset (c, charset_list, NULL);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4622 }
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
4623 else
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4624 charset = char_charset (c, charset_list, NULL);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4625 if (!charset)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4626 {
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4627 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
4628 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4629 c = CODING_INHIBIT_CHARACTER_SUBSTITUTION;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4630 charset = CHARSET_FROM_ID (charset_ascii);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4631 }
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4632 else
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4633 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4634 c = coding->default_char;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
4635 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
4636 }
19052
302a7b2a6948 (encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents: 18910
diff changeset
4637 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4638 ENCODE_ISO_CHARACTER (charset, c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4639 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4640 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4641
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4642 if (coding->mode & CODING_MODE_LAST_BLOCK
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4643 && CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_RESET_AT_EOL)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4644 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4645 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4646 ENCODE_RESET_PLANE_AND_REGISTER ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4647 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4648 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4649 CODING_ISO_BOL (coding) = bol_designation;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4650 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4651 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4652 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4653 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4654
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4655
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4656 /*** 8,9. SJIS and BIG5 handlers ***/
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 /* 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
4659 quite widely. So, for the moment, Emacs supports them in the bare
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4660 C code. But, in the future, they may be supported only by CCL. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4661
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4662 /* SJIS is a coding system encoding three character sets: ASCII, right
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4663 half of JISX0201-Kana, and JISX0208. An ASCII character is encoded
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4664 as is. A character of charset katakana-jisx0201 is encoded by
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4665 "position-code + 0x80". A character of charset japanese-jisx0208
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4666 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
4667 so that it fit in the range below.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4668
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4669 --- CODE RANGE of SJIS ---
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4670 (character set) (range)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4671 ASCII 0x00 .. 0x7F
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4672 KATAKANA-JISX0201 0xA0 .. 0xDF
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
4673 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
4674 (2nd byte) 0x40 .. 0x7E and 0x80 .. 0xFC
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4675 -------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4676
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4677 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4678
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4679 /* BIG5 is a coding system encoding two character sets: ASCII and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4680 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
4681 character set and is encoded in two-byte.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4682
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4683 --- CODE RANGE of BIG5 ---
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4684 (character set) (range)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4685 ASCII 0x00 .. 0x7F
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4686 Big5 (1st byte) 0xA1 .. 0xFE
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4687 (2nd byte) 0x40 .. 0x7E and 0xA1 .. 0xFE
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4688 --------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4689
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4690 */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4691
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4692 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4693 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
4694 CATEGORY_MASK_SJIS, else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4695
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4696 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4697 detect_coding_sjis (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4698 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4699 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4700 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4701 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4702 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4703 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4704 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4705 int found = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4706 int c;
103762
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
4707 Lisp_Object attrs, charset_list;
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
4708 int max_first_byte_of_2_byte_code;
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
4709
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
4710 CODING_GET_INFO (coding, attrs, charset_list);
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
4711 max_first_byte_of_2_byte_code
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
4712 = (XINT (Flength (charset_list)) > 3 ? 0xFC : 0xEF);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4713
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4714 detect_info->checked |= CATEGORY_MASK_SJIS;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4715 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4716 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
4717
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4718 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4719 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4720 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4721 ONE_MORE_BYTE (c);
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
4722 if (c < 0x80)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
4723 continue;
103762
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
4724 if ((c >= 0x81 && c <= 0x9F)
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
4725 || (c >= 0xE0 && c <= max_first_byte_of_2_byte_code))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4726 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4727 ONE_MORE_BYTE (c);
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
4728 if (c < 0x40 || c == 0x7F || c > 0xFC)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4729 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4730 found = CATEGORY_MASK_SJIS;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4731 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4732 else if (c >= 0xA0 && c < 0xE0)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4733 found = CATEGORY_MASK_SJIS;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4734 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4735 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4736 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4737 detect_info->rejected |= CATEGORY_MASK_SJIS;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4738 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4739
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4740 no_more_source:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4741 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
4742 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4743 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
4744 return 0;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
4745 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4746 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4747 return 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4748 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4749
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4750 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4751 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
4752 CATEGORY_MASK_BIG5, else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4753
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4754 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4755 detect_coding_big5 (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4756 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4757 struct coding_detection_info *detect_info;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4758 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4759 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4760 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4761 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4762 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4763 int found = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4764 int c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4765
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4766 detect_info->checked |= CATEGORY_MASK_BIG5;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4767 /* A coding system of this category is always ASCII compatible. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4768 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
4769
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4770 while (1)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4771 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4772 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4773 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4774 if (c < 0x80)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4775 continue;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4776 if (c >= 0xA1)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4777 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4778 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4779 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
4780 return 0;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4781 found = CATEGORY_MASK_BIG5;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4782 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4783 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4784 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4785 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4786 detect_info->rejected |= CATEGORY_MASK_BIG5;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4787 return 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4788
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4789 no_more_source:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4790 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
4791 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4792 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
4793 return 0;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
4794 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4795 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4796 return 1;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4797 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4798
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4799 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4800 If SJIS_P is 1, decode SJIS text, else decode BIG5 test. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4801
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4802 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4803 decode_coding_sjis (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4804 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4805 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4806 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4807 const unsigned char *src_end = coding->source + coding->src_bytes;
59168
0345f2b10f1d (decode_coding_XXX, decode_composition_emacs_mule)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59095
diff changeset
4808 const unsigned char *src_base;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4809 int *charbuf = coding->charbuf + coding->charbuf_used;
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
4810 /* We may produce one charset annotation in one loop and one more at
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
4811 the end. */
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4812 int *charbuf_end
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
4813 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4814 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4815 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4816 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
4817 struct charset *charset_kanji2;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4818 Lisp_Object attrs, charset_list, val;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4819 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4820 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4821 int last_id = charset_ascii;
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
4822 int eol_crlf =
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
4823 !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4824 int byte_after_cr = -1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4825
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4826 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4827
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4828 val = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4829 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
4830 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
4831 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
4832 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
4833
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4834 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4835 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4836 int c, c1;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4837 struct charset *charset;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4838
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4839 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4840 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4841
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4842 if (charbuf >= charbuf_end)
100936
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4843 {
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4844 if (byte_after_cr >= 0)
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4845 src_base--;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4846 break;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4847 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4848
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4849 if (byte_after_cr >= 0)
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4850 c = byte_after_cr, byte_after_cr = -1;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4851 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4852 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4853 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4854 goto invalid_code;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4855 if (c < 0x80)
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4856 {
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4857 if (eol_crlf && c == '\r')
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4858 ONE_MORE_BYTE (byte_after_cr);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4859 charset = charset_roman;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4860 }
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4861 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
4862 goto invalid_code;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4863 else if (c >= 0xA1 && c <= 0xDF)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4864 {
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4865 /* SJIS -> JISX0201-Kana */
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4866 c &= 0x7F;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4867 charset = charset_kana;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4868 }
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4869 else if (c <= 0xEF)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4870 {
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4871 /* SJIS -> JISX0208 */
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4872 ONE_MORE_BYTE (c1);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4873 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
4874 goto invalid_code;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4875 c = (c << 8) | c1;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4876 SJIS_TO_JIS (c);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4877 charset = charset_kanji;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4878 }
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4879 else if (c <= 0xFC && charset_kanji2)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4880 {
89779
74c503490829 (decode_coding_sjis): Fix comment.
Kenichi Handa <handa@m17n.org>
parents: 89764
diff changeset
4881 /* SJIS -> JISX0213-2 */
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4882 ONE_MORE_BYTE (c1);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4883 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
4884 goto invalid_code;
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4885 c = (c << 8) | c1;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4886 SJIS_TO_JIS2 (c);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4887 charset = charset_kanji2;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4888 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4889 else
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
4890 goto invalid_code;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4891 if (charset->id != charset_ascii
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4892 && last_id != charset->id)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4893 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4894 if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4895 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4896 last_id = charset->id;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4897 last_offset = char_offset;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4898 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4899 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
4900 *charbuf++ = c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4901 char_offset++;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4902 continue;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4903
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4904 invalid_code:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4905 src = src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4906 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4907 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4908 *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
4909 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4910 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4911 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4912
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4913 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4914 if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4915 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4916 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4917 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4918 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4919 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4920
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4921 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4922 decode_coding_big5 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4923 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4924 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4925 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4926 const unsigned char *src_end = coding->source + coding->src_bytes;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
4927 const unsigned char *src_base;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4928 int *charbuf = coding->charbuf + coding->charbuf_used;
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
4929 /* We may produce one charset annotation in one loop and one more at
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
4930 the end. */
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4931 int *charbuf_end
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
4932 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4933 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4934 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4935 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
4936 Lisp_Object attrs, charset_list, val;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4937 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4938 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4939 int last_id = charset_ascii;
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
4940 int eol_crlf =
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
4941 !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4942 int byte_after_cr = -1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4943
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4944 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4945 val = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4946 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4947 charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val)));
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 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4950 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4951 int c, c1;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4952 struct charset *charset;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4953
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4954 src_base = src;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4955 consumed_chars_base = consumed_chars;
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 if (charbuf >= charbuf_end)
100936
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4958 {
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4959 if (byte_after_cr >= 0)
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4960 src_base--;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4961 break;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
4962 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4963
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4964 if (byte_after_cr >= 0)
92406
c36bda0a03cc (decode_coding_big5, produce_chars): Fix typos in last
Andreas Schwab <schwab@suse.de>
parents: 92399
diff changeset
4965 c = byte_after_cr, byte_after_cr = -1;
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4966 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4967 ONE_MORE_BYTE (c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4968
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4969 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
4970 goto invalid_code;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4971 if (c < 0x80)
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4972 {
92406
c36bda0a03cc (decode_coding_big5, produce_chars): Fix typos in last
Andreas Schwab <schwab@suse.de>
parents: 92399
diff changeset
4973 if (eol_crlf && c == '\r')
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4974 ONE_MORE_BYTE (byte_after_cr);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4975 charset = charset_roman;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
4976 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4977 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
4978 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4979 /* BIG5 -> Big5 */
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4980 if (c < 0xA1 || c > 0xFE)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4981 goto invalid_code;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4982 ONE_MORE_BYTE (c1);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4983 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
4984 goto invalid_code;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4985 c = c << 8 | c1;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4986 charset = charset_big5;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4987 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4988 if (charset->id != charset_ascii
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4989 && last_id != charset->id)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4990 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4991 if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
4992 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4993 last_id = charset->id;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4994 last_offset = char_offset;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4995 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
4996 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
4997 *charbuf++ = c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
4998 char_offset++;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4999 continue;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5000
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5001 invalid_code:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5002 src = src_base;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5003 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5004 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5005 *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
5006 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5007 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5008 }
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 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5011 if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
5012 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5013 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5014 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5015 coding->charbuf_used = charbuf - coding->charbuf;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5016 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5017
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5018 /* 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
5019 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
5020 `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
5021 are sure that all these charsets are registered as official charset
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5022 (i.e. do not have extended leading-codes). Characters of other
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5023 charsets are produced without any encoding. If SJIS_P is 1, encode
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5024 SJIS text, else encode BIG5 text. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5025
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5026 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5027 encode_coding_sjis (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5028 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5029 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5030 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5031 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5032 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5033 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5034 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5035 int safe_room = 4;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5036 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5037 Lisp_Object attrs, charset_list, val;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5038 int ascii_compatible;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5039 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
5040 struct charset *charset_kanji2;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5041 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5042
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5043 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5044 val = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5045 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5046 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
5047 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
5048 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
5049
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5050 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
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 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5053 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5054 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5055 c = *charbuf++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5056 /* Now encode the character C. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5057 if (ASCII_CHAR_P (c) && ascii_compatible)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5058 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
5059 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
5060 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
5061 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
5062 EMIT_ONE_BYTE (c);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5063 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5064 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5065 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5066 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5067 struct charset *charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5068
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5069 if (!charset)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5070 {
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5071 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
5072 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5073 code = CODING_INHIBIT_CHARACTER_SUBSTITUTION;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5074 charset = CHARSET_FROM_ID (charset_ascii);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5075 }
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5076 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5077 {
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5078 c = coding->default_char;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5079 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
5080 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5081 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5082 if (code == CHARSET_INVALID_CODE (charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5083 abort ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5084 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
5085 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5086 int c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5087 JIS_TO_SJIS (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5088 c1 = code >> 8, c2 = code & 0xFF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5089 EMIT_TWO_BYTES (c1, c2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5090 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5091 else if (charset == charset_kana)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5092 EMIT_ONE_BYTE (code | 0x80);
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5093 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
5094 {
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5095 int c1, c2;
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5096
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5097 c1 = code >> 8;
103762
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
5098 if (c1 == 0x21 || (c1 >= 0x23 && c1 <= 0x25)
e72df94a89ca (detect_coding_sjis): Handle shift_jis-2004 correctly.
Kenichi Handa <handa@m17n.org>
parents: 103655
diff changeset
5099 || c1 == 0x28
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5100 || (c1 >= 0x2C && c1 <= 0x2F) || c1 >= 0x6E)
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5101 {
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5102 JIS_TO_SJIS2 (code);
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5103 c1 = code >> 8, c2 = code & 0xFF;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5104 EMIT_TWO_BYTES (c1, c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5105 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5106 else
89764
e3d26232ab78 (decode_coding_sjis): Handle 4th charset (typically JISX0212).
Kenichi Handa <handa@m17n.org>
parents: 89759
diff changeset
5107 EMIT_ONE_ASCII_BYTE (code & 0x7F);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5108 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5109 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5110 EMIT_ONE_ASCII_BYTE (code & 0x7F);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5111 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5112 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5113 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5114 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5115 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5116 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5117 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5118
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5119 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5120 encode_coding_big5 (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5121 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5122 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5123 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5124 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5125 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5126 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5127 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5128 int safe_room = 4;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5129 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5130 Lisp_Object attrs, charset_list, val;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5131 int ascii_compatible;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5132 struct charset *charset_roman, *charset_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5133 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5134
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5135 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5136 val = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5137 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5138 charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5139 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5140
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5141 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5142 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5143 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5144 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5145 /* Now encode the character C. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5146 if (ASCII_CHAR_P (c) && ascii_compatible)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5147 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
5148 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
5149 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
5150 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
5151 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
5152 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5153 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5154 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5155 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5156 struct charset *charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5157
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5158 if (! charset)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5159 {
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5160 if (coding->mode & CODING_MODE_SAFE_ENCODING)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5161 {
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5162 code = CODING_INHIBIT_CHARACTER_SUBSTITUTION;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5163 charset = CHARSET_FROM_ID (charset_ascii);
51140
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
5164 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5165 else
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5166 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5167 c = coding->default_char;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5168 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
5169 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5170 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5171 if (code == CHARSET_INVALID_CODE (charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5172 abort ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5173 if (charset == charset_big5)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5174 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5175 int c1, c2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5176
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5177 c1 = code >> 8, c2 = code & 0xFF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5178 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
5179 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5180 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5181 EMIT_ONE_ASCII_BYTE (code & 0x7F);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5182 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5183 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5184 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5185 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5186 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5187 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5188 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5189
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5190
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5191 /*** 10. CCL handlers ***/
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5192
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5193 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5194 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
5195 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
5196 CATEGORY_MASK_CCL, else return 0. */
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5197
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
5198 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5199 detect_coding_ccl (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5200 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5201 struct coding_detection_info *detect_info;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5202 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5203 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5204 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5205 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5206 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5207 int found = 0;
89848
3edfa038a435 (detect_coding_emacs_mule): Fix counting of encoded
Kenichi Handa <handa@m17n.org>
parents: 89842
diff changeset
5208 unsigned char *valids;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5209 int head_ascii = coding->head_ascii;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5210 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5211
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5212 detect_info->checked |= CATEGORY_MASK_CCL;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5213
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5214 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
5215 valids = CODING_CCL_VALIDS (coding);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5216 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5217 if (! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5218 src += head_ascii;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5219
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5220 while (1)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5221 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5222 int c;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5223
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5224 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5225 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5226 if (c < 0 || ! valids[c])
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5227 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5228 if ((valids[c] > 1))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5229 found = CATEGORY_MASK_CCL;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5230 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5231 detect_info->rejected |= CATEGORY_MASK_CCL;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5232 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5233
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5234 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5235 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5236 return 1;
88365
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5239 static void
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5240 decode_coding_ccl (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5241 struct coding_system *coding;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5242 {
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
5243 const unsigned char *src = coding->source + coding->consumed;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5244 const unsigned char *src_end = coding->source + coding->src_bytes;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
5245 int *charbuf = coding->charbuf + coding->charbuf_used;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
5246 int *charbuf_end = coding->charbuf + coding->charbuf_size;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5247 int consumed_chars = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5248 int multibytep = coding->src_multibyte;
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5249 struct ccl_program *ccl = &coding->spec.ccl->ccl;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5250 int source_charbuf[1024];
107506
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5251 int source_byteidx[1025];
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5252 Lisp_Object attrs, charset_list;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5253
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5254 CODING_GET_INFO (coding, attrs, charset_list);
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5255
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5256 while (1)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5257 {
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
5258 const unsigned char *p = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5259 int i = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5260
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5261 if (multibytep)
107506
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5262 {
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5263 while (i < 1024 && p < src_end)
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5264 {
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5265 source_byteidx[i] = p - src;
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5266 source_charbuf[i++] = STRING_CHAR_ADVANCE (p);
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5267 }
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5268 source_byteidx[i] = p - src;
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5269 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5270 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5271 while (i < 1024 && p < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5272 source_charbuf[i++] = *p++;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5273
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5274 if (p == src_end && coding->mode & CODING_MODE_LAST_BLOCK)
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5275 ccl->last_block = 1;
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5276 ccl_driver (ccl, source_charbuf, charbuf, i, charbuf_end - charbuf,
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5277 charset_list);
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5278 charbuf += ccl->produced;
107506
cd151730b160 coding.c (decode_coding_ccl): Fix previous change for the multibyte case.
Kenichi Handa <handa@m17n.org>
parents: 107323
diff changeset
5279 if (multibytep)
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5280 src += source_byteidx[ccl->consumed];
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5281 else
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5282 src += ccl->consumed;
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5283 consumed_chars += ccl->consumed;
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5284 if (p == src_end || ccl->status != CCL_STAT_SUSPEND_BY_SRC)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5285 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5286 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5287
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5288 switch (ccl->status)
88365
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 case CCL_STAT_SUSPEND_BY_SRC:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5291 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_SRC);
88365
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 case CCL_STAT_SUSPEND_BY_DST:
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
5294 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_DST);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5295 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5296 case CCL_STAT_QUIT:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5297 case CCL_STAT_INVALID_CMD:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5298 record_conversion_result (coding, CODING_RESULT_INTERRUPT);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5299 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5300 default:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5301 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5302 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5303 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5304 coding->consumed_char += consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5305 coding->consumed = src - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5306 coding->charbuf_used = charbuf - coding->charbuf;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5307 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5308
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5309 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5310 encode_coding_ccl (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5311 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5312 {
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5313 struct ccl_program *ccl = &coding->spec.ccl->ccl;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5314 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5315 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5316 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5317 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5318 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5319 int destination_charbuf[1024];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5320 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
5321 Lisp_Object attrs, charset_list;
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_GET_INFO (coding, attrs, charset_list);
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5324 if (coding->consumed_char == coding->src_chars
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5325 && coding->mode & CODING_MODE_LAST_BLOCK)
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5326 ccl->last_block = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5327
90346
bba59a8cdae0 (encode_coding_ccl): Allocate destination dynamically
Kenichi Handa <handa@m17n.org>
parents: 90336
diff changeset
5328 while (charbuf < charbuf_end)
bba59a8cdae0 (encode_coding_ccl): Allocate destination dynamically
Kenichi Handa <handa@m17n.org>
parents: 90336
diff changeset
5329 {
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5330 ccl_driver (ccl, charbuf, destination_charbuf,
90346
bba59a8cdae0 (encode_coding_ccl): Allocate destination dynamically
Kenichi Handa <handa@m17n.org>
parents: 90336
diff changeset
5331 charbuf_end - charbuf, 1024, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5332 if (multibytep)
90346
bba59a8cdae0 (encode_coding_ccl): Allocate destination dynamically
Kenichi Handa <handa@m17n.org>
parents: 90336
diff changeset
5333 {
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5334 ASSURE_DESTINATION (ccl->produced * 2);
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5335 for (i = 0; i < ccl->produced; i++)
90346
bba59a8cdae0 (encode_coding_ccl): Allocate destination dynamically
Kenichi Handa <handa@m17n.org>
parents: 90336
diff changeset
5336 EMIT_ONE_BYTE (destination_charbuf[i] & 0xFF);
bba59a8cdae0 (encode_coding_ccl): Allocate destination dynamically
Kenichi Handa <handa@m17n.org>
parents: 90336
diff changeset
5337 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5338 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5339 {
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5340 ASSURE_DESTINATION (ccl->produced);
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5341 for (i = 0; i < ccl->produced; i++)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5342 *dst++ = destination_charbuf[i] & 0xFF;
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5343 produced_chars += ccl->produced;
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5344 }
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5345 charbuf += ccl->consumed;
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5346 if (ccl->status == CCL_STAT_QUIT
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5347 || ccl->status == CCL_STAT_INVALID_CMD)
90346
bba59a8cdae0 (encode_coding_ccl): Allocate destination dynamically
Kenichi Handa <handa@m17n.org>
parents: 90336
diff changeset
5348 break;
88365
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
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
5351 switch (ccl->status)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5352 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5353 case CCL_STAT_SUSPEND_BY_SRC:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5354 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_SRC);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5355 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5356 case CCL_STAT_SUSPEND_BY_DST:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5357 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_DST);
88365
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 case CCL_STAT_QUIT:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5360 case CCL_STAT_INVALID_CMD:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5361 record_conversion_result (coding, CODING_RESULT_INTERRUPT);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5362 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5363 default:
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5364 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5365 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5366 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5367
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5368 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5369 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5370 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5371 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5372
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5373
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5374
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5375 /*** 10, 11. no-conversion handlers ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5376
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5377 /* 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
5378
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5379 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5380 decode_coding_raw_text (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5381 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5382 {
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
5383 int eol_crlf =
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
5384 !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5385
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5386 coding->chars_at_source = 1;
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5387 coding->consumed_char = coding->src_chars;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5388 coding->consumed = coding->src_bytes;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5389 if (eol_crlf && coding->source[coding->src_bytes - 1] == '\r')
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5390 {
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5391 coding->consumed_char--;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5392 coding->consumed--;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5393 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_SRC);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5394 }
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5395 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5396 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5397 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5398
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5399 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5400 encode_coding_raw_text (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5401 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5402 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5403 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5404 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5405 int *charbuf_end = coding->charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5406 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5407 unsigned char *dst_end = coding->destination + coding->dst_bytes;
95345
0350e5efb8f7 (encode_coding_raw_text): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95344
diff changeset
5408 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
5409 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5410
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5411 if (multibytep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5412 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5413 int safe_room = MAX_MULTIBYTE_LENGTH * 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5414
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5415 if (coding->src_multibyte)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5416 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5417 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5418 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5419 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5420 if (ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5421 EMIT_ONE_ASCII_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5422 else if (CHAR_BYTE8_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5423 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5424 c = CHAR_TO_BYTE8 (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5425 EMIT_ONE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5426 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5427 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5428 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5429 unsigned char str[MAX_MULTIBYTE_LENGTH], *p0 = str, *p1 = str;
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 CHAR_STRING_ADVANCE (c, p1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5432 while (p0 < p1)
88950
ad258ee59fbb * coding.c (make_conversion_work_buffer): Adjusted for the change
Kenichi Handa <handa@m17n.org>
parents: 88936
diff changeset
5433 {
ad258ee59fbb * coding.c (make_conversion_work_buffer): Adjusted for the change
Kenichi Handa <handa@m17n.org>
parents: 88936
diff changeset
5434 EMIT_ONE_BYTE (*p0);
ad258ee59fbb * coding.c (make_conversion_work_buffer): Adjusted for the change
Kenichi Handa <handa@m17n.org>
parents: 88936
diff changeset
5435 p0++;
ad258ee59fbb * coding.c (make_conversion_work_buffer): Adjusted for the change
Kenichi Handa <handa@m17n.org>
parents: 88936
diff changeset
5436 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5437 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5438 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5439 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5440 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5441 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5442 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5443 c = *charbuf++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5444 EMIT_ONE_BYTE (c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5445 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5446 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5447 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5448 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5449 if (coding->src_multibyte)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5450 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5451 int safe_room = MAX_MULTIBYTE_LENGTH;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5452
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5453 while (charbuf < charbuf_end)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5454 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5455 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5456 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5457 if (ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5458 *dst++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5459 else if (CHAR_BYTE8_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5460 *dst++ = CHAR_TO_BYTE8 (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5461 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5462 CHAR_STRING_ADVANCE (c, dst);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5463 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5464 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5465 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5466 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5467 ASSURE_DESTINATION (charbuf_end - charbuf);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5468 while (charbuf < charbuf_end && dst < dst_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5469 *dst++ = *charbuf++;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5470 }
95353
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
5471 produced_chars = dst - (coding->destination + coding->produced);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5472 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5473 record_conversion_result (coding, CODING_RESULT_SUCCESS);
95345
0350e5efb8f7 (encode_coding_raw_text): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95344
diff changeset
5474 coding->produced_char += produced_chars;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5475 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5476 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5477 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5478
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5479 /* 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
5480 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
5481 is, return 1, else return 0. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5482
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5483 static int
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5484 detect_coding_charset (coding, detect_info)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5485 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5486 struct coding_detection_info *detect_info;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5487 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5488 const unsigned char *src = coding->source, *src_base;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5489 const unsigned char *src_end = coding->source + coding->src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5490 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5491 int consumed_chars = 0;
98951
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5492 Lisp_Object attrs, valids, name;
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
5493 int found = 0;
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5494 int head_ascii = coding->head_ascii;
98951
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5495 int check_latin_extra = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5496
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5497 detect_info->checked |= CATEGORY_MASK_CHARSET;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5498
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5499 coding = &coding_categories[coding_category_charset];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5500 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5501 valids = AREF (attrs, coding_attr_charset_valids);
98951
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5502 name = CODING_ID_NAME (coding->id);
102327
a1f0d8fadbb1 (detect_coding_charset): Fix last change for non-latin charsets.
Jason Rumney <jasonr@gnu.org>
parents: 102325
diff changeset
5503 if (strncmp ((char *) SDATA (SYMBOL_NAME (name)),
a1f0d8fadbb1 (detect_coding_charset): Fix last change for non-latin charsets.
Jason Rumney <jasonr@gnu.org>
parents: 102325
diff changeset
5504 "iso-8859-", sizeof ("iso-8859-") - 1) == 0
a1f0d8fadbb1 (detect_coding_charset): Fix last change for non-latin charsets.
Jason Rumney <jasonr@gnu.org>
parents: 102325
diff changeset
5505 || strncmp ((char *) SDATA (SYMBOL_NAME (name)),
a1f0d8fadbb1 (detect_coding_charset): Fix last change for non-latin charsets.
Jason Rumney <jasonr@gnu.org>
parents: 102325
diff changeset
5506 "iso-latin-", sizeof ("iso-latin-") - 1) == 0)
98951
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5507 check_latin_extra = 1;
102327
a1f0d8fadbb1 (detect_coding_charset): Fix last change for non-latin charsets.
Jason Rumney <jasonr@gnu.org>
parents: 102325
diff changeset
5508
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5509 if (! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5510 src += head_ascii;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5511
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5512 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5513 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5514 int c;
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5515 Lisp_Object val;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5516 struct charset *charset;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5517 int dim, idx;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5518
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5519 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5520 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5521 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5522 continue;
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5523 val = AREF (valids, c);
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5524 if (NILP (val))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5525 break;
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
5526 if (c >= 0x80)
98951
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5527 {
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5528 if (c < 0xA0
102327
a1f0d8fadbb1 (detect_coding_charset): Fix last change for non-latin charsets.
Jason Rumney <jasonr@gnu.org>
parents: 102325
diff changeset
5529 && check_latin_extra
a1f0d8fadbb1 (detect_coding_charset): Fix last change for non-latin charsets.
Jason Rumney <jasonr@gnu.org>
parents: 102325
diff changeset
5530 && (!VECTORP (Vlatin_extra_code_table)
102325
2c693a021d83 (detect_coding_charset): If not checking latin extra,
Jason Rumney <jasonr@gnu.org>
parents: 102320
diff changeset
5531 || NILP (XVECTOR (Vlatin_extra_code_table)->contents[c])))
98951
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5532 break;
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5533 found = CATEGORY_MASK_CHARSET;
71becd1e9707 (detect_coding_charset): For iso-8859-* coding systems,
Kenichi Handa <handa@m17n.org>
parents: 98186
diff changeset
5534 }
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5535 if (INTEGERP (val))
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5536 {
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5537 charset = CHARSET_FROM_ID (XFASTINT (val));
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5538 dim = CHARSET_DIMENSION (charset);
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5539 for (idx = 1; idx < dim; idx++)
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5540 {
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5541 if (src == src_end)
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5542 goto too_short;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5543 ONE_MORE_BYTE (c);
93877
62d97ebb13a9 * coding.c (detect_coding_emacs_mule)
Michael Albinus <michael.albinus@gmx.de>
parents: 93595
diff changeset
5544 if (c < charset->code_space[(dim - 1 - idx) * 2]
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5545 || c > charset->code_space[(dim - 1 - idx) * 2 + 1])
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5546 break;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5547 }
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5548 if (idx < dim)
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5549 break;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5550 }
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5551 else
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5552 {
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5553 idx = 1;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5554 for (; CONSP (val); val = XCDR (val))
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5555 {
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5556 charset = CHARSET_FROM_ID (XFASTINT (XCAR (val)));
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5557 dim = CHARSET_DIMENSION (charset);
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5558 while (idx < dim)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5559 {
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5560 if (src == src_end)
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5561 goto too_short;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5562 ONE_MORE_BYTE (c);
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5563 if (c < charset->code_space[(dim - 1 - idx) * 4]
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5564 || c > charset->code_space[(dim - 1 - idx) * 4 + 1])
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5565 break;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5566 idx++;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5567 }
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5568 if (idx == dim)
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5569 {
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5570 val = Qnil;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5571 break;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5572 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5573 }
90651
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5574 if (CONSP (val))
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5575 break;
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5576 }
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5577 }
23c1467f8640 (detect_coding_charset): Fix detection of multi-byte
Kenichi Handa <handa@m17n.org>
parents: 90599
diff changeset
5578 too_short:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5579 detect_info->rejected |= CATEGORY_MASK_CHARSET;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5580 return 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5581
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5582 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5583 detect_info->found |= found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5584 return 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5585 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5586
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5587 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5588 decode_coding_charset (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5589 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5590 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5591 const unsigned char *src = coding->source + coding->consumed;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5592 const unsigned char *src_end = coding->source + coding->src_bytes;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
5593 const unsigned char *src_base;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
5594 int *charbuf = coding->charbuf + coding->charbuf_used;
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
5595 /* We may produce one charset annotation in one loop and one more at
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
5596 the end. */
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
5597 int *charbuf_end
103035
6e443d717c7b (decode_coding_utf_16): Reduce charbuf_end for the
Kenichi Handa <handa@m17n.org>
parents: 102738
diff changeset
5598 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5599 int consumed_chars = 0, consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5600 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
5601 Lisp_Object attrs, charset_list, valids;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5602 int char_offset = coding->produced_char;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5603 int last_offset = char_offset;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5604 int last_id = charset_ascii;
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
5605 int eol_crlf =
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
5606 !inhibit_eol_conversion && EQ (CODING_ID_EOL_TYPE (coding->id), Qdos);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5607 int byte_after_cr = -1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5608
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5609 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
5610 valids = AREF (attrs, coding_attr_charset_valids);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5611
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5612 while (1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5613 {
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5614 int c;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5615 Lisp_Object val;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5616 struct charset *charset;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5617 int dim;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5618 int len = 1;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5619 unsigned code;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5620
29093
176708661b08 (encode_eol): Fix a bug of DOS style EOL encoding.
Kenichi Handa <handa@m17n.org>
parents: 29005
diff changeset
5621 src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5622 consumed_chars_base = consumed_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5623
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5624 if (charbuf >= charbuf_end)
100936
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
5625 {
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
5626 if (byte_after_cr >= 0)
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
5627 src_base--;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
5628 break;
5c5e6d041634 (decode_coding_utf_8): Check byte_after_cr before breaking the loop.
Kenichi Handa <handa@m17n.org>
parents: 100587
diff changeset
5629 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5630
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5631 if (byte_after_cr >= 0)
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5632 {
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5633 c = byte_after_cr;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5634 byte_after_cr = -1;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5635 }
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5636 else
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5637 {
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5638 ONE_MORE_BYTE (c);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5639 if (eol_crlf && c == '\r')
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5640 ONE_MORE_BYTE (byte_after_cr);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
5641 }
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5642 if (c < 0)
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5643 goto invalid_code;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5644 code = c;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5645
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5646 val = AREF (valids, c);
100170
86455974b971 (decode_coding_charset): Check type of an element of
Kenichi Handa <handa@m17n.org>
parents: 100135
diff changeset
5647 if (! INTEGERP (val) && ! CONSP (val))
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5648 goto invalid_code;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5649 if (INTEGERP (val))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5650 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5651 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
5652 dim = CHARSET_DIMENSION (charset);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5653 while (len < dim)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5654 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5655 ONE_MORE_BYTE (c);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5656 code = (code << 8) | c;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5657 len++;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5658 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5659 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
5660 charset, code, c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5661 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5662 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5663 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5664 /* 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
5665 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
5666 comes first). */
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5667 while (CONSP (val))
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5668 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5669 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
5670 dim = CHARSET_DIMENSION (charset);
88607
18436bf3d6dd (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88598
diff changeset
5671 while (len < dim)
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5672 {
88598
b88195f69856 (decode_coding_charset): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88597
diff changeset
5673 ONE_MORE_BYTE (c);
b88195f69856 (decode_coding_charset): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88597
diff changeset
5674 code = (code << 8) | c;
88607
18436bf3d6dd (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88598
diff changeset
5675 len++;
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5676 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5677 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
5678 src_end, charset, code, c);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5679 if (c >= 0)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5680 break;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5681 val = XCDR (val);
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5682 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5683 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5684 if (c < 0)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5685 goto invalid_code;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5686 if (charset->id != charset_ascii
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5687 && last_id != charset->id)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5688 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5689 if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
5690 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5691 last_id = charset->id;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5692 last_offset = char_offset;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5693 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5694
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5695 *charbuf++ = c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5696 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5697 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5698
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5699 invalid_code:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5700 src = src_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5701 consumed_chars = consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5702 ONE_MORE_BYTE (c);
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5703 *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
5704 char_offset++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5705 coding->errors++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5706 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5707
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5708 no_more_source:
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5709 if (last_id != charset_ascii)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
5710 ADD_CHARSET_DATA (charbuf, char_offset - last_offset, last_id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5711 coding->consumed_char += consumed_chars_base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5712 coding->consumed = src_base - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5713 coding->charbuf_used = charbuf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5714 }
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 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5717 encode_coding_charset (coding)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5718 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5719 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5720 int multibytep = coding->dst_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5721 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5722 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5723 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5724 unsigned char *dst_end = coding->destination + coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5725 int safe_room = MAX_MULTIBYTE_LENGTH;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5726 int produced_chars = 0;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5727 Lisp_Object attrs, charset_list;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5728 int ascii_compatible;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5729 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5730
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
5731 CODING_GET_INFO (coding, attrs, charset_list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5732 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5733
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5734 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5735 {
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5736 struct charset *charset;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5737 unsigned code;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5738
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5739 ASSURE_DESTINATION (safe_room);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5740 c = *charbuf++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5741 if (ascii_compatible && ASCII_CHAR_P (c))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5742 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
5743 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
5744 {
7f284ac55b07 (encode_coding_emacs_mule): Pay attention to raw-8-bit chars.
Kenichi Handa <handa@m17n.org>
parents: 88681
diff changeset
5745 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
5746 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
5747 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5748 else
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5749 {
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5750 charset = char_charset (c, charset_list, &code);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5751 if (charset)
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5752 {
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5753 if (CHARSET_DIMENSION (charset) == 1)
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5754 EMIT_ONE_BYTE (code);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5755 else if (CHARSET_DIMENSION (charset) == 2)
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5756 EMIT_TWO_BYTES (code >> 8, code & 0xFF);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5757 else if (CHARSET_DIMENSION (charset) == 3)
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5758 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
5759 else
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5760 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
5761 (code >> 8) & 0xFF, code & 0xFF);
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5762 }
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5763 else
88573
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5764 {
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5765 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
5766 c = CODING_INHIBIT_CHARACTER_SUBSTITUTION;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5767 else
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5768 c = coding->default_char;
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5769 EMIT_ONE_BYTE (c);
133bf7ab1bad (encode_coding_iso_2022): If coding requires safe
Kenichi Handa <handa@m17n.org>
parents: 88544
diff changeset
5770 }
88465
ae455bb40718 (decode_coding_charset, encode_coding_charset): Handle
Kenichi Handa <handa@m17n.org>
parents: 88456
diff changeset
5771 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5772 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5773
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
5774 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5775 coding->produced_char += produced_chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5776 coding->produced = dst - coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5777 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5778 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5779
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5780
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
5781 /*** 7. C library functions ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5782
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5783 /* Setup coding context CODING from information about CODING_SYSTEM.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5784 If CODING_SYSTEM is nil, `no-conversion' is assumed. If
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5785 CODING_SYSTEM is invalid, signal an error. */
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 void
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
5788 setup_coding_system (coding_system, coding)
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
5789 Lisp_Object coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5790 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5791 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5792 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5793 Lisp_Object eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5794 Lisp_Object coding_type;
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
5795 Lisp_Object val;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5796
24460
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
5797 if (NILP (coding_system))
90011
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
5798 coding_system = Qundecided;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5799
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5800 CHECK_CODING_SYSTEM_GET_ID (coding_system, coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5801
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5802 attrs = CODING_ID_ATTRS (coding->id);
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
5803 eol_type = inhibit_eol_conversion ? Qunix : CODING_ID_EOL_TYPE (coding->id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5804
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5805 coding->mode = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5806 coding->head_ascii = -1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5807 if (VECTORP (eol_type))
90587
fe721cfad011 (setup_coding_system): Fix setting of
Kenichi Handa <handa@m17n.org>
parents: 90573
diff changeset
5808 coding->common_flags = (CODING_REQUIRE_DECODING_MASK
fe721cfad011 (setup_coding_system): Fix setting of
Kenichi Handa <handa@m17n.org>
parents: 90573
diff changeset
5809 | CODING_REQUIRE_DETECTION_MASK);
fe721cfad011 (setup_coding_system): Fix setting of
Kenichi Handa <handa@m17n.org>
parents: 90573
diff changeset
5810 else if (! EQ (eol_type, Qunix))
fe721cfad011 (setup_coding_system): Fix setting of
Kenichi Handa <handa@m17n.org>
parents: 90573
diff changeset
5811 coding->common_flags = (CODING_REQUIRE_DECODING_MASK
fe721cfad011 (setup_coding_system): Fix setting of
Kenichi Handa <handa@m17n.org>
parents: 90573
diff changeset
5812 | CODING_REQUIRE_ENCODING_MASK);
fe721cfad011 (setup_coding_system): Fix setting of
Kenichi Handa <handa@m17n.org>
parents: 90573
diff changeset
5813 else
fe721cfad011 (setup_coding_system): Fix setting of
Kenichi Handa <handa@m17n.org>
parents: 90573
diff changeset
5814 coding->common_flags = 0;
89448
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
5815 if (! NILP (CODING_ATTR_POST_READ (attrs)))
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
5816 coding->common_flags |= CODING_REQUIRE_DECODING_MASK;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
5817 if (! NILP (CODING_ATTR_PRE_WRITE (attrs)))
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
5818 coding->common_flags |= CODING_REQUIRE_ENCODING_MASK;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5819 if (! NILP (CODING_ATTR_FOR_UNIBYTE (attrs)))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5820 coding->common_flags |= CODING_FOR_UNIBYTE_MASK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5821
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5822 val = CODING_ATTR_SAFE_CHARSETS (attrs);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5823 coding->max_charset_id = SCHARS (val) - 1;
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
5824 coding->safe_charsets = SDATA (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5825 coding->default_char = XINT (CODING_ATTR_DEFAULT_CHAR (attrs));
103655
e2d67c929da2 (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 103486
diff changeset
5826 coding->carryover_bytes = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5827
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5828 coding_type = CODING_ATTR_TYPE (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5829 if (EQ (coding_type, Qundecided))
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->detector = NULL;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5832 coding->decoder = decode_coding_raw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5833 coding->encoder = encode_coding_raw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5834 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5835 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5836 else if (EQ (coding_type, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5837 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5838 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5839 int flags = XINT (AREF (attrs, coding_attr_iso_flags));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5840
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5841 /* Invoke graphic register 0 to plane 0. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5842 CODING_ISO_INVOCATION (coding, 0) = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5843 /* 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
5844 CODING_ISO_INVOCATION (coding, 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5845 = (flags & CODING_ISO_FLAG_SEVEN_BITS ? -1 : 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5846 /* Setup the initial status of designation. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5847 for (i = 0; i < 4; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5848 CODING_ISO_DESIGNATION (coding, i) = CODING_ISO_INITIAL (coding, i);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5849 /* Not single shifting initially. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5850 CODING_ISO_SINGLE_SHIFTING (coding) = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5851 /* Beginning of buffer should also be regarded as bol. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5852 CODING_ISO_BOL (coding) = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5853 coding->detector = detect_coding_iso_2022;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5854 coding->decoder = decode_coding_iso_2022;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5855 coding->encoder = encode_coding_iso_2022;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5856 if (flags & CODING_ISO_FLAG_SAFE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5857 coding->mode |= CODING_MODE_SAFE_ENCODING;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
5858 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5859 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5860 | CODING_REQUIRE_FLUSHING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5861 if (flags & CODING_ISO_FLAG_COMPOSITION)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5862 coding->common_flags |= CODING_ANNOTATE_COMPOSITION_MASK;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5863 if (flags & CODING_ISO_FLAG_DESIGNATION)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
5864 coding->common_flags |= CODING_ANNOTATE_CHARSET_MASK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5865 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
5866 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5867 setup_iso_safe_charsets (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5868 val = CODING_ATTR_SAFE_CHARSETS (attrs);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5869 coding->max_charset_id = SCHARS (val) - 1;
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
5870 coding->safe_charsets = SDATA (val);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5871 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5872 CODING_ISO_FLAGS (coding) = flags;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5873 CODING_ISO_CMP_STATUS (coding)->state = COMPOSING_NO;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5874 CODING_ISO_CMP_STATUS (coding)->method = COMPOSITION_NO;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5875 CODING_ISO_EXTSEGMENT_LEN (coding) = 0;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5876 CODING_ISO_EMBEDDED_UTF_8 (coding) = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5877 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5878 else if (EQ (coding_type, Qcharset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5879 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5880 coding->detector = detect_coding_charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5881 coding->decoder = decode_coding_charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5882 coding->encoder = encode_coding_charset;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
5883 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5884 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5885 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5886 else if (EQ (coding_type, Qutf_8))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5887 {
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5888 val = AREF (attrs, coding_attr_utf_bom);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5889 CODING_UTF_8_BOM (coding) = (CONSP (val) ? utf_detect_bom
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5890 : EQ (val, Qt) ? utf_with_bom
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5891 : utf_without_bom);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5892 coding->detector = detect_coding_utf_8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5893 coding->decoder = decode_coding_utf_8;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5894 coding->encoder = encode_coding_utf_8;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
5895 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5896 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5897 if (CODING_UTF_8_BOM (coding) == utf_detect_bom)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5898 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK;
88365
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 else if (EQ (coding_type, Qutf_16))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5901 {
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5902 val = AREF (attrs, coding_attr_utf_bom);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5903 CODING_UTF_16_BOM (coding) = (CONSP (val) ? utf_detect_bom
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5904 : EQ (val, Qt) ? utf_with_bom
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5905 : utf_without_bom);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5906 val = AREF (attrs, coding_attr_utf_16_endian);
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5907 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
5908 : utf_16_little_endian);
88438
3a34b722dd71 (encode_coding_utf_8): Initialize produced_chars to 0.
Kenichi Handa <handa@m17n.org>
parents: 88430
diff changeset
5909 CODING_UTF_16_SURROGATE (coding) = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5910 coding->detector = detect_coding_utf_16;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5911 coding->decoder = decode_coding_utf_16;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5912 coding->encoder = encode_coding_utf_16;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
5913 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5914 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
5915 if (CODING_UTF_16_BOM (coding) == utf_detect_bom)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
5916 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5917 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5918 else if (EQ (coding_type, Qccl))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5919 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5920 coding->detector = detect_coding_ccl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5921 coding->decoder = decode_coding_ccl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5922 coding->encoder = encode_coding_ccl;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
5923 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5924 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5925 | CODING_REQUIRE_FLUSHING_MASK);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5926 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5927 else if (EQ (coding_type, Qemacs_mule))
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->detector = detect_coding_emacs_mule;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5930 coding->decoder = decode_coding_emacs_mule;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5931 coding->encoder = encode_coding_emacs_mule;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
5932 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5933 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5934 coding->spec.emacs_mule.full_support = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5935 if (! NILP (AREF (attrs, coding_attr_emacs_mule_full))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5936 && ! EQ (CODING_ATTR_CHARSET_LIST (attrs), Vemacs_mule_charset_list))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5937 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5938 Lisp_Object tail, safe_charsets;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5939 int max_charset_id = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5940
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5941 for (tail = Vemacs_mule_charset_list; CONSP (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5942 tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5943 if (max_charset_id < XFASTINT (XCAR (tail)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5944 max_charset_id = XFASTINT (XCAR (tail));
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
5945 safe_charsets = make_uninit_string (max_charset_id + 1);
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
5946 memset (SDATA (safe_charsets), 255, max_charset_id + 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5947 for (tail = Vemacs_mule_charset_list; CONSP (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5948 tail = XCDR (tail))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
5949 SSET (safe_charsets, XFASTINT (XCAR (tail)), 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5950 coding->max_charset_id = max_charset_id;
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
5951 coding->safe_charsets = SDATA (safe_charsets);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5952 coding->spec.emacs_mule.full_support = 1;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5953 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5954 coding->spec.emacs_mule.cmp_status.state = COMPOSING_NO;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
5955 coding->spec.emacs_mule.cmp_status.method = COMPOSITION_NO;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5956 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5957 else if (EQ (coding_type, Qshift_jis))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5958 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5959 coding->detector = detect_coding_sjis;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5960 coding->decoder = decode_coding_sjis;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5961 coding->encoder = encode_coding_sjis;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5962 coding->common_flags
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5963 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
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 else if (EQ (coding_type, Qbig5))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5966 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5967 coding->detector = detect_coding_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5968 coding->decoder = decode_coding_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5969 coding->encoder = encode_coding_big5;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
5970 coding->common_flags
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5971 |= (CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK);
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 else /* EQ (coding_type, Qraw_text) */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5974 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5975 coding->detector = NULL;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5976 coding->decoder = decode_coding_raw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
5977 coding->encoder = encode_coding_raw_text;
89933
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
5978 if (! EQ (eol_type, Qunix))
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
5979 {
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
5980 coding->common_flags |= CODING_REQUIRE_DECODING_MASK;
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
5981 if (! VECTORP (eol_type))
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
5982 coding->common_flags |= CODING_REQUIRE_ENCODING_MASK;
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
5983 }
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
5984
88365
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
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
5987 return;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
5988 }
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
5989
90061
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
5990 /* Return a list of charsets supported by CODING. */
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
5991
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
5992 Lisp_Object
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
5993 coding_charset_list (coding)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5994 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5995 {
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
5996 Lisp_Object attrs, charset_list;
90061
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
5997
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
5998 CODING_GET_INFO (coding, attrs, charset_list);
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
5999 if (EQ (CODING_ATTR_TYPE (attrs), Qiso_2022))
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6000 {
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6001 int flags = XINT (AREF (attrs, coding_attr_iso_flags));
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6002
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6003 if (flags & CODING_ISO_FLAG_FULL_SUPPORT)
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6004 charset_list = Viso_2022_charset_list;
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6005 }
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6006 else if (EQ (CODING_ATTR_TYPE (attrs), Qemacs_mule))
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6007 {
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6008 charset_list = Vemacs_mule_charset_list;
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6009 }
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6010 return charset_list;
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6011 }
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6012
48210be97b12 Cancel the change done in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
6013
101776
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6014 /* Return a list of charsets supported by CODING-SYSTEM. */
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6015
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6016 Lisp_Object
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6017 coding_system_charset_list (coding_system)
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6018 Lisp_Object coding_system;
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6019 {
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6020 int id;
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6021 Lisp_Object attrs, charset_list;
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6022
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6023 CHECK_CODING_SYSTEM_GET_ID (coding_system, id);
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6024 attrs = CODING_ID_ATTRS (id);
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6025
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6026 if (EQ (CODING_ATTR_TYPE (attrs), Qiso_2022))
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6027 {
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6028 int flags = XINT (AREF (attrs, coding_attr_iso_flags));
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6029
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6030 if (flags & CODING_ISO_FLAG_FULL_SUPPORT)
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6031 charset_list = Viso_2022_charset_list;
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6032 else
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6033 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6034 }
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6035 else if (EQ (CODING_ATTR_TYPE (attrs), Qemacs_mule))
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6036 {
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6037 charset_list = Vemacs_mule_charset_list;
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6038 }
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6039 else
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6040 {
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6041 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6042 }
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6043 return charset_list;
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6044 }
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6045
11ba351ce12b (coding_system_charset_list): New function.
Kenichi Handa <handa@m17n.org>
parents: 101678
diff changeset
6046
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6047 /* 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
6048 eol_type as CODING-SYSTEM. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6049
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6050 Lisp_Object
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6051 raw_text_coding_system (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6052 Lisp_Object coding_system;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6053 {
88430
6418a272b97e * coding.c: Delete unused variables.
Kenichi Handa <handa@m17n.org>
parents: 88365
diff changeset
6054 Lisp_Object spec, attrs;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6055 Lisp_Object eol_type, raw_text_eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6056
89462
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
6057 if (NILP (coding_system))
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
6058 return Qraw_text;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6059 spec = CODING_SYSTEM_SPEC (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6060 attrs = AREF (spec, 0);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6061
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6062 if (EQ (CODING_ATTR_TYPE (attrs), Qraw_text))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6063 return coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6064
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6065 eol_type = AREF (spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6066 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6067 return Qraw_text;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6068 spec = CODING_SYSTEM_SPEC (Qraw_text);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6069 raw_text_eol_type = AREF (spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6070 return (EQ (eol_type, Qunix) ? AREF (raw_text_eol_type, 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6071 : EQ (eol_type, Qdos) ? AREF (raw_text_eol_type, 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6072 : AREF (raw_text_eol_type, 2));
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6073 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6074
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6075
110834
b997f43af473 Fix complementing of a coding system
Kenichi Handa <handa@m17n.org>
parents: 110829
diff changeset
6076 /* If CODING_SYSTEM doesn't specify end-of-line format, return one of
b997f43af473 Fix complementing of a coding system
Kenichi Handa <handa@m17n.org>
parents: 110829
diff changeset
6077 the subsidiary that has the same eol-spec as PARENT (if it is not
b997f43af473 Fix complementing of a coding system
Kenichi Handa <handa@m17n.org>
parents: 110829
diff changeset
6078 nil and specifies end-of-line format) or the system's setting
90394
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6079 (system_eol_type). */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6080
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6081 Lisp_Object
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6082 coding_inherit_eol_type (coding_system, parent)
88473
b47ee8b1ce03 (coding_inherit_eol_type)
Dave Love <fx@gnu.org>
parents: 88465
diff changeset
6083 Lisp_Object coding_system, parent;
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
6084 {
89545
4f394eed6ff2 (inhibit_pre_post_conversion): Removed (unused).
Dave Love <fx@gnu.org>
parents: 89519
diff changeset
6085 Lisp_Object spec, eol_type;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6086
89462
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
6087 if (NILP (coding_system))
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
6088 coding_system = Qraw_text;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6089 spec = CODING_SYSTEM_SPEC (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6090 eol_type = AREF (spec, 2);
90394
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6091 if (VECTORP (eol_type))
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6092 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6093 Lisp_Object parent_eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6094
90394
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6095 if (! NILP (parent))
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6096 {
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6097 Lisp_Object parent_spec;
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6098
90587
fe721cfad011 (setup_coding_system): Fix setting of
Kenichi Handa <handa@m17n.org>
parents: 90573
diff changeset
6099 parent_spec = CODING_SYSTEM_SPEC (parent);
90394
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6100 parent_eol_type = AREF (parent_spec, 2);
110834
b997f43af473 Fix complementing of a coding system
Kenichi Handa <handa@m17n.org>
parents: 110829
diff changeset
6101 if (VECTORP (parent_eol_type))
b997f43af473 Fix complementing of a coding system
Kenichi Handa <handa@m17n.org>
parents: 110829
diff changeset
6102 parent_eol_type = system_eol_type;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6103 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6104 else
90394
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
6105 parent_eol_type = system_eol_type;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6106 if (EQ (parent_eol_type, Qunix))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6107 coding_system = AREF (eol_type, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6108 else if (EQ (parent_eol_type, Qdos))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6109 coding_system = AREF (eol_type, 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6110 else if (EQ (parent_eol_type, Qmac))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6111 coding_system = AREF (eol_type, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6112 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6113 return coding_system;
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
6114 }
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
6115
110829
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6116
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6117 /* Check if text-conversion and eol-conversion of CODING_SYSTEM are
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6118 decided for writing to a process. If not, complement them, and
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6119 return a new coding system. */
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6120
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6121 Lisp_Object
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6122 complement_process_encoding_system (coding_system)
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6123 Lisp_Object coding_system;
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6124 {
110845
394a9ff3e3cf coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110834
diff changeset
6125 Lisp_Object coding_base = Qnil, eol_base = Qnil;
394a9ff3e3cf coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110834
diff changeset
6126 Lisp_Object spec, attrs;
110847
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6127 int i;
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6128
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6129 for (i = 0; i < 3; i++)
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6130 {
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6131 if (i == 1)
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6132 coding_system = CDR_SAFE (Vdefault_process_coding_system);
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6133 else if (i == 2)
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6134 coding_system = preferred_coding_system ();
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6135 spec = CODING_SYSTEM_SPEC (coding_system);
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6136 if (NILP (spec))
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6137 continue;
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6138 attrs = AREF (spec, 0);
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6139 if (NILP (coding_base) && ! EQ (CODING_ATTR_TYPE (attrs), Qundecided))
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6140 coding_base = CODING_ATTR_BASE_NAME (attrs);
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6141 if (NILP (eol_base) && ! VECTORP (AREF (spec, 2)))
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6142 eol_base = coding_system;
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6143 if (! NILP (coding_base) && ! NILP (eol_base))
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6144 break;
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6145 }
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6146
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6147 if (i > 0)
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6148 /* The original CODING_SYSTEM didn't specify text-conversion or
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6149 eol-conversion. Be sure that we return a fully complemented
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6150 coding system. */
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6151 coding_system = coding_inherit_eol_type (coding_base, eol_base);
c234b2db847c coding.c (complement_process_encoding_system): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 110845
diff changeset
6152 return coding_system;
110829
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6153 }
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6154
4d672e9d91bf Complement a coding system for encoding arguments and input to a process.
Kenichi Handa <handa@m17n.org>
parents: 110336
diff changeset
6155
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6156 /* Emacs has a mechanism to automatically detect a coding system if it
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6157 is one of Emacs' internal format, ISO2022, SJIS, and BIG5. But,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6158 it's impossible to distinguish some coding systems accurately
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6159 because they use the same range of codes. So, at first, coding
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6160 systems are categorized into 7, those are:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6161
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
6162 o coding-category-emacs-mule
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6163
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6164 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6165 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
6166 symbol) `emacs-mule' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6167
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6168 o coding-category-sjis
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6169
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6170 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6171 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
6172 symbol) `japanese-shift-jis' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6173
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6174 o coding-category-iso-7
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6175
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6176 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
6177 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
6178 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
6179 charsets. Assigned the coding-system (Lisp symbol)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6180 `iso-2022-7bit' by default.
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6181
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6182 o coding-category-iso-7-tight
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6183
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6184 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
6185 encode/decode only the specified charsets.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6186
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6187 o coding-category-iso-8-1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6188
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6189 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6190 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
6191 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
6192 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
6193 symbol) `iso-latin-1' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6194
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6195 o coding-category-iso-8-2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6196
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6197 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6198 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
6199 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
6200 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
6201 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
6202
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
6203 o coding-category-iso-7-else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6204
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6205 The category for a coding system which has the same code range
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
6206 as ISO2022 of 7-bit environment 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
6207 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
6208 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
6209
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
6210 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
6211
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
6212 The category for a coding system which has the same code range
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
6213 as ISO2022 of 8-bit environment 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
6214 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
6215 symbol) `iso-2022-8bit-ss2' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6216
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6217 o coding-category-big5
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6218
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6219 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6220 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
6221 `cn-big5' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6222
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6223 o coding-category-utf-8
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6224
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6225 The category for a coding system which has the same code range
54303
5256a4b9366f UTF-8 is now RFC3629.
Eli Zaretskii <eliz@gnu.org>
parents: 53775
diff changeset
6226 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
6227 symbol) `utf-8' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6228
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6229 o coding-category-utf-16-be
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6230
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6231 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
6232 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
6233 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
6234 `utf-16-be' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6235
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6236 o coding-category-utf-16-le
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6237
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6238 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
6239 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
6240 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
6241 symbol) `utf-16-le' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6242
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
6243 o coding-category-ccl
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
6244
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
6245 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
6246 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
6247 coding system is assigned.
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
6248
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6249 o coding-category-binary
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6250
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6251 The category for a coding system not categorized in any of the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6252 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
6253 `no-conversion' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6254
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6255 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
6256 `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
6257 What Emacs does actually is to detect a category of coding system.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6258 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
6259 decide only one possible category, it selects a category of the
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6260 highest priority. Priorities of categories are also specified by a
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6261 user in a Lisp variable `coding-category-list'.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6262
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6263 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6264
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6265 #define EOL_SEEN_NONE 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6266 #define EOL_SEEN_LF 1
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6267 #define EOL_SEEN_CR 2
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6268 #define EOL_SEEN_CRLF 4
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6269
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6270 /* Detect how end-of-line of a text of length SRC_BYTES pointed by
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6271 SOURCE is encoded. If CATEGORY is one of
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6272 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
6273 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
6274
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
6275 Return one of EOL_SEEN_XXX. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6276
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
6277 #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
6278
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6279 static int
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6280 detect_eol (source, src_bytes, category)
84646
922a7e3b7383 (detect_eol_type, detect_eol_type_in_2_octet_form):
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 83648
diff changeset
6281 const unsigned char *source;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6282 EMACS_INT src_bytes;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6283 enum coding_category category;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6284 {
84646
922a7e3b7383 (detect_eol_type, detect_eol_type_in_2_octet_form):
Michaël Cadilhac <michael.cadilhac@lrde.org>
parents: 83648
diff changeset
6285 const unsigned char *src = source, *src_end = src + src_bytes;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6286 unsigned char c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6287 int total = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6288 int eol_seen = EOL_SEEN_NONE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6289
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6290 if ((1 << category) & CATEGORY_MASK_UTF_16)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6291 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6292 int msb, lsb;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6293
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
6294 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
6295 | coding_category_utf_16_le_nosig);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6296 lsb = 1 - msb;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6297
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6298 while (src + 1 < src_end)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6299 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6300 c = src[lsb];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6301 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
6302 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6303 int this_eol;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6304
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6305 if (c == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6306 this_eol = EOL_SEEN_LF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6307 else if (src + 3 >= src_end
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6308 || src[msb + 2] != 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6309 || src[lsb + 2] != '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6310 this_eol = EOL_SEEN_CR;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6311 else
101678
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6312 {
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6313 this_eol = EOL_SEEN_CRLF;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6314 src += 2;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6315 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6316
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6317 if (eol_seen == EOL_SEEN_NONE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6318 /* This is the first end-of-line. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6319 eol_seen = this_eol;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6320 else if (eol_seen != this_eol)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6321 {
101678
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6322 /* The found type is different from what found before.
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6323 Allow for stray ^M characters in DOS EOL files. */
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6324 if (eol_seen == EOL_SEEN_CR && this_eol == EOL_SEEN_CRLF
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6325 || eol_seen == EOL_SEEN_CRLF && this_eol == EOL_SEEN_CR)
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6326 eol_seen = EOL_SEEN_CRLF;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6327 else
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6328 {
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6329 eol_seen = EOL_SEEN_LF;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6330 break;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6331 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6332 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6333 if (++total == MAX_EOL_CHECK_COUNT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6334 break;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6335 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6336 src += 2;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6337 }
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6338 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6339 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6340 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6341 while (src < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6342 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6343 c = *src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6344 if (c == '\n' || c == '\r')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6345 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6346 int this_eol;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6347
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6348 if (c == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6349 this_eol = EOL_SEEN_LF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6350 else if (src >= src_end || *src != '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6351 this_eol = EOL_SEEN_CR;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6352 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6353 this_eol = EOL_SEEN_CRLF, src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6354
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6355 if (eol_seen == EOL_SEEN_NONE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6356 /* This is the first end-of-line. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6357 eol_seen = this_eol;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6358 else if (eol_seen != this_eol)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6359 {
101678
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6360 /* The found type is different from what found before.
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6361 Allow for stray ^M characters in DOS EOL files. */
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6362 if (eol_seen == EOL_SEEN_CR && this_eol == EOL_SEEN_CRLF
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6363 || eol_seen == EOL_SEEN_CRLF && this_eol == EOL_SEEN_CR)
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6364 eol_seen = EOL_SEEN_CRLF;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6365 else
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6366 {
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6367 eol_seen = EOL_SEEN_LF;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6368 break;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6369 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6370 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6371 if (++total == MAX_EOL_CHECK_COUNT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6372 break;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6373 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6374 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6375 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6376 return eol_seen;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6377 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6378
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6379
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6380 static Lisp_Object
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6381 adjust_coding_eol_type (coding, eol_seen)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6382 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6383 int eol_seen;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6384 {
88430
6418a272b97e * coding.c: Delete unused variables.
Kenichi Handa <handa@m17n.org>
parents: 88365
diff changeset
6385 Lisp_Object eol_type;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6386
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6387 eol_type = CODING_ID_EOL_TYPE (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6388 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
6389 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6390 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
6391 eol_type = Qunix;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6392 }
88862
108e2535280d (adjust_coding_eol_type): Fix eol_type/eol_seen mixup.
Dave Love <fx@gnu.org>
parents: 88856
diff changeset
6393 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
6394 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6395 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
6396 eol_type = Qdos;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6397 }
88862
108e2535280d (adjust_coding_eol_type): Fix eol_type/eol_seen mixup.
Dave Love <fx@gnu.org>
parents: 88856
diff changeset
6398 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
6399 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6400 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
6401 eol_type = Qmac;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6402 }
19181
917138730635 (detect_eol_type): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 19173
diff changeset
6403 return eol_type;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6404 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6405
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6406 /* 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
6407 system is detected, update fields of CODING by the detected coding
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6408 system. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6409
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6410 void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6411 detect_coding (coding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6412 struct coding_system *coding;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6413 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6414 const unsigned char *src, *src_end;
102105
a5023e8bbb1e (detect_coding): Preserve coding->mode.
Kenichi Handa <handa@m17n.org>
parents: 102058
diff changeset
6415 int saved_mode = coding->mode;
88365
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 coding->consumed = coding->consumed_char = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6418 coding->produced = coding->produced_char = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6419 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6420
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6421 src_end = coding->source + coding->src_bytes;
95533
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6422 coding->head_ascii = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6423
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6424 /* 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
6425 now. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6426 if (EQ (CODING_ATTR_TYPE (CODING_ID_ATTRS (coding->id)), Qundecided))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6427 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6428 int c, i;
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6429 struct coding_detection_info detect_info;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6430 int null_byte_found = 0, eight_bit_found = 0;
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6431
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6432 detect_info.checked = detect_info.found = detect_info.rejected = 0;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6433 for (src = coding->source; src < src_end; src++)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6434 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6435 c = *src;
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6436 if (c & 0x80)
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6437 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6438 eight_bit_found = 1;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6439 if (null_byte_found)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6440 break;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6441 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6442 else if (c < 0x20)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
6443 {
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6444 if ((c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6445 && ! inhibit_iso_escape_detection
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6446 && ! detect_info.checked)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
6447 {
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6448 if (detect_coding_iso_2022 (coding, &detect_info))
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6449 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6450 /* We have scanned the whole data. */
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6451 if (! (detect_info.rejected & CATEGORY_MASK_ISO_7_ELSE))
95533
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6452 {
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6453 /* We didn't find an 8-bit code. We may
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6454 have found a null-byte, but it's very
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6455 rare that a binary file confirm to
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6456 ISO-2022. */
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6457 src = src_end;
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6458 coding->head_ascii = src - coding->source;
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6459 }
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6460 detect_info.rejected |= ~CATEGORY_MASK_ISO_ESCAPE;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6461 break;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6462 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6463 }
101040
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
6464 else if (! c && !inhibit_null_byte_detection)
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6465 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6466 null_byte_found = 1;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6467 if (eight_bit_found)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6468 break;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
6469 }
95585
862c7386145c (detect_coding): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95533
diff changeset
6470 if (! eight_bit_found)
862c7386145c (detect_coding): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95533
diff changeset
6471 coding->head_ascii++;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
6472 }
95585
862c7386145c (detect_coding): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95533
diff changeset
6473 else if (! eight_bit_found)
95533
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6474 coding->head_ascii++;
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6475 }
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6476
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6477 if (null_byte_found || eight_bit_found
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6478 || coding->head_ascii < coding->src_bytes
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6479 || detect_info.found)
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6480 {
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6481 enum coding_category category;
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6482 struct coding_system *this;
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6483
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6484 if (coding->head_ascii == coding->src_bytes)
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6485 /* As all bytes are 7-bit, we can ignore non-ISO-2022 codings. */
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6486 for (i = 0; i < coding_category_raw_text; i++)
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6487 {
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6488 category = coding_priorities[i];
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6489 this = coding_categories + category;
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6490 if (detect_info.found & (1 << category))
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6491 break;
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6492 }
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6493 else
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6494 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6495 if (null_byte_found)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6496 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6497 detect_info.checked |= ~CATEGORY_MASK_UTF_16;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6498 detect_info.rejected |= ~CATEGORY_MASK_UTF_16;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6499 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6500 for (i = 0; i < coding_category_raw_text; i++)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6501 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6502 category = coding_priorities[i];
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6503 this = coding_categories + category;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6504 if (this->id < 0)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6505 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6506 /* No coding system of this category is defined. */
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6507 detect_info.rejected |= (1 << category);
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6508 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6509 else if (category >= coding_category_raw_text)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6510 continue;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6511 else if (detect_info.checked & (1 << category))
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6512 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6513 if (detect_info.found & (1 << category))
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6514 break;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6515 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6516 else if ((*(this->detector)) (coding, &detect_info)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6517 && detect_info.found & (1 << category))
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6518 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6519 if (category == coding_category_utf_16_auto)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6520 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6521 if (detect_info.found & CATEGORY_MASK_UTF_16_LE)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6522 category = coding_category_utf_16_le;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6523 else
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6524 category = coding_category_utf_16_be;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6525 }
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
6526 break;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6527 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6528 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
6529 }
95533
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6530
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6531 if (i < coding_category_raw_text)
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6532 setup_coding_system (CODING_ID_NAME (this->id), coding);
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6533 else if (null_byte_found)
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6534 setup_coding_system (Qno_conversion, coding);
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6535 else if ((detect_info.rejected & CATEGORY_MASK_ANY)
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6536 == CATEGORY_MASK_ANY)
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6537 setup_coding_system (Qraw_text, coding);
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6538 else if (detect_info.rejected)
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6539 for (i = 0; i < coding_category_raw_text; i++)
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6540 if (! (detect_info.rejected & (1 << coding_priorities[i])))
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6541 {
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6542 this = coding_categories + coding_priorities[i];
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6543 setup_coding_system (CODING_ID_NAME (this->id), coding);
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6544 break;
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
6545 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6546 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6547 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6548 else if (XINT (CODING_ATTR_CATEGORY (CODING_ID_ATTRS (coding->id)))
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6549 == coding_category_utf_8_auto)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6550 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6551 Lisp_Object coding_systems;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6552 struct coding_detection_info detect_info;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6553
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6554 coding_systems
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6555 = AREF (CODING_ID_ATTRS (coding->id), coding_attr_utf_bom);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6556 detect_info.found = detect_info.rejected = 0;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6557 coding->head_ascii = 0;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6558 if (CONSP (coding_systems)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6559 && detect_coding_utf_8 (coding, &detect_info))
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6560 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6561 if (detect_info.found & CATEGORY_MASK_UTF_8_SIG)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6562 setup_coding_system (XCAR (coding_systems), coding);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6563 else
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6564 setup_coding_system (XCDR (coding_systems), coding);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6565 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6566 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6567 else if (XINT (CODING_ATTR_CATEGORY (CODING_ID_ATTRS (coding->id)))
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6568 == coding_category_utf_16_auto)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6569 {
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6570 Lisp_Object coding_systems;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6571 struct coding_detection_info detect_info;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6572
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6573 coding_systems
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6574 = AREF (CODING_ID_ATTRS (coding->id), coding_attr_utf_bom);
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6575 detect_info.found = detect_info.rejected = 0;
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
6576 coding->head_ascii = 0;
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6577 if (CONSP (coding_systems)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6578 && detect_coding_utf_16 (coding, &detect_info))
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6579 {
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6580 if (detect_info.found & CATEGORY_MASK_UTF_16_LE)
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6581 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
6582 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
6583 setup_coding_system (XCDR (coding_systems), coding);
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6584 }
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
6585 }
102105
a5023e8bbb1e (detect_coding): Preserve coding->mode.
Kenichi Handa <handa@m17n.org>
parents: 102058
diff changeset
6586 coding->mode = saved_mode;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6587 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6588
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6589
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6590 static void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6591 decode_eol (coding)
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6592 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6593 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6594 Lisp_Object eol_type;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6595 unsigned char *p, *pbeg, *pend;
93877
62d97ebb13a9 * coding.c (detect_coding_emacs_mule)
Michael Albinus <michael.albinus@gmx.de>
parents: 93595
diff changeset
6596
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6597 eol_type = CODING_ID_EOL_TYPE (coding->id);
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
6598 if (EQ (eol_type, Qunix) || inhibit_eol_conversion)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6599 return;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6600
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6601 if (NILP (coding->dst_object))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6602 pbeg = coding->destination;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6603 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6604 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
6605 pend = pbeg + coding->produced;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6606
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6607 if (VECTORP (eol_type))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6608 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6609 int eol_seen = EOL_SEEN_NONE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6610
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6611 for (p = pbeg; p < pend; p++)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6612 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6613 if (*p == '\n')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6614 eol_seen |= EOL_SEEN_LF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6615 else if (*p == '\r')
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6616 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6617 if (p + 1 < pend && *(p + 1) == '\n')
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6618 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6619 eol_seen |= EOL_SEEN_CRLF;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6620 p++;
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6621 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6622 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6623 eol_seen |= EOL_SEEN_CR;
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6624 }
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6625 }
101678
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6626 /* Handle DOS-style EOLs in a file with stray ^M characters. */
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6627 if ((eol_seen & EOL_SEEN_CRLF) != 0
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6628 && (eol_seen & EOL_SEEN_CR) != 0
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6629 && (eol_seen & EOL_SEEN_LF) == 0)
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6630 eol_seen = EOL_SEEN_CRLF;
589af07b7af1 (detect_eol, decode_eol): Handle text with DOS-style EOLs that also has
Eli Zaretskii <eliz@gnu.org>
parents: 101197
diff changeset
6631 else 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
6632 && eol_seen != EOL_SEEN_LF
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6633 && eol_seen != EOL_SEEN_CRLF
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6634 && eol_seen != EOL_SEEN_CR)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6635 eol_seen = EOL_SEEN_LF;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6636 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
6637 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
6638 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6639
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6640 if (EQ (eol_type, Qmac))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6641 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6642 for (p = pbeg; p < pend; p++)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6643 if (*p == '\r')
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6644 *p = '\n';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6645 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6646 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
6647 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6648 int n = 0;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6649
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6650 if (NILP (coding->dst_object))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6651 {
90378
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6652 /* Start deleting '\r' from the tail to minimize the memory
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6653 movement. */
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6654 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
6655 if (*p == '\r')
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6656 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6657 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
6658 n++;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6659 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6660 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6661 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6662 {
90378
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6663 int pos_byte = coding->dst_pos_byte;
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6664 int pos = coding->dst_pos;
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6665 int pos_end = pos + coding->produced_char - 1;
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6666
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6667 while (pos < pos_end)
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6668 {
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6669 p = BYTE_POS_ADDR (pos_byte);
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6670 if (*p == '\r' && p[1] == '\n')
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6671 {
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6672 del_range_2 (pos, pos_byte, pos + 1, pos_byte + 1, 0);
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6673 n++;
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6674 pos_end--;
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6675 }
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6676 pos++;
91535
419a669bc4f2 (decode_eol): Pay attention to coding->dst_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 91367
diff changeset
6677 if (coding->dst_multibyte)
419a669bc4f2 (decode_eol): Pay attention to coding->dst_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 91367
diff changeset
6678 pos_byte += BYTES_BY_CHAR_HEAD (*p);
419a669bc4f2 (decode_eol): Pay attention to coding->dst_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 91367
diff changeset
6679 else
419a669bc4f2 (decode_eol): Pay attention to coding->dst_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 91367
diff changeset
6680 pos_byte++;
90378
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
6681 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6682 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6683 coding->produced -= n;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
6684 coding->produced_char -= n;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6685 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6686 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6687
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6688
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
6689 /* Return a translation table (or list of them) from coding system
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
6690 attribute vector ATTRS for encoding (ENCODEP is nonzero) or
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
6691 decoding (ENCODEP is zero). */
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6692
89858
23cb9ed79225 (get_translation_table): Declare it as Lisp_Object.
Kenichi Handa <handa@m17n.org>
parents: 89856
diff changeset
6693 static Lisp_Object
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6694 get_translation_table (attrs, encodep, max_lookup)
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6695 Lisp_Object attrs;
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6696 int encodep, *max_lookup;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6697 {
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6698 Lisp_Object standard, translation_table;
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6699 Lisp_Object val;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6700
103306
3680b4fe0f79 * coding.c (get_translation_table): Check Venable_character_translation.
Chong Yidong <cyd@stupidchicken.com>
parents: 103133
diff changeset
6701 if (NILP (Venable_character_translation))
3680b4fe0f79 * coding.c (get_translation_table): Check Venable_character_translation.
Chong Yidong <cyd@stupidchicken.com>
parents: 103133
diff changeset
6702 {
3680b4fe0f79 * coding.c (get_translation_table): Check Venable_character_translation.
Chong Yidong <cyd@stupidchicken.com>
parents: 103133
diff changeset
6703 if (max_lookup)
3680b4fe0f79 * coding.c (get_translation_table): Check Venable_character_translation.
Chong Yidong <cyd@stupidchicken.com>
parents: 103133
diff changeset
6704 *max_lookup = 0;
3680b4fe0f79 * coding.c (get_translation_table): Check Venable_character_translation.
Chong Yidong <cyd@stupidchicken.com>
parents: 103133
diff changeset
6705 return Qnil;
3680b4fe0f79 * coding.c (get_translation_table): Check Venable_character_translation.
Chong Yidong <cyd@stupidchicken.com>
parents: 103133
diff changeset
6706 }
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6707 if (encodep)
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6708 translation_table = CODING_ATTR_ENCODE_TBL (attrs),
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6709 standard = Vstandard_translation_table_for_encode;
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6710 else
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6711 translation_table = CODING_ATTR_DECODE_TBL (attrs),
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6712 standard = Vstandard_translation_table_for_decode;
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
6713 if (NILP (translation_table))
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6714 translation_table = standard;
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6715 else
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6716 {
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6717 if (SYMBOLP (translation_table))
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6718 translation_table = Fget (translation_table, Qtranslation_table);
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6719 else if (CONSP (translation_table))
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6720 {
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6721 translation_table = Fcopy_sequence (translation_table);
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6722 for (val = translation_table; CONSP (val); val = XCDR (val))
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6723 if (SYMBOLP (XCAR (val)))
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6724 XSETCAR (val, Fget (XCAR (val), Qtranslation_table));
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6725 }
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6726 if (CHAR_TABLE_P (standard))
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6727 {
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6728 if (CONSP (translation_table))
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6729 translation_table = nconc2 (translation_table,
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6730 Fcons (standard, Qnil));
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6731 else
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6732 translation_table = Fcons (translation_table,
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6733 Fcons (standard, Qnil));
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6734 }
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6735 }
89861
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6736
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6737 if (max_lookup)
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6738 {
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6739 *max_lookup = 1;
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6740 if (CHAR_TABLE_P (translation_table)
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6741 && CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (translation_table)) > 1)
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6742 {
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6743 val = XCHAR_TABLE (translation_table)->extras[1];
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6744 if (NATNUMP (val) && *max_lookup < XFASTINT (val))
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6745 *max_lookup = XFASTINT (val);
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6746 }
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6747 else if (CONSP (translation_table))
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6748 {
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6749 Lisp_Object tail, val;
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6750
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6751 for (tail = translation_table; CONSP (tail); tail = XCDR (tail))
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6752 if (CHAR_TABLE_P (XCAR (tail))
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6753 && CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (XCAR (tail))) > 1)
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6754 {
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6755 val = XCHAR_TABLE (XCAR (tail))->extras[1];
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6756 if (NATNUMP (val) && *max_lookup < XFASTINT (val))
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6757 *max_lookup = XFASTINT (val);
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6758 }
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
6759 }
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
6760 }
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6761 return translation_table;
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6762 }
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6763
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6764 #define LOOKUP_TRANSLATION_TABLE(table, c, trans) \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6765 do { \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6766 trans = Qnil; \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6767 if (CHAR_TABLE_P (table)) \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6768 { \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6769 trans = CHAR_TABLE_REF (table, c); \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6770 if (CHARACTERP (trans)) \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6771 c = XFASTINT (trans), trans = Qnil; \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6772 } \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6773 else if (CONSP (table)) \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6774 { \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6775 Lisp_Object tail; \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6776 \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6777 for (tail = table; CONSP (tail); tail = XCDR (tail)) \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6778 if (CHAR_TABLE_P (XCAR (tail))) \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6779 { \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6780 trans = CHAR_TABLE_REF (XCAR (tail), c); \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6781 if (CHARACTERP (trans)) \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6782 c = XFASTINT (trans), trans = Qnil; \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6783 else if (! NILP (trans)) \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6784 break; \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6785 } \
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6786 } \
89858
23cb9ed79225 (get_translation_table): Declare it as Lisp_Object.
Kenichi Handa <handa@m17n.org>
parents: 89856
diff changeset
6787 } while (0)
23cb9ed79225 (get_translation_table): Declare it as Lisp_Object.
Kenichi Handa <handa@m17n.org>
parents: 89856
diff changeset
6788
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
6789
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6790 /* Return a translation of character(s) at BUF according to TRANS.
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6791 TRANS is TO-CHAR or ((FROM . TO) ...) where
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6792 FROM = [FROM-CHAR ...], TO is TO-CHAR or [TO-CHAR ...].
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6793 The return value is TO-CHAR or ([FROM-CHAR ...] . TO) if a
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6794 translation is found, and Qnil if not found..
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6795 If BUF is too short to lookup characters in FROM, return Qt. */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6796
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6797 static Lisp_Object
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6798 get_translation (trans, buf, buf_end)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6799 Lisp_Object trans;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6800 int *buf, *buf_end;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6801 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6802
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6803 if (INTEGERP (trans))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6804 return trans;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6805 for (; CONSP (trans); trans = XCDR (trans))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6806 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6807 Lisp_Object val = XCAR (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6808 Lisp_Object from = XCAR (val);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6809 int len = ASIZE (from);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6810 int i;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6811
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6812 for (i = 0; i < len; i++)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6813 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6814 if (buf + i == buf_end)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6815 return Qt;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6816 if (XINT (AREF (from, i)) != buf[i])
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6817 break;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6818 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6819 if (i == len)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6820 return val;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6821 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6822 return Qnil;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6823 }
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6824
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6825
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6826 static int
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6827 produce_chars (coding, translation_table, last_block)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6828 struct coding_system *coding;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6829 Lisp_Object translation_table;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6830 int last_block;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6831 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6832 unsigned char *dst = coding->destination + coding->produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6833 unsigned char *dst_end = coding->destination + coding->dst_bytes;
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6834 EMACS_INT produced;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6835 EMACS_INT produced_chars = 0;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6836 int carryover = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6837
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6838 if (! coding->chars_at_source)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6839 {
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6840 /* Source characters are in coding->charbuf. */
89575
59d10ebd2a0b (produce_chars): Revert last change.
Andreas Schwab <schwab@suse.de>
parents: 89571
diff changeset
6841 int *buf = coding->charbuf;
59d10ebd2a0b (produce_chars): Revert last change.
Andreas Schwab <schwab@suse.de>
parents: 89571
diff changeset
6842 int *buf_end = buf + coding->charbuf_used;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6843
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6844 if (EQ (coding->src_object, coding->dst_object))
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6845 {
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6846 coding_set_source (coding);
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6847 dst_end = ((unsigned char *) coding->source) + coding->consumed;
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6848 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6849
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6850 while (buf < buf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6851 {
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6852 int c = *buf, i;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6853
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6854 if (c >= 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6855 {
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6856 int from_nchars = 1, to_nchars = 1;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6857 Lisp_Object trans = Qnil;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6858
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
6859 LOOKUP_TRANSLATION_TABLE (translation_table, c, trans);
89858
23cb9ed79225 (get_translation_table): Declare it as Lisp_Object.
Kenichi Handa <handa@m17n.org>
parents: 89856
diff changeset
6860 if (! NILP (trans))
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6861 {
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6862 trans = get_translation (trans, buf, buf_end);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6863 if (INTEGERP (trans))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6864 c = XINT (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6865 else if (CONSP (trans))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6866 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6867 from_nchars = ASIZE (XCAR (trans));
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6868 trans = XCDR (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6869 if (INTEGERP (trans))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6870 c = XINT (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6871 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6872 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6873 to_nchars = ASIZE (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6874 c = XINT (AREF (trans, 0));
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6875 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6876 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6877 else if (EQ (trans, Qt) && ! last_block)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6878 break;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6879 }
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6880
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6881 if (dst + MAX_MULTIBYTE_LENGTH * to_nchars > dst_end)
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6882 {
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6883 dst = alloc_destination (coding,
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6884 buf_end - buf
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6885 + MAX_MULTIBYTE_LENGTH * to_nchars,
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6886 dst);
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6887 if (EQ (coding->src_object, coding->dst_object))
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6888 {
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6889 coding_set_source (coding);
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6890 dst_end = (((unsigned char *) coding->source)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6891 + coding->consumed);
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6892 }
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6893 else
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6894 dst_end = coding->destination + coding->dst_bytes;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6895 }
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6896
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
6897 for (i = 0; i < to_nchars; i++)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6898 {
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
6899 if (i > 0)
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
6900 c = XINT (AREF (trans, i));
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6901 if (coding->dst_multibyte
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6902 || ! CHAR_BYTE8_P (c))
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6903 CHAR_STRING_ADVANCE_NO_UNIFY (c, dst);
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6904 else
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6905 *dst++ = CHAR_TO_BYTE8 (c);
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6906 }
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6907 produced_chars += to_nchars;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
6908 buf += from_nchars;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6909 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6910 else
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6911 /* This is an annotation datum. (-C) is the length. */
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6912 buf += -c;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6913 }
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
6914 carryover = buf_end - buf;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6915 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6916 else
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6917 {
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6918 /* Source characters are at coding->source. */
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6919 const unsigned char *src = coding->source;
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6920 const unsigned char *src_end = src + coding->consumed;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6921
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6922 if (EQ (coding->dst_object, coding->src_object))
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6923 dst_end = (unsigned char *) src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6924 if (coding->src_multibyte != coding->dst_multibyte)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
6925 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6926 if (coding->src_multibyte)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
6927 {
88443
6b86cf30a0b9 (produce_chars): Set the variable `multibytep' correctly.
Kenichi Handa <handa@m17n.org>
parents: 88438
diff changeset
6928 int multibytep = 1;
100135
0e17542db552 (detect_coding_system): Initialize utf_16_le_eol to -1, val to
Kenichi Handa <handa@m17n.org>
parents: 100133
diff changeset
6929 EMACS_INT consumed_chars = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6930
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6931 while (1)
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
6932 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6933 const unsigned char *src_base = src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6934 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6935
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6936 ONE_MORE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6937 if (dst == dst_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6938 {
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6939 if (EQ (coding->src_object, coding->dst_object))
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6940 dst_end = (unsigned char *) src;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6941 if (dst == dst_end)
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6942 {
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6943 EMACS_INT offset = src - coding->source;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6944
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6945 dst = alloc_destination (coding, src_end - src + 1,
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6946 dst);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6947 dst_end = coding->destination + coding->dst_bytes;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6948 coding_set_source (coding);
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6949 src = coding->source + offset;
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6950 src_end = coding->source + coding->src_bytes;
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6951 if (EQ (coding->src_object, coding->dst_object))
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6952 dst_end = (unsigned char *) src;
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6953 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6954 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6955 *dst++ = c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6956 produced_chars++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6957 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6958 no_more_source:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6959 ;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6960 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6961 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6962 while (src < src_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6963 {
88443
6b86cf30a0b9 (produce_chars): Set the variable `multibytep' correctly.
Kenichi Handa <handa@m17n.org>
parents: 88438
diff changeset
6964 int multibytep = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6965 int c = *src++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6966
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6967 if (dst >= dst_end - 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6968 {
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
6969 if (EQ (coding->src_object, coding->dst_object))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
6970 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
6971 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
6972 {
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6973 EMACS_INT offset = src - coding->source;
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6974 EMACS_INT more_bytes;
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6975
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6976 if (EQ (coding->src_object, coding->dst_object))
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6977 more_bytes = ((src_end - src) / 2) + 2;
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6978 else
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6979 more_bytes = src_end - src + 2;
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6980 dst = alloc_destination (coding, more_bytes, dst);
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
6981 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
6982 coding_set_source (coding);
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6983 src = coding->source + offset;
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
6984 src_end = coding->source + coding->src_bytes;
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6985 if (EQ (coding->src_object, coding->dst_object))
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
6986 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
6987 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6988 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6989 EMIT_ONE_BYTE (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6990 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6991 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6992 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6993 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6994 if (!EQ (coding->src_object, coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6995 {
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
6996 EMACS_INT require = coding->src_bytes - coding->dst_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6997
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
6998 if (require > 0)
23325
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
6999 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7000 EMACS_INT offset = src - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7001
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7002 dst = alloc_destination (coding, require, dst);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7003 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7004 src = coding->source + offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7005 src_end = coding->source + coding->src_bytes;
23325
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
7006 }
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
7007 }
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
7008 produced_chars = coding->consumed_char;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7009 while (src < src_end)
92406
c36bda0a03cc (decode_coding_big5, produce_chars): Fix typos in last
Andreas Schwab <schwab@suse.de>
parents: 92399
diff changeset
7010 *dst++ = *src++;
92399
fbc07b3a6baf (decode_coding_utf_8): When eol-type of CODING is
Kenichi Handa <handa@m17n.org>
parents: 92030
diff changeset
7011 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7012 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7013
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7014 produced = dst - (coding->destination + coding->produced);
90809
3c52757d5f6e (produce_chars): Don't call insert_from_gap if no
Kenichi Handa <handa@m17n.org>
parents: 90772
diff changeset
7015 if (BUFFERP (coding->dst_object) && produced_chars > 0)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7016 insert_from_gap (produced_chars, produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7017 coding->produced += produced;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7018 coding->produced_char += produced_chars;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7019 return carryover;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7020 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7021
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7022 /* 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
7023 CHARBUF. CHARBUF is an array:
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7024 [ -LENGTH ANNOTATION_MASK NCHARS NBYTES METHOD [ COMPONENTS... ] ]
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7025 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7026
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7027 static INLINE void
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7028 produce_composition (coding, charbuf, pos)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7029 struct coding_system *coding;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7030 int *charbuf;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7031 EMACS_INT pos;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7032 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7033 int len;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7034 EMACS_INT to;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7035 enum composition_method method;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7036 Lisp_Object components;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7037
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7038 len = -charbuf[0] - MAX_ANNOTATION_LENGTH;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7039 to = pos + charbuf[2];
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7040 method = (enum composition_method) (charbuf[4]);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7041
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7042 if (method == COMPOSITION_RELATIVE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7043 components = Qnil;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7044 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7045 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7046 Lisp_Object args[MAX_COMPOSITION_COMPONENTS * 2 - 1];
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7047 int i, j;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7048
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7049 if (method == COMPOSITION_WITH_RULE)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7050 len = charbuf[2] * 3 - 2;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7051 charbuf += MAX_ANNOTATION_LENGTH;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7052 /* charbuf = [ CHRA ... CHAR] or [ CHAR -2 RULE ... CHAR ] */
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7053 for (i = j = 0; i < len && charbuf[i] != -1; i++, j++)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7054 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7055 if (charbuf[i] >= 0)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7056 args[j] = make_number (charbuf[i]);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7057 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7058 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7059 i++;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7060 args[j] = make_number (charbuf[i] % 0x100);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7061 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7062 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7063 components = (i == j ? Fstring (j, args) : Fvector (j, args));
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7064 }
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7065 compose_text (pos, to, components, Qnil, coding->dst_object);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7066 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7067
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7068
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7069 /* 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
7070 the annotation data at CHARBUF. CHARBUF is an array:
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7071 [ -LENGTH ANNOTATION_MASK NCHARS CHARSET-ID ]
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7072 */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7073
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7074 static INLINE void
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7075 produce_charset (coding, charbuf, pos)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7076 struct coding_system *coding;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7077 int *charbuf;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7078 EMACS_INT pos;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7079 {
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7080 EMACS_INT from = pos - charbuf[2];
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7081 struct charset *charset = CHARSET_FROM_ID (charbuf[3]);
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7082
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7083 Fput_text_property (make_number (from), make_number (pos),
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7084 Qcharset, CHARSET_NAME (charset),
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7085 coding->dst_object);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7086 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7087
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7088
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7089 #define CHARBUF_SIZE 0x4000
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7090
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7091 #define ALLOC_CONVERSION_WORK_AREA(coding) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7092 do { \
101943
97c9e9322753 Remove spurious semicolons.
Juanma Barranquero <lekktu@gmail.com>
parents: 101904
diff changeset
7093 int size = CHARBUF_SIZE; \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7094 \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7095 coding->charbuf = NULL; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7096 while (size > 1024) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7097 { \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7098 coding->charbuf = (int *) alloca (sizeof (int) * size); \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7099 if (coding->charbuf) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7100 break; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7101 size >>= 1; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7102 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7103 if (! coding->charbuf) \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7104 { \
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7105 record_conversion_result (coding, CODING_RESULT_INSUFFICIENT_MEM); \
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7106 return coding->result; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7107 } \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7108 coding->charbuf_size = size; \
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7109 } while (0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7110
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7111
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
7112 static void
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7113 produce_annotation (coding, pos)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7114 struct coding_system *coding;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7115 EMACS_INT pos;
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
7116 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7117 int *charbuf = coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7118 int *charbuf_end = charbuf + coding->charbuf_used;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7119
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7120 if (NILP (coding->dst_object))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7121 return;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7122
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7123 while (charbuf < charbuf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7124 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7125 if (*charbuf >= 0)
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7126 pos++, charbuf++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7127 else
29877
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
7128 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7129 int len = -*charbuf;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7130
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7131 if (len > 2)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7132 switch (charbuf[1])
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7133 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7134 case CODING_ANNOTATE_COMPOSITION_MASK:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7135 produce_composition (coding, charbuf, pos);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7136 break;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7137 case CODING_ANNOTATE_CHARSET_MASK:
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7138 produce_charset (coding, charbuf, pos);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7139 break;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7140 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7141 charbuf += len;
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
7142 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
7143 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
7144 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
7145
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7146 /* Decode the data at CODING->src_object into CODING->dst_object.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7147 CODING->src_object is a buffer, a string, or nil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7148 CODING->dst_object is a buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7149
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7150 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
7151 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
7152 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
7153 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
7154 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
7155 same buffer as CODING->dst_object, CODING->src_pos must be
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7156 negative.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7157
90380
4bf7966e0788 (decode_coding): Typo in comment fixed.
Kenichi Handa <handa@m17n.org>
parents: 90378
diff changeset
7158 If CODING->src_object is a string, CODING->src_pos is an index to
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7159 that string.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7160
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7161 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
7162 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
7163 an offset from CODING->source.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7164
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7165 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
7166 CODING->dst_object.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7167 */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7168
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7169 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7170 decode_coding (coding)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7171 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7172 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7173 Lisp_Object attrs;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7174 Lisp_Object undo_list;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7175 Lisp_Object translation_table;
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7176 struct ccl_spec cclspec;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7177 int carryover;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7178 int i;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7179
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7180 if (BUFFERP (coding->src_object)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7181 && coding->src_pos > 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7182 && coding->src_pos < GPT
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7183 && coding->src_pos + coding->src_chars > GPT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7184 move_gap_both (coding->src_pos, coding->src_pos_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7185
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7186 undo_list = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7187 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7188 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7189 if (current_buffer != XBUFFER (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7190 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7191 if (GPT != PT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7192 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
7193 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
7194 current_buffer->undo_list = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7195 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7196
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7197 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
7198 coding->produced = coding->produced_char = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7199 coding->chars_at_source = 0;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7200 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
7201 coding->errors = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7202
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7203 ALLOC_CONVERSION_WORK_AREA (coding);
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 attrs = CODING_ID_ATTRS (coding->id);
89861
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
7206 translation_table = get_translation_table (attrs, 0, NULL);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7207
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7208 carryover = 0;
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7209 if (coding->decoder == decode_coding_ccl)
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7210 {
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7211 coding->spec.ccl = &cclspec;
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7212 setup_ccl_program (&cclspec.ccl, CODING_CCL_DECODER (coding));
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7213 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7214 do
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7215 {
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7216 EMACS_INT pos = coding->dst_pos + coding->produced_char;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7217
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7218 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7219 coding->annotated = 0;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7220 coding->charbuf_used = carryover;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7221 (*(coding->decoder)) (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7222 coding_set_destination (coding);
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7223 carryover = produce_chars (coding, translation_table, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7224 if (coding->annotated)
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7225 produce_annotation (coding, pos);
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7226 for (i = 0; i < carryover; i++)
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7227 coding->charbuf[i]
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7228 = coding->charbuf[coding->charbuf_used - carryover + i];
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7229 }
107171
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7230 while (coding->result == CODING_RESULT_INSUFFICIENT_DST
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7231 || (coding->consumed < coding->src_bytes
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7232 && (coding->result == CODING_RESULT_SUCCESS
dfc03b454687 Fix the ccl decoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 106918
diff changeset
7233 || coding->result == CODING_RESULT_INVALID_SRC)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7234
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7235 if (carryover > 0)
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7236 {
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7237 coding_set_destination (coding);
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7238 coding->charbuf_used = carryover;
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7239 produce_chars (coding, translation_table, 1);
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7240 }
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7241
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7242 coding->carryover_bytes = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7243 if (coding->consumed < coding->src_bytes)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7244 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7245 int nbytes = coding->src_bytes - coding->consumed;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7246 const unsigned char *src;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7247
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7248 coding_set_source (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7249 coding_set_destination (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7250 src = coding->source + coding->consumed;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7251
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7252 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
7253 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7254 /* Flush out unprocessed data as binary chars. We are sure
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7255 that the number of data is less than the size of
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7256 coding->charbuf. */
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7257 coding->charbuf_used = 0;
100587
d91e3320dd81 (decode_coding): Clear chars_at_source flag when using charbuf.
Jason Rumney <jasonr@gnu.org>
parents: 100303
diff changeset
7258 coding->chars_at_source = 0;
d91e3320dd81 (decode_coding): Clear chars_at_source flag when using charbuf.
Jason Rumney <jasonr@gnu.org>
parents: 100303
diff changeset
7259
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7260 while (nbytes-- > 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7261 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7262 int c = *src++;
89279
1fd77c471ee6 (decode_coding_utf_8): When eol_type is Qdos, handle
Kenichi Handa <handa@m17n.org>
parents: 89227
diff changeset
7263
90243
c59afb15f5c6 (decode_coding): Fix handling of invalid bytes.
Kenichi Handa <handa@m17n.org>
parents: 90231
diff changeset
7264 if (c & 0x80)
c59afb15f5c6 (decode_coding): Fix handling of invalid bytes.
Kenichi Handa <handa@m17n.org>
parents: 90231
diff changeset
7265 c = BYTE8_TO_CHAR (c);
c59afb15f5c6 (decode_coding): Fix handling of invalid bytes.
Kenichi Handa <handa@m17n.org>
parents: 90231
diff changeset
7266 coding->charbuf[coding->charbuf_used++] = c;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7267 }
89863
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
7268 produce_chars (coding, Qnil, 1);
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
7269 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7270 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7271 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7272 /* Record unprocessed bytes in coding->carryover. We are
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7273 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
7274 coding->carryover. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7275 unsigned char *p = coding->carryover;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7276
102115
db1f94e25359 (detect_coding): Don't overflow coding->carryover.
Kenichi Handa <handa@m17n.org>
parents: 102105
diff changeset
7277 if (nbytes > sizeof coding->carryover)
db1f94e25359 (detect_coding): Don't overflow coding->carryover.
Kenichi Handa <handa@m17n.org>
parents: 102105
diff changeset
7278 nbytes = sizeof coding->carryover;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7279 coding->carryover_bytes = nbytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7280 while (nbytes-- > 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7281 *p++ = *src++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7282 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7283 coding->consumed = coding->src_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7284 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7285
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
7286 if (! EQ (CODING_ID_EOL_TYPE (coding->id), Qunix)
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
7287 && !inhibit_eol_conversion)
90378
0aec08f4c729 (decode_eol): Pay attention to buffer relocation in
Kenichi Handa <handa@m17n.org>
parents: 90363
diff changeset
7288 decode_eol (coding);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7289 if (BUFFERP (coding->dst_object))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7290 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7291 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
7292 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
7293 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7294 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7295 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7296
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7297
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7298 /* 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
7299 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
7300 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
7301 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
7302 next element of BUF.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7303
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7304 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
7305 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
7306 return BUF. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7307
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7308 static INLINE int *
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7309 handle_composition_annotation (pos, limit, coding, buf, stop)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7310 EMACS_INT pos, limit;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7311 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7312 int *buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7313 EMACS_INT *stop;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7314 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7315 EMACS_INT start, end;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7316 Lisp_Object prop;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7317
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7318 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
7319 || end > limit)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7320 *stop = limit;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7321 else if (start > pos)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7322 *stop = start;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7323 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7324 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7325 if (start == pos)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7326 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7327 /* We found a composition. Store the corresponding
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7328 annotation data in BUF. */
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7329 int *head = buf;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7330 enum composition_method method = COMPOSITION_METHOD (prop);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7331 int nchars = COMPOSITION_LENGTH (prop);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7332
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7333 ADD_COMPOSITION_DATA (buf, nchars, 0, method);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7334 if (method != COMPOSITION_RELATIVE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7335 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7336 Lisp_Object components;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7337 int len, i, i_byte;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7338
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7339 components = COMPOSITION_COMPONENTS (prop);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7340 if (VECTORP (components))
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7341 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7342 len = XVECTOR (components)->size;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7343 for (i = 0; i < len; i++)
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7344 *buf++ = XINT (AREF (components, i));
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7345 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7346 else if (STRINGP (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7347 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7348 len = SCHARS (components);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7349 i = i_byte = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7350 while (i < len)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7351 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7352 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
7353 buf++;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7354 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7355 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7356 else if (INTEGERP (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7357 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7358 len = 1;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7359 *buf++ = XINT (components);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7360 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7361 else if (CONSP (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7362 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7363 for (len = 0; CONSP (components);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7364 len++, components = XCDR (components))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7365 *buf++ = XINT (XCAR (components));
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7366 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7367 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7368 abort ();
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7369 *head -= len;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7370 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7371 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7372
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7373 if (find_composition (end, limit, &start, &end, &prop,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7374 coding->src_object)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7375 && end <= limit)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7376 *stop = start;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7377 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7378 *stop = limit;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7379 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7380 return buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7381 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7382
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7383
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
7384 /* 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
7385 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
7386 *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
7387 (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
7388 BUF.
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7389
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7390 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
7391 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
7392
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7393 static INLINE int *
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7394 handle_charset_annotation (pos, limit, coding, buf, stop)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7395 EMACS_INT pos, limit;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7396 struct coding_system *coding;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7397 int *buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7398 EMACS_INT *stop;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7399 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7400 Lisp_Object val, next;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7401 int id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7402
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7403 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
7404 if (! NILP (val) && CHARSETP (val))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7405 id = XINT (CHARSET_SYMBOL_ID (val));
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7406 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7407 id = -1;
89852
b636ae1109c6 (MAX_ANNOTATION_LENGTH): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 89851
diff changeset
7408 ADD_CHARSET_DATA (buf, 0, id);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7409 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
7410 coding->src_object,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7411 make_number (limit));
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7412 *stop = XINT (next);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7413 return buf;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7414 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7415
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7416
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7417 static void
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
7418 consume_chars (coding, translation_table, max_lookup)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7419 struct coding_system *coding;
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7420 Lisp_Object translation_table;
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
7421 int max_lookup;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7422 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7423 int *buf = coding->charbuf;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7424 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
7425 const unsigned char *src = coding->source + coding->consumed;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7426 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
7427 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
7428 EMACS_INT end_pos = coding->src_pos + coding->src_chars;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7429 int multibytep = coding->src_multibyte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7430 Lisp_Object eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7431 int c;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7432 EMACS_INT stop, stop_composition, stop_charset;
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
7433 int *lookup_buf = NULL;
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7434
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7435 if (! NILP (translation_table))
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
7436 lookup_buf = alloca (sizeof (int) * max_lookup);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7437
102334
7baaea85626e (decode_coding_utf_8, decode_coding_utf_16, decode_coding_emacs_mule,
Eli Zaretskii <eliz@gnu.org>
parents: 102327
diff changeset
7438 eol_type = inhibit_eol_conversion ? Qunix : CODING_ID_EOL_TYPE (coding->id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7439 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7440 eol_type = Qunix;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7441
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7442 /* Note: composition handling is not yet implemented. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7443 coding->common_flags &= ~CODING_ANNOTATE_COMPOSITION_MASK;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7444
89562
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
7445 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
7446 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
7447 else
89562
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
7448 {
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
7449 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
7450 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
7451 else
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
7452 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
7453 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
7454 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
7455 else
12fbcfebb9ad (consume_chars): If coding->src_object is nil, don't check annotation.
Kenichi Handa <handa@m17n.org>
parents: 89545
diff changeset
7456 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
7457 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7458
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7459 /* Compensate for CRLF and conversion. */
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7460 buf_end -= 1 + MAX_ANNOTATION_LENGTH;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7461 while (buf < buf_end)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7462 {
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7463 Lisp_Object trans;
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7464
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7465 if (pos == stop)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7466 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7467 if (pos == end_pos)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7468 break;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7469 if (pos == stop_composition)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7470 buf = handle_composition_annotation (pos, end_pos, coding,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7471 buf, &stop_composition);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7472 if (pos == stop_charset)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7473 buf = handle_charset_annotation (pos, end_pos, coding,
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7474 buf, &stop_charset);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7475 stop = (stop_composition < stop_charset
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
7476 ? stop_composition : stop_charset);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7477 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7478
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7479 if (! multibytep)
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7480 {
89462
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
7481 EMACS_INT bytes;
4e359ebf3984 (decode_coding_iso_2022): Fix handling of invalid
Kenichi Handa <handa@m17n.org>
parents: 89448
diff changeset
7482
106918
d6e8fa5622b7 Fix ccl encoding of unibyte source.
Kenichi Handa <handa@m17n.org>
parents: 106826
diff changeset
7483 if (coding->encoder == encode_coding_raw_text
d6e8fa5622b7 Fix ccl encoding of unibyte source.
Kenichi Handa <handa@m17n.org>
parents: 106826
diff changeset
7484 || coding->encoder == encode_coding_ccl)
89933
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
7485 c = *src++, pos++;
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
7486 else if ((bytes = MULTIBYTE_LENGTH (src, src_end)) > 0)
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
7487 c = STRING_CHAR_ADVANCE_NO_UNIFY (src), pos += bytes;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7488 else
89917
1763eef5ad02 (encode_coding_utf_8): Fix handling of raw-byte char.
Kenichi Handa <handa@m17n.org>
parents: 89905
diff changeset
7489 c = BYTE8_TO_CHAR (*src), src++, pos++;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7490 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7491 else
92992
49c4ea77b83a (CHAR_STRING_ADVANCE_NO_UNIFY)
Kenichi Handa <handa@m17n.org>
parents: 92458
diff changeset
7492 c = STRING_CHAR_ADVANCE_NO_UNIFY (src), pos++;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7493 if ((c == '\r') && (coding->mode & CODING_MODE_SELECTIVE_DISPLAY))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7494 c = '\n';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7495 if (! EQ (eol_type, Qunix))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7496 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7497 if (c == '\n')
32443
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
7498 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7499 if (EQ (eol_type, Qdos))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7500 *buf++ = '\r';
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7501 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7502 c = '\r';
32443
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
7503 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7504 }
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7505
89858
23cb9ed79225 (get_translation_table): Declare it as Lisp_Object.
Kenichi Handa <handa@m17n.org>
parents: 89856
diff changeset
7506 trans = Qnil;
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
7507 LOOKUP_TRANSLATION_TABLE (translation_table, c, trans);
89858
23cb9ed79225 (get_translation_table): Declare it as Lisp_Object.
Kenichi Handa <handa@m17n.org>
parents: 89856
diff changeset
7508 if (NILP (trans))
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7509 *buf++ = c;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7510 else
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7511 {
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7512 int from_nchars = 1, to_nchars = 1;
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7513 int *lookup_buf_end;
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7514 const unsigned char *p = src;
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7515 int i;
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7516
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7517 lookup_buf[0] = c;
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7518 for (i = 1; i < max_lookup && p < src_end; i++)
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7519 lookup_buf[i] = STRING_CHAR_ADVANCE (p);
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7520 lookup_buf_end = lookup_buf + i;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7521 trans = get_translation (trans, lookup_buf, lookup_buf_end);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7522 if (INTEGERP (trans))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7523 c = XINT (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7524 else if (CONSP (trans))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7525 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7526 from_nchars = ASIZE (XCAR (trans));
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7527 trans = XCDR (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7528 if (INTEGERP (trans))
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7529 c = XINT (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7530 else
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7531 {
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7532 to_nchars = ASIZE (trans);
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7533 if (buf + to_nchars > buf_end)
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7534 break;
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7535 c = XINT (AREF (trans, 0));
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7536 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7537 }
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7538 else
23881
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
7539 break;
102422
82f82b92314e (CODING_ISO_CMP_STATUS): New macro.
Kenichi Handa <handa@m17n.org>
parents: 102334
diff changeset
7540 *buf++ = c;
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7541 for (i = 1; i < to_nchars; i++)
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7542 *buf++ = XINT (AREF (trans, i));
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7543 for (i = 1; i < from_nchars; i++, pos++)
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7544 src += MULTIBYTE_LENGTH_NO_CHECK (src);
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
7545 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7546 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7547
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7548 coding->consumed = src - coding->source;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7549 coding->consumed_char = pos - coding->src_pos;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7550 coding->charbuf_used = buf - coding->charbuf;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7551 coding->chars_at_source = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7552 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7553
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7554
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7555 /* Encode the text at CODING->src_object into CODING->dst_object.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7556 CODING->src_object is a buffer or a string.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7557 CODING->dst_object is a buffer or nil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7558
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7559 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
7560 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
7561 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
7562 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
7563 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
7564 same buffer as CODING->dst_object, CODING->src_pos must be
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7565 negative and CODING should not have `pre-write-conversion'.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7566
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7567 If CODING->src_object is a string, CODING should not have
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7568 `pre-write-conversion'.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7569
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7570 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
7571 the current point of that buffer.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7572
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7573 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
7574 memory area specified by CODING->destination. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7575
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7576 static int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7577 encode_coding (coding)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7578 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7579 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7580 Lisp_Object attrs;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
7581 Lisp_Object translation_table;
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
7582 int max_lookup;
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
7583 struct ccl_spec cclspec;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7584
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7585 attrs = CODING_ID_ATTRS (coding->id);
89933
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
7586 if (coding->encoder == encode_coding_raw_text)
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
7587 translation_table = Qnil, max_lookup = 0;
42661
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
7588 else
89933
48af0ea7d387 (setup_coding_system): Set coding->common_flags
Kenichi Handa <handa@m17n.org>
parents: 89924
diff changeset
7589 translation_table = get_translation_table (attrs, 1, &max_lookup);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7590
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7591 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7592 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7593 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7594 coding->dst_multibyte
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7595 = ! NILP (current_buffer->enable_multibyte_characters);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7596 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7597
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7598 coding->consumed = coding->consumed_char = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7599 coding->produced = coding->produced_char = 0;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7600 record_conversion_result (coding, CODING_RESULT_SUCCESS);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7601 coding->errors = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7602
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7603 ALLOC_CONVERSION_WORK_AREA (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7604
107507
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
7605 if (coding->encoder == encode_coding_ccl)
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
7606 {
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
7607 coding->spec.ccl = &cclspec;
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
7608 setup_ccl_program (&cclspec.ccl, CODING_CCL_ENCODER (coding));
8960853cf85d Fix the ccl encoder for the case that the output buffer is fullfilled.
Kenichi Handa <handa@m17n.org>
parents: 107506
diff changeset
7609 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7610 do {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7611 coding_set_source (coding);
89859
b706c5ee6492 (get_translation_table): New arg max_lookup. Caller changed.
Kenichi Handa <handa@m17n.org>
parents: 89858
diff changeset
7612 consume_chars (coding, translation_table, max_lookup);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7613 coding_set_destination (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7614 (*(coding->encoder)) (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7615 } while (coding->consumed_char < coding->src_chars);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7616
90809
3c52757d5f6e (produce_chars): Don't call insert_from_gap if no
Kenichi Handa <handa@m17n.org>
parents: 90772
diff changeset
7617 if (BUFFERP (coding->dst_object) && coding->produced_char > 0)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7618 insert_from_gap (coding->produced_char, coding->produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7619
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7620 return (coding->result);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7621 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7622
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7623
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7624 /* 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
7625 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
7626
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7627 /* 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
7628 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
7629 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
7630 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
7631 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
7632 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
7633
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7634 /* 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
7635 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
7636
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7637
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
7638 /* Return a working buffer of code conversion. MULTIBYTE specifies the
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7639 multibyteness of returning buffer. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7640
89863
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
7641 static Lisp_Object
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7642 make_conversion_work_buffer (multibyte)
89863
428fc37b2ae6 Add many prototypes for static functions.
Kenichi Handa <handa@m17n.org>
parents: 89861
diff changeset
7643 int multibyte;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7644 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7645 Lisp_Object name, workbuf;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7646 struct buffer *current;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7647
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7648 if (reused_workbuf_in_use++)
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7649 {
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7650 name = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7651 workbuf = Fget_buffer_create (name);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7652 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7653 else
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7654 {
99074
10cd979d05ca (make_conversion_work_buffer): Check that Vcode_conversion_reused_workbuf
Noah Friedman <friedman@splode.com>
parents: 98992
diff changeset
7655 if (NILP (Fbuffer_live_p (Vcode_conversion_reused_workbuf)))
98186
1cfa973fde14 (make_conversion_work_buffer): Avoid calling
Kenichi Handa <handa@m17n.org>
parents: 96571
diff changeset
7656 Vcode_conversion_reused_workbuf
1cfa973fde14 (make_conversion_work_buffer): Avoid calling
Kenichi Handa <handa@m17n.org>
parents: 96571
diff changeset
7657 = Fget_buffer_create (Vcode_conversion_workbuf_name);
1cfa973fde14 (make_conversion_work_buffer): Avoid calling
Kenichi Handa <handa@m17n.org>
parents: 96571
diff changeset
7658 workbuf = Vcode_conversion_reused_workbuf;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7659 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7660 current = current_buffer;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7661 set_buffer_internal (XBUFFER (workbuf));
100262
46114a72fb0e (make_conversion_work_buffer): Disable buffer modification hooks in
Chong Yidong <cyd@stupidchicken.com>
parents: 100176
diff changeset
7662 /* We can't allow modification hooks to run in the work buffer. For
46114a72fb0e (make_conversion_work_buffer): Disable buffer modification hooks in
Chong Yidong <cyd@stupidchicken.com>
parents: 100176
diff changeset
7663 instance, directory_files_internal assumes that file decoding
46114a72fb0e (make_conversion_work_buffer): Disable buffer modification hooks in
Chong Yidong <cyd@stupidchicken.com>
parents: 100176
diff changeset
7664 doesn't compile new regexps. */
46114a72fb0e (make_conversion_work_buffer): Disable buffer modification hooks in
Chong Yidong <cyd@stupidchicken.com>
parents: 100176
diff changeset
7665 Fset (Fmake_local_variable (Qinhibit_modification_hooks), Qt);
93877
62d97ebb13a9 * coding.c (detect_coding_emacs_mule)
Michael Albinus <michael.albinus@gmx.de>
parents: 93595
diff changeset
7666 Ferase_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7667 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
7668 current_buffer->enable_multibyte_characters = multibyte ? Qt : Qnil;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7669 set_buffer_internal (current);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7670 return workbuf;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7671 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7672
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7673
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7674 static Lisp_Object
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7675 code_conversion_restore (arg)
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7676 Lisp_Object arg;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
7677 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7678 Lisp_Object current, workbuf;
90263
80fb4c061e99 (code_conversion_restore): GCPRO arg.
Kenichi Handa <handa@m17n.org>
parents: 90261
diff changeset
7679 struct gcpro gcpro1;
80fb4c061e99 (code_conversion_restore): GCPRO arg.
Kenichi Handa <handa@m17n.org>
parents: 90261
diff changeset
7680
80fb4c061e99 (code_conversion_restore): GCPRO arg.
Kenichi Handa <handa@m17n.org>
parents: 90261
diff changeset
7681 GCPRO1 (arg);
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7682 current = XCAR (arg);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7683 workbuf = XCDR (arg);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7684 if (! NILP (workbuf))
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7685 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7686 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
7687 reused_workbuf_in_use = 0;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7688 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
7689 Fkill_buffer (workbuf);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7690 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7691 set_buffer_internal (XBUFFER (current));
90263
80fb4c061e99 (code_conversion_restore): GCPRO arg.
Kenichi Handa <handa@m17n.org>
parents: 90261
diff changeset
7692 UNGCPRO;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7693 return Qnil;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7694 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7695
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7696 Lisp_Object
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7697 code_conversion_save (with_work_buf, multibyte)
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7698 int with_work_buf, multibyte;
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7699 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7700 Lisp_Object workbuf = Qnil;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7701
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7702 if (with_work_buf)
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7703 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
7704 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
7705 Fcons (Fcurrent_buffer (), workbuf));
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7706 return workbuf;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7707 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7708
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7709 int
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7710 decode_coding_gap (coding, chars, bytes)
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
7711 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7712 EMACS_INT chars, bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7713 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7714 int count = specpdl_ptr - specpdl;
89448
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7715 Lisp_Object attrs;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7716
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7717 code_conversion_save (0, 0);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7718
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7719 coding->src_object = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7720 coding->src_chars = chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7721 coding->src_bytes = bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7722 coding->src_pos = -chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7723 coding->src_pos_byte = -bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7724 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
7725 coding->dst_object = coding->src_object;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7726 coding->dst_pos = PT;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7727 coding->dst_pos_byte = PT_BYTE;
88443
6b86cf30a0b9 (produce_chars): Set the variable `multibytep' correctly.
Kenichi Handa <handa@m17n.org>
parents: 88438
diff changeset
7728 coding->dst_multibyte = ! NILP (current_buffer->enable_multibyte_characters);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7729
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7730 if (CODING_REQUIRE_DETECTION (coding))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7731 detect_coding (coding);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
7732
90350
60eaefb08cf7 (DECODE_COMPOSITION_START): If the source is short, set
Kenichi Handa <handa@m17n.org>
parents: 90346
diff changeset
7733 coding->mode |= CODING_MODE_LAST_BLOCK;
90772
b15334b4a9c3 (coding_alloc_by_making_gap): New arg offset.
Kenichi Handa <handa@m17n.org>
parents: 90737
diff changeset
7734 current_buffer->text->inhibit_shrinking = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7735 decode_coding (coding);
90772
b15334b4a9c3 (coding_alloc_by_making_gap): New arg offset.
Kenichi Handa <handa@m17n.org>
parents: 90737
diff changeset
7736 current_buffer->text->inhibit_shrinking = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7737
89448
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7738 attrs = CODING_ID_ATTRS (coding->id);
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7739 if (! NILP (CODING_ATTR_POST_READ (attrs)))
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7740 {
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7741 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
7742 Lisp_Object val;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7743
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7744 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
7745 val = call1 (CODING_ATTR_POST_READ (attrs),
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7746 make_number (coding->produced_char));
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7747 CHECK_NATNUM (val);
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7748 coding->produced_char += Z - prev_Z;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7749 coding->produced += Z_BYTE - prev_Z_BYTE;
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7750 }
de8b460070cc (setup_coding_system): If coding has
Kenichi Handa <handa@m17n.org>
parents: 89446
diff changeset
7751
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7752 unbind_to (count, Qnil);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7753 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7754 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7755
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7756 int
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7757 encode_coding_gap (coding, chars, bytes)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7758 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7759 EMACS_INT chars, bytes;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7760 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7761 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
7762
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7763 code_conversion_save (0, 0);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7764
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7765 coding->src_object = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7766 coding->src_chars = chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7767 coding->src_bytes = bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7768 coding->src_pos = -chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7769 coding->src_pos_byte = -bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7770 coding->src_multibyte = chars < bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7771 coding->dst_object = coding->src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7772 coding->dst_pos = PT;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7773 coding->dst_pos_byte = PT_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7774
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7775 encode_coding (coding);
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 unbind_to (count, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7778 return coding->result;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7779 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7780
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7781
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7782 /* 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
7783 SRC_OBJECT into DST_OBJECT by coding context CODING.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7784
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7785 SRC_OBJECT is a buffer, a string, or Qnil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7786
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7787 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
7788 are positions in the buffer.
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 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
7791 FROM and TO are indices to the string.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7792
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7793 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
7794 indices to coding->source.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7795
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7796 DST_OBJECT is a buffer, Qt, or Qnil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7797
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7798 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
7799 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
7800 is deleted.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7801
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7802 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
7803 set in CODING->dst_object.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7804
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7805 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
7806 The caller must allocate CODING->dst_bytes bytes at
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7807 CODING->destination by xmalloc. If the decoded text is longer than
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7808 CODING->dst_bytes, CODING->destination is relocated by xrealloc.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7809 */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7810
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7811 void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7812 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
7813 dst_object)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7814 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7815 Lisp_Object src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7816 EMACS_INT from, from_byte, to, to_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7817 Lisp_Object dst_object;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7818 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7819 int count = specpdl_ptr - specpdl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7820 unsigned char *destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7821 EMACS_INT dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7822 EMACS_INT chars = to - from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7823 EMACS_INT bytes = to_byte - from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7824 Lisp_Object attrs;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7825 int saved_pt = -1, saved_pt_byte;
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7826 int need_marker_adjustment = 0;
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
7827 Lisp_Object old_deactivate_mark;
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
7828
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
7829 old_deactivate_mark = Vdeactivate_mark;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7830
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7831 if (NILP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7832 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7833 destination = coding->destination;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7834 dst_bytes = coding->dst_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7835 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7836
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7837 coding->src_object = src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7838 coding->src_chars = chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7839 coding->src_bytes = bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7840 coding->src_multibyte = chars < bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7841
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7842 if (STRINGP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7843 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7844 coding->src_pos = from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7845 coding->src_pos_byte = from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7846 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7847 else if (BUFFERP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7848 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7849 set_buffer_internal (XBUFFER (src_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7850 if (from != GPT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7851 move_gap_both (from, from_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7852 if (EQ (src_object, dst_object))
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7853 {
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7854 struct Lisp_Marker *tail;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7855
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7856 for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7857 {
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7858 tail->need_adjustment
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7859 = tail->charpos == (tail->insertion_type ? from : to);
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7860 need_marker_adjustment |= tail->need_adjustment;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7861 }
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7862 saved_pt = PT, saved_pt_byte = PT_BYTE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7863 TEMP_SET_PT_BOTH (from, from_byte);
92458
5f5f07a5c076 (decode_coding_object): Inhibit gap shrinking while
Andreas Schwab <schwab@suse.de>
parents: 92406
diff changeset
7864 current_buffer->text->inhibit_shrinking = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7865 del_range_both (from, from_byte, to, to_byte, 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7866 coding->src_pos = -chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7867 coding->src_pos_byte = -bytes;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
7868 }
42661
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
7869 else
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
7870 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7871 coding->src_pos = from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7872 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
7873 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7874 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7875
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7876 if (CODING_REQUIRE_DETECTION (coding))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7877 detect_coding (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7878 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7879
89418
a9c2b3712863 (coding_set_source): Fix for the case that the current
Kenichi Handa <handa@m17n.org>
parents: 89404
diff changeset
7880 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
7881 || (! 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
7882 && NILP (dst_object)))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7883 {
93321
c3fe9ef79b56 (decode_coding_object): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93197
diff changeset
7884 coding->dst_multibyte = !CODING_FOR_UNIBYTE (coding);
c3fe9ef79b56 (decode_coding_object): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93197
diff changeset
7885 coding->dst_object = code_conversion_save (1, coding->dst_multibyte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7886 coding->dst_pos = BEG;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7887 coding->dst_pos_byte = BEG_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7888 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7889 else if (BUFFERP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7890 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7891 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7892 coding->dst_object = dst_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7893 coding->dst_pos = BUF_PT (XBUFFER (dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7894 coding->dst_pos_byte = BUF_PT_BYTE (XBUFFER (dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7895 coding->dst_multibyte
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7896 = ! NILP (XBUFFER (dst_object)->enable_multibyte_characters);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7897 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7898 else
29172
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
7899 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
7900 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7901 coding->dst_object = Qnil;
93322
3b82aab9d8fc (decode_coding_object): Revert part of last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93321
diff changeset
7902 /* Most callers presume this will return a multibyte result, and they
3b82aab9d8fc (decode_coding_object): Revert part of last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93321
diff changeset
7903 won't use `binary' or `raw-text' anyway, so let's not worry about
3b82aab9d8fc (decode_coding_object): Revert part of last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93321
diff changeset
7904 CODING_FOR_UNIBYTE. */
93323
06e93ffa2e9f (decode_coding_object): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93322
diff changeset
7905 coding->dst_multibyte = 1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7906 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7907
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7908 decode_coding (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7909
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7910 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7911 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7912
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7913 if (! NILP (CODING_ATTR_POST_READ (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7914 {
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
7915 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7916 EMACS_INT prev_Z = Z, prev_Z_BYTE = Z_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7917 Lisp_Object val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7918
88506
a7f0d13affa5 (decode_coding_object): Move point to coding->dst_pos before
Kenichi Handa <handa@m17n.org>
parents: 88497
diff changeset
7919 TEMP_SET_PT_BOTH (coding->dst_pos, coding->dst_pos_byte);
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
7920 GCPRO5 (coding->src_object, coding->dst_object, src_object, dst_object,
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
7921 old_deactivate_mark);
90131
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
7922 val = safe_call1 (CODING_ATTR_POST_READ (attrs),
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
7923 make_number (coding->produced_char));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7924 UNGCPRO;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7925 CHECK_NATNUM (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7926 coding->produced_char += Z - prev_Z;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7927 coding->produced += Z_BYTE - prev_Z_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7928 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7929
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7930 if (EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7931 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7932 coding->dst_object = Fbuffer_string ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7933 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7934 else if (NILP (dst_object) && BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7935 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7936 set_buffer_internal (XBUFFER (coding->dst_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7937 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
7938 {
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
7939 destination = xrealloc (destination, coding->produced);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7940 if (! destination)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7941 {
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7942 record_conversion_result (coding,
107174
e98bd64897e0 Fix handling of CODING_RESULT_INSUFFICIENT_DST.
Kenichi Handa <handa@m17n.org>
parents: 107171
diff changeset
7943 CODING_RESULT_INSUFFICIENT_MEM);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7944 unbind_to (count, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7945 return;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7946 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7947 if (BEGV < GPT && GPT < BEGV + coding->produced_char)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7948 move_gap_both (BEGV, BEGV_BYTE);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7949 bcopy (BEGV_ADDR, destination, coding->produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7950 coding->destination = destination;
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
7951 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7952 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7953
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7954 if (saved_pt >= 0)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7955 {
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7956 /* This is the case of:
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7957 (BUFFERP (src_object) && EQ (src_object, dst_object))
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7958 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
7959 contents, we must recover it now. */
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7960 set_buffer_internal (XBUFFER (src_object));
92458
5f5f07a5c076 (decode_coding_object): Inhibit gap shrinking while
Andreas Schwab <schwab@suse.de>
parents: 92406
diff changeset
7961 current_buffer->text->inhibit_shrinking = 0;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7962 if (saved_pt < from)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7963 TEMP_SET_PT_BOTH (saved_pt, saved_pt_byte);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7964 else if (saved_pt < from + chars)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7965 TEMP_SET_PT_BOTH (from, from_byte);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7966 else if (! NILP (current_buffer->enable_multibyte_characters))
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7967 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
7968 saved_pt_byte + (coding->produced - bytes));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7969 else
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7970 TEMP_SET_PT_BOTH (saved_pt + (coding->produced - bytes),
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7971 saved_pt_byte + (coding->produced - bytes));
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7972
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7973 if (need_marker_adjustment)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7974 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7975 struct Lisp_Marker *tail;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7976
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7977 for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7978 if (tail->need_adjustment)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7979 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7980 tail->need_adjustment = 0;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7981 if (tail->insertion_type)
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7982 {
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7983 tail->bytepos = from_byte;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7984 tail->charpos = from;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7985 }
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7986 else
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7987 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7988 tail->bytepos = from_byte + coding->produced;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7989 tail->charpos
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7990 = (NILP (current_buffer->enable_multibyte_characters)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7991 ? tail->bytepos : from + coding->produced_char);
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7992 }
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7993 }
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
7994 }
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7995 }
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
7996
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
7997 Vdeactivate_mark = old_deactivate_mark;
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
7998 unbind_to (count, coding->dst_object);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
7999 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8000
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
8001
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
8002 void
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8003 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
8004 dst_object)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8005 struct coding_system *coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8006 Lisp_Object src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8007 EMACS_INT from, from_byte, to, to_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8008 Lisp_Object dst_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8009 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8010 int count = specpdl_ptr - specpdl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8011 EMACS_INT chars = to - from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8012 EMACS_INT bytes = to_byte - from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8013 Lisp_Object attrs;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8014 int saved_pt = -1, saved_pt_byte;
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8015 int need_marker_adjustment = 0;
90231
8be9e4c6d687 (encode_coding_object): If a pre-write-conversion
Kenichi Handa <handa@m17n.org>
parents: 90224
diff changeset
8016 int kill_src_buffer = 0;
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8017 Lisp_Object old_deactivate_mark;
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8018
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8019 old_deactivate_mark = Vdeactivate_mark;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8020
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8021 coding->src_object = src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8022 coding->src_chars = chars;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8023 coding->src_bytes = bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8024 coding->src_multibyte = chars < bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8025
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8026 attrs = CODING_ID_ATTRS (coding->id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8027
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8028 if (EQ (src_object, dst_object))
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8029 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8030 struct Lisp_Marker *tail;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8031
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8032 for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8033 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8034 tail->need_adjustment
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8035 = tail->charpos == (tail->insertion_type ? from : to);
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8036 need_marker_adjustment |= tail->need_adjustment;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8037 }
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8038 }
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8039
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8040 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
8041 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8042 coding->src_object = code_conversion_save (1, coding->src_multibyte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8043 set_buffer_internal (XBUFFER (coding->src_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8044 if (STRINGP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8045 insert_from_string (src_object, from, from_byte, chars, bytes, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8046 else if (BUFFERP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8047 insert_from_buffer (XBUFFER (src_object), from, chars, 0);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8048 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8049 insert_1_both (coding->source + from, chars, bytes, 0, 0, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8050
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8051 if (EQ (src_object, dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8052 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8053 set_buffer_internal (XBUFFER (src_object));
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8054 saved_pt = PT, saved_pt_byte = PT_BYTE;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8055 del_range_both (from, from_byte, to, to_byte, 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8056 set_buffer_internal (XBUFFER (coding->src_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8057 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8058
90131
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
8059 {
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
8060 Lisp_Object args[3];
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8061 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8062
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8063 GCPRO5 (coding->src_object, coding->dst_object, src_object, dst_object,
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8064 old_deactivate_mark);
90131
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
8065 args[0] = CODING_ATTR_PRE_WRITE (attrs);
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
8066 args[1] = make_number (BEG);
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
8067 args[2] = make_number (Z);
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
8068 safe_call (3, args);
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8069 UNGCPRO;
90131
503a3c779486 (decode_coding_object): Use safe_call1 instead of call1.
Kenichi Handa <handa@m17n.org>
parents: 90127
diff changeset
8070 }
90231
8be9e4c6d687 (encode_coding_object): If a pre-write-conversion
Kenichi Handa <handa@m17n.org>
parents: 90224
diff changeset
8071 if (XBUFFER (coding->src_object) != current_buffer)
8be9e4c6d687 (encode_coding_object): If a pre-write-conversion
Kenichi Handa <handa@m17n.org>
parents: 90224
diff changeset
8072 kill_src_buffer = 1;
88510
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
8073 coding->src_object = Fcurrent_buffer ();
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8074 if (BEG != GPT)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8075 move_gap_both (BEG, BEG_BYTE);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8076 coding->src_chars = Z - BEG;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8077 coding->src_bytes = Z_BYTE - BEG_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8078 coding->src_pos = BEG;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8079 coding->src_pos_byte = BEG_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8080 coding->src_multibyte = Z < Z_BYTE;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8081 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8082 else if (STRINGP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8083 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8084 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8085 coding->src_pos = from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8086 coding->src_pos_byte = from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8087 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8088 else if (BUFFERP (src_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8089 {
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8090 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8091 set_buffer_internal (XBUFFER (src_object));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8092 if (EQ (src_object, dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8093 {
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8094 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
8095 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
8096 coding->src_pos = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8097 coding->src_pos_byte = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8098 }
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
8099 else
42105
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
8100 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8101 if (from < GPT && to >= GPT)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8102 move_gap_both (from, from_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8103 coding->src_pos = from;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8104 coding->src_pos_byte = from_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8105 }
64308
93129de4b8a4 (code_convert_region_unwind): ARG is changed to a cons.
Kenichi Handa <handa@m17n.org>
parents: 64251
diff changeset
8106 }
93129de4b8a4 (code_convert_region_unwind): ARG is changed to a cons.
Kenichi Handa <handa@m17n.org>
parents: 64251
diff changeset
8107 else
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8108 code_conversion_save (0, 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8109
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8110 if (BUFFERP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8111 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8112 coding->dst_object = dst_object;
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
8113 if (EQ (src_object, dst_object))
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
8114 {
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
8115 coding->dst_pos = from;
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
8116 coding->dst_pos_byte = from_byte;
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
8117 }
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
8118 else
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
8119 {
95353
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
8120 struct buffer *current = current_buffer;
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
8121
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
8122 set_buffer_temp (XBUFFER (dst_object));
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
8123 coding->dst_pos = PT;
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
8124 coding->dst_pos_byte = PT_BYTE;
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
8125 move_gap_both (coding->dst_pos, coding->dst_pos_byte);
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
8126 set_buffer_temp (current);
89042
2b9f8973f240 (coding_set_destination): Fix coding->destination for
Kenichi Handa <handa@m17n.org>
parents: 88977
diff changeset
8127 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8128 coding->dst_multibyte
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8129 = ! NILP (XBUFFER (dst_object)->enable_multibyte_characters);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8130 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8131 else if (EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8132 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8133 coding->dst_object = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8134 coding->dst_bytes = coding->src_chars;
88510
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
8135 if (coding->dst_bytes == 0)
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
8136 coding->dst_bytes = 1;
d266b8fb8761 (encode_coding_object): Give correct arguments ot
Kenichi Handa <handa@m17n.org>
parents: 88506
diff changeset
8137 coding->destination = (unsigned char *) xmalloc (coding->dst_bytes);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8138 coding->dst_multibyte = 0;
65506
f376635f5061 (code_convert_region_unwind): Argument format changed.
Kenichi Handa <handa@m17n.org>
parents: 64770
diff changeset
8139 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
8140 else
29172
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
8141 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8142 coding->dst_object = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8143 coding->dst_multibyte = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8144 }
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 encode_coding (coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8147
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8148 if (EQ (dst_object, Qt))
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 if (BUFFERP (coding->dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8151 coding->dst_object = Fbuffer_string ();
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
8152 else
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8153 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8154 coding->dst_object
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8155 = make_unibyte_string ((char *) coding->destination,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8156 coding->produced);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8157 xfree (coding->destination);
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 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8160
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8161 if (saved_pt >= 0)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8162 {
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8163 /* This is the case of:
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8164 (BUFFERP (src_object) && EQ (src_object, dst_object))
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8165 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
8166 contents, we must recover it now. */
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8167 set_buffer_internal (XBUFFER (src_object));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8168 if (saved_pt < from)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8169 TEMP_SET_PT_BOTH (saved_pt, saved_pt_byte);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8170 else if (saved_pt < from + chars)
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8171 TEMP_SET_PT_BOTH (from, from_byte);
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8172 else if (! NILP (current_buffer->enable_multibyte_characters))
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8173 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
8174 saved_pt_byte + (coding->produced - bytes));
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8175 else
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8176 TEMP_SET_PT_BOTH (saved_pt + (coding->produced - bytes),
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8177 saved_pt_byte + (coding->produced - bytes));
91344
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8178
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8179 if (need_marker_adjustment)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8180 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8181 struct Lisp_Marker *tail;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8182
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8183 for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8184 if (tail->need_adjustment)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8185 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8186 tail->need_adjustment = 0;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8187 if (tail->insertion_type)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8188 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8189 tail->bytepos = from_byte;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8190 tail->charpos = from;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8191 }
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8192 else
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8193 {
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8194 tail->bytepos = from_byte + coding->produced;
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8195 tail->charpos
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8196 = (NILP (current_buffer->enable_multibyte_characters)
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8197 ? tail->bytepos : from + coding->produced_char);
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8198 }
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8199 }
56f3473b139e (decode_coding_object): Adjuste marker positions after
Kenichi Handa <handa@m17n.org>
parents: 91327
diff changeset
8200 }
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8201 }
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
8202
90231
8be9e4c6d687 (encode_coding_object): If a pre-write-conversion
Kenichi Handa <handa@m17n.org>
parents: 90224
diff changeset
8203 if (kill_src_buffer)
8be9e4c6d687 (encode_coding_object): If a pre-write-conversion
Kenichi Handa <handa@m17n.org>
parents: 90224
diff changeset
8204 Fkill_buffer (coding->src_object);
91838
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8205
7bed61cbed0c (decode_coding_object, encode_coding_object): Preserve
Kenichi Handa <handa@m17n.org>
parents: 91807
diff changeset
8206 Vdeactivate_mark = old_deactivate_mark;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8207 unbind_to (count, Qnil);
58637
ff8a37b5299b (Vcode_conversion_workbuf_name): New variable.
Kenichi Handa <handa@m17n.org>
parents: 58502
diff changeset
8208 }
ff8a37b5299b (Vcode_conversion_workbuf_name): New variable.
Kenichi Handa <handa@m17n.org>
parents: 58502
diff changeset
8209
ff8a37b5299b (Vcode_conversion_workbuf_name): New variable.
Kenichi Handa <handa@m17n.org>
parents: 58502
diff changeset
8210
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
8211 Lisp_Object
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8212 preferred_coding_system ()
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8213 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8214 int id = coding_categories[coding_priorities[0]].id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8215
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8216 return CODING_ID_NAME (id);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8217 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8218
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8219
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8220 #ifdef emacs
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
8221 /*** 8. Emacs Lisp library functions ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8222
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8223 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
8224 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
8225 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
8226 about coding-system objects. */)
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8227 (object)
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8228 Lisp_Object object;
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8229 {
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8230 if (NILP (object)
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8231 || CODING_SYSTEM_ID (object) >= 0)
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
8232 return Qt;
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8233 if (! SYMBOLP (object)
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8234 || NILP (Fget (object, Qcoding_system_define_form)))
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
8235 return Qnil;
90272
f1df126ec7de Sync to HEAD for handling autoload-coding-system.
Kenichi Handa <handa@m17n.org>
parents: 90263
diff changeset
8236 return Qt;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8237 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8238
17717
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
8239 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
8240 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
8241 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
8242 (prompt)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8243 Lisp_Object prompt;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8244 {
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
8245 Lisp_Object val;
17717
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
8246 do
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
8247 {
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
8248 val = Fcompleting_read (prompt, Vcoding_system_alist, Qnil,
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
8249 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
8250 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
8251 while (SCHARS (val) == 0);
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
8252 return (Fintern (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8253 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8254
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
8255 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
8256 doc: /* Read a coding system from the minibuffer, prompting with string PROMPT.
79107
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
8257 If the user enters null input, return second argument DEFAULT-CODING-SYSTEM.
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
8258 Ignores case when completing coding systems (all Emacs coding systems
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
8259 are lower-case). */)
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8260 (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
8261 Lisp_Object prompt, default_coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8262 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
8263 Lisp_Object val;
79107
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
8264 int count = SPECPDL_INDEX ();
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
8265
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
8266 if (SYMBOLP (default_coding_system))
45396
cab845213388 * coding.c (Fread_coding_system, code_convert_region1)
Ken Raeburn <raeburn@raeburn.org>
parents: 45239
diff changeset
8267 default_coding_system = SYMBOL_NAME (default_coding_system);
79107
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
8268 specbind (Qcompletion_ignore_case, Qt);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
8269 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
8270 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
8271 default_coding_system, Qnil);
79107
cce707ee192e (Qcompletion_ignore_case): New external Lisp_Object.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
8272 unbind_to (count, Qnil);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
8273 return (SCHARS (val) == 0 ? Qnil : Fintern (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8274 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8275
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8276 DEFUN ("check-coding-system", Fcheck_coding_system, Scheck_coding_system,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8277 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
8278 doc: /* Check validity of CODING-SYSTEM.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8279 If valid, return CODING-SYSTEM, else signal a `coding-system-error' error.
89892
a2109a2c25d5 Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 89873
diff changeset
8280 It is valid if it is nil or a symbol defined as a coding system by the
a2109a2c25d5 Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 89873
diff changeset
8281 function `define-coding-system'. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8282 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8283 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8284 {
52794
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8285 Lisp_Object define_form;
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8286
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8287 define_form = Fget (coding_system, Qcoding_system_define_form);
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8288 if (! NILP (define_form))
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8289 {
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8290 Fput (coding_system, Qcoding_system_define_form, Qnil);
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8291 safe_eval (define_form);
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
8292 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8293 if (!NILP (Fcoding_system_p (coding_system)))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8294 return coding_system;
71972
eaa3c19b94d2 (Fcheck_coding_system): Use xsignal1. Remove loop.
Kim F. Storm <storm@cua.dk>
parents: 71084
diff changeset
8295 xsignal1 (Qcoding_system_error, coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8296 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8297
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
8298
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8299 /* 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
8300 HIGHEST is nonzero, return the coding system of the highest
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
8301 priority among the detected coding systems. Otherwise return a
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8302 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
8303 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
8304 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
8305 Otherwise, the bytes are raw bytes.
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8306
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8307 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
8308
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8309 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
8310 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
8311 (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
8312 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
8313 detect only text-format. */
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8314
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8315 Lisp_Object
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8316 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
8317 coding_system)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
8318 const unsigned char *src;
91807
507bcfb4342c * coding.c (coding_set_destination): Use BEG_BYTE rather than hardcoding 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91622
diff changeset
8319 EMACS_INT src_chars, src_bytes;
507bcfb4342c * coding.c (coding_set_destination): Use BEG_BYTE rather than hardcoding 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91622
diff changeset
8320 int highest;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
8321 int multibytep;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8322 Lisp_Object coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8323 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8324 const unsigned char *src_end = src + src_bytes;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8325 Lisp_Object attrs, eol_type;
100135
0e17542db552 (detect_coding_system): Initialize utf_16_le_eol to -1, val to
Kenichi Handa <handa@m17n.org>
parents: 100133
diff changeset
8326 Lisp_Object val = Qnil;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8327 struct coding_system coding;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8328 int id;
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8329 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
8330 enum coding_category base_category;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8331 int null_byte_found = 0, eight_bit_found = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8332
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8333 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8334 coding_system = Qundecided;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8335 setup_coding_system (coding_system, &coding);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8336 attrs = CODING_ID_ATTRS (coding.id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8337 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
8338 coding_system = CODING_ATTR_BASE_NAME (attrs);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8339
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8340 coding.source = src;
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8341 coding.src_chars = src_chars;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8342 coding.src_bytes = src_bytes;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8343 coding.src_multibyte = multibytep;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8344 coding.consumed = 0;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8345 coding.mode |= CODING_MODE_LAST_BLOCK;
95533
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8346 coding.head_ascii = 0;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8347
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8348 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
8349
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8350 /* 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
8351 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
8352 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
8353 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8354 enum coding_category category;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8355 struct coding_system *this;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8356 int c, i;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8357
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8358 /* Skip all ASCII bytes except for a few ISO2022 controls. */
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8359 for (; src < src_end; src++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8360 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8361 c = *src;
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8362 if (c & 0x80)
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8363 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8364 eight_bit_found = 1;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8365 if (null_byte_found)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8366 break;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8367 }
95533
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8368 else if (c < 0x20)
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8369 {
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8370 if ((c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8371 && ! inhibit_iso_escape_detection
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8372 && ! detect_info.checked)
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8373 {
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8374 if (detect_coding_iso_2022 (&coding, &detect_info))
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8375 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8376 /* We have scanned the whole data. */
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8377 if (! (detect_info.rejected & CATEGORY_MASK_ISO_7_ELSE))
95533
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8378 {
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8379 /* We didn't find an 8-bit code. We may
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8380 have found a null-byte, but it's very
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8381 rare that a binary file confirm to
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8382 ISO-2022. */
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8383 src = src_end;
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8384 coding.head_ascii = src - coding.source;
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8385 }
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8386 detect_info.rejected |= ~CATEGORY_MASK_ISO_ESCAPE;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8387 break;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8388 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8389 }
101040
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
8390 else if (! c && !inhibit_null_byte_detection)
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8391 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8392 null_byte_found = 1;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8393 if (eight_bit_found)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8394 break;
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8395 }
95585
862c7386145c (detect_coding): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95533
diff changeset
8396 if (! eight_bit_found)
862c7386145c (detect_coding): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95533
diff changeset
8397 coding.head_ascii++;
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8398 }
95585
862c7386145c (detect_coding): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95533
diff changeset
8399 else if (! eight_bit_found)
95533
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8400 coding.head_ascii++;
831c8ee4d884 (detect_coding): Fix handling of coding->head_ascii.
Kenichi Handa <handa@m17n.org>
parents: 95397
diff changeset
8401 }
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8402
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8403 if (null_byte_found || eight_bit_found
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8404 || coding.head_ascii < coding.src_bytes
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8405 || detect_info.found)
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8406 {
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8407 if (coding.head_ascii == coding.src_bytes)
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8408 /* As all bytes are 7-bit, we can ignore non-ISO-2022 codings. */
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8409 for (i = 0; i < coding_category_raw_text; i++)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8410 {
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8411 category = coding_priorities[i];
90594
a965377e6761 (detect_coding_system): Fix for handling off
Kenichi Handa <handa@m17n.org>
parents: 90587
diff changeset
8412 this = coding_categories + category;
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8413 if (detect_info.found & (1 << category))
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8414 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8415 }
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8416 else
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8417 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8418 if (null_byte_found)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8419 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8420 detect_info.checked |= ~CATEGORY_MASK_UTF_16;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8421 detect_info.rejected |= ~CATEGORY_MASK_UTF_16;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8422 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8423 for (i = 0; i < coding_category_raw_text; i++)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8424 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8425 category = coding_priorities[i];
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8426 this = coding_categories + category;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8427
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8428 if (this->id < 0)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8429 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8430 /* No coding system of this category is defined. */
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8431 detect_info.rejected |= (1 << category);
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8432 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8433 else if (category >= coding_category_raw_text)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8434 continue;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8435 else if (detect_info.checked & (1 << category))
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8436 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8437 if (highest
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8438 && (detect_info.found & (1 << category)))
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8439 break;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8440 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8441 else if ((*(this->detector)) (&coding, &detect_info)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8442 && highest
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8443 && (detect_info.found & (1 << category)))
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8444 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8445 if (category == coding_category_utf_16_auto)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8446 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8447 if (detect_info.found & CATEGORY_MASK_UTF_16_LE)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8448 category = coding_category_utf_16_le;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8449 else
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8450 category = coding_category_utf_16_be;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8451 }
89974
2fef8edebd5c (detect_coding_utf_16): Don't set detect_info->found if
Kenichi Handa <handa@m17n.org>
parents: 89933
diff changeset
8452 break;
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8453 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8454 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8455 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8456 }
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8457
101197
ee5f395f3c19 (detect_coding_system): Fix handling of null_byte_fount.
Kenichi Handa <handa@m17n.org>
parents: 101174
diff changeset
8458 if ((detect_info.rejected & CATEGORY_MASK_ANY) == CATEGORY_MASK_ANY
ee5f395f3c19 (detect_coding_system): Fix handling of null_byte_fount.
Kenichi Handa <handa@m17n.org>
parents: 101174
diff changeset
8459 || null_byte_found)
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8460 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8461 detect_info.found = CATEGORY_MASK_RAW_TEXT;
101197
ee5f395f3c19 (detect_coding_system): Fix handling of null_byte_fount.
Kenichi Handa <handa@m17n.org>
parents: 101174
diff changeset
8462 id = CODING_SYSTEM_ID (Qno_conversion);
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8463 val = Fcons (make_number (id), Qnil);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8464 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8465 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
8466 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8467 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
8468 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
8469 val = Fcons (make_number (id), Qnil);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8470 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8471 else if (highest)
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8472 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8473 if (detect_info.found)
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8474 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8475 detect_info.found = 1 << category;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8476 val = Fcons (make_number (this->id), Qnil);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8477 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8478 else
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8479 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
8480 if (! (detect_info.rejected & (1 << coding_priorities[i])))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8481 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8482 detect_info.found = 1 << coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8483 id = coding_categories[coding_priorities[i]].id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8484 val = Fcons (make_number (id), Qnil);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8485 break;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8486 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8487 }
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8488 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8489 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8490 int mask = detect_info.rejected | detect_info.found;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8491 int found = 0;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8492
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8493 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
8494 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8495 category = coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8496 if (! (mask & (1 << category)))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8497 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8498 found |= 1 << category;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8499 id = coding_categories[category].id;
90594
a965377e6761 (detect_coding_system): Fix for handling off
Kenichi Handa <handa@m17n.org>
parents: 90587
diff changeset
8500 if (id >= 0)
a965377e6761 (detect_coding_system): Fix for handling off
Kenichi Handa <handa@m17n.org>
parents: 90587
diff changeset
8501 val = Fcons (make_number (id), val);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8502 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8503 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8504 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
8505 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8506 category = coding_priorities[i];
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8507 if (detect_info.found & (1 << category))
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8508 {
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8509 id = coding_categories[category].id;
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8510 val = Fcons (make_number (id), val);
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8511 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8512 }
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8513 detect_info.found |= found;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8514 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8515 }
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8516 else if (base_category == coding_category_utf_8_auto)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8517 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8518 if (detect_coding_utf_8 (&coding, &detect_info))
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8519 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8520 struct coding_system *this;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8521
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8522 if (detect_info.found & CATEGORY_MASK_UTF_8_SIG)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8523 this = coding_categories + coding_category_utf_8_sig;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8524 else
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8525 this = coding_categories + coding_category_utf_8_nosig;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8526 val = Fcons (make_number (this->id), Qnil);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8527 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
8528 }
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8529 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
8530 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8531 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
8532 {
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8533 struct coding_system *this;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8534
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8535 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
8536 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
8537 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
8538 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
8539 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
8540 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
8541 else
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8542 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
8543 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
8544 }
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8545 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8546 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8547 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8548 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
8549 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
8550 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8551
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8552 /* Then, detect eol-format if necessary. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8553 {
100135
0e17542db552 (detect_coding_system): Initialize utf_16_le_eol to -1, val to
Kenichi Handa <handa@m17n.org>
parents: 100133
diff changeset
8554 int normal_eol = -1, utf_16_be_eol = -1, utf_16_le_eol = -1;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8555 Lisp_Object tail;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8556
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8557 if (VECTORP (eol_type))
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8558 {
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8559 if (detect_info.found & ~CATEGORY_MASK_UTF_16)
93595
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8560 {
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8561 if (null_byte_found)
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8562 normal_eol = EOL_SEEN_LF;
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8563 else
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8564 normal_eol = detect_eol (coding.source, src_bytes,
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8565 coding_category_raw_text);
ac4d127a841a (CATEGORY_MASK_ANY): Add CATEGORY_MASK_UTF_16_AUTO.
Kenichi Handa <handa@m17n.org>
parents: 93323
diff changeset
8566 }
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8567 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
8568 | 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
8569 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
8570 coding_category_utf_16_be);
89331
1892a75ffcac (CATEGORY_MASK_RAW_TEXT): New macro.
Kenichi Handa <handa@m17n.org>
parents: 89279
diff changeset
8571 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
8572 | 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
8573 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
8574 coding_category_utf_16_le);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8575 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8576 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8577 {
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8578 if (EQ (eol_type, Qunix))
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8579 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
8580 else if (EQ (eol_type, Qdos))
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8581 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
8582 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8583 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
8584 }
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8585
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8586 for (tail = val; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8587 {
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8588 enum coding_category category;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8589 int this_eol;
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8590
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8591 id = XINT (XCAR (tail));
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8592 attrs = CODING_ID_ATTRS (id);
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8593 category = XINT (CODING_ATTR_CATEGORY (attrs));
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8594 eol_type = CODING_ID_EOL_TYPE (id);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8595 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8596 {
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8597 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
8598 || 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
8599 this_eol = utf_16_be_eol;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8600 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
8601 || 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
8602 this_eol = utf_16_le_eol;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8603 else
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8604 this_eol = normal_eol;
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8605
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8606 if (this_eol == EOL_SEEN_LF)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8607 XSETCAR (tail, AREF (eol_type, 0));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8608 else if (this_eol == EOL_SEEN_CRLF)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8609 XSETCAR (tail, AREF (eol_type, 1));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8610 else if (this_eol == EOL_SEEN_CR)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8611 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
8612 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8613 XSETCAR (tail, CODING_ID_NAME (id));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8614 }
89193
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8615 else
311d061195ef (detect_coding_utf_8): Check incomplete byte sequence.
Kenichi Handa <handa@m17n.org>
parents: 89184
diff changeset
8616 XSETCAR (tail, CODING_ID_NAME (id));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8617 }
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
100135
0e17542db552 (detect_coding_system): Initialize utf_16_le_eol to -1, val to
Kenichi Handa <handa@m17n.org>
parents: 100133
diff changeset
8620 return (highest ? (CONSP (val) ? XCAR (val) : Qnil) : val);
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
8621 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8622
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8623
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8624 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
8625 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
8626 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
8627 Return a list of possible coding systems ordered by priority.
102737
f556415c326b (Fdetect_coding_region, Fcoding_system_priority_list): Improve the
Kenichi Handa <handa@m17n.org>
parents: 102422
diff changeset
8628 The coding systems to try and their priorities follows what
f556415c326b (Fdetect_coding_region, Fcoding_system_priority_list): Improve the
Kenichi Handa <handa@m17n.org>
parents: 102422
diff changeset
8629 the function `coding-system-priority-list' (which see) returns.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8630
72552
6493d4697ad2 (Fdetect_coding_region, Fdetect_coding_string): Fix
Kenichi Handa <handa@m17n.org>
parents: 72395
diff changeset
8631 If only ASCII characters are found (except for such ISO-2022 control
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8632 characters as ESC), it returns a list of single element `undecided'
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8633 or its subsidiary coding system according to a detected end-of-line
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8634 format.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8635
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8636 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
8637 highest priority. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8638 (start, end, highest)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8639 Lisp_Object start, end, highest;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8640 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8641 int from, to;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8642 int from_byte, to_byte;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8643
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
8644 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
8645 CHECK_NUMBER_COERCE_MARKER (end);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8646
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8647 validate_region (&start, &end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8648 from = XINT (start), to = XINT (end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8649 from_byte = CHAR_TO_BYTE (from);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8650 to_byte = CHAR_TO_BYTE (to);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8651
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8652 if (from < GPT && to >= GPT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8653 move_gap_both (to, to_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8654
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8655 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
8656 to - from, to_byte - from_byte,
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
8657 !NILP (highest),
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
8658 !NILP (current_buffer
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8659 ->enable_multibyte_characters),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8660 Qnil);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8661 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8662
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8663 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
8664 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
8665 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
8666 Return a list of possible coding systems ordered by priority.
102738
41e7ab490f69 (Fdetect_coding_string): Improve the docstrings.
Kenichi Handa <handa@m17n.org>
parents: 102737
diff changeset
8667 The coding systems to try and their priorities follows what
41e7ab490f69 (Fdetect_coding_string): Improve the docstrings.
Kenichi Handa <handa@m17n.org>
parents: 102737
diff changeset
8668 the function `coding-system-priority-list' (which see) returns.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8669
72552
6493d4697ad2 (Fdetect_coding_region, Fdetect_coding_string): Fix
Kenichi Handa <handa@m17n.org>
parents: 72395
diff changeset
8670 If only ASCII characters are found (except for such ISO-2022 control
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8671 characters as ESC), it returns a list of single element `undecided'
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8672 or its subsidiary coding system according to a detected end-of-line
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8673 format.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8674
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8675 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
8676 highest priority. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
8677 (string, highest)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8678 Lisp_Object string, highest;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8679 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
8680 CHECK_STRING (string);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
8681
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
8682 return detect_coding_system (SDATA (string),
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
8683 SCHARS (string), SBYTES (string),
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8684 !NILP (highest), STRING_MULTIBYTE (string),
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8685 Qnil);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8686 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8687
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8688
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8689 static INLINE int
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8690 char_encodable_p (c, attrs)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8691 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8692 Lisp_Object attrs;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8693 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8694 Lisp_Object tail;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8695 struct charset *charset;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8696 Lisp_Object translation_table;
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8697
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8698 translation_table = CODING_ATTR_TRANS_TBL (attrs);
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
8699 if (! NILP (translation_table))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8700 c = translate_char (translation_table, c);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8701 for (tail = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8702 CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8703 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8704 charset = CHARSET_FROM_ID (XINT (XCAR (tail)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8705 if (CHAR_CHARSET_P (c, charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8706 break;
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 return (! NILP (tail));
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8709 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8710
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8711
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8712 /* 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
8713 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
8714 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
8715 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
8716 unibyte, return t. */
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8717
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8718 DEFUN ("find-coding-systems-region-internal",
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8719 Ffind_coding_systems_region_internal,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8720 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
8721 doc: /* Internal use only. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8722 (start, end, exclude)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8723 Lisp_Object start, end, exclude;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8724 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8725 Lisp_Object coding_attrs_list, safe_codings;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8726 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
8727 const unsigned char *p, *pbeg, *pend;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8728 int c;
103486
091a55d2d6f7 (Ffind_coding_systems_region_internal): Cache checked characters.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 103474
diff changeset
8729 Lisp_Object tail, elt, work_table;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8730
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8731 if (STRINGP (start))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8732 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8733 if (!STRING_MULTIBYTE (start)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8734 || SCHARS (start) == SBYTES (start))
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8735 return Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8736 start_byte = 0;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8737 end_byte = SBYTES (start);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8738 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8739 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8740 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
8741 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
8742 CHECK_NUMBER_COERCE_MARKER (end);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8743 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
8744 args_out_of_range (start, end);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8745 if (NILP (current_buffer->enable_multibyte_characters))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8746 return Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8747 start_byte = CHAR_TO_BYTE (XINT (start));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8748 end_byte = CHAR_TO_BYTE (XINT (end));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8749 if (XINT (end) - XINT (start) == end_byte - start_byte)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8750 return Qt;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8751
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
8752 if (XINT (start) < GPT && XINT (end) > GPT)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8753 {
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
8754 if ((GPT - XINT (start)) < (XINT (end) - GPT))
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
8755 move_gap_both (XINT (start), start_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8756 else
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
8757 move_gap_both (XINT (end), end_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8758 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8759 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8760
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8761 coding_attrs_list = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8762 for (tail = Vcoding_system_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8763 if (NILP (exclude)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8764 || NILP (Fmemq (XCAR (tail), exclude)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8765 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8766 Lisp_Object attrs;
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 attrs = AREF (CODING_SYSTEM_SPEC (XCAR (tail)), 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8769 if (EQ (XCAR (tail), CODING_ATTR_BASE_NAME (attrs))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8770 && ! EQ (CODING_ATTR_TYPE (attrs), Qundecided))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8771 {
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8772 ASET (attrs, coding_attr_trans_tbl,
89861
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
8773 get_translation_table (attrs, 1, NULL));
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8774 coding_attrs_list = Fcons (attrs, coding_attrs_list);
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8775 }
88365
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
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8778 if (STRINGP (start))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8779 p = pbeg = SDATA (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8780 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8781 p = pbeg = BYTE_POS_ADDR (start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8782 pend = p + (end_byte - start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8783
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8784 while (p < pend && ASCII_BYTE_P (*p)) p++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8785 while (p < pend && ASCII_BYTE_P (*(pend - 1))) pend--;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8786
103486
091a55d2d6f7 (Ffind_coding_systems_region_internal): Cache checked characters.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 103474
diff changeset
8787 work_table = Fmake_char_table (Qnil, Qnil);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8788 while (p < pend)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8789 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8790 if (ASCII_BYTE_P (*p))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8791 p++;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8792 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8793 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8794 c = STRING_CHAR_ADVANCE (p);
103486
091a55d2d6f7 (Ffind_coding_systems_region_internal): Cache checked characters.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 103474
diff changeset
8795 if (!NILP (char_table_ref (work_table, c)))
091a55d2d6f7 (Ffind_coding_systems_region_internal): Cache checked characters.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 103474
diff changeset
8796 /* This character was already checked. Ignore it. */
091a55d2d6f7 (Ffind_coding_systems_region_internal): Cache checked characters.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 103474
diff changeset
8797 continue;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8798
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8799 charset_map_loaded = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8800 for (tail = coding_attrs_list; CONSP (tail);)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8801 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8802 elt = XCAR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8803 if (NILP (elt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8804 tail = XCDR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8805 else if (char_encodable_p (c, elt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8806 tail = XCDR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8807 else if (CONSP (XCDR (tail)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8808 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8809 XSETCAR (tail, XCAR (XCDR (tail)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8810 XSETCDR (tail, XCDR (XCDR (tail)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8811 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8812 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8813 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8814 XSETCAR (tail, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8815 tail = XCDR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8816 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8817 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8818 if (charset_map_loaded)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8819 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8820 EMACS_INT p_offset = p - pbeg, pend_offset = pend - pbeg;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8821
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8822 if (STRINGP (start))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8823 pbeg = SDATA (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8824 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8825 pbeg = BYTE_POS_ADDR (start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8826 p = pbeg + p_offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8827 pend = pbeg + pend_offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8828 }
103486
091a55d2d6f7 (Ffind_coding_systems_region_internal): Cache checked characters.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 103474
diff changeset
8829 char_table_set (work_table, c, Qt);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8830 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8831 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8832
89905
37e044cc35f6 (Ffind_coding_systems_region_internal): Include raw-text and
Kenichi Handa <handa@m17n.org>
parents: 89892
diff changeset
8833 safe_codings = list2 (Qraw_text, Qno_conversion);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8834 for (tail = coding_attrs_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8835 if (! NILP (XCAR (tail)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8836 safe_codings = Fcons (CODING_ATTR_BASE_NAME (XCAR (tail)), safe_codings);
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
8837
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
8838 return safe_codings;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
8839 }
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
8840
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
8841
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8842 DEFUN ("unencodable-char-position", Funencodable_char_position,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8843 Sunencodable_char_position, 3, 5, 0,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8844 doc: /*
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8845 Return position of first un-encodable character in a region.
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8846 START and END specify the region and CODING-SYSTEM specifies the
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8847 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
8848
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8849 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
8850 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
8851 list of positions.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8852
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8853 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
8854 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
8855 to the string. */)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8856 (start, end, coding_system, count, string)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8857 Lisp_Object start, end, coding_system, count, string;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8858 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8859 int n;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8860 struct coding_system coding;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8861 Lisp_Object attrs, charset_list, translation_table;
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8862 Lisp_Object positions;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8863 int from, to;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8864 const unsigned char *p, *stop, *pend;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8865 int ascii_compatible;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8866
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8867 setup_coding_system (Fcheck_coding_system (coding_system), &coding);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8868 attrs = CODING_ID_ATTRS (coding.id);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8869 if (EQ (CODING_ATTR_TYPE (attrs), Qraw_text))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8870 return Qnil;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8871 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs));
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8872 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
89861
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
8873 translation_table = get_translation_table (attrs, 1, NULL);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8874
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8875 if (NILP (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8876 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8877 validate_region (&start, &end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8878 from = XINT (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8879 to = XINT (end);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8880 if (NILP (current_buffer->enable_multibyte_characters)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8881 || (ascii_compatible
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8882 && (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
8883 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8884 p = CHAR_POS_ADDR (from);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8885 pend = CHAR_POS_ADDR (to);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8886 if (from < GPT && to >= GPT)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8887 stop = GPT_ADDR;
48829
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
8888 else
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8889 stop = pend;
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8890 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8891 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8892 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8893 CHECK_STRING (string);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8894 CHECK_NATNUM (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8895 CHECK_NATNUM (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8896 from = XINT (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8897 to = XINT (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8898 if (from > to
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8899 || to > SCHARS (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8900 args_out_of_range_3 (string, start, end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8901 if (! STRING_MULTIBYTE (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8902 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8903 p = SDATA (string) + string_char_to_byte (string, from);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8904 stop = pend = SDATA (string) + string_char_to_byte (string, to);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8905 if (ascii_compatible && (to - from) == (pend - p))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8906 return Qnil;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8907 }
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8908
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8909 if (NILP (count))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8910 n = 1;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8911 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8912 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8913 CHECK_NATNUM (count);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8914 n = XINT (count);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8915 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8916
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8917 positions = Qnil;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8918 while (1)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8919 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8920 int c;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8921
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8922 if (ascii_compatible)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8923 while (p < stop && ASCII_BYTE_P (*p))
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8924 p++, from++;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8925 if (p >= stop)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8926 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8927 if (p >= pend)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8928 break;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8929 stop = pend;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8930 p = GAP_END_ADDR;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8931 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8932
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8933 c = STRING_CHAR_ADVANCE (p);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8934 if (! (ASCII_CHAR_P (c) && ascii_compatible)
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8935 && ! char_charset (translate_char (translation_table, c),
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8936 charset_list, NULL))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8937 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8938 positions = Fcons (make_number (from), positions);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8939 n--;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8940 if (n == 0)
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8941 break;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8942 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8943
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8944 from++;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8945 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8946
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8947 return (NILP (count) ? Fcar (positions) : Fnreverse (positions));
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8948 }
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8949
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8950
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8951 DEFUN ("check-coding-systems-region", Fcheck_coding_systems_region,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8952 Scheck_coding_systems_region, 3, 3, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8953 doc: /* Check if the region is encodable by coding systems.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8954
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8955 START and END are buffer positions specifying the region.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8956 CODING-SYSTEM-LIST is a list of coding systems to check.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8957
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8958 The value is an alist ((CODING-SYSTEM POS0 POS1 ...) ...), where
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
8959 CODING-SYSTEM is a member of CODING-SYSTEM-LIST and can't encode the
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8960 whole region, POS0, POS1, ... are buffer positions where non-encodable
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8961 characters are found.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8962
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8963 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
8964 value is nil.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8965
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8966 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
8967 encodable, and the value contains indices to the string instead of
102055
4d3a5c88cb2b (Fcheck_coding_systems_region): Fix typo; Qt -> Qnil.
Kenichi Handa <handa@m17n.org>
parents: 101943
diff changeset
8968 buffer positions. END is ignored.
4d3a5c88cb2b (Fcheck_coding_systems_region): Fix typo; Qt -> Qnil.
Kenichi Handa <handa@m17n.org>
parents: 101943
diff changeset
8969
102058
4f60db600648 (Fcheck_coding_systems_region): Fix test for unibyte
Andreas Schwab <schwab@suse.de>
parents: 102055
diff changeset
8970 If the current buffer (or START if it is a string) is unibyte, the value
102055
4d3a5c88cb2b (Fcheck_coding_systems_region): Fix typo; Qt -> Qnil.
Kenichi Handa <handa@m17n.org>
parents: 101943
diff changeset
8971 is nil. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8972 (start, end, coding_system_list)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8973 Lisp_Object start, end, coding_system_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8974 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8975 Lisp_Object list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8976 EMACS_INT start_byte, end_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8977 int pos;
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
8978 const unsigned char *p, *pbeg, *pend;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8979 int c;
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
8980 Lisp_Object tail, elt, attrs;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8981
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8982 if (STRINGP (start))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8983 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8984 if (!STRING_MULTIBYTE (start)
102058
4f60db600648 (Fcheck_coding_systems_region): Fix test for unibyte
Andreas Schwab <schwab@suse.de>
parents: 102055
diff changeset
8985 || SCHARS (start) == SBYTES (start))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8986 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8987 start_byte = 0;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
8988 end_byte = SBYTES (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8989 pos = 0;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
8990 }
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8991 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
8992 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8993 CHECK_NUMBER_COERCE_MARKER (start);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8994 CHECK_NUMBER_COERCE_MARKER (end);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8995 if (XINT (start) < BEG || XINT (end) > Z || XINT (start) > XINT (end))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8996 args_out_of_range (start, end);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8997 if (NILP (current_buffer->enable_multibyte_characters))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8998 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
8999 start_byte = CHAR_TO_BYTE (XINT (start));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9000 end_byte = CHAR_TO_BYTE (XINT (end));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9001 if (XINT (end) - XINT (start) == end_byte - start_byte)
102055
4d3a5c88cb2b (Fcheck_coding_systems_region): Fix typo; Qt -> Qnil.
Kenichi Handa <handa@m17n.org>
parents: 101943
diff changeset
9002 return Qnil;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9003
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
9004 if (XINT (start) < GPT && XINT (end) > GPT)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9005 {
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
9006 if ((GPT - XINT (start)) < (XINT (end) - GPT))
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
9007 move_gap_both (XINT (start), start_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9008 else
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
9009 move_gap_both (XINT (end), end_byte);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9010 }
89394
6ffca50f25b9 (Fcheck_coding_systems_region): Fix type errors.
Dave Love <fx@gnu.org>
parents: 89373
diff changeset
9011 pos = XINT (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9012 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9013
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9014 list = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9015 for (tail = coding_system_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9016 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9017 elt = XCAR (tail);
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
9018 attrs = AREF (CODING_SYSTEM_SPEC (elt), 0);
89861
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
9019 ASET (attrs, coding_attr_trans_tbl,
7160ded23e55 (get_translation_table): Allow max_lookup to be NULL.
Kenichi Handa <handa@m17n.org>
parents: 89859
diff changeset
9020 get_translation_table (attrs, 1, NULL));
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
9021 list = Fcons (Fcons (elt, Fcons (attrs, Qnil)), list);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9022 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9023
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9024 if (STRINGP (start))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9025 p = pbeg = SDATA (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9026 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9027 p = pbeg = BYTE_POS_ADDR (start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9028 pend = p + (end_byte - start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9029
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9030 while (p < pend && ASCII_BYTE_P (*p)) p++, pos++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9031 while (p < pend && ASCII_BYTE_P (*(pend - 1))) pend--;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9032
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9033 while (p < pend)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9034 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9035 if (ASCII_BYTE_P (*p))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9036 p++;
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
9037 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
9038 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9039 c = STRING_CHAR_ADVANCE (p);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9040
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9041 charset_map_loaded = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9042 for (tail = list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9043 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9044 elt = XCDR (XCAR (tail));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9045 if (! char_encodable_p (c, XCAR (elt)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9046 XSETCDR (elt, Fcons (make_number (pos), XCDR (elt)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9047 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9048 if (charset_map_loaded)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9049 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9050 EMACS_INT p_offset = p - pbeg, pend_offset = pend - pbeg;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9051
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9052 if (STRINGP (start))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9053 pbeg = SDATA (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9054 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9055 pbeg = BYTE_POS_ADDR (start_byte);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9056 p = pbeg + p_offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9057 pend = pbeg + pend_offset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9058 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9059 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9060 pos++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9061 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9062
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9063 tail = list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9064 list = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9065 for (; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9066 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9067 elt = XCAR (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9068 if (CONSP (XCDR (XCDR (elt))))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9069 list = Fcons (Fcons (XCAR (elt), Fnreverse (XCDR (XCDR (elt)))),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9070 list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9071 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9072
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9073 return list;
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
9074 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
9075
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
9076
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9077 Lisp_Object
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9078 code_convert_region (start, end, coding_system, dst_object, encodep, norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9079 Lisp_Object start, end, coding_system, dst_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9080 int encodep, norecord;
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
9081 {
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
9082 struct coding_system coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9083 EMACS_INT from, from_byte, to, to_byte;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9084 Lisp_Object src_object;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9085
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
9086 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
9087 CHECK_NUMBER_COERCE_MARKER (end);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9088 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9089 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9090 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9091 CHECK_CODING_SYSTEM (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9092 src_object = Fcurrent_buffer ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9093 if (NILP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9094 dst_object = src_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9095 else if (! EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9096 CHECK_BUFFER (dst_object);
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
9097
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9098 validate_region (&start, &end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9099 from = XFASTINT (start);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9100 from_byte = CHAR_TO_BYTE (from);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9101 to = XFASTINT (end);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9102 to_byte = CHAR_TO_BYTE (to);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9103
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9104 setup_coding_system (coding_system, &coding);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9105 coding.mode |= CODING_MODE_LAST_BLOCK;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9106
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9107 if (encodep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9108 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
9109 dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9110 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9111 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
9112 dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9113 if (! norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9114 Vlast_coding_system_used = CODING_ID_NAME (coding.id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9115
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9116 return (BUFFERP (dst_object)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9117 ? make_number (coding.produced_char)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9118 : coding.dst_object);
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9119 }
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9120
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9121
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9122 DEFUN ("decode-coding-region", Fdecode_coding_region, Sdecode_coding_region,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9123 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
9124 doc: /* Decode the current region from the specified coding system.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9125 When called from a program, takes four arguments:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9126 START, END, CODING-SYSTEM, and DESTINATION.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9127 START and END are buffer positions.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9128
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9129 Optional 4th arguments DESTINATION specifies where the decoded text goes.
91083
ff87badce376 (Fdecode_coding_region): Fix typo in docstring.
Kenichi Handa <handa@m17n.org>
parents: 91056
diff changeset
9130 If nil, the region between START and END is replaced by the decoded text.
98992
d4659edb9b7b (Fencode_coding_region, Fdecode_coding_region)
Eli Zaretskii <eliz@gnu.org>
parents: 98951
diff changeset
9131 If buffer, the decoded text is inserted in that buffer after point (point
d4659edb9b7b (Fencode_coding_region, Fdecode_coding_region)
Eli Zaretskii <eliz@gnu.org>
parents: 98951
diff changeset
9132 does not move).
95356
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
9133 In those cases, the length of the decoded text is returned.
95353
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
9134 If DESTINATION is t, the decoded text is returned.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9135
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9136 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
9137 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
95353
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
9138 not fully specified.) */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9139 (start, end, coding_system, destination)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9140 Lisp_Object start, end, coding_system, destination;
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9141 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9142 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
9143 }
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
9144
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
9145 DEFUN ("encode-coding-region", Fencode_coding_region, Sencode_coding_region,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9146 3, 4, "r\nzCoding system: ",
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9147 doc: /* Encode the current region by specified coding system.
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9148 When called from a program, takes four arguments:
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9149 START, END, CODING-SYSTEM and DESTINATION.
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9150 START and END are buffer positions.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9151
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9152 Optional 4th arguments DESTINATION specifies where the encoded text goes.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9153 If nil, the region between START and END is replace by the encoded text.
98992
d4659edb9b7b (Fencode_coding_region, Fdecode_coding_region)
Eli Zaretskii <eliz@gnu.org>
parents: 98951
diff changeset
9154 If buffer, the encoded text is inserted in that buffer after point (point
d4659edb9b7b (Fencode_coding_region, Fdecode_coding_region)
Eli Zaretskii <eliz@gnu.org>
parents: 98951
diff changeset
9155 does not move).
95356
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
9156 In those cases, the length of the encoded text is returned.
95353
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
9157 If DESTINATION is t, the encoded text is returned.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9158
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9159 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
9160 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
95353
96d35f50fe34 (encode_coding_raw_text): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 95345
diff changeset
9161 not fully specified.) */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9162 (start, end, coding_system, destination)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9163 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
9164 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9165 return code_convert_region (start, end, coding_system, destination, 1, 0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9166 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9167
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9168 Lisp_Object
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9169 code_convert_string (string, coding_system, dst_object,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9170 encodep, nocopy, norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9171 Lisp_Object string, coding_system, dst_object;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9172 int encodep, nocopy, norecord;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9173 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9174 struct coding_system coding;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9175 EMACS_INT chars, bytes;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9176
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
9177 CHECK_STRING (string);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9178 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9179 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9180 if (! norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9181 Vlast_coding_system_used = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9182 if (NILP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9183 return (nocopy ? Fcopy_sequence (string) : string);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9184 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9185
70520
b6740a317343 (setup_coding_system): For invalid coding-system, set
Kenichi Handa <handa@m17n.org>
parents: 69995
diff changeset
9186 if (NILP (coding_system))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9187 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9188 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9189 CHECK_CODING_SYSTEM (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9190 if (NILP (dst_object))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9191 dst_object = Qt;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9192 else if (! EQ (dst_object, Qt))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9193 CHECK_BUFFER (dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9194
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9195 setup_coding_system (coding_system, &coding);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9196 coding.mode |= CODING_MODE_LAST_BLOCK;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9197 chars = SCHARS (string);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9198 bytes = SBYTES (string);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9199 if (encodep)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9200 encode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9201 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9202 decode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9203 if (! norecord)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9204 Vlast_coding_system_used = CODING_ID_NAME (coding.id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9205
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9206 return (BUFFERP (dst_object)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9207 ? make_number (coding.produced_char)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9208 : coding.dst_object);
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9209 }
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9210
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
9211
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
9212 /* Encode or decode STRING according to CODING_SYSTEM.
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
9213 Do not set Vlast_coding_system_used.
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
9214
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
9215 This function is called only from macros DECODE_FILE and
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
9216 ENCODE_FILE, thus we ignore character composition. */
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
9217
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
9218 Lisp_Object
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
9219 code_convert_string_norecord (string, coding_system, encodep)
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
9220 Lisp_Object string, coding_system;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
9221 int encodep;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
9222 {
88430
6418a272b97e * coding.c: Delete unused variables.
Kenichi Handa <handa@m17n.org>
parents: 88365
diff changeset
9223 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
9224 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9225
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9226
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9227 DEFUN ("decode-coding-string", Fdecode_coding_string, Sdecode_coding_string,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9228 2, 4, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9229 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
9230
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9231 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
9232 if the decoding operation is trivial.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9233
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9234 Optional fourth arg BUFFER non-nil means that the decoded text is
98992
d4659edb9b7b (Fencode_coding_region, Fdecode_coding_region)
Eli Zaretskii <eliz@gnu.org>
parents: 98951
diff changeset
9235 inserted in that buffer after point (point does not move). In this
d4659edb9b7b (Fencode_coding_region, Fdecode_coding_region)
Eli Zaretskii <eliz@gnu.org>
parents: 98951
diff changeset
9236 case, the return value is the length of the decoded text.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9237
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9238 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
9239 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9240 not fully specified.) */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9241 (string, coding_system, nocopy, buffer)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9242 Lisp_Object string, coding_system, nocopy, buffer;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9243 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9244 return code_convert_string (string, coding_system, buffer,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9245 0, ! NILP (nocopy), 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9246 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9247
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9248 DEFUN ("encode-coding-string", Fencode_coding_string, Sencode_coding_string,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9249 2, 4, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9250 doc: /* Encode STRING to CODING-SYSTEM, and return the result.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9251
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9252 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
9253 itself if the encoding operation is trivial.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9254
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9255 Optional fourth arg BUFFER non-nil means that the encoded text is
98992
d4659edb9b7b (Fencode_coding_region, Fdecode_coding_region)
Eli Zaretskii <eliz@gnu.org>
parents: 98951
diff changeset
9256 inserted in that buffer after point (point does not move). In this
d4659edb9b7b (Fencode_coding_region, Fdecode_coding_region)
Eli Zaretskii <eliz@gnu.org>
parents: 98951
diff changeset
9257 case, the return value is the length of the encoded text.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9258
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9259 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
9260 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
9261 not fully specified.) */)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9262 (string, coding_system, nocopy, buffer)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9263 Lisp_Object string, coding_system, nocopy, buffer;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9264 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9265 return code_convert_string (string, coding_system, buffer,
88856
13a375bc220d (ENCODE_DESIGNATION, decode_eol)
Dave Love <fx@gnu.org>
parents: 88845
diff changeset
9266 1, ! NILP (nocopy), 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9267 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9268
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
9269
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9270 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
9271 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
9272 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
9273 (code)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9274 Lisp_Object code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9275 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9276 Lisp_Object spec, attrs, val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9277 struct charset *charset_roman, *charset_kanji, *charset_kana, *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9278 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9279
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9280 CHECK_NATNUM (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9281 c = XFASTINT (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9282 CHECK_CODING_SYSTEM_GET_SPEC (Vsjis_coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9283 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9284
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9285 if (ASCII_BYTE_P (c)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9286 && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9287 return code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9288
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9289 val = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9290 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
9291 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
9292 charset_kanji = CHARSET_FROM_ID (XINT (XCAR (val)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9293
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9294 if (c <= 0x7F)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9295 charset = charset_roman;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9296 else if (c >= 0xA0 && c < 0xDF)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9297 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9298 charset = charset_kana;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9299 c -= 0x80;
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
9300 }
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
9301 else
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
9302 {
88497
d2b9e0d4c2f6 (Fdecode_sjis_char): Fix typo (0x7F->0xFF). Fix the
Kenichi Handa <handa@m17n.org>
parents: 88485
diff changeset
9303 int s1 = c >> 8, s2 = c & 0xFF;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9304
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9305 if (s1 < 0x81 || (s1 > 0x9F && s1 < 0xE0) || s1 > 0xEF
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9306 || s2 < 0x40 || s2 == 0x7F || s2 > 0xFC)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9307 error ("Invalid code: %d", code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9308 SJIS_TO_JIS (c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9309 charset = charset_kanji;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9310 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9311 c = DECODE_CHAR (charset, c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9312 if (c < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9313 error ("Invalid code: %d", code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9314 return make_number (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9315 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9316
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9317
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9318 DEFUN ("encode-sjis-char", Fencode_sjis_char, Sencode_sjis_char, 1, 1, 0,
73949
0d1207b43a5b (Fencode_sjis_char, Fencode_big5_char): Improve argument/docstring consistency.
Juanma Barranquero <lekktu@gmail.com>
parents: 72552
diff changeset
9319 doc: /* Encode a Japanese character CH to shift_jis encoding.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9320 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
9321 (ch)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9322 Lisp_Object ch;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9323 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9324 Lisp_Object spec, attrs, charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9325 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9326 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9327 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9328
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9329 CHECK_CHARACTER (ch);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9330 c = XFASTINT (ch);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9331 CHECK_CODING_SYSTEM_GET_SPEC (Vsjis_coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9332 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9333
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9334 if (ASCII_CHAR_P (c)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9335 && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9336 return ch;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9337
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9338 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9339 charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9340 if (code == CHARSET_INVALID_CODE (charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9341 error ("Can't encode by shift_jis encoding: %d", c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9342 JIS_TO_SJIS (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9343
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9344 return make_number (code);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9345 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9346
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9347 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
9348 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
9349 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
9350 (code)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9351 Lisp_Object code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9352 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9353 Lisp_Object spec, attrs, val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9354 struct charset *charset_roman, *charset_big5, *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9355 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9356
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9357 CHECK_NATNUM (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9358 c = XFASTINT (code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9359 CHECK_CODING_SYSTEM_GET_SPEC (Vbig5_coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9360 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9361
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9362 if (ASCII_BYTE_P (c)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9363 && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9364 return code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9366 val = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9367 charset_roman = CHARSET_FROM_ID (XINT (XCAR (val))), val = XCDR (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9368 charset_big5 = CHARSET_FROM_ID (XINT (XCAR (val)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9369
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9370 if (c <= 0x7F)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9371 charset = charset_roman;
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
9372 else
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
9373 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9374 int b1 = c >> 8, b2 = c & 0x7F;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9375 if (b1 < 0xA1 || b1 > 0xFE
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9376 || b2 < 0x40 || (b2 > 0x7E && b2 < 0xA1) || b2 > 0xFE)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9377 error ("Invalid code: %d", code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9378 charset = charset_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9379 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9380 c = DECODE_CHAR (charset, (unsigned )c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9381 if (c < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9382 error ("Invalid code: %d", code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9383 return make_number (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9384 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9385
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9386 DEFUN ("encode-big5-char", Fencode_big5_char, Sencode_big5_char, 1, 1, 0,
73949
0d1207b43a5b (Fencode_sjis_char, Fencode_big5_char): Improve argument/docstring consistency.
Juanma Barranquero <lekktu@gmail.com>
parents: 72552
diff changeset
9387 doc: /* Encode the Big5 character CH to BIG5 coding system.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9388 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
9389 (ch)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9390 Lisp_Object ch;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9391 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9392 Lisp_Object spec, attrs, charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9393 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9394 int c;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9395 unsigned code;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9396
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9397 CHECK_CHARACTER (ch);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9398 c = XFASTINT (ch);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9399 CHECK_CODING_SYSTEM_GET_SPEC (Vbig5_coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9400 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9401 if (ASCII_CHAR_P (c)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9402 && ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9403 return ch;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9404
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9405 charset_list = CODING_ATTR_CHARSET_LIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9406 charset = char_charset (c, charset_list, &code);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9407 if (code == CHARSET_INVALID_CODE (charset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9408 error ("Can't encode by Big5 encoding: %d", c);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9409
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9410 return make_number (code);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9411 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9412
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
9413
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
9414 DEFUN ("set-terminal-coding-system-internal", Fset_terminal_coding_system_internal,
83298
ed09a89e2b25 Fix UTF-8 tty input when first frame is an X frame. Steps towards multiple tty locale support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83292
diff changeset
9415 Sset_terminal_coding_system_internal, 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
9416 doc: /* Internal use only. */)
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9417 (coding_system, terminal)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9418 Lisp_Object coding_system;
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9419 Lisp_Object terminal;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9420 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9421 struct coding_system *terminal_coding = TERMINAL_TERMINAL_CODING (get_terminal (terminal, 1));
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
9422 CHECK_SYMBOL (coding_system);
83127
5182815e0ee1 Make terminal_coding and keyboard_coding display-local.
Karoly Lorentey <lorentey@elte.hu>
parents: 54320
diff changeset
9423 setup_coding_system (Fcheck_coding_system (coding_system), terminal_coding);
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
9424 /* We had better not send unsafe characters to terminal. */
91041
bdb3fe0ba9fa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 90996 84646
diff changeset
9425 terminal_coding->mode |= CODING_MODE_SAFE_ENCODING;
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
9426 /* Character composition should be disabled. */
91041
bdb3fe0ba9fa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 90996 84646
diff changeset
9427 terminal_coding->common_flags &= ~CODING_ANNOTATE_COMPOSITION_MASK;
83127
5182815e0ee1 Make terminal_coding and keyboard_coding display-local.
Karoly Lorentey <lorentey@elte.hu>
parents: 54320
diff changeset
9428 terminal_coding->src_multibyte = 1;
5182815e0ee1 Make terminal_coding and keyboard_coding display-local.
Karoly Lorentey <lorentey@elte.hu>
parents: 54320
diff changeset
9429 terminal_coding->dst_multibyte = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9430 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9431 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9432
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9433 DEFUN ("set-safe-terminal-coding-system-internal",
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9434 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
9435 Sset_safe_terminal_coding_system_internal, 1, 1, 0,
41006
fd83ec62a495 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 40842
diff changeset
9436 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
9437 (coding_system)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9438 Lisp_Object coding_system;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9439 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
9440 CHECK_SYMBOL (coding_system);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9441 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
9442 &safe_terminal_coding);
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
9443 /* Character composition should be disabled. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9444 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
9445 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
9446 safe_terminal_coding.dst_multibyte = 0;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9447 return Qnil;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9448 }
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
9449
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
9450 DEFUN ("terminal-coding-system", Fterminal_coding_system,
83298
ed09a89e2b25 Fix UTF-8 tty input when first frame is an X frame. Steps towards multiple tty locale support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83292
diff changeset
9451 Sterminal_coding_system, 0, 1, 0,
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9452 doc: /* Return coding system specified for terminal output on the given terminal.
103052
e68707cf48a5 * keyboard.c (Fset_input_meta_mode): Doc fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 103035
diff changeset
9453 TERMINAL may be a terminal object, a frame, or nil for the selected
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9454 frame's terminal device. */)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9455 (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9456 Lisp_Object terminal;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9457 {
91046
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9458 struct coding_system *terminal_coding
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9459 = TERMINAL_TERMINAL_CODING (get_terminal (terminal, 1));
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9460 Lisp_Object coding_system = CODING_ID_NAME (terminal_coding->id);
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9461
90011
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
9462 /* For backward compatibility, return nil if it is `undecided'. */
90359
041f75914d0c (produce_composition): Compare charbuf[i] instead of
Kenichi Handa <handa@m17n.org>
parents: 90354
diff changeset
9463 return (! EQ (coding_system, Qundecided) ? coding_system : Qnil);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9464 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9465
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
9466 DEFUN ("set-keyboard-coding-system-internal", Fset_keyboard_coding_system_internal,
83298
ed09a89e2b25 Fix UTF-8 tty input when first frame is an X frame. Steps towards multiple tty locale support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83292
diff changeset
9467 Sset_keyboard_coding_system_internal, 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
9468 doc: /* Internal use only. */)
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9469 (coding_system, terminal)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9470 Lisp_Object coding_system;
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9471 Lisp_Object terminal;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9472 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9473 struct terminal *t = get_terminal (terminal, 1);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
9474 CHECK_SYMBOL (coding_system);
103655
e2d67c929da2 (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 103486
diff changeset
9475 if (NILP (coding_system))
e2d67c929da2 (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 103486
diff changeset
9476 coding_system = Qno_conversion;
e2d67c929da2 (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 103486
diff changeset
9477 else
e2d67c929da2 (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 103486
diff changeset
9478 Fcheck_coding_system (coding_system);
e2d67c929da2 (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 103486
diff changeset
9479 setup_coding_system (coding_system, TERMINAL_KEYBOARD_CODING (t));
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
9480 /* Character composition should be disabled. */
91041
bdb3fe0ba9fa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 90996 84646
diff changeset
9481 TERMINAL_KEYBOARD_CODING (t)->common_flags
bdb3fe0ba9fa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 90996 84646
diff changeset
9482 &= ~CODING_ANNOTATE_COMPOSITION_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9483 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9484 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9485
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9486 DEFUN ("keyboard-coding-system",
91046
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9487 Fkeyboard_coding_system, Skeyboard_coding_system, 0, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9488 doc: /* Return coding system specified for decoding keyboard input. */)
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9489 (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
9490 Lisp_Object terminal;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9491 {
91046
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9492 return CODING_ID_NAME (TERMINAL_KEYBOARD_CODING
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9493 (get_terminal (terminal, 1))->id);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9494 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9495
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9496
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
9497 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
9498 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
9499 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
9500 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
9501 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
9502 \(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
9503 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
9504
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9505 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
9506 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
9507 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
9508 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
9509
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9510 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
9511 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
9512 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
9513 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
9514
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9515 TARGET has a meaning which depends on OPERATION:
70948
7ea8b1c11d80 (Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
Kenichi Handa <handa@m17n.org>
parents: 70704
diff changeset
9516 For file I/O, TARGET is a file name (except for the special case below).
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9517 For process I/O, TARGET is a process name.
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9518 For network I/O, TARGET is a service name or a port number.
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9519
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9520 This function looks up what is specified for TARGET in
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9521 `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
9522 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
9523 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
9524 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
9525 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
9526 which is a list of all the arguments given to this function.
81611
ae42ad5f89e6 (Ffind_operation_coding_system): Docstring improved.
Kenichi Handa <handa@m17n.org>
parents: 75348
diff changeset
9527 If the function can't decide a coding system, it can return
ae42ad5f89e6 (Ffind_operation_coding_system): Docstring improved.
Kenichi Handa <handa@m17n.org>
parents: 75348
diff changeset
9528 `undecided' so that the normal code-detection is performed.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9529
70948
7ea8b1c11d80 (Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
Kenichi Handa <handa@m17n.org>
parents: 70704
diff changeset
9530 If OPERATION is `insert-file-contents', the argument corresponding to
7ea8b1c11d80 (Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
Kenichi Handa <handa@m17n.org>
parents: 70704
diff changeset
9531 TARGET may be a cons (FILENAME . BUFFER). In that case, FILENAME is a
71084
ccef92f2f7f8 (Ffind_operation_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71070
diff changeset
9532 file name to look up, and BUFFER is a buffer that contains the file's
ccef92f2f7f8 (Ffind_operation_coding_system): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71070
diff changeset
9533 contents (not yet decoded). If `file-coding-system-alist' specifies a
71070
0c8ac7192244 (Ffind_operation_coding_system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 71039
diff changeset
9534 function to call for FILENAME, that function should examine the
0c8ac7192244 (Ffind_operation_coding_system): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 71039
diff changeset
9535 contents of BUFFER instead of reading the file.
70948
7ea8b1c11d80 (Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
Kenichi Handa <handa@m17n.org>
parents: 70704
diff changeset
9536
78152
5e5f359984e5 (Ffind_operation_coding_system): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 75348
diff changeset
9537 usage: (find-operation-coding-system OPERATION ARGUMENTS...) */)
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
9538 (nargs, args)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9539 int nargs;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9540 Lisp_Object *args;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9541 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9542 Lisp_Object operation, target_idx, target, val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9543 register Lisp_Object chain;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9544
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9545 if (nargs < 2)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9546 error ("Too few arguments");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9547 operation = args[0];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9548 if (!SYMBOLP (operation)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9549 || !INTEGERP (target_idx = Fget (operation, Qtarget_idx)))
93877
62d97ebb13a9 * coding.c (detect_coding_emacs_mule)
Michael Albinus <michael.albinus@gmx.de>
parents: 93595
diff changeset
9550 error ("Invalid first argument");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9551 if (nargs < 1 + XINT (target_idx))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9552 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
9553 SDATA (SYMBOL_NAME (operation)));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9554 target = args[XINT (target_idx) + 1];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9555 if (!(STRINGP (target)
70948
7ea8b1c11d80 (Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
Kenichi Handa <handa@m17n.org>
parents: 70704
diff changeset
9556 || (EQ (operation, Qinsert_file_contents) && CONSP (target)
7ea8b1c11d80 (Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
Kenichi Handa <handa@m17n.org>
parents: 70704
diff changeset
9557 && STRINGP (XCAR (target)) && BUFFERP (XCDR (target)))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9558 || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9559 error ("Invalid %dth argument", XINT (target_idx) + 1);
70948
7ea8b1c11d80 (Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
Kenichi Handa <handa@m17n.org>
parents: 70704
diff changeset
9560 if (CONSP (target))
7ea8b1c11d80 (Ffind_operation_coding_system): Allow (FILENAME . BUFFER) in TARGET.
Kenichi Handa <handa@m17n.org>
parents: 70704
diff changeset
9561 target = XCAR (target);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9562
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18536
diff changeset
9563 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
9564 || EQ (operation, Qwrite_region))
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9565 ? 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
9566 : (EQ (operation, Qopen_network_stream)
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9567 ? Vnetwork_coding_system_alist
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9568 : Vprocess_coding_system_alist));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9569 if (NILP (chain))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9570 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9571
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
9572 for (; CONSP (chain); chain = XCDR (chain))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9573 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
9574 Lisp_Object elt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9575
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
9576 elt = XCAR (chain);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9577 if (CONSP (elt)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9578 && ((STRINGP (target)
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
9579 && STRINGP (XCAR (elt))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
9580 && 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
9581 || (INTEGERP (target) && EQ (target, XCAR (elt)))))
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9582 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
9583 val = XCDR (elt);
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
9584 /* 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
9585 function symbol, we return VAL as a coding system. */
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9586 if (CONSP (val))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9587 return val;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9588 if (! SYMBOLP (val))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9589 return Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9590 if (! NILP (Fcoding_system_p (val)))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9591 return Fcons (val, val);
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
9592 if (! NILP (Ffboundp (val)))
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
9593 {
72188
6100ca974994 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 72180
diff changeset
9594 /* We use call1 rather than safe_call1
6100ca974994 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 72180
diff changeset
9595 so as to get bug reports about functions called here
6100ca974994 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 72180
diff changeset
9596 which don't handle the current interface. */
72180
f3bc55b96df5 (Ffind_operation_coding_system): Revert the change from 2006-05-29.
Eli Zaretskii <eliz@gnu.org>
parents: 71972
diff changeset
9597 val = call1 (val, Flist (nargs, args));
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
9598 if (CONSP (val))
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
9599 return val;
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
9600 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
9601 return Fcons (val, val);
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
9602 }
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9603 return Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
9604 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9605 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9606 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9607 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
9608
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9609 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
9610 Sset_coding_system_priority, 0, MANY, 0,
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
9611 doc: /* Assign higher priority to the coding systems given as arguments.
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9612 If multiple coding systems belong to the same category,
89519
040a08a2a879 (Fread_coding_system): Fix arg of XSETSTRING.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
9613 all but the first one are ignored.
040a08a2a879 (Fread_coding_system): Fix arg of XSETSTRING.
Dave Love <fx@gnu.org>
parents: 89483
diff changeset
9614
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
9615 usage: (set-coding-system-priority &rest coding-systems) */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9616 (nargs, args)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9617 int nargs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9618 Lisp_Object *args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9619 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9620 int i, j;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9621 int changed[coding_category_max];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9622 enum coding_category priorities[coding_category_max];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9623
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9624 bzero (changed, sizeof changed);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9625
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9626 for (i = j = 0; i < nargs; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9627 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9628 enum coding_category category;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9629 Lisp_Object spec, attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9630
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9631 CHECK_CODING_SYSTEM_GET_SPEC (args[i], spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9632 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9633 category = XINT (CODING_ATTR_CATEGORY (attrs));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9634 if (changed[category])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9635 /* Ignore this coding system because a coding system of the
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9636 same category already had a higher priority. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9637 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9638 changed[category] = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9639 priorities[j++] = category;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9640 if (coding_categories[category].id >= 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9641 && ! EQ (args[i], CODING_ID_NAME (coding_categories[category].id)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9642 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
9643 Fset (AREF (Vcoding_category_table, category), args[i]);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9644 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9645
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9646 /* 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
9647 original priorities to the remaining priorities. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9648
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9649 for (i = j, j = 0; i < coding_category_max; i++, j++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9650 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9651 while (j < coding_category_max
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9652 && changed[coding_priorities[j]])
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9653 j++;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9654 if (j == coding_category_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9655 abort ();
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9656 priorities[i] = coding_priorities[j];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9657 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9658
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9659 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
9660
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9661 /* Update `coding-category-list'. */
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9662 Vcoding_category_list = Qnil;
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9663 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
9664 Vcoding_category_list
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
9665 = 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
9666 Vcoding_category_list);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
9667
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9668 return Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9669 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9670
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9671 DEFUN ("coding-system-priority-list", Fcoding_system_priority_list,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9672 Scoding_system_priority_list, 0, 1, 0,
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
9673 doc: /* Return a list of coding systems ordered by their priorities.
102737
f556415c326b (Fdetect_coding_region, Fcoding_system_priority_list): Improve the
Kenichi Handa <handa@m17n.org>
parents: 102422
diff changeset
9674 The list contains a subset of coding systems; i.e. coding systems
f556415c326b (Fdetect_coding_region, Fcoding_system_priority_list): Improve the
Kenichi Handa <handa@m17n.org>
parents: 102422
diff changeset
9675 assigned to each coding category (see `coding-category-list').
f556415c326b (Fdetect_coding_region, Fcoding_system_priority_list): Improve the
Kenichi Handa <handa@m17n.org>
parents: 102422
diff changeset
9676
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
9677 HIGHESTP non-nil means just return the highest priority one. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9678 (highestp)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9679 Lisp_Object highestp;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9680 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
9681 int i;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
9682 Lisp_Object val;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
9683
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9684 for (i = 0, val = Qnil; i < coding_category_max; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9685 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9686 enum coding_category category = coding_priorities[i];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9687 int id = coding_categories[category].id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9688 Lisp_Object attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9689
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9690 if (id < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9691 continue;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9692 attrs = CODING_ID_ATTRS (id);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9693 if (! NILP (highestp))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9694 return CODING_ATTR_BASE_NAME (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9695 val = Fcons (CODING_ATTR_BASE_NAME (attrs), val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9696 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9697 return Fnreverse (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9698 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9699
105959
ba3ffbd9c422 * process.c (ifflag_def): Make flag_sym constant.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105877
diff changeset
9700 static const char *const suffixes[] = { "-unix", "-dos", "-mac" };
88631
780b91d4a7e5 (setup_iso_safe_charsets): Fix arg decl for K&R.
Dave Love <fx@gnu.org>
parents: 88607
diff changeset
9701
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9702 static Lisp_Object
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9703 make_subsidiaries (base)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9704 Lisp_Object base;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9705 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9706 Lisp_Object subsidiaries;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9707 int base_name_len = SBYTES (SYMBOL_NAME (base));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9708 char *buf = (char *) alloca (base_name_len + 6);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9709 int i;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9710
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9711 bcopy (SDATA (SYMBOL_NAME (base)), buf, base_name_len);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9712 subsidiaries = Fmake_vector (make_number (3), Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9713 for (i = 0; i < 3; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9714 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9715 bcopy (suffixes[i], buf + base_name_len, strlen (suffixes[i]) + 1);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9716 ASET (subsidiaries, i, intern (buf));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9717 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9718 return subsidiaries;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9719 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9720
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
9721
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
9722 DEFUN ("define-coding-system-internal", Fdefine_coding_system_internal,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9723 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
9724 doc: /* For internal use only.
f464d728344c (Vchar_coding_system_table, Qchar_coding_system):
Dave Love <fx@gnu.org>
parents: 88510
diff changeset
9725 usage: (define-coding-system-internal ...) */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9726 (nargs, args)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9727 int nargs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9728 Lisp_Object *args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9729 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9730 Lisp_Object name;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9731 Lisp_Object spec_vec; /* [ ATTRS ALIASE EOL_TYPE ] */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9732 Lisp_Object attrs; /* Vector of attributes. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9733 Lisp_Object eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9734 Lisp_Object aliases;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9735 Lisp_Object coding_type, charset_list, safe_charsets;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9736 enum coding_category category;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9737 Lisp_Object tail, val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9738 int max_charset_id = 0;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9739 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9740
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9741 if (nargs < coding_arg_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9742 goto short_args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9743
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9744 attrs = Fmake_vector (make_number (coding_attr_last_index), Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9745
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9746 name = args[coding_arg_name];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9747 CHECK_SYMBOL (name);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9748 CODING_ATTR_BASE_NAME (attrs) = name;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9749
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9750 val = args[coding_arg_mnemonic];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9751 if (! STRINGP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9752 CHECK_CHARACTER (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9753 CODING_ATTR_MNEMONIC (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9754
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9755 coding_type = args[coding_arg_coding_type];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9756 CHECK_SYMBOL (coding_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9757 CODING_ATTR_TYPE (attrs) = coding_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9758
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9759 charset_list = args[coding_arg_charset_list];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9760 if (SYMBOLP (charset_list))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9761 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9762 if (EQ (charset_list, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9763 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9764 if (! EQ (coding_type, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9765 error ("Invalid charset-list");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9766 charset_list = Viso_2022_charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9767 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9768 else if (EQ (charset_list, Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9769 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9770 if (! EQ (coding_type, Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9771 error ("Invalid charset-list");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9772 charset_list = Vemacs_mule_charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9773 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9774 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9775 if (max_charset_id < XFASTINT (XCAR (tail)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9776 max_charset_id = XFASTINT (XCAR (tail));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9777 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9778 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9779 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9780 charset_list = Fcopy_sequence (charset_list);
91046
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9781 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9782 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9783 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9784
91046
35069180a991 Fix up multi-tty merge
Miles Bader <miles@gnu.org>
parents: 91041
diff changeset
9785 val = XCAR (tail);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9786 CHECK_CHARSET_GET_CHARSET (val, charset);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9787 if (EQ (coding_type, Qiso_2022)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9788 ? CHARSET_ISO_FINAL (charset) < 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9789 : EQ (coding_type, Qemacs_mule)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9790 ? CHARSET_EMACS_MULE_ID (charset) < 0
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9791 : 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9792 error ("Can't handle charset `%s'",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9793 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9794
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9795 XSETCAR (tail, make_number (charset->id));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9796 if (max_charset_id < charset->id)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9797 max_charset_id = charset->id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9798 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9799 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9800 CODING_ATTR_CHARSET_LIST (attrs) = charset_list;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9801
102186
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
9802 safe_charsets = make_uninit_string (max_charset_id + 1);
a12d39ca6870 * coding.h (struct coding_system): Make safe_charsets a pointer to
Andreas Schwab <schwab@suse.de>
parents: 102115
diff changeset
9803 memset (SDATA (safe_charsets), 255, max_charset_id + 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9804 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9805 SSET (safe_charsets, XFASTINT (XCAR (tail)), 0);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9806 CODING_ATTR_SAFE_CHARSETS (attrs) = safe_charsets;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9807
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
9808 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
9809
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9810 val = args[coding_arg_decode_translation_table];
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
9811 if (! CHAR_TABLE_P (val) && ! CONSP (val))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
9812 CHECK_SYMBOL (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9813 CODING_ATTR_DECODE_TBL (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9814
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9815 val = args[coding_arg_encode_translation_table];
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
9816 if (! CHAR_TABLE_P (val) && ! CONSP (val))
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
9817 CHECK_SYMBOL (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9818 CODING_ATTR_ENCODE_TBL (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9819
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9820 val = args[coding_arg_post_read_conversion];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9821 CHECK_SYMBOL (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9822 CODING_ATTR_POST_READ (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9823
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9824 val = args[coding_arg_pre_write_conversion];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9825 CHECK_SYMBOL (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9826 CODING_ATTR_PRE_WRITE (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9827
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9828 val = args[coding_arg_default_char];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9829 if (NILP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9830 CODING_ATTR_DEFAULT_CHAR (attrs) = make_number (' ');
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9831 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9832 {
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9833 CHECK_CHARACTER (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9834 CODING_ATTR_DEFAULT_CHAR (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9835 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9836
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9837 val = args[coding_arg_for_unibyte];
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9838 CODING_ATTR_FOR_UNIBYTE (attrs) = NILP (val) ? Qnil : Qt;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9839
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9840 val = args[coding_arg_plist];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9841 CHECK_LIST (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9842 CODING_ATTR_PLIST (attrs) = val;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9843
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9844 if (EQ (coding_type, Qcharset))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9845 {
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9846 /* 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
9847 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
9848
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9849 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
9850 coding system.
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9851
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9852 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
9853 charset whose ID is NUM.
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9854
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9855 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
9856 of one of them. The list is sorted by dimensions of the
110983
b87d8337c695 Fix typos in comments
Kenichi Handa <handa@m17n.org>
parents: 110847
diff changeset
9857 charsets. A charset of smaller dimension comes first. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9858 val = Fmake_vector (make_number (256), Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9859
89653
cbaa9fd1aa5c (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89648
diff changeset
9860 for (tail = charset_list; CONSP (tail); tail = XCDR (tail))
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9861 {
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9862 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
9863 int dim = CHARSET_DIMENSION (charset);
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9864 int idx = (dim - 1) * 4;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9865
89653
cbaa9fd1aa5c (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89648
diff changeset
9866 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
9867 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
9868
88477
5f974cbba7b3 (coding_set_source): Delete the local variable beg_byte.
Kenichi Handa <handa@m17n.org>
parents: 88473
diff changeset
9869 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
9870 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
9871 {
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9872 Lisp_Object tmp, tmp2;
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9873 int dim2;
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9874
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9875 tmp = AREF (val, i);
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9876 if (NILP (tmp))
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9877 tmp = XCAR (tail);
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9878 else if (NUMBERP (tmp))
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9879 {
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9880 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
9881 if (dim < dim2)
88607
18436bf3d6dd (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88598
diff changeset
9882 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
9883 else
88607
18436bf3d6dd (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 88598
diff changeset
9884 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
9885 }
88477
5f974cbba7b3 (coding_set_source): Delete the local variable beg_byte.
Kenichi Handa <handa@m17n.org>
parents: 88473
diff changeset
9886 else
88597
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9887 {
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9888 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
9889 {
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9890 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
9891 if (dim < dim2)
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9892 break;
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9893 }
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9894 if (NILP (tmp2))
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9895 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
9896 else
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9897 {
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9898 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
9899 XSETCAR (tmp2, XCAR (tail));
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9900 }
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9901 }
74b74f59bc09 (decode_coding_charset): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 88587
diff changeset
9902 ASET (val, i, tmp);
88477
5f974cbba7b3 (coding_set_source): Delete the local variable beg_byte.
Kenichi Handa <handa@m17n.org>
parents: 88473
diff changeset
9903 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9904 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9905 ASET (attrs, coding_attr_charset_valids, val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9906 category = coding_category_charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9907 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9908 else if (EQ (coding_type, Qccl))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9909 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9910 Lisp_Object valids;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9911
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9912 if (nargs < coding_arg_ccl_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9913 goto short_args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9914
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9915 val = args[coding_arg_ccl_decoder];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9916 CHECK_CCL_PROGRAM (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9917 if (VECTORP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9918 val = Fcopy_sequence (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9919 ASET (attrs, coding_attr_ccl_decoder, val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9920
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9921 val = args[coding_arg_ccl_encoder];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9922 CHECK_CCL_PROGRAM (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9923 if (VECTORP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9924 val = Fcopy_sequence (val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9925 ASET (attrs, coding_attr_ccl_encoder, val);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9926
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9927 val = args[coding_arg_ccl_valids];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9928 valids = Fmake_string (make_number (256), make_number (0));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9929 for (tail = val; !NILP (tail); tail = Fcdr (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9930 {
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9931 int from, to;
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9932
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9933 val = Fcar (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9934 if (INTEGERP (val))
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9935 {
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9936 from = to = XINT (val);
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9937 if (from < 0 || from > 255)
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9938 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
9939 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9940 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9941 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9942 CHECK_CONS (val);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9943 CHECK_NATNUM_CAR (val);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9944 CHECK_NATNUM_CDR (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9945 from = XINT (XCAR (val));
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9946 if (from > 255)
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9947 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
9948 make_number (0), make_number (255));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9949 to = XINT (XCDR (val));
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9950 if (to < from || to > 255)
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9951 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
9952 XCAR (val), make_number (255));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9953 }
89373
4cc9e57fcabc (decode_coding_ccl, encode_coding_ccl): Call ccl_driver
Kenichi Handa <handa@m17n.org>
parents: 89331
diff changeset
9954 for (i = from; i <= to; i++)
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9955 SSET (valids, i, 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9956 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9957 ASET (attrs, coding_attr_ccl_valids, valids);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9958
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9959 category = coding_category_ccl;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9960 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9961 else if (EQ (coding_type, Qutf_16))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9962 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9963 Lisp_Object bom, endian;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9964
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
9965 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
9966
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9967 if (nargs < coding_arg_utf16_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9968 goto short_args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9969
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9970 bom = args[coding_arg_utf16_bom];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9971 if (! NILP (bom) && ! EQ (bom, Qt))
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
9972 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9973 CHECK_CONS (bom);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9974 val = XCAR (bom);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9975 CHECK_CODING_SYSTEM (val);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9976 val = XCDR (bom);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9977 CHECK_CODING_SYSTEM (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9978 }
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
9979 ASET (attrs, coding_attr_utf_bom, bom);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9980
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9981 endian = args[coding_arg_utf16_endian];
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
9982 CHECK_SYMBOL (endian);
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
9983 if (NILP (endian))
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
9984 endian = Qbig;
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
9985 else if (! EQ (endian, Qbig) && ! EQ (endian, Qlittle))
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
9986 error ("Invalid endian: %s", SDATA (SYMBOL_NAME (endian)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9987 ASET (attrs, coding_attr_utf_16_endian, endian);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9988
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9989 category = (CONSP (bom)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9990 ? coding_category_utf_16_auto
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9991 : NILP (bom)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
9992 ? (EQ (endian, Qbig)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9993 ? coding_category_utf_16_be_nosig
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9994 : coding_category_utf_16_le_nosig)
89420
c3e67ce6ee0f (Qsignature, Qendian): Delete these variables.
Kenichi Handa <handa@m17n.org>
parents: 89418
diff changeset
9995 : (EQ (endian, Qbig)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9996 ? coding_category_utf_16_be
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9997 : coding_category_utf_16_le));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9998 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
9999 else if (EQ (coding_type, Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10000 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10001 Lisp_Object initial, reg_usage, request, flags;
89442
7349f4473e7f (detected_mask): Delete unused variable.
Kenichi Handa <handa@m17n.org>
parents: 89429
diff changeset
10002 int i;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10003
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10004 if (nargs < coding_arg_iso2022_max)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10005 goto short_args;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10006
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10007 initial = Fcopy_sequence (args[coding_arg_iso2022_initial]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10008 CHECK_VECTOR (initial);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10009 for (i = 0; i < 4; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10010 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10011 val = Faref (initial, make_number (i));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10012 if (! NILP (val))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10013 {
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
10014 struct charset *charset;
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
10015
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
10016 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
10017 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
10018 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
10019 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10020 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10021 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10022 ASET (initial, i, make_number (-1));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10023 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10024
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10025 reg_usage = args[coding_arg_iso2022_reg_usage];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10026 CHECK_CONS (reg_usage);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10027 CHECK_NUMBER_CAR (reg_usage);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10028 CHECK_NUMBER_CDR (reg_usage);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10029
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10030 request = Fcopy_sequence (args[coding_arg_iso2022_request]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10031 for (tail = request; ! NILP (tail); tail = Fcdr (tail))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10032 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10033 int id;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10034 Lisp_Object tmp;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10035
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10036 val = Fcar (tail);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10037 CHECK_CONS (val);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10038 tmp = XCAR (val);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10039 CHECK_CHARSET_GET_ID (tmp, id);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10040 CHECK_NATNUM_CDR (val);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10041 if (XINT (XCDR (val)) >= 4)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10042 error ("Invalid graphic register number: %d", XINT (XCDR (val)));
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10043 XSETCAR (val, make_number (id));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10044 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10045
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10046 flags = args[coding_arg_iso2022_flags];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10047 CHECK_NATNUM (flags);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10048 i = XINT (flags);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10049 if (EQ (args[coding_arg_charset_list], Qiso_2022))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10050 flags = make_number (i | CODING_ISO_FLAG_FULL_SUPPORT);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10051
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10052 ASET (attrs, coding_attr_iso_initial, initial);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10053 ASET (attrs, coding_attr_iso_usage, reg_usage);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10054 ASET (attrs, coding_attr_iso_request, request);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10055 ASET (attrs, coding_attr_iso_flags, flags);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10056 setup_iso_safe_charsets (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10057
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10058 if (i & CODING_ISO_FLAG_SEVEN_BITS)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10059 category = ((i & (CODING_ISO_FLAG_LOCKING_SHIFT
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10060 | CODING_ISO_FLAG_SINGLE_SHIFT))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10061 ? coding_category_iso_7_else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10062 : EQ (args[coding_arg_charset_list], Qiso_2022)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10063 ? coding_category_iso_7
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10064 : coding_category_iso_7_tight);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10065 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10066 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10067 int id = XINT (AREF (initial, 1));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10068
88977
3b05c02eebf2 (Fdefine_coding_system_internal): Fix category setting
Kenichi Handa <handa@m17n.org>
parents: 88950
diff changeset
10069 category = (((i & CODING_ISO_FLAG_LOCKING_SHIFT)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10070 || EQ (args[coding_arg_charset_list], Qiso_2022)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10071 || id < 0)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10072 ? coding_category_iso_8_else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10073 : (CHARSET_DIMENSION (CHARSET_FROM_ID (id)) == 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10074 ? coding_category_iso_8_1
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10075 : coding_category_iso_8_2);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
10076 }
89227
101ee928c088 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89225
diff changeset
10077 if (category != coding_category_iso_8_1
101ee928c088 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89225
diff changeset
10078 && category != coding_category_iso_8_2)
101ee928c088 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89225
diff changeset
10079 CODING_ATTR_ASCII_COMPAT (attrs) = Qnil;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10080 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10081 else if (EQ (coding_type, Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10082 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10083 if (EQ (args[coding_arg_charset_list], Qemacs_mule))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10084 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
10085 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10086 category = coding_category_emacs_mule;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10087 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10088 else if (EQ (coding_type, Qshift_jis))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10089 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10090
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10091 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10092
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
10093 if (XINT (Flength (charset_list)) != 3
89739
293c9235be3f (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89732
diff changeset
10094 && XINT (Flength (charset_list)) != 4)
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
10095 error ("There should be three or four charsets");
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10096
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10097 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10098 if (CHARSET_DIMENSION (charset) != 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10099 error ("Dimension of charset %s is not one",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10100 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
10101 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
10102 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10103
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10104 charset_list = XCDR (charset_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10105 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10106 if (CHARSET_DIMENSION (charset) != 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10107 error ("Dimension of charset %s is not one",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10108 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10109
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10110 charset_list = XCDR (charset_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10111 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10112 if (CHARSET_DIMENSION (charset) != 2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10113 error ("Dimension of charset %s is not two",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10114 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10115
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
10116 charset_list = XCDR (charset_list);
89740
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
10117 if (! NILP (charset_list))
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
10118 {
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
10119 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
10120 if (CHARSET_DIMENSION (charset) != 2)
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
10121 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
10122 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
78c1fd14ed42 (Fdefine_coding_system_internal): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89739
diff changeset
10123 }
89732
8acde12aba89 (get_translation_table): New function.
Kenichi Handa <handa@m17n.org>
parents: 89730
diff changeset
10124
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10125 category = coding_category_sjis;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10126 Vsjis_coding_system = name;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10127 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10128 else if (EQ (coding_type, Qbig5))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10129 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10130 struct charset *charset;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10131
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10132 if (XINT (Flength (charset_list)) != 2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10133 error ("There should be just two charsets");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10134
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10135 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10136 if (CHARSET_DIMENSION (charset) != 1)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10137 error ("Dimension of charset %s is not one",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10138 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
10139 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
10140 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10141
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10142 charset_list = XCDR (charset_list);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10143 charset = CHARSET_FROM_ID (XINT (XCAR (charset_list)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10144 if (CHARSET_DIMENSION (charset) != 2)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10145 error ("Dimension of charset %s is not two",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10146 SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10147
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10148 category = coding_category_big5;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10149 Vbig5_coding_system = name;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10150 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10151 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
10152 {
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
10153 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
10154 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
10155 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10156 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
10157 {
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10158 Lisp_Object bom;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10159
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
10160 CODING_ATTR_ASCII_COMPAT (attrs) = Qt;
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10161
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10162 if (nargs < coding_arg_utf8_max)
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10163 goto short_args;
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10164
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10165 bom = args[coding_arg_utf8_bom];
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10166 if (! NILP (bom) && ! EQ (bom, Qt))
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10167 {
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10168 CHECK_CONS (bom);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10169 val = XCAR (bom);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10170 CHECK_CODING_SYSTEM (val);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10171 val = XCDR (bom);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10172 CHECK_CODING_SYSTEM (val);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10173 }
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10174 ASET (attrs, coding_attr_utf_bom, bom);
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10175
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10176 category = (CONSP (bom) ? coding_category_utf_8_auto
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10177 : NILP (bom) ? coding_category_utf_8_nosig
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10178 : coding_category_utf_8_sig);
89225
32058afc72e2 (detect_coding_charset): If only ASCII bytes are found, return 0.
Kenichi Handa <handa@m17n.org>
parents: 89221
diff changeset
10179 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10180 else if (EQ (coding_type, Qundecided))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10181 category = coding_category_undecided;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10182 else
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10183 error ("Invalid coding system type: %s",
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10184 SDATA (SYMBOL_NAME (coding_type)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10185
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10186 CODING_ATTR_CATEGORY (attrs) = make_number (category);
89468
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
10187 CODING_ATTR_PLIST (attrs)
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
10188 = Fcons (QCcategory, Fcons (AREF (Vcoding_category_table, category),
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
10189 CODING_ATTR_PLIST (attrs)));
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10190 CODING_ATTR_PLIST (attrs)
93877
62d97ebb13a9 * coding.c (detect_coding_emacs_mule)
Michael Albinus <michael.albinus@gmx.de>
parents: 93595
diff changeset
10191 = Fcons (QCascii_compatible_p,
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10192 Fcons (CODING_ATTR_ASCII_COMPAT (attrs),
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10193 CODING_ATTR_PLIST (attrs)));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10194
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10195 eol_type = args[coding_arg_eol_type];
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10196 if (! NILP (eol_type)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10197 && ! EQ (eol_type, Qunix)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10198 && ! EQ (eol_type, Qdos)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10199 && ! EQ (eol_type, Qmac))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10200 error ("Invalid eol-type");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10201
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10202 aliases = Fcons (name, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10203
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10204 if (NILP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10205 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10206 eol_type = make_subsidiaries (name);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10207 for (i = 0; i < 3; i++)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
10208 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10209 Lisp_Object this_spec, this_name, this_aliases, this_eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10210
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10211 this_name = AREF (eol_type, i);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10212 this_aliases = Fcons (this_name, Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10213 this_eol_type = (i == 0 ? Qunix : i == 1 ? Qdos : Qmac);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10214 this_spec = Fmake_vector (make_number (3), attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10215 ASET (this_spec, 1, this_aliases);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10216 ASET (this_spec, 2, this_eol_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10217 Fputhash (this_name, this_spec, Vcoding_system_hash_table);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10218 Vcoding_system_list = Fcons (this_name, Vcoding_system_list);
90289
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10219 val = Fassoc (Fsymbol_name (this_name), Vcoding_system_alist);
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10220 if (NILP (val))
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10221 Vcoding_system_alist
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10222 = Fcons (Fcons (Fsymbol_name (this_name), Qnil),
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10223 Vcoding_system_alist);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
10224 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10225 }
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
10226
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10227 spec_vec = Fmake_vector (make_number (3), attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10228 ASET (spec_vec, 1, aliases);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10229 ASET (spec_vec, 2, eol_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10230
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10231 Fputhash (name, spec_vec, Vcoding_system_hash_table);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10232 Vcoding_system_list = Fcons (name, Vcoding_system_list);
90289
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10233 val = Fassoc (Fsymbol_name (name), Vcoding_system_alist);
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10234 if (NILP (val))
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10235 Vcoding_system_alist = Fcons (Fcons (Fsymbol_name (name), Qnil),
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10236 Vcoding_system_alist);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10237
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10238 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10239 int id = coding_categories[category].id;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10240
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10241 if (id < 0 || EQ (name, CODING_ID_NAME (id)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10242 setup_coding_system (name, &coding_categories[category]);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10243 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10244
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10245 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10246
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10247 short_args:
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10248 return Fsignal (Qwrong_number_of_arguments,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10249 Fcons (intern ("define-coding-system-internal"),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10250 make_number (nargs)));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10251 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10252
89571
242f2cc0134b (Fdefine_coding_system_alias): Update Vcoding_system_list.
Kenichi Handa <handa@m17n.org>
parents: 89562
diff changeset
10253
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10254 DEFUN ("coding-system-put", Fcoding_system_put, Scoding_system_put,
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10255 3, 3, 0,
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10256 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
10257 (coding_system, prop, val)
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10258 Lisp_Object coding_system, prop, val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10259 {
89924
7d0f6da3ea6e (detect_coding): Delete unused variables.
Kenichi Handa <handa@m17n.org>
parents: 89917
diff changeset
10260 Lisp_Object spec, attrs;
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10261
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10262 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10263 attrs = AREF (spec, 0);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10264 if (EQ (prop, QCmnemonic))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10265 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10266 if (! STRINGP (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10267 CHECK_CHARACTER (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10268 CODING_ATTR_MNEMONIC (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10269 }
100303
3e044fa54e4f * coding.c (QCdefault_char): Rename from QCdefalut_char.
Juanma Barranquero <lekktu@gmail.com>
parents: 100262
diff changeset
10270 else if (EQ (prop, QCdefault_char))
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10271 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10272 if (NILP (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10273 val = make_number (' ');
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10274 else
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10275 CHECK_CHARACTER (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10276 CODING_ATTR_DEFAULT_CHAR (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10277 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10278 else if (EQ (prop, QCdecode_translation_table))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10279 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10280 if (! CHAR_TABLE_P (val) && ! CONSP (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10281 CHECK_SYMBOL (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10282 CODING_ATTR_DECODE_TBL (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10283 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10284 else if (EQ (prop, QCencode_translation_table))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10285 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10286 if (! CHAR_TABLE_P (val) && ! CONSP (val))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10287 CHECK_SYMBOL (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10288 CODING_ATTR_ENCODE_TBL (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10289 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10290 else if (EQ (prop, QCpost_read_conversion))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10291 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10292 CHECK_SYMBOL (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10293 CODING_ATTR_POST_READ (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10294 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10295 else if (EQ (prop, QCpre_write_conversion))
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10296 {
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10297 CHECK_SYMBOL (val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10298 CODING_ATTR_PRE_WRITE (attrs) = val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10299 }
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10300 else if (EQ (prop, QCascii_compatible_p))
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10301 {
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10302 CODING_ATTR_ASCII_COMPAT (attrs) = val;
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10303 }
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10304
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10305 CODING_ATTR_PLIST (attrs)
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10306 = Fplist_put (CODING_ATTR_PLIST (attrs), prop, val);
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10307 return val;
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10308 }
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10309
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10310
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10311 DEFUN ("define-coding-system-alias", Fdefine_coding_system_alias,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10312 Sdefine_coding_system_alias, 2, 2, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10313 doc: /* Define ALIAS as an alias for CODING-SYSTEM. */)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10314 (alias, coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10315 Lisp_Object alias, coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10316 {
90289
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10317 Lisp_Object spec, aliases, eol_type, val;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10318
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10319 CHECK_SYMBOL (alias);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10320 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10321 aliases = AREF (spec, 1);
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
10322 /* ALIASES should be a list of length more than zero, and the first
89571
242f2cc0134b (Fdefine_coding_system_alias): Update Vcoding_system_list.
Kenichi Handa <handa@m17n.org>
parents: 89562
diff changeset
10323 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
10324 list. */
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10325 while (!NILP (XCDR (aliases)))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10326 aliases = XCDR (aliases);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10327 XSETCDR (aliases, Fcons (alias, Qnil));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10328
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10329 eol_type = AREF (spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10330 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10331 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10332 Lisp_Object subsidiaries;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10333 int i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10334
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10335 subsidiaries = make_subsidiaries (alias);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10336 for (i = 0; i < 3; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10337 Fdefine_coding_system_alias (AREF (subsidiaries, i),
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10338 AREF (eol_type, i));
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10339 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10340
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10341 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
10342 Vcoding_system_list = Fcons (alias, Vcoding_system_list);
90289
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10343 val = Fassoc (Fsymbol_name (alias), Vcoding_system_alist);
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10344 if (NILP (val))
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10345 Vcoding_system_alist = Fcons (Fcons (Fsymbol_name (alias), Qnil),
72d8a45f6c9f (Fdefine_coding_system_internal): Avoid a duplicated
Kenichi Handa <handa@m17n.org>
parents: 90272
diff changeset
10346 Vcoding_system_alist);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10347
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10348 return Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10349 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10350
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10351 DEFUN ("coding-system-base", Fcoding_system_base, Scoding_system_base,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10352 1, 1, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10353 doc: /* Return the base of CODING-SYSTEM.
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
10354 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
10355 (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10356 Lisp_Object coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10357 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10358 Lisp_Object spec, attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10359
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10360 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10361 return (Qno_conversion);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10362 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10363 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10364 return CODING_ATTR_BASE_NAME (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10365 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10366
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10367 DEFUN ("coding-system-plist", Fcoding_system_plist, Scoding_system_plist,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10368 1, 1, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10369 doc: "Return the property list of CODING-SYSTEM.")
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
10370 (coding_system)
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
10371 Lisp_Object coding_system;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
10372 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10373 Lisp_Object spec, attrs;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10374
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10375 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10376 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10377 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10378 attrs = AREF (spec, 0);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10379 return CODING_ATTR_PLIST (attrs);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10380 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10381
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10382
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10383 DEFUN ("coding-system-aliases", Fcoding_system_aliases, Scoding_system_aliases,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10384 1, 1, 0,
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
10385 doc: /* Return the list of aliases of CODING-SYSTEM. */)
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10386 (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10387 Lisp_Object coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10388 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10389 Lisp_Object spec;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10390
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10391 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10392 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10393 CHECK_CODING_SYSTEM_GET_SPEC (coding_system, spec);
88645
d099a8b267fe Doc fixes.
Dave Love <fx@gnu.org>
parents: 88631
diff changeset
10394 return AREF (spec, 1);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10395 }
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10396
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10397 DEFUN ("coding-system-eol-type", Fcoding_system_eol_type,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10398 Scoding_system_eol_type, 1, 1, 0,
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10399 doc: /* Return eol-type of CODING-SYSTEM.
95088
524350e4961c (Fcoding_system_p): Rename argument to match docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 94963
diff changeset
10400 An eol-type is an integer 0, 1, 2, or a vector of coding systems.
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10401
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10402 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
10403 and CR respectively.
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10404
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10405 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
10406 detected automatically. Nth element of the vector is the subsidiary
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10407 coding system whose eol-type is N. */)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10408 (coding_system)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10409 Lisp_Object coding_system;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10410 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10411 Lisp_Object spec, eol_type;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10412 int n;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10413
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10414 if (NILP (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10415 coding_system = Qno_conversion;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10416 if (! CODING_SYSTEM_P (coding_system))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10417 return Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10418 spec = CODING_SYSTEM_SPEC (coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10419 eol_type = AREF (spec, 2);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10420 if (VECTORP (eol_type))
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10421 return Fcopy_sequence (eol_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10422 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
10423 return make_number (n);
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
10424 }
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
10425
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10426 #endif /* emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10427
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10428
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
10429 /*** 9. Post-amble ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10430
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21505
diff changeset
10431 void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10432 init_coding_once ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10433 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10434 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10435
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10436 for (i = 0; i < coding_category_max; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10437 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10438 coding_categories[i].id = -1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10439 coding_priorities[i] = i;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10440 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10441
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10442 /* ISO2022 specific initialize routine. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10443 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
10444 iso_code_class[i] = ISO_control_0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10445 for (i = 0x21; i < 0x7F; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10446 iso_code_class[i] = ISO_graphic_plane_0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10447 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
10448 iso_code_class[i] = ISO_control_1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10449 for (i = 0xA1; i < 0xFF; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10450 iso_code_class[i] = ISO_graphic_plane_1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10451 iso_code_class[0x20] = iso_code_class[0x7F] = ISO_0x20_or_0x7F;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10452 iso_code_class[0xA0] = iso_code_class[0xFF] = ISO_0xA0_or_0xFF;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10453 iso_code_class[ISO_CODE_SO] = ISO_shift_out;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10454 iso_code_class[ISO_CODE_SI] = ISO_shift_in;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10455 iso_code_class[ISO_CODE_SS2_7] = ISO_single_shift_2_7;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10456 iso_code_class[ISO_CODE_ESC] = ISO_escape;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10457 iso_code_class[ISO_CODE_SS2] = ISO_single_shift_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10458 iso_code_class[ISO_CODE_SS3] = ISO_single_shift_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10459 iso_code_class[ISO_CODE_CSI] = ISO_control_sequence_introducer;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10460
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10461 for (i = 0; i < 256; i++)
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10462 {
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10463 emacs_mule_bytes[i] = 1;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10464 }
88876
af9012fdad56 (LEADING_CODE_PRIVATE_11, LEADING_CODE_PRIVATE_12,
Kenichi Handa <handa@m17n.org>
parents: 88862
diff changeset
10465 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
10466 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
10467 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
10468 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
10469 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
10470
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
10471 #ifdef emacs
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
10472
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21505
diff changeset
10473 void
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
10474 syms_of_coding ()
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
10475 {
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10476 staticpro (&Vcoding_system_hash_table);
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10477 {
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10478 Lisp_Object args[2];
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10479 args[0] = QCtest;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10480 args[1] = Qeq;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10481 Vcoding_system_hash_table = Fmake_hash_table (2, args);
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10482 }
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10483
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10484 staticpro (&Vsjis_coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10485 Vsjis_coding_system = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10486
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10487 staticpro (&Vbig5_coding_system);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10488 Vbig5_coding_system = Qnil;
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10489
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
10490 staticpro (&Vcode_conversion_reused_workbuf);
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
10491 Vcode_conversion_reused_workbuf = Qnil;
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
10492
58637
ff8a37b5299b (Vcode_conversion_workbuf_name): New variable.
Kenichi Handa <handa@m17n.org>
parents: 58502
diff changeset
10493 staticpro (&Vcode_conversion_workbuf_name);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10494 Vcode_conversion_workbuf_name = make_pure_c_string (" *code-conversion-work*");
58637
ff8a37b5299b (Vcode_conversion_workbuf_name): New variable.
Kenichi Handa <handa@m17n.org>
parents: 58502
diff changeset
10495
89665
9010cefe8d29 (enum iso_code_class_type): Delete ISO_carriage_return.
Kenichi Handa <handa@m17n.org>
parents: 89653
diff changeset
10496 reused_workbuf_in_use = 0;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10497
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10498 DEFSYM (Qcharset, "charset");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10499 DEFSYM (Qtarget_idx, "target-idx");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10500 DEFSYM (Qcoding_system_history, "coding-system-history");
19750
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
10501 Fset (Qcoding_system_history, Qnil);
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
10502
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
10503 /* 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
10504 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
10505 /* 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
10506 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
10507
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10508 DEFSYM (Qcall_process, "call-process");
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
10509 /* 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
10510 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
10511
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10512 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
10513 /* 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
10514 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
10515
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10516 DEFSYM (Qstart_process, "start-process");
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
10517 /* 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
10518 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
10519
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10520 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
10521 /* 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
10522 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
10523
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10524 DEFSYM (Qcoding_system, "coding-system");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10525 DEFSYM (Qcoding_aliases, "coding-aliases");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10526
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10527 DEFSYM (Qeol_type, "eol-type");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10528 DEFSYM (Qunix, "unix");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10529 DEFSYM (Qdos, "dos");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10530
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10531 DEFSYM (Qbuffer_file_coding_system, "buffer-file-coding-system");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10532 DEFSYM (Qpost_read_conversion, "post-read-conversion");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10533 DEFSYM (Qpre_write_conversion, "pre-write-conversion");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10534 DEFSYM (Qdefault_char, "default-char");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10535 DEFSYM (Qundecided, "undecided");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10536 DEFSYM (Qno_conversion, "no-conversion");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10537 DEFSYM (Qraw_text, "raw-text");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10538
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10539 DEFSYM (Qiso_2022, "iso-2022");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10540
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10541 DEFSYM (Qutf_8, "utf-8");
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10542 DEFSYM (Qutf_8_emacs, "utf-8-emacs");
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10543
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10544 DEFSYM (Qutf_16, "utf-16");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10545 DEFSYM (Qbig, "big");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10546 DEFSYM (Qlittle, "little");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10547
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10548 DEFSYM (Qshift_jis, "shift-jis");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10549 DEFSYM (Qbig5, "big5");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10550
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10551 DEFSYM (Qcoding_system_p, "coding-system-p");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10552
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10553 DEFSYM (Qcoding_system_error, "coding-system-error");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10554 Fput (Qcoding_system_error, Qerror_conditions,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10555 pure_cons (Qcoding_system_error, pure_cons (Qerror, Qnil)));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10556 Fput (Qcoding_system_error, Qerror_message,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10557 make_pure_c_string ("Invalid coding system"));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10558
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
10559 /* 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
10560 Setting this variable twice is harmless.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
10561 But don't staticpro it here--that is done in alloc.c. */
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10562 Qchar_table_extra_slots = intern_c_string ("char-table-extra-slots");
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10563
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10564 DEFSYM (Qtranslation_table, "translation-table");
89856
18b52da60a76 (get_translation): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 89852
diff changeset
10565 Fput (Qtranslation_table, Qchar_table_extra_slots, make_number (2));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10566 DEFSYM (Qtranslation_table_id, "translation-table-id");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10567 DEFSYM (Qtranslation_table_for_decode, "translation-table-for-decode");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10568 DEFSYM (Qtranslation_table_for_encode, "translation-table-for-encode");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10569
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10570 DEFSYM (Qvalid_codes, "valid-codes");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10571
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10572 DEFSYM (Qemacs_mule, "emacs-mule");
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10573
89468
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
10574 DEFSYM (QCcategory, ":category");
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10575 DEFSYM (QCmnemonic, ":mnemonic");
100303
3e044fa54e4f * coding.c (QCdefault_char): Rename from QCdefalut_char.
Juanma Barranquero <lekktu@gmail.com>
parents: 100262
diff changeset
10576 DEFSYM (QCdefault_char, ":default-char");
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10577 DEFSYM (QCdecode_translation_table, ":decode-translation-table");
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10578 DEFSYM (QCencode_translation_table, ":encode-translation-table");
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10579 DEFSYM (QCpost_read_conversion, ":post-read-conversion");
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10580 DEFSYM (QCpre_write_conversion, ":pre-write-conversion");
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10581 DEFSYM (QCascii_compatible_p, ":ascii-compatible-p");
89468
7dbbe692f70c * coding.c (QCcategory): New variable.
Kenichi Handa <handa@m17n.org>
parents: 89467
diff changeset
10582
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10583 Vcoding_category_table
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10584 = Fmake_vector (make_number (coding_category_max), Qnil);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10585 staticpro (&Vcoding_category_table);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10586 /* Followings are target of code detection. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10587 ASET (Vcoding_category_table, coding_category_iso_7,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10588 intern_c_string ("coding-category-iso-7"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10589 ASET (Vcoding_category_table, coding_category_iso_7_tight,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10590 intern_c_string ("coding-category-iso-7-tight"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10591 ASET (Vcoding_category_table, coding_category_iso_8_1,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10592 intern_c_string ("coding-category-iso-8-1"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10593 ASET (Vcoding_category_table, coding_category_iso_8_2,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10594 intern_c_string ("coding-category-iso-8-2"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10595 ASET (Vcoding_category_table, coding_category_iso_7_else,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10596 intern_c_string ("coding-category-iso-7-else"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10597 ASET (Vcoding_category_table, coding_category_iso_8_else,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10598 intern_c_string ("coding-category-iso-8-else"));
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10599 ASET (Vcoding_category_table, coding_category_utf_8_auto,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10600 intern_c_string ("coding-category-utf-8-auto"));
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10601 ASET (Vcoding_category_table, coding_category_utf_8_nosig,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10602 intern_c_string ("coding-category-utf-8"));
95397
c99f0a16c077 (CODING_UTF_8_BOM): New macro.
Kenichi Handa <handa@m17n.org>
parents: 95356
diff changeset
10603 ASET (Vcoding_category_table, coding_category_utf_8_sig,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10604 intern_c_string ("coding-category-utf-8-sig"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10605 ASET (Vcoding_category_table, coding_category_utf_16_be,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10606 intern_c_string ("coding-category-utf-16-be"));
89467
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
10607 ASET (Vcoding_category_table, coding_category_utf_16_auto,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10608 intern_c_string ("coding-category-utf-16-auto"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10609 ASET (Vcoding_category_table, coding_category_utf_16_le,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10610 intern_c_string ("coding-category-utf-16-le"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10611 ASET (Vcoding_category_table, coding_category_utf_16_be_nosig,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10612 intern_c_string ("coding-category-utf-16-be-nosig"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10613 ASET (Vcoding_category_table, coding_category_utf_16_le_nosig,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10614 intern_c_string ("coding-category-utf-16-le-nosig"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10615 ASET (Vcoding_category_table, coding_category_charset,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10616 intern_c_string ("coding-category-charset"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10617 ASET (Vcoding_category_table, coding_category_sjis,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10618 intern_c_string ("coding-category-sjis"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10619 ASET (Vcoding_category_table, coding_category_big5,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10620 intern_c_string ("coding-category-big5"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10621 ASET (Vcoding_category_table, coding_category_ccl,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10622 intern_c_string ("coding-category-ccl"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10623 ASET (Vcoding_category_table, coding_category_emacs_mule,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10624 intern_c_string ("coding-category-emacs-mule"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10625 /* Followings are NOT target of code detection. */
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10626 ASET (Vcoding_category_table, coding_category_raw_text,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10627 intern_c_string ("coding-category-raw-text"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10628 ASET (Vcoding_category_table, coding_category_undecided,
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10629 intern_c_string ("coding-category-undecided"));
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10630
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10631 DEFSYM (Qinsufficient_source, "insufficient-source");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10632 DEFSYM (Qinconsistent_eol, "inconsistent-eol");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10633 DEFSYM (Qinvalid_source, "invalid-source");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10634 DEFSYM (Qinterrupted, "interrupted");
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10635 DEFSYM (Qinsufficient_memory, "insufficient-memory");
90272
f1df126ec7de Sync to HEAD for handling autoload-coding-system.
Kenichi Handa <handa@m17n.org>
parents: 90263
diff changeset
10636 DEFSYM (Qcoding_system_define_form, "coding-system-define-form");
52794
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
10637
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10638 defsubr (&Scoding_system_p);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10639 defsubr (&Sread_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10640 defsubr (&Sread_non_nil_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10641 defsubr (&Scheck_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10642 defsubr (&Sdetect_coding_region);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10643 defsubr (&Sdetect_coding_string);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
10644 defsubr (&Sfind_coding_systems_region_internal);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
10645 defsubr (&Sunencodable_char_position);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10646 defsubr (&Scheck_coding_systems_region);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10647 defsubr (&Sdecode_coding_region);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10648 defsubr (&Sencode_coding_region);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10649 defsubr (&Sdecode_coding_string);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10650 defsubr (&Sencode_coding_string);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10651 defsubr (&Sdecode_sjis_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10652 defsubr (&Sencode_sjis_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10653 defsubr (&Sdecode_big5_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10654 defsubr (&Sencode_big5_char);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
10655 defsubr (&Sset_terminal_coding_system_internal);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
10656 defsubr (&Sset_safe_terminal_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10657 defsubr (&Sterminal_coding_system);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
10658 defsubr (&Sset_keyboard_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10659 defsubr (&Skeyboard_coding_system);
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
10660 defsubr (&Sfind_operation_coding_system);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10661 defsubr (&Sset_coding_system_priority);
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
10662 defsubr (&Sdefine_coding_system_internal);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10663 defsubr (&Sdefine_coding_system_alias);
89759
d11866e9fbf4 (QCmnemonic, QCdefalut_char)
Kenichi Handa <handa@m17n.org>
parents: 89740
diff changeset
10664 defsubr (&Scoding_system_put);
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10665 defsubr (&Scoding_system_base);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10666 defsubr (&Scoding_system_plist);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10667 defsubr (&Scoding_system_aliases);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10668 defsubr (&Scoding_system_eol_type);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10669 defsubr (&Scoding_system_priority_list);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10670
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
10671 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
10672 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
10673
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10674 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
10675 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
10676 `define-coding-system-alias'. */);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
10677 Vcoding_system_list = Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
10678
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
10679 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
10680 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
10681 Each element is one element list of coding system name.
95356
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
10682 This variable is given to `completing-read' as COLLECTION argument.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10683
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10684 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
10685 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
10686 `define-coding-system-alias'. */);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
10687 Vcoding_system_alist = Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
10688
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10689 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
10690 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
10691
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10692 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
10693 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
10694 one algorithm agrees with a byte sequence of source text, the coding
60608
4b80e9c28e8f (syms_of_coding): Docstring of coding-category-list fixed.
Kenichi Handa <handa@m17n.org>
parents: 60031
diff changeset
10695 system bound to the corresponding coding-category is selected.
4b80e9c28e8f (syms_of_coding): Docstring of coding-category-list fixed.
Kenichi Handa <handa@m17n.org>
parents: 60031
diff changeset
10696
61166
e3a6dd630fdf (Vcoding_category_list): Docstring fix.
Kenichi Handa <handa@m17n.org>
parents: 60907
diff changeset
10697 Don't modify this variable directly, but use `set-coding-priority'. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10698 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10699 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10700
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10701 Vcoding_category_list = Qnil;
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10702 for (i = coding_category_max - 1; i >= 0; i--)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10703 Vcoding_category_list
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10704 = Fcons (XVECTOR (Vcoding_category_table)->contents[i],
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10705 Vcoding_category_list);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10706 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10707
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10708 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
10709 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
10710 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
10711 If the value is a coding system, it is used for decoding on read operation.
95356
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
10712 If not, an appropriate element is used from one of the coding system alists.
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
10713 There are three such tables: `file-coding-system-alist',
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10714 `process-coding-system-alist', and `network-coding-system-alist'. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10715 Vcoding_system_for_read = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10716
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10717 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
10718 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
10719 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
10720 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
10721 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
10722
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10723 If this does not specify a coding system, an appropriate element
95356
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
10724 is used from one of the coding system alists.
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
10725 There are three such tables: `file-coding-system-alist',
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10726 `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
10727 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
10728 the value of `buffer-file-coding-system' is used. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10729 Vcoding_system_for_write = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10730
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10731 DEFVAR_LISP ("last-coding-system-used", &Vlast_coding_system_used,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10732 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10733 Coding system used in the latest file or process I/O. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10734 Vlast_coding_system_used = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10735
89686
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10736 DEFVAR_LISP ("last-code-conversion-error", &Vlast_code_conversion_error,
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10737 doc: /*
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10738 Error status of the last code conversion.
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10739
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10740 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
10741 is set to one of the following symbols.
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10742 `insufficient-source'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10743 `inconsistent-eol'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10744 `invalid-source'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10745 `interrupted'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10746 `insufficient-memory'
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10747 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
10748 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
10749 explicitly set this variable to nil before performing code
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10750 conversion. */);
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10751 Vlast_code_conversion_error = Qnil;
9bfefb13fe83 (Qinsufficient_source, Qinconsistent_eol)
Kenichi Handa <handa@m17n.org>
parents: 89676
diff changeset
10752
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
10753 DEFVAR_BOOL ("inhibit-eol-conversion", &inhibit_eol_conversion,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10754 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10755 *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
10756 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
10757 such conversion. */);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
10758 inhibit_eol_conversion = 0;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
10759
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
10760 DEFVAR_BOOL ("inherit-process-coding-system", &inherit_process_coding_system,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10761 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10762 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
10763 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
10764 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
10765 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
10766
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10767 DEFVAR_LISP ("file-coding-system-alist", &Vfile_coding_system_alist,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10768 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10769 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
10770 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
10771 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
10772 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
10773 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
10774 the file contents.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10775 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
10776 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
10777 If VAL is a function symbol, the function must return a coding system
72323
af796bc81ff0 (syms_of_coding): Improve the docstring
Kenichi Handa <handa@m17n.org>
parents: 72188
diff changeset
10778 or a cons of coding systems which are used as above. The function is
af796bc81ff0 (syms_of_coding): Improve the docstring
Kenichi Handa <handa@m17n.org>
parents: 72188
diff changeset
10779 called with an argument that is a list of the arguments with which
81611
ae42ad5f89e6 (Ffind_operation_coding_system): Docstring improved.
Kenichi Handa <handa@m17n.org>
parents: 75348
diff changeset
10780 `find-operation-coding-system' was called. If the function can't decide
ae42ad5f89e6 (Ffind_operation_coding_system): Docstring improved.
Kenichi Handa <handa@m17n.org>
parents: 75348
diff changeset
10781 a coding system, it can return `undecided' so that the normal
ae42ad5f89e6 (Ffind_operation_coding_system): Docstring improved.
Kenichi Handa <handa@m17n.org>
parents: 75348
diff changeset
10782 code-detection is performed.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10783
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10784 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
10785 and the variable `auto-coding-alist'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10786 Vfile_coding_system_alist = Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10787
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10788 DEFVAR_LISP ("process-coding-system-alist", &Vprocess_coding_system_alist,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10789 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10790 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
10791 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
10792 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
10793 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
10794 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
10795 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
10796 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
10797 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
10798 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
10799 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
10800
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10801 See also the function `find-operation-coding-system'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10802 Vprocess_coding_system_alist = Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10803
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10804 DEFVAR_LISP ("network-coding-system-alist", &Vnetwork_coding_system_alist,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10805 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10806 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
10807 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
10808 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
10809 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
10810 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
10811 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
10812 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
10813 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
10814 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
10815 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
10816 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
10817
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10818 See also the function `find-operation-coding-system'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10819 Vnetwork_coding_system_alist = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10820
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
10821 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
10822 doc: /* Coding system to use with system messages.
6f20449b7e12 (syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 41006
diff changeset
10823 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
10824 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
10825
29182
1d1c27067af4 (encode_eol): Add null statement after label.
Dave Love <fx@gnu.org>
parents: 29172
diff changeset
10826 /* 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
10827 DEFVAR_LISP ("eol-mnemonic-unix", &eol_mnemonic_unix,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10828 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10829 *String displayed in mode line for UNIX-like (LF) end-of-line format. */);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10830 eol_mnemonic_unix = make_pure_c_string (":");
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
10831
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
10832 DEFVAR_LISP ("eol-mnemonic-dos", &eol_mnemonic_dos,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10833 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10834 *String displayed in mode line for DOS-like (CRLF) end-of-line format. */);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10835 eol_mnemonic_dos = make_pure_c_string ("\\");
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
10836
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
10837 DEFVAR_LISP ("eol-mnemonic-mac", &eol_mnemonic_mac,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10838 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10839 *String displayed in mode line for MAC-like (CR) end-of-line format. */);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10840 eol_mnemonic_mac = make_pure_c_string ("/");
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
10841
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
10842 DEFVAR_LISP ("eol-mnemonic-undecided", &eol_mnemonic_undecided,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10843 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10844 *String displayed in mode line when end-of-line format is not yet determined. */);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10845 eol_mnemonic_undecided = make_pure_c_string (":");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10846
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
10847 DEFVAR_LISP ("enable-character-translation", &Venable_character_translation,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10848 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10849 *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
10850 Venable_character_translation = Qt;
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
10851
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
10852 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
10853 &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
10854 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
10855 Vstandard_translation_table_for_decode = Qnil;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
10856
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
10857 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
10858 &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
10859 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
10860 Vstandard_translation_table_for_encode = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
10861
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10862 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
10863 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
10864 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
10865 designate it with the escape sequence identifying revision (cdr part
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10866 of the element). */);
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10867 Vcharset_revision_table = Qnil;
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10868
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10869 DEFVAR_LISP ("default-process-coding-system",
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
10870 &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
10871 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
10872 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
10873 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
10874 Vdefault_process_coding_system = Qnil;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
10875
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
10876 DEFVAR_LISP ("latin-extra-code-table", &Vlatin_extra_code_table,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10877 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10878 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
10879 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
10880 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
10881 \(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
10882 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
10883 `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
10884 or reading output of a subprocess.
95356
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
10885 Only 128th through 159th elements have a meaning. */);
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
10886 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
10887
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10888 DEFVAR_LISP ("select-safe-coding-system-function",
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10889 &Vselect_safe_coding_system_function,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10890 doc: /*
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10891 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
10892
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10893 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
10894 coding system which can encode the text in the case that a default
87778
0ec6f8d26078 (select-safe-coding-system-function): Doc fix.
Glenn Morris <rgm@gnu.org>
parents: 87710
diff changeset
10895 coding system used in each operation can't encode the text. The
0ec6f8d26078 (select-safe-coding-system-function): Doc fix.
Glenn Morris <rgm@gnu.org>
parents: 87710
diff changeset
10896 function should take care that the buffer is not modified while
0ec6f8d26078 (select-safe-coding-system-function): Doc fix.
Glenn Morris <rgm@gnu.org>
parents: 87710
diff changeset
10897 the coding system is being selected.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10898
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10899 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
10900 Vselect_safe_coding_system_function = Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
10901
48874
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
10902 DEFVAR_BOOL ("coding-system-require-warning",
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
10903 &coding_system_require_warning,
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
10904 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
10905 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
10906 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
10907 `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
10908 coding_system_require_warning = 0;
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
10909
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
10910
30292
14a9937df1f5 (syms_of_coding): Fix typo in spelling of variable
Gerd Moellmann <gerd@gnu.org>
parents: 30263
diff changeset
10911 DEFVAR_BOOL ("inhibit-iso-escape-detection",
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
10912 &inhibit_iso_escape_detection,
88365
d29ddd7d50f9 Completely re-written.
Kenichi Handa <handa@m17n.org>
parents: 43041
diff changeset
10913 doc: /*
101040
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10914 If non-nil, Emacs ignores ISO-2022 escape sequences during code detection.
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10915
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10916 When Emacs reads text, it tries to detect how the text is encoded.
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10917 This code detection is sensitive to escape sequences. If Emacs sees
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10918 a valid ISO-2022 escape sequence, it assumes the text is encoded in one
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10919 of the ISO2022 encodings, and decodes text by the corresponding coding
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10920 system (e.g. `iso-2022-7bit').
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10921
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10922 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
10923 a file as is. In such a case, you can set this variable to non-nil.
101040
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10924 Then the code detection will ignore any escape sequences, and no text is
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10925 detected as encoded in some ISO-2022 encoding. The result is that all
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10926 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
10927
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10928 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
10929 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
10930 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
10931 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
10932 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
10933
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10934 The other way to read escape sequences in a file without decoding is
101040
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10935 to explicitly specify some coding system that doesn't use ISO-2022
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
10936 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
10937 inhibit_iso_escape_detection = 0;
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
10938
101040
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10939 DEFVAR_BOOL ("inhibit-null-byte-detection",
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10940 &inhibit_null_byte_detection,
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10941 doc: /* If non-nil, Emacs ignores null bytes on code detection.
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10942 By default, Emacs treats it as binary data, and does not attempt to
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10943 decode it. The effect is as if you specified `no-conversion' for
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10944 reading that text.
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10945
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10946 Set this to non-nil when a regular text happens to include null bytes.
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10947 Examples are Index nodes of Info files and null-byte delimited output
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10948 from GNU Find and GNU Grep. Emacs will then ignore the null bytes and
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10949 decode text as usual. */);
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10950 inhibit_null_byte_detection = 0;
92b6c5b767f8 Fix Bug #876:
Eli Zaretskii <eliz@gnu.org>
parents: 100951
diff changeset
10951
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
10952 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
10953 doc: /* Char table for translating self-inserting characters.
95356
90b4a0dc21cc (Fdecode_coding_region, Fencode_coding_region, Fencode_coding_string):
Juanma Barranquero <lekktu@gmail.com>
parents: 95353
diff changeset
10954 This is applied to the result of input methods, not their input.
101854
7e576fc18303 (syms_of_coding) <translation-table-for-input>: Modify doc string to
Eli Zaretskii <eliz@gnu.org>
parents: 101776
diff changeset
10955 See also `keyboard-translate-table'.
7e576fc18303 (syms_of_coding) <translation-table-for-input>: Modify doc string to
Eli Zaretskii <eliz@gnu.org>
parents: 101776
diff changeset
10956
7e576fc18303 (syms_of_coding) <translation-table-for-input>: Modify doc string to
Eli Zaretskii <eliz@gnu.org>
parents: 101776
diff changeset
10957 Use of this variable for character code unification was rendered
7e576fc18303 (syms_of_coding) <translation-table-for-input>: Modify doc string to
Eli Zaretskii <eliz@gnu.org>
parents: 101776
diff changeset
10958 obsolete in Emacs 23.1 and later, since Unicode is now the basis of
7e576fc18303 (syms_of_coding) <translation-table-for-input>: Modify doc string to
Eli Zaretskii <eliz@gnu.org>
parents: 101776
diff changeset
10959 internal character representation. */);
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
10960 Vtranslation_table_for_input = Qnil;
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10961
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10962 {
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10963 Lisp_Object args[coding_arg_max];
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10964 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
10965 int i;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10966
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10967 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
10968 args[i] = Qnil;
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10969
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10970 plist[0] = intern_c_string (":name");
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10971 plist[1] = args[coding_arg_name] = Qno_conversion;
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10972 plist[2] = intern_c_string (":mnemonic");
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10973 plist[3] = args[coding_arg_mnemonic] = make_number ('=');
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10974 plist[4] = intern_c_string (":coding-type");
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10975 plist[5] = args[coding_arg_coding_type] = Qraw_text;
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10976 plist[6] = intern_c_string (":ascii-compatible-p");
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10977 plist[7] = args[coding_arg_ascii_compatible_p] = Qt;
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10978 plist[8] = intern_c_string (":default-char");
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10979 plist[9] = args[coding_arg_default_char] = make_number (0);
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10980 plist[10] = intern_c_string (":for-unibyte");
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10981 plist[11] = args[coding_arg_for_unibyte] = Qt;
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10982 plist[12] = intern_c_string (":docstring");
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10983 plist[13] = make_pure_c_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
10984 \n\
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
10985 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
10986 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
10987 character.");
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10988 plist[14] = intern_c_string (":eol-type");
89483
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10989 plist[15] = args[coding_arg_eol_type] = Qunix;
2f877ed80fa6 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 88123 89481
diff changeset
10990 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
10991 Fdefine_coding_system_internal (coding_arg_max, args);
90011
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
10992
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
10993 plist[1] = args[coding_arg_name] = Qundecided;
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
10994 plist[3] = args[coding_arg_mnemonic] = make_number ('-');
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
10995 plist[5] = args[coding_arg_coding_type] = Qundecided;
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
10996 /* This is already set.
90214
460ee00505d5 (QCascii_compatible_p): New variable.
Kenichi Handa <handa@m17n.org>
parents: 90201
diff changeset
10997 plist[7] = args[coding_arg_ascii_compatible_p] = Qt; */
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
10998 plist[8] = intern_c_string (":charset-list");
90011
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
10999 plist[9] = args[coding_arg_charset_list] = Fcons (Qascii, Qnil);
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
11000 plist[11] = args[coding_arg_for_unibyte] = Qnil;
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
11001 plist[13] = make_pure_c_string ("No conversion on encoding, automatic conversion on decoding.");
90011
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
11002 plist[15] = args[coding_arg_eol_type] = Qnil;
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
11003 args[coding_arg_plist] = Flist (16, plist);
26cef35a1562 (setup_coding_system): If coding_system is nil, use
Kenichi Handa <handa@m17n.org>
parents: 89976
diff changeset
11004 Fdefine_coding_system_internal (coding_arg_max, args);
88456
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
11005 }
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
11006
a7b309f72920 (coding_alloc_by_making_gap): Check the case that the
Kenichi Handa <handa@m17n.org>
parents: 88443
diff changeset
11007 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
11008
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
11009 {
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
11010 int i;
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
11011
e911ca706166 (Fset_coding_system_priority): Doc fix. Update values
Kenichi Handa <handa@m17n.org>
parents: 89462
diff changeset
11012 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
11013 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
11014 }
90394
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
11015 #if defined (MSDOS) || defined (WINDOWSNT)
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
11016 system_eol_type = Qdos;
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
11017 #else
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
11018 system_eol_type = Qunix;
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
11019 #endif
263867fe7b55 (system_eol_type): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90380
diff changeset
11020 staticpro (&system_eol_type);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11021 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11022
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11023 char *
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11024 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
11025 int error_number;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11026 {
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11027 char *str;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11028
26526
b7438760079b * callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents: 26240
diff changeset
11029 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
11030 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
11031
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11032 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
11033 {
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11034 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
11035 Vlocale_coding_system,
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11036 0);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
11037 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
11038 }
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11039
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11040 return str;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11041 }
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
11042
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
11043 #endif /* emacs */
29184
446621f88d68 Fix junk from last checkin.
Dave Love <fx@gnu.org>
parents: 29182
diff changeset
11044
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52354
diff changeset
11045 /* arch-tag: 3a3a2b01-5ff6-4071-9afe-f5b808d9229d
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52354
diff changeset
11046 (do not change this comment) */