annotate src/coding.c @ 58195:c12b583f54b9

Fixed these problems: ** Clicking on partially visible lines fails From: David Kastrup <dak@gnu.org> Date: 27 Apr 2004 16:42:58 +0200 I had gnus display a mouse-highlighted line (a URL from browse-url) partially at the bottom of its window. If I click with middle mouse key on it, the window gets recentered while I hold the mouse key pressed. If I release it, the window returns into its old position (cursor in top row) and nothing happens, presumably because the click was not registered on the line itself, but on the magically recentered version. That is a nuisance. Recentering of even partially visible click targets should only happen if window-point moves there, but not at the time of the click. From the moment I hold down a key until it gets released, the displayed window portion should not change, with the sole exception of scrolling when dragging at the edge of the screen. (progn (setq line-spacing 4) (dotimes (i (window-height)) (insert "\n" (int-to-string i))) (forward-line -2) (recenter -1)) ** Can't drag modeline when mouse-autoselect-window is set From: Klaus Zeitler <kzeitler@lucent.com> Date: Mon, 11 Oct 2004 11:14:49 +0200 1. start emacs -q --no-site-file 2. set variable mouse-autoselect-window to t 3. split-window-vertically now I can drag the modeline only upwards but not downwards
author Kim F. Storm <storm@cua.dk>
date Sat, 13 Nov 2004 01:40:36 +0000
parents 9093a2e9c3fd
children ffc46016071f f70dc61a797f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1 /* Coding system handler (conversion, detection, and etc).
51231
b020f1a52615 (find_safe_codings): Remove unused var `i'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51186
diff changeset
2 Copyright (C) 1995,97,1998,2002,2003 Electrotechnical Laboratory, JAPAN.
18269
888bfd80db2c Change copyright notices.
Richard M. Stallman <rms@gnu.org>
parents: 18180
diff changeset
3 Licensed to the Free Software Foundation.
51186
e610d367508d (find_safe_codings): Fix last change.
Andreas Schwab <schwab@suse.de>
parents: 51140
diff changeset
4 Copyright (C) 2001,2002,2003 Free Software Foundation, Inc.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
5
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
6 This file is part of GNU Emacs.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
7
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
8 GNU Emacs is free software; you can redistribute it and/or modify
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
9 it under the terms of the GNU General Public License as published by
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
10 the Free Software Foundation; either version 2, or (at your option)
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
11 any later version.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
12
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
13 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
14 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
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
16 GNU General Public License for more details.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
17
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
18 You should have received a copy of the GNU General Public License
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
19 along with GNU Emacs; see the file COPYING. If not, write to
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
21 Boston, MA 02111-1307, USA. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
22
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
23 /*** TABLE OF CONTENTS ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
24
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
25 0. General comments
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
26 1. Preamble
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
27 2. Emacs' internal format (emacs-mule) handlers
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
28 3. ISO2022 handlers
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
29 4. Shift-JIS and BIG5 handlers
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
30 5. CCL handlers
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
31 6. End-of-line handlers
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
32 7. C library functions
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
33 8. Emacs Lisp library functions
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
34 9. Post-amble
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
35
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
36 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
37
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
38 /*** 0. General comments ***/
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
39
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
40
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
41 /*** GENERAL NOTE on CODING SYSTEMS ***
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
42
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
43 A coding system is an encoding mechanism for one or more character
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
44 sets. Here's a list of coding systems which Emacs can handle. When
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
45 we say "decode", it means converting some other coding system to
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
46 Emacs' internal format (emacs-mule), and when we say "encode",
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
47 it means converting the coding system emacs-mule to some other
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
48 coding system.
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
49
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
50 0. Emacs' internal format (emacs-mule)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
51
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
52 Emacs itself holds a multi-lingual character in buffers and strings
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
53 in a special format. Details are described in section 2.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
54
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
55 1. ISO2022
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
56
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
57 The most famous coding system for multiple character sets. X's
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
58 Compound Text, various EUCs (Extended Unix Code), and coding
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
59 systems used in Internet communication such as ISO-2022-JP are
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
60 all variants of ISO2022. Details are described in section 3.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
61
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
62 2. 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
63
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
64 A coding system to encode character sets: ASCII, JISX0201, and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
65 JISX0208. Widely used for PC's in Japan. Details are described in
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
66 section 4.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
67
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
68 3. BIG5
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
69
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
70 A coding system to encode the character sets ASCII and Big5. Widely
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
71 used for Chinese (mainly in Taiwan and Hong Kong). Details are
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
72 described in section 4. In this file, when we write "BIG5"
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
73 (all uppercase), we mean the coding system, and when we write
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
74 "Big5" (capitalized), we mean the character set.
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
75
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
76 4. Raw text
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
77
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
78 A coding system for text containing random 8-bit code. Emacs does
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
79 no code conversion on such text except for end-of-line format.
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
80
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
81 5. Other
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
82
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
83 If a user wants to read/write text encoded in a coding system not
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
84 listed above, he can supply a decoder and an encoder for it as CCL
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
85 (Code Conversion Language) programs. Emacs executes the CCL program
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
86 while reading/writing.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
87
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
88 Emacs represents a coding system by a Lisp symbol that has a property
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
89 `coding-system'. But, before actually using the coding system, the
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
90 information about it is set in a structure of type `struct
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
91 coding_system' for rapid processing. See section 6 for more details.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
92
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
93 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
94
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
95 /*** GENERAL NOTES on END-OF-LINE FORMAT ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
96
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
97 How end-of-line of text is encoded depends on the operating system.
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
98 For instance, Unix's format is just one byte of `line-feed' code,
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
99 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
100 `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
101 `carriage-return'.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
102
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
103 Since text character encoding and end-of-line encoding are
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
104 independent, any coding system described above can have any
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
105 end-of-line format. So Emacs has information about end-of-line
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
106 format in each coding-system. See section 6 for more details.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
107
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
108 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
109
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
110 /*** GENERAL NOTES on `detect_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
111
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
112 These functions check if a text between SRC and SRC_END is encoded
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
113 in the coding system category XXX. Each returns an integer value in
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
114 which appropriate flag bits for the category XXX are set. The flag
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
115 bits are defined in macros CODING_CATEGORY_MASK_XXX. Below is the
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
116 template for these functions. If MULTIBYTEP is nonzero, 8-bit codes
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
117 of the range 0x80..0x9F are in multibyte form. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
118 #if 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
119 int
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
120 detect_coding_emacs_mule (src, src_end, multibytep)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
121 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
122 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
123 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
124 ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
125 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
126 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
127
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
128 /*** GENERAL NOTES on `decode_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
129
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
130 These functions decode SRC_BYTES length of unibyte text at SOURCE
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
131 encoded in CODING to Emacs' internal format. The resulting
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
132 multibyte text goes to a place pointed to by DESTINATION, the length
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
133 of which 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
134
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
135 These functions set the information about original and decoded texts
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
136 in the members `produced', `produced_char', `consumed', and
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
137 `consumed_char' of the structure *CODING. They also set the member
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
138 `result' to one of CODING_FINISH_XXX indicating how the decoding
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
139 finished.
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
140
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
141 DST_BYTES zero means that the source area and destination area are
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
142 overlapped, which means that we can produce a decoded text until it
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
143 reaches the head of the not-yet-decoded source text.
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
144
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
145 Below is a template for these functions. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
146 #if 0
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
147 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
148 decode_coding_XXX (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
149 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
150 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
151 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
152 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
153 ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
154 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
155 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
156
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
157 /*** GENERAL NOTES on `encode_coding_XXX ()' functions ***
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
158
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
159 These functions encode SRC_BYTES length text at SOURCE from Emacs'
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
160 internal multibyte format to CODING. The resulting unibyte text
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
161 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
162 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
163
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
164 These functions set the information about original and encoded texts
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
165 in the members `produced', `produced_char', `consumed', and
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
166 `consumed_char' of the structure *CODING. They also set the member
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
167 `result' to one of CODING_FINISH_XXX indicating how the encoding
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
168 finished.
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
169
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
170 DST_BYTES zero means that the source area and destination area are
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
171 overlapped, which means that we can produce encoded text until it
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
172 reaches at the head of the not-yet-encoded source text.
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
173
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
174 Below is a template for these functions. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
175 #if 0
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
176 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
177 encode_coding_XXX (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
178 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
179 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
180 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
181 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
182 ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
183 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
184 #endif
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
185
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
186 /*** COMMONLY USED MACROS ***/
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
187
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
188 /* The following two macros ONE_MORE_BYTE and TWO_MORE_BYTES safely
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
189 get one, two, and three bytes from the source text respectively.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
190 If there are not enough bytes in the source, they jump to
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
191 `label_end_of_loop'. The caller should set variables `coding',
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
192 `src' and `src_end' to appropriate pointer in advance. These
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
193 macros are called from decoding routines `decode_coding_XXX', thus
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
194 it is assumed that the source text is unibyte. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
195
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
196 #define ONE_MORE_BYTE(c1) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
197 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
198 if (src >= src_end) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
199 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
200 coding->result = CODING_FINISH_INSUFFICIENT_SRC; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
201 goto label_end_of_loop; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
202 } \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
203 c1 = *src++; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
204 } while (0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
205
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
206 #define TWO_MORE_BYTES(c1, c2) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
207 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
208 if (src + 1 >= src_end) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
209 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
210 coding->result = CODING_FINISH_INSUFFICIENT_SRC; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
211 goto label_end_of_loop; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
212 } \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
213 c1 = *src++; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
214 c2 = *src++; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
215 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
216
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
217
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
218 /* Like ONE_MORE_BYTE, but 8-bit bytes of data at SRC are in multibyte
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
219 form if MULTIBYTEP is nonzero. */
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
220
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
221 #define ONE_MORE_BYTE_CHECK_MULTIBYTE(c1, multibytep) \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
222 do { \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
223 if (src >= src_end) \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
224 { \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
225 coding->result = CODING_FINISH_INSUFFICIENT_SRC; \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
226 goto label_end_of_loop; \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
227 } \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
228 c1 = *src++; \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
229 if (multibytep && c1 == LEADING_CODE_8_BIT_CONTROL) \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
230 c1 = *src++ - 0x20; \
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
231 } while (0)
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
232
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
233 /* Set C to the next character at the source text pointed by `src'.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
234 If there are not enough characters in the source, jump to
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
235 `label_end_of_loop'. The caller should set variables `coding'
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
236 `src', `src_end', and `translation_table' to appropriate pointers
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
237 in advance. This macro is used in encoding routines
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
238 `encode_coding_XXX', thus it assumes that the source text is in
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
239 multibyte form except for 8-bit characters. 8-bit characters are
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
240 in multibyte form if coding->src_multibyte is nonzero, else they
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
241 are represented by a single byte. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
242
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
243 #define ONE_MORE_CHAR(c) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
244 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
245 int len = src_end - src; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
246 int bytes; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
247 if (len <= 0) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
248 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
249 coding->result = CODING_FINISH_INSUFFICIENT_SRC; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
250 goto label_end_of_loop; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
251 } \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
252 if (coding->src_multibyte \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
253 || UNIBYTE_STR_AS_MULTIBYTE_P (src, len, bytes)) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
254 c = STRING_CHAR_AND_LENGTH (src, len, bytes); \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
255 else \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
256 c = *src, bytes = 1; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
257 if (!NILP (translation_table)) \
31455
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
258 c = translate_char (translation_table, c, -1, 0, 0); \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
259 src += bytes; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
260 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
261
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
262
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
263 /* Produce a multibyte form of character C to `dst'. Jump to
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
264 `label_end_of_loop' if there's not enough space at `dst'.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
265
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
266 If we are now in the middle of a composition sequence, the decoded
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
267 character may be ALTCHAR (for the current composition). In that
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
268 case, the character goes to coding->cmp_data->data instead of
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
269 `dst'.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
270
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
271 This macro is used in decoding routines. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
272
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
273 #define EMIT_CHAR(c) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
274 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
275 if (! COMPOSING_P (coding) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
276 || coding->composing == COMPOSITION_RELATIVE \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
277 || coding->composing == COMPOSITION_WITH_RULE) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
278 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
279 int bytes = CHAR_BYTES (c); \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
280 if ((dst + bytes) > (dst_bytes ? dst_end : src)) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
281 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
282 coding->result = CODING_FINISH_INSUFFICIENT_DST; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
283 goto label_end_of_loop; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
284 } \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
285 dst += CHAR_STRING (c, dst); \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
286 coding->produced_char++; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
287 } \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
288 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
289 if (COMPOSING_P (coding) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
290 && coding->composing != COMPOSITION_RELATIVE) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
291 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
292 CODING_ADD_COMPOSITION_COMPONENT (coding, c); \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
293 coding->composition_rule_follows \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
294 = coding->composing != COMPOSITION_WITH_ALTCHARS; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
295 } \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
296 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
297
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
298
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
299 #define EMIT_ONE_BYTE(c) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
300 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
301 if (dst >= (dst_bytes ? dst_end : src)) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
302 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
303 coding->result = CODING_FINISH_INSUFFICIENT_DST; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
304 goto label_end_of_loop; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
305 } \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
306 *dst++ = c; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
307 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
308
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
309 #define 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
310 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
311 if (dst + 2 > (dst_bytes ? dst_end : src)) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
312 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
313 coding->result = CODING_FINISH_INSUFFICIENT_DST; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
314 goto label_end_of_loop; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
315 } \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
316 *dst++ = c1, *dst++ = c2; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
317 } while (0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
318
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
319 #define EMIT_BYTES(from, to) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
320 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
321 if (dst + (to - from) > (dst_bytes ? dst_end : src)) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
322 { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
323 coding->result = CODING_FINISH_INSUFFICIENT_DST; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
324 goto label_end_of_loop; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
325 } \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
326 while (from < to) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
327 *dst++ = *from++; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
328 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
329
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
330
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
331 /*** 1. Preamble ***/
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
332
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
333 #ifdef emacs
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
334 #include <config.h>
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
335 #endif
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
336
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
337 #include <stdio.h>
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
338
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
339 #ifdef emacs
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
340
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
341 #include "lisp.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
342 #include "buffer.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
343 #include "charset.h"
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
344 #include "composite.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
345 #include "ccl.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
346 #include "coding.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
347 #include "window.h"
51855
1d29dcb76e2b Include intervals.h for Fset_text_properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51842
diff changeset
348 #include "intervals.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
349
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
350 #else /* not emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
351
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
352 #include "mulelib.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
353
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
354 #endif /* not emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
355
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
356 Lisp_Object Qcoding_system, Qeol_type;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
357 Lisp_Object Qbuffer_file_coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
358 Lisp_Object Qpost_read_conversion, Qpre_write_conversion;
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
359 Lisp_Object Qno_conversion, Qundecided;
19750
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
360 Lisp_Object Qcoding_system_history;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
361 Lisp_Object Qsafe_chars;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
362 Lisp_Object Qvalid_codes;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
363
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
364 extern Lisp_Object Qinsert_file_contents, Qwrite_region;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
365 Lisp_Object Qcall_process, Qcall_process_region, Qprocess_argument;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
366 Lisp_Object Qstart_process, Qopen_network_stream;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
367 Lisp_Object Qtarget_idx;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
368
52794
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
369 /* 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
370 symbol as a coding system. */
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
371 Lisp_Object Qcoding_system_define_form;
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
372
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
373 Lisp_Object Vselect_safe_coding_system_function;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
374
48874
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
375 int coding_system_require_warning;
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
376
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
377 /* 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
378 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
379 /* Mnemonic string to indicate format of end-of-line is not yet
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
380 decided. */
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
381 Lisp_Object eol_mnemonic_undecided;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
382
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
383 /* Format of end-of-line decided by system. This is CODING_EOL_LF on
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
384 Unix, CODING_EOL_CRLF on DOS/Windows, and CODING_EOL_CR on Mac. */
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
385 int system_eol_type;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
386
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
387 #ifdef emacs
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
388
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
389 /* Information about which coding system is safe for which chars.
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
390 The value has the form (GENERIC-LIST . NON-GENERIC-ALIST).
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
391
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
392 GENERIC-LIST is a list of generic coding systems which can encode
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
393 any characters.
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
394
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
395 NON-GENERIC-ALIST is an alist of non generic coding systems vs the
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
396 corresponding char table that contains safe chars. */
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
397 Lisp_Object Vcoding_system_safe_chars;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
398
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
399 Lisp_Object Vcoding_system_list, Vcoding_system_alist;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
400
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
401 Lisp_Object Qcoding_system_p, Qcoding_system_error;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
402
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
403 /* 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
404 end-of-line format. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
405 Lisp_Object Qemacs_mule, Qraw_text;
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
406
51406
3c675181c3d8 (Qutf_8): New.
Dave Love <fx@gnu.org>
parents: 51356
diff changeset
407 Lisp_Object Qutf_8;
3c675181c3d8 (Qutf_8): New.
Dave Love <fx@gnu.org>
parents: 51356
diff changeset
408
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
409 /* Coding-systems are handed between Emacs Lisp programs and C internal
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
410 routines by the following three variables. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
411 /* Coding-system for reading files and receiving data from process. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
412 Lisp_Object Vcoding_system_for_read;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
413 /* Coding-system for writing files and sending data to process. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
414 Lisp_Object Vcoding_system_for_write;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
415 /* Coding-system actually used in the latest I/O. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
416 Lisp_Object Vlast_coding_system_used;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
417
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
418 /* A vector of length 256 which contains information about special
22529
d9eac134a41b Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22502
diff changeset
419 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
420 Lisp_Object Vlatin_extra_code_table;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
421
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
422 /* 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
423 int inhibit_eol_conversion;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
424
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
425 /* Flag to inhibit ISO2022 escape sequence detection. */
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
426 int inhibit_iso_escape_detection;
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
427
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
428 /* 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
429 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
430
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
431 /* Coding system to be used to encode text for terminal display. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
432 struct coding_system terminal_coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
433
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
434 /* 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
435 terminal coding system is nil. */
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
436 struct coding_system safe_terminal_coding;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
437
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
438 /* Coding system of what is sent from terminal keyboard. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
439 struct coding_system keyboard_coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
440
22979
ceb8e4a89a32 (default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22964
diff changeset
441 /* Default coding system to be used to write a file. */
ceb8e4a89a32 (default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22964
diff changeset
442 struct coding_system default_buffer_file_coding;
ceb8e4a89a32 (default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22964
diff changeset
443
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
444 Lisp_Object Vfile_coding_system_alist;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
445 Lisp_Object Vprocess_coding_system_alist;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
446 Lisp_Object Vnetwork_coding_system_alist;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
447
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
448 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
449
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
450 #endif /* emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
451
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
452 Lisp_Object Qcoding_category, Qcoding_category_index;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
453
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
454 /* List of symbols `coding-category-xxx' ordered by priority. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
455 Lisp_Object Vcoding_category_list;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
456
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
457 /* Table of coding categories (Lisp symbols). */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
458 Lisp_Object Vcoding_category_table;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
459
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
460 /* Table of names of symbol for each coding-category. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
461 char *coding_category_name[CODING_CATEGORY_IDX_MAX] = {
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
462 "coding-category-emacs-mule",
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
463 "coding-category-sjis",
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
464 "coding-category-iso-7",
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
465 "coding-category-iso-7-tight",
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
466 "coding-category-iso-8-1",
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
467 "coding-category-iso-8-2",
18787
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
468 "coding-category-iso-7-else",
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
469 "coding-category-iso-8-else",
23027
0dc823b2335f (coding_category_name): Fix the order of initial
Kenichi Handa <handa@m17n.org>
parents: 22979
diff changeset
470 "coding-category-ccl",
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
471 "coding-category-big5",
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
472 "coding-category-utf-8",
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
473 "coding-category-utf-16-be",
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
474 "coding-category-utf-16-le",
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
475 "coding-category-raw-text",
23027
0dc823b2335f (coding_category_name): Fix the order of initial
Kenichi Handa <handa@m17n.org>
parents: 22979
diff changeset
476 "coding-category-binary"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
477 };
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
478
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
479 /* Table of pointers to coding systems corresponding to each coding
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
480 categories. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
481 struct coding_system *coding_system_table[CODING_CATEGORY_IDX_MAX];
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
482
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
483 /* Table of coding category masks. Nth element is a mask for a coding
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
484 category of which priority is Nth. */
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
485 static
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
486 int coding_priorities[CODING_CATEGORY_IDX_MAX];
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
487
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
488 /* 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
489 conversion. */
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
490 Lisp_Object Venable_character_translation;
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
491 /* 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
492 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
493 /* 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
494 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
495
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
496 Lisp_Object Qtranslation_table;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
497 Lisp_Object Qtranslation_table_id;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
498 Lisp_Object Qtranslation_table_for_decode;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
499 Lisp_Object Qtranslation_table_for_encode;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
500
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
501 /* Alist of charsets vs revision number. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
502 Lisp_Object Vcharset_revision_alist;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
503
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
504 /* Default coding systems used for process I/O. */
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
505 Lisp_Object Vdefault_process_coding_system;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
506
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
507 /* 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
508 Lisp_Object Vtranslation_table_for_input;
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
509
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
510 /* Global flag to tell that we can't call post-read-conversion and
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
511 pre-write-conversion functions. Usually the value is zero, but it
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
512 is set to 1 temporarily while such functions are running. This is
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
513 to avoid infinite recursive call. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
514 static int inhibit_pre_post_conversion;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
515
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
516 Lisp_Object Qchar_coding_system;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
517
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
518 /* Return `safe-chars' property of CODING_SYSTEM (symbol). Don't check
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
519 its validity. */
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
520
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
521 Lisp_Object
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
522 coding_safe_chars (coding_system)
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
523 Lisp_Object coding_system;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
524 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
525 Lisp_Object coding_spec, plist, safe_chars;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
526
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
527 coding_spec = Fget (coding_system, Qcoding_system);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
528 plist = XVECTOR (coding_spec)->contents[3];
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
529 safe_chars = Fplist_get (XVECTOR (coding_spec)->contents[3], Qsafe_chars);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
530 return (CHAR_TABLE_P (safe_chars) ? safe_chars : Qt);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
531 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
532
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
533 #define CODING_SAFE_CHAR_P(safe_chars, c) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
534 (EQ (safe_chars, Qt) || !NILP (CHAR_TABLE_REF (safe_chars, c)))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
535
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
536
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
537 /*** 2. Emacs internal format (emacs-mule) handlers ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
538
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
539 /* Emacs' internal format for representation of multiple character
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
540 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
541 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
542
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
543 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
544 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
545 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
546
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
547 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
548 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
549 code + 0x20).
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
550
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
551 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
552 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
553
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
554 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
555 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
556 `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
557 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
558 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
559 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
560 and position-code.
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
561
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
562 --- 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
563 character set range
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
564 ------------- -----
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
565 ascii 0x00..0x7F
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
566 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
567 eight-bit-graphic 0xA0..0xBF
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
568 ELSE 0x81..0x9D + [0xA0..0xFF]+
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
569 ---------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
570
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
571 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
572 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
573 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
574 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
575
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
576 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
577 form.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
578
37231
8a086ca42e43 comment
Dave Love <fx@gnu.org>
parents: 36650
diff changeset
579 Firstly, 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
580 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
581
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
582 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
583 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
584 where,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
585 METHOD is 0xF0 plus one of composition method (enum
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
586 composition_method),
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
587
37231
8a086ca42e43 comment
Dave Love <fx@gnu.org>
parents: 36650
diff changeset
588 BYTES is 0xA0 plus the byte length of these composition data,
8a086ca42e43 comment
Dave Love <fx@gnu.org>
parents: 36650
diff changeset
589
8a086ca42e43 comment
Dave Love <fx@gnu.org>
parents: 36650
diff changeset
590 CHARS is 0xA0 plus the number of characters composed by these
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
591 data,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
592
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
593 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
594 rules encoded by two-byte of ASCII codes.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
595
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
596 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
597 also recognized as composition data on decoding.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
598
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
599 0x80 MSEQ ...
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
600 0x80 0xFF MSEQ RULE MSEQ RULE ... MSEQ
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
601
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
602 Here,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
603 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
604 ASCII: 0xA0 ASCII_CODE+0x80,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
605 other: LEADING_CODE+0x20 FOLLOWING-BYTE ...,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
606 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
607 represents a composition rule.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
608 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
609
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
610 enum emacs_code_class_type emacs_code_class[256];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
611
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
612 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
613 Check if a text is encoded in Emacs' internal format. If it is,
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
614 return CODING_CATEGORY_MASK_EMACS_MULE, else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
615
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
616 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
617 detect_coding_emacs_mule (src, src_end, multibytep)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
618 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
619 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
620 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
621 unsigned char c;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
622 int composing = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
623 /* Dummy for ONE_MORE_BYTE. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
624 struct coding_system dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
625 struct coding_system *coding = &dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
626
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
627 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
628 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
629 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
630
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
631 if (composing)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
632 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
633 if (c < 0xA0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
634 composing = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
635 else if (c == 0xA0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
636 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
637 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
638 c &= 0x7F;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
639 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
640 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
641 c -= 0x20;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
642 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
643
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
644 if (c < 0x20)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
645 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
646 if (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
647 return 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
648 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
649 else if (c >= 0x80 && c < 0xA0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
650 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
651 if (c == 0x80)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
652 /* Old leading code for a composite character. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
653 composing = 1;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
654 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
655 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
656 unsigned char *src_base = src - 1;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
657 int bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
658
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
659 if (!UNIBYTE_STR_AS_MULTIBYTE_P (src_base, src_end - src_base,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
660 bytes))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
661 return 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
662 src = src_base + bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
663 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
664 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
665 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
666 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
667 return CODING_CATEGORY_MASK_EMACS_MULE;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
668 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
669
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
670
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
671 /* Record the starting position START and METHOD of one composition. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
672
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
673 #define CODING_ADD_COMPOSITION_START(coding, start, method) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
674 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
675 struct composition_data *cmp_data = coding->cmp_data; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
676 int *data = cmp_data->data + cmp_data->used; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
677 coding->cmp_data_start = cmp_data->used; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
678 data[0] = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
679 data[1] = cmp_data->char_offset + start; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
680 data[3] = (int) method; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
681 cmp_data->used += 4; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
682 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
683
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
684 /* Record the ending position END of the current composition. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
685
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
686 #define CODING_ADD_COMPOSITION_END(coding, end) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
687 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
688 struct composition_data *cmp_data = coding->cmp_data; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
689 int *data = cmp_data->data + coding->cmp_data_start; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
690 data[0] = cmp_data->used - coding->cmp_data_start; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
691 data[2] = cmp_data->char_offset + end; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
692 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
693
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
694 /* Record one COMPONENT (alternate character or composition rule). */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
695
50047
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
696 #define CODING_ADD_COMPOSITION_COMPONENT(coding, component) \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
697 do { \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
698 coding->cmp_data->data[coding->cmp_data->used++] = component; \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
699 if (coding->cmp_data->used - coding->cmp_data_start \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
700 == COMPOSITION_DATA_MAX_BUNCH_LENGTH) \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
701 { \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
702 CODING_ADD_COMPOSITION_END (coding, coding->produced_char); \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
703 coding->composing = COMPOSITION_NO; \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
704 } \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
705 } while (0)
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
706
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
707
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
708 /* Get one byte from a data pointed by SRC and increment SRC. If SRC
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
709 is not less than SRC_END, return -1 without incrementing Src. */
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
710
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
711 #define SAFE_ONE_MORE_BYTE() (src >= src_end ? -1 : *src++)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
712
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
713
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
714 /* Decode a character represented as a component of composition
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
715 sequence of Emacs 20 style at SRC. Set C to that character, store
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
716 its multibyte form sequence at P, and set P to the end of that
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
717 sequence. If no valid character is found, set C to -1. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
718
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
719 #define DECODE_EMACS_MULE_COMPOSITION_CHAR(c, p) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
720 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
721 int bytes; \
51356
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
722 \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
723 c = SAFE_ONE_MORE_BYTE (); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
724 if (c < 0) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
725 break; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
726 if (CHAR_HEAD_P (c)) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
727 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
728 else if (c == 0xA0) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
729 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
730 c = SAFE_ONE_MORE_BYTE (); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
731 if (c < 0xA0) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
732 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
733 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
734 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
735 c -= 0xA0; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
736 *p++ = c; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
737 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
738 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
739 else if (BASE_LEADING_CODE_P (c - 0x20)) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
740 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
741 unsigned char *p0 = p; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
742 \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
743 c -= 0x20; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
744 *p++ = c; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
745 bytes = BYTES_BY_CHAR_HEAD (c); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
746 while (--bytes) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
747 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
748 c = SAFE_ONE_MORE_BYTE (); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
749 if (c < 0) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
750 break; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
751 *p++ = c; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
752 } \
51356
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
753 if (UNIBYTE_STR_AS_MULTIBYTE_P (p0, p - p0, bytes) \
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
754 || (coding->flags /* We are recovering a file. */ \
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
755 && p0[0] == LEADING_CODE_8_BIT_CONTROL \
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
756 && ! CHAR_HEAD_P (p0[1]))) \
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
757 c = STRING_CHAR (p0, bytes); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
758 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
759 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
760 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
761 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
762 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
763 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
764
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
765
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
766 /* Decode a composition rule represented as a component of composition
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
767 sequence of Emacs 20 style at SRC. Set C to the rule. If not
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
768 valid rule is found, set C to -1. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
769
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
770 #define DECODE_EMACS_MULE_COMPOSITION_RULE(c) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
771 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
772 c = SAFE_ONE_MORE_BYTE (); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
773 c -= 0xA0; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
774 if (c < 0 || c >= 81) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
775 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
776 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
777 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
778 gref = c / 9, nref = c % 9; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
779 c = COMPOSITION_ENCODE_RULE (gref, nref); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
780 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
781 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
782
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
783
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
784 /* Decode composition sequence encoded by `emacs-mule' at the source
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
785 pointed by SRC. SRC_END is the end of source. Store information
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
786 of the composition in CODING->cmp_data.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
787
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
788 For backward compatibility, decode also a composition sequence of
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
789 Emacs 20 style. In that case, the composition sequence contains
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
790 characters that should be extracted into a buffer or string. Store
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
791 those characters at *DESTINATION in multibyte form.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
792
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
793 If we encounter an invalid byte sequence, return 0.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
794 If we encounter an insufficient source or destination, or
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
795 insufficient space in CODING->cmp_data, return 1.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
796 Otherwise, return consumed bytes in the source.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
797
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
798 */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
799 static INLINE int
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
800 decode_composition_emacs_mule (coding, src, src_end,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
801 destination, dst_end, dst_bytes)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
802 struct coding_system *coding;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
803 unsigned char *src, *src_end, **destination, *dst_end;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
804 int dst_bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
805 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
806 unsigned char *dst = *destination;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
807 int method, data_len, nchars;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
808 unsigned char *src_base = src++;
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
809 /* Store components of composition. */
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
810 int component[COMPOSITION_DATA_MAX_BUNCH_LENGTH];
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
811 int ncomponent;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
812 /* Store multibyte form of characters to be composed. This is for
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
813 Emacs 20 style composition sequence. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
814 unsigned char buf[MAX_COMPOSITION_COMPONENTS * MAX_MULTIBYTE_LENGTH];
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
815 unsigned char *bufp = buf;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
816 int c, i, gref, nref;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
817
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
818 if (coding->cmp_data->used + COMPOSITION_DATA_MAX_BUNCH_LENGTH
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
819 >= COMPOSITION_DATA_SIZE)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
820 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
821 coding->result = CODING_FINISH_INSUFFICIENT_CMP;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
822 return -1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
823 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
824
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
825 ONE_MORE_BYTE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
826 if (c - 0xF0 >= COMPOSITION_RELATIVE
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
827 && c - 0xF0 <= COMPOSITION_WITH_RULE_ALTCHARS)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
828 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
829 int with_rule;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
830
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
831 method = c - 0xF0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
832 with_rule = (method == COMPOSITION_WITH_RULE
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
833 || method == COMPOSITION_WITH_RULE_ALTCHARS);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
834 ONE_MORE_BYTE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
835 data_len = c - 0xA0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
836 if (data_len < 4
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
837 || src_base + data_len > src_end)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
838 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
839 ONE_MORE_BYTE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
840 nchars = c - 0xA0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
841 if (c < 1)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
842 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
843 for (ncomponent = 0; src < src_base + data_len; ncomponent++)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
844 {
43041
983767b5ccc0 (decode_composition_emacs_mule):
Richard M. Stallman <rms@gnu.org>
parents: 42661
diff changeset
845 /* If it is longer than this, it can't be valid. */
983767b5ccc0 (decode_composition_emacs_mule):
Richard M. Stallman <rms@gnu.org>
parents: 42661
diff changeset
846 if (ncomponent >= COMPOSITION_DATA_MAX_BUNCH_LENGTH)
983767b5ccc0 (decode_composition_emacs_mule):
Richard M. Stallman <rms@gnu.org>
parents: 42661
diff changeset
847 return 0;
983767b5ccc0 (decode_composition_emacs_mule):
Richard M. Stallman <rms@gnu.org>
parents: 42661
diff changeset
848
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
849 if (ncomponent % 2 && with_rule)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
850 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
851 ONE_MORE_BYTE (gref);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
852 gref -= 32;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
853 ONE_MORE_BYTE (nref);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
854 nref -= 32;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
855 c = COMPOSITION_ENCODE_RULE (gref, nref);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
856 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
857 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
858 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
859 int bytes;
51356
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
860 if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes)
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
861 || (coding->flags /* We are recovering a file. */
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
862 && src[0] == LEADING_CODE_8_BIT_CONTROL
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
863 && ! CHAR_HEAD_P (src[1])))
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
864 c = STRING_CHAR (src, bytes);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
865 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
866 c = *src, bytes = 1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
867 src += bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
868 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
869 component[ncomponent] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
870 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
871 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
872 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
873 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
874 /* This may be an old Emacs 20 style format. See the comment at
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
875 the section 2 of this file. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
876 while (src < src_end && !CHAR_HEAD_P (*src)) src++;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
877 if (src == src_end
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
878 && !(coding->mode & CODING_MODE_LAST_BLOCK))
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
879 goto label_end_of_loop;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
880
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
881 src_end = src;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
882 src = src_base + 1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
883 if (c < 0xC0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
884 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
885 method = COMPOSITION_RELATIVE;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
886 for (ncomponent = 0; ncomponent < MAX_COMPOSITION_COMPONENTS;)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
887 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
888 DECODE_EMACS_MULE_COMPOSITION_CHAR (c, bufp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
889 if (c < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
890 break;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
891 component[ncomponent++] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
892 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
893 if (ncomponent < 2)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
894 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
895 nchars = ncomponent;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
896 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
897 else if (c == 0xFF)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
898 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
899 method = COMPOSITION_WITH_RULE;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
900 src++;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
901 DECODE_EMACS_MULE_COMPOSITION_CHAR (c, bufp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
902 if (c < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
903 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
904 component[0] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
905 for (ncomponent = 1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
906 ncomponent < MAX_COMPOSITION_COMPONENTS * 2 - 1;)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
907 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
908 DECODE_EMACS_MULE_COMPOSITION_RULE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
909 if (c < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
910 break;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
911 component[ncomponent++] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
912 DECODE_EMACS_MULE_COMPOSITION_CHAR (c, bufp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
913 if (c < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
914 break;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
915 component[ncomponent++] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
916 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
917 if (ncomponent < 3)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
918 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
919 nchars = (ncomponent + 1) / 2;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
920 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
921 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
922 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
923 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
924
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
925 if (buf == bufp || dst + (bufp - buf) <= (dst_bytes ? dst_end : src))
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
926 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
927 CODING_ADD_COMPOSITION_START (coding, coding->produced_char, method);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
928 for (i = 0; i < ncomponent; i++)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
929 CODING_ADD_COMPOSITION_COMPONENT (coding, component[i]);
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
930 CODING_ADD_COMPOSITION_END (coding, coding->produced_char + nchars);
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
931 if (buf < bufp)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
932 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
933 unsigned char *p = buf;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
934 EMIT_BYTES (p, bufp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
935 *destination += bufp - buf;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
936 coding->produced_char += nchars;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
937 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
938 return (src - src_base);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
939 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
940 label_end_of_loop:
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
941 return -1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
942 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
943
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
944 /* 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
945
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
946 static void
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
947 decode_coding_emacs_mule (coding, source, destination, src_bytes, dst_bytes)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
948 struct coding_system *coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
949 unsigned char *source, *destination;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
950 int src_bytes, dst_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
951 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
952 unsigned char *src = source;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
953 unsigned char *src_end = source + src_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
954 unsigned char *dst = destination;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
955 unsigned char *dst_end = destination + dst_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
956 /* SRC_BASE remembers the start position in source in each loop.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
957 The loop will be exited when there's not enough source code, or
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
958 when there's not enough destination area to produce a
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
959 character. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
960 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
961
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
962 coding->produced_char = 0;
29663
ebf778ab6b42 (decode_coding_emacs_mule): Always set src_base at the
Kenichi Handa <handa@m17n.org>
parents: 29299
diff changeset
963 while ((src_base = src) < src_end)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
964 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
965 unsigned char tmp[MAX_MULTIBYTE_LENGTH], *p;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
966 int bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
967
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
968 if (*src == '\r')
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
969 {
33828
ef38af5ee8d2 (decode_coding_emacs_mule): Fix the case of
Eli Zaretskii <eliz@gnu.org>
parents: 32896
diff changeset
970 int c = *src++;
ef38af5ee8d2 (decode_coding_emacs_mule): Fix the case of
Eli Zaretskii <eliz@gnu.org>
parents: 32896
diff changeset
971
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
972 if (coding->eol_type == CODING_EOL_CR)
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
973 c = '\n';
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
974 else if (coding->eol_type == CODING_EOL_CRLF)
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
975 {
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
976 ONE_MORE_BYTE (c);
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
977 if (c != '\n')
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
978 {
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
979 src--;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
980 c = '\r';
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
981 }
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
982 }
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
983 *dst++ = c;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
984 coding->produced_char++;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
985 continue;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
986 }
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
987 else if (*src == '\n')
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
988 {
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
989 if ((coding->eol_type == CODING_EOL_CR
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
990 || coding->eol_type == CODING_EOL_CRLF)
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
991 && coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
992 {
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
993 coding->result = CODING_FINISH_INCONSISTENT_EOL;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
994 goto label_end_of_loop;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
995 }
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
996 *dst++ = *src++;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
997 coding->produced_char++;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
998 continue;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
999 }
47698
77511decc5ff (decode_coding_emacs_mule): Check coding->cmp_data.
Kenichi Handa <handa@m17n.org>
parents: 47632
diff changeset
1000 else if (*src == 0x80 && coding->cmp_data)
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1001 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1002 /* Start of composition data. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1003 int consumed = decode_composition_emacs_mule (coding, src, src_end,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1004 &dst, dst_end,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1005 dst_bytes);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1006 if (consumed < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1007 goto label_end_of_loop;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1008 else if (consumed > 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1009 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1010 src += consumed;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1011 continue;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1012 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1013 bytes = CHAR_STRING (*src, tmp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1014 p = tmp;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1015 src++;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1016 }
51356
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1017 else if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes)
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1018 || (coding->flags /* We are recovering a file. */
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1019 && src[0] == LEADING_CODE_8_BIT_CONTROL
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1020 && ! CHAR_HEAD_P (src[1])))
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1021 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1022 p = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1023 src += bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1024 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1025 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1026 {
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1027 int i, c;
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1028
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1029 bytes = BYTES_BY_CHAR_HEAD (*src);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1030 src++;
54320
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1031 for (i = 1; i < bytes; i++)
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1032 {
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1033 ONE_MORE_BYTE (c);
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1034 if (CHAR_HEAD_P (c))
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1035 break;
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1036 }
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1037 if (i < bytes)
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1038 {
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1039 bytes = CHAR_STRING (*src_base, tmp);
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1040 p = tmp;
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1041 src = src_base + 1;
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1042 }
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1043 else
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1044 {
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1045 p = src_base;
a7e59b39de35 (decode_coding_emacs_mule): Handle insufficent source correctly.
Kenichi Handa <handa@m17n.org>
parents: 54303
diff changeset
1046 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1047 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1048 if (dst + bytes >= (dst_bytes ? dst_end : src))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1049 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1050 coding->result = CODING_FINISH_INSUFFICIENT_DST;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1051 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1052 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1053 while (bytes--) *dst++ = *p++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1054 coding->produced_char++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1055 }
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
1056 label_end_of_loop:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1057 coding->consumed = coding->consumed_char = src_base - source;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1058 coding->produced = dst - destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1059 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1060
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1061
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1062 /* Encode composition data stored at DATA into a special byte sequence
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1063 starting by 0x80. Update CODING->cmp_data_start and maybe
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1064 CODING->cmp_data for the next call. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1065
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1066 #define ENCODE_COMPOSITION_EMACS_MULE(coding, data) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1067 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1068 unsigned char buf[1024], *p0 = buf, *p; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1069 int len = data[0]; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1070 int i; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1071 \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1072 buf[0] = 0x80; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1073 buf[1] = 0xF0 + data[3]; /* METHOD */ \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1074 buf[3] = 0xA0 + (data[2] - data[1]); /* COMPOSED-CHARS */ \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1075 p = buf + 4; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1076 if (data[3] == COMPOSITION_WITH_RULE \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1077 || data[3] == COMPOSITION_WITH_RULE_ALTCHARS) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1078 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1079 p += CHAR_STRING (data[4], p); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1080 for (i = 5; i < len; i += 2) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1081 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1082 int gref, nref; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1083 COMPOSITION_DECODE_RULE (data[i], gref, nref); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1084 *p++ = 0x20 + gref; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1085 *p++ = 0x20 + nref; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1086 p += CHAR_STRING (data[i + 1], p); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1087 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1088 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1089 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1090 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1091 for (i = 4; i < len; i++) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1092 p += CHAR_STRING (data[i], p); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1093 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1094 buf[2] = 0xA0 + (p - buf); /* COMPONENTS-BYTES */ \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1095 \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1096 if (dst + (p - buf) + 4 > (dst_bytes ? dst_end : src)) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1097 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1098 coding->result = CODING_FINISH_INSUFFICIENT_DST; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1099 goto label_end_of_loop; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1100 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1101 while (p0 < p) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1102 *dst++ = *p0++; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1103 coding->cmp_data_start += data[0]; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1104 if (coding->cmp_data_start == coding->cmp_data->used \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1105 && coding->cmp_data->next) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1106 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1107 coding->cmp_data = coding->cmp_data->next; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1108 coding->cmp_data_start = 0; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1109 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1110 } while (0)
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
1111
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1112
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
1113 static void encode_eol P_ ((struct coding_system *, const unsigned char *,
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1114 unsigned char *, int, int));
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1115
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1116 static void
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1117 encode_coding_emacs_mule (coding, source, destination, src_bytes, dst_bytes)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1118 struct coding_system *coding;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1119 unsigned char *source, *destination;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1120 int src_bytes, dst_bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1121 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1122 unsigned char *src = source;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1123 unsigned char *src_end = source + src_bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1124 unsigned char *dst = destination;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1125 unsigned char *dst_end = destination + dst_bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1126 unsigned char *src_base;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1127 int c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1128 int char_offset;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1129 int *data;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1130
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1131 Lisp_Object translation_table;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1132
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1133 translation_table = Qnil;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1134
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1135 /* Optimization for the case that there's no composition. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1136 if (!coding->cmp_data || coding->cmp_data->used == 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1137 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1138 encode_eol (coding, source, destination, src_bytes, dst_bytes);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1139 return;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1140 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1141
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1142 char_offset = coding->cmp_data->char_offset;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1143 data = coding->cmp_data->data + coding->cmp_data_start;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1144 while (1)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1145 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1146 src_base = src;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1147
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1148 /* If SRC starts a composition, encode the information about the
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1149 composition in advance. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1150 if (coding->cmp_data_start < coding->cmp_data->used
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1151 && char_offset + coding->consumed_char == data[1])
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1152 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1153 ENCODE_COMPOSITION_EMACS_MULE (coding, data);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1154 char_offset = coding->cmp_data->char_offset;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1155 data = coding->cmp_data->data + coding->cmp_data_start;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1156 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1157
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1158 ONE_MORE_CHAR (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1159 if (c == '\n' && (coding->eol_type == CODING_EOL_CRLF
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1160 || coding->eol_type == CODING_EOL_CR))
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1161 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1162 if (coding->eol_type == CODING_EOL_CRLF)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1163 EMIT_TWO_BYTES ('\r', c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1164 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1165 EMIT_ONE_BYTE ('\r');
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1166 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1167 else if (SINGLE_BYTE_CHAR_P (c))
51356
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1168 {
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1169 if (coding->flags && ! ASCII_BYTE_P (c))
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1170 {
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1171 /* As we are auto saving, retain the multibyte form for
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1172 8-bit chars. */
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1173 unsigned char buf[MAX_MULTIBYTE_LENGTH];
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1174 int bytes = CHAR_STRING (c, buf);
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1175
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1176 if (bytes == 1)
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1177 EMIT_ONE_BYTE (buf[0]);
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1178 else
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1179 EMIT_TWO_BYTES (buf[0], buf[1]);
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1180 }
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1181 else
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1182 EMIT_ONE_BYTE (c);
8da3b8a0ca4f (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
Kenichi Handa <handa@m17n.org>
parents: 51327
diff changeset
1183 }
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1184 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1185 EMIT_BYTES (src_base, src);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1186 coding->consumed_char++;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1187 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1188 label_end_of_loop:
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1189 coding->consumed = src_base - source;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1190 coding->produced = coding->produced_char = dst - destination;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1191 return;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1192 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1193
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1194
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1195 /*** 3. ISO2022 handlers ***/
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1196
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1197 /* 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
1198 Since the intention of this note is to help understand the
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1199 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
1200 SIMPLIFIED. For thorough understanding, please refer to the
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1201 original document of ISO2022. This is equivalent to the standard
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1202 ECMA-35, obtainable from <URL:http://www.ecma.ch/> (*).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1203
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1204 ISO2022 provides many mechanisms to encode several character sets
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1205 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
1206 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
1207 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
1208 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
1209 Significant Bit).
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1210
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1211 There are two kinds of character sets: control character sets and
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1212 graphic character sets. The former contain control characters such
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1213 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
1214 functions are also provided by escape sequences). The latter
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1215 contain graphic characters such as 'A' and '-'. Emacs recognizes
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1216 two control character sets and many graphic character sets.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1217
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1218 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
1219 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
1220 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
1221 - DIMENSION1_CHARS94
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1222 - DIMENSION1_CHARS96
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1223 - DIMENSION2_CHARS94
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1224 - DIMENSION2_CHARS96
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1225
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1226 In addition, each character set is assigned an identification tag,
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1227 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
1228 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
1229 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
1230 (0x30..0x3F are for private use only).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1231
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1232 Note (*): ECMA = European Computer Manufacturers Association
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1233
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1234 Here are examples of graphic character sets [NAME(<F>)]:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1235 o DIMENSION1_CHARS94 -- ASCII('B'), right-half-of-JISX0201('I'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1236 o DIMENSION1_CHARS96 -- right-half-of-ISO8859-1('A'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1237 o DIMENSION2_CHARS94 -- GB2312('A'), JISX0208('B'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1238 o DIMENSION2_CHARS96 -- none for the moment
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1239
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1240 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
1241 C0 [0x00..0x1F] -- control character plane 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1242 GL [0x20..0x7F] -- graphic character plane 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1243 C1 [0x80..0x9F] -- control character plane 1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1244 GR [0xA0..0xFF] -- graphic character plane 1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1245
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1246 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
1247 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
1248 - 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
1249 - 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
1250 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
1251 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
1252 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
1253 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
1254 defined to have corresponding escape sequences.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1255
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1256 A graphic character set is at first designated to one of four
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1257 graphic registers (G0 through G3), then these graphic registers are
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1258 invoked to GL or GR. These designations and invocations can be
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1259 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
1260 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
1261 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
1262 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
1263
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1264 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
1265 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
1266 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
1267 be used.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1268
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1269 There are two ways of invocation: locking-shift and single-shift.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1270 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
1271 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
1272 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
1273 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
1274 escape sequences:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1275
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1276 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1277 abbrev function cntrl escape seq description
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1278 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1279 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
1280 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
1281 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
1282 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
1283 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
1284 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
1285 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
1286 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
1287 SS3 (single-shift-3) 0x8F ESC 'O' invoke G3 for one char
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1288 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1289 (*) 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
1290
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1291 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
1292 ISO_CODE_XXX in `coding.h'.
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1293
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1294 Designations are done by the following escape sequences:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1295 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1296 escape sequence description
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1297 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1298 ESC '(' <F> designate DIMENSION1_CHARS94<F> to G0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1299 ESC ')' <F> designate DIMENSION1_CHARS94<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1300 ESC '*' <F> designate DIMENSION1_CHARS94<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1301 ESC '+' <F> designate DIMENSION1_CHARS94<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1302 ESC ',' <F> designate DIMENSION1_CHARS96<F> to G0 (*)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1303 ESC '-' <F> designate DIMENSION1_CHARS96<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1304 ESC '.' <F> designate DIMENSION1_CHARS96<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1305 ESC '/' <F> designate DIMENSION1_CHARS96<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1306 ESC '$' '(' <F> designate DIMENSION2_CHARS94<F> to G0 (**)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1307 ESC '$' ')' <F> designate DIMENSION2_CHARS94<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1308 ESC '$' '*' <F> designate DIMENSION2_CHARS94<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1309 ESC '$' '+' <F> designate DIMENSION2_CHARS94<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1310 ESC '$' ',' <F> designate DIMENSION2_CHARS96<F> to G0 (*)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1311 ESC '$' '-' <F> designate DIMENSION2_CHARS96<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1312 ESC '$' '.' <F> designate DIMENSION2_CHARS96<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1313 ESC '$' '/' <F> designate DIMENSION2_CHARS96<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1314 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1315
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1316 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
1317 of dimension 1, chars 94, and final character <F>, etc...
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1318
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1319 Note (*): Although these designations are not allowed in ISO2022,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1320 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
1321 CHARS96 character sets in a coding system which is characterized as
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1322 7-bit environment, non-locking-shift, and non-single-shift.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1323
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1324 Note (**): If <F> is '@', 'A', or 'B', the intermediate character
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1325 '(' can be omitted. We refer to this as "short-form" hereafter.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1326
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1327 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
1328 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
1329 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
1330 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
1331 (used in Korean Internet), EUC (Extended UNIX Code, used in Asian
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1332 localized platforms), and all of these are variants of ISO2022.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1333
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1334 In addition to the above, Emacs handles two more kinds of escape
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1335 sequences: ISO6429's direction specification and Emacs' private
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1336 sequence for specifying character composition.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1337
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1338 ISO6429's direction specification takes the following form:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1339 o CSI ']' -- end of the current direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1340 o CSI '0' ']' -- end of the current direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1341 o CSI '1' ']' -- start of left-to-right text
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1342 o CSI '2' ']' -- start of right-to-left text
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1343 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
1344 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
1345
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1346 Character composition specification takes the following form:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1347 o ESC '0' -- start relative composition
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1348 o ESC '1' -- end composition
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1349 o ESC '2' -- start rule-base composition (*)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1350 o ESC '3' -- start relative composition with alternate chars (**)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1351 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
1352 Since these are not standard escape sequences of any ISO standard,
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1353 the use of them with these meanings is restricted to Emacs only.
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1354
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1355 (*) This form is used only in Emacs 20.5 and older versions,
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1356 but the newer versions can safely decode it.
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1357 (**) This form is used only in Emacs 21.1 and newer versions,
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1358 and the older versions can't decode it.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1359
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1360 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
1361 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
1362
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1363 COMPOSITION_RELATIVE:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1364 ESC 0 CHAR [ CHAR ] ESC 1
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
1365 COMPOSITION_WITH_RULE:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1366 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
1367 COMPOSITION_WITH_ALTCHARS:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1368 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
1369 COMPOSITION_WITH_RULE_ALTCHARS:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1370 ESC 4 ALTCHAR [ RULE ALTCHAR ] ESC 0 CHAR [ CHAR ] ESC 1 */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1371
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1372 enum iso_code_class_type iso_code_class[256];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1373
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1374 #define CHARSET_OK(idx, charset, c) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1375 (coding_system_table[idx] \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1376 && (charset == CHARSET_ASCII \
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
1377 || (safe_chars = coding_safe_chars (coding_system_table[idx]->symbol), \
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1378 CODING_SAFE_CHAR_P (safe_chars, c))) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1379 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding_system_table[idx], \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1380 charset) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1381 != CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1382
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1383 #define SHIFT_OUT_OK(idx) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1384 (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding_system_table[idx], 1) >= 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1385
50047
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1386 #define COMPOSITION_OK(idx) \
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1387 (coding_system_table[idx]->composing != COMPOSITION_DISABLED)
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1388
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1389 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1390 Check if a text is encoded in ISO2022. If it is, return an
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1391 integer in which appropriate flag bits any of:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1392 CODING_CATEGORY_MASK_ISO_7
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1393 CODING_CATEGORY_MASK_ISO_7_TIGHT
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1394 CODING_CATEGORY_MASK_ISO_8_1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1395 CODING_CATEGORY_MASK_ISO_8_2
18787
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
1396 CODING_CATEGORY_MASK_ISO_7_ELSE
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
1397 CODING_CATEGORY_MASK_ISO_8_ELSE
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1398 are set. If a code which should never appear in ISO2022 is found,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1399 returns 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1400
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1401 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1402 detect_coding_iso2022 (src, src_end, multibytep)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1403 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1404 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1405 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1406 int mask = CODING_CATEGORY_MASK_ISO;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1407 int mask_found = 0;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1408 int reg[4], shift_out = 0, single_shifting = 0;
34988
8cd5e6ad71a2 (detect_coding_iso2022, setup_coding_system): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 34892
diff changeset
1409 int c, c1, charset;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1410 /* Dummy for ONE_MORE_BYTE. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1411 struct coding_system dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1412 struct coding_system *coding = &dummy_coding;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1413 Lisp_Object safe_chars;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1414
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1415 reg[0] = CHARSET_ASCII, reg[1] = reg[2] = reg[3] = -1;
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1416 while (mask && src < src_end)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1417 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1418 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
46702
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1419 retry:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1420 switch (c)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1421 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1422 case ISO_CODE_ESC:
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1423 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1424 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1425 single_shifting = 0;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1426 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1427 if (c >= '(' && c <= '/')
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1428 {
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1429 /* Designation sequence for a charset of dimension 1. */
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1430 ONE_MORE_BYTE_CHECK_MULTIBYTE (c1, multibytep);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1431 if (c1 < ' ' || c1 >= 0x80
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1432 || (charset = iso_charset_table[0][c >= ','][c1]) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1433 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1434 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1435 reg[(c - '(') % 4] = charset;
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1436 }
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1437 else if (c == '$')
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1438 {
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1439 /* Designation sequence for a charset of dimension 2. */
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1440 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1441 if (c >= '@' && c <= 'B')
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1442 /* Designation for JISX0208.1978, GB2312, or JISX0208. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1443 reg[0] = charset = iso_charset_table[1][0][c];
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1444 else if (c >= '(' && c <= '/')
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
1445 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1446 ONE_MORE_BYTE_CHECK_MULTIBYTE (c1, multibytep);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1447 if (c1 < ' ' || c1 >= 0x80
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1448 || (charset = iso_charset_table[1][c >= ','][c1]) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1449 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1450 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1451 reg[(c - '(') % 4] = charset;
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
1452 }
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1453 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1454 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1455 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1456 }
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1457 else if (c == 'N' || c == 'O')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1458 {
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1459 /* ESC <Fe> for SS2 or SS3. */
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1460 mask &= CODING_CATEGORY_MASK_ISO_7_ELSE;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1461 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1462 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1463 else if (c >= '0' && c <= '4')
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1464 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1465 /* ESC <Fp> for start/end composition. */
50047
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1466 if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_7))
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1467 mask_found |= CODING_CATEGORY_MASK_ISO_7;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1468 else
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1469 mask &= ~CODING_CATEGORY_MASK_ISO_7;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1470 if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_7_TIGHT))
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1471 mask_found |= CODING_CATEGORY_MASK_ISO_7_TIGHT;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1472 else
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1473 mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1474 if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_8_1))
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1475 mask_found |= CODING_CATEGORY_MASK_ISO_8_1;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1476 else
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1477 mask &= ~CODING_CATEGORY_MASK_ISO_8_1;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1478 if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_8_2))
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1479 mask_found |= CODING_CATEGORY_MASK_ISO_8_2;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1480 else
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1481 mask &= ~CODING_CATEGORY_MASK_ISO_8_2;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1482 if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_7_ELSE))
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1483 mask_found |= CODING_CATEGORY_MASK_ISO_7_ELSE;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1484 else
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1485 mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1486 if (COMPOSITION_OK (CODING_CATEGORY_IDX_ISO_8_ELSE))
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1487 mask_found |= CODING_CATEGORY_MASK_ISO_8_ELSE;
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1488 else
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
1489 mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1490 break;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1491 }
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1492 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1493 /* Invalid escape sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1494 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1495
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1496 /* We found a valid designation sequence for CHARSET. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1497 mask &= ~CODING_CATEGORY_MASK_ISO_8BIT;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1498 c = MAKE_CHAR (charset, 0, 0);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1499 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7, charset, c))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1500 mask_found |= CODING_CATEGORY_MASK_ISO_7;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1501 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1502 mask &= ~CODING_CATEGORY_MASK_ISO_7;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1503 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_TIGHT, charset, c))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1504 mask_found |= CODING_CATEGORY_MASK_ISO_7_TIGHT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1505 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1506 mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1507 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_7_ELSE, charset, c))
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1508 mask_found |= CODING_CATEGORY_MASK_ISO_7_ELSE;
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1509 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1510 mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1511 if (CHARSET_OK (CODING_CATEGORY_IDX_ISO_8_ELSE, charset, c))
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1512 mask_found |= CODING_CATEGORY_MASK_ISO_8_ELSE;
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1513 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1514 mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1515 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1516
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1517 case ISO_CODE_SO:
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1518 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1519 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1520 single_shifting = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1521 if (shift_out == 0
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1522 && (reg[1] >= 0
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1523 || SHIFT_OUT_OK (CODING_CATEGORY_IDX_ISO_7_ELSE)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1524 || SHIFT_OUT_OK (CODING_CATEGORY_IDX_ISO_8_ELSE)))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1525 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1526 /* Locking shift out. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1527 mask &= ~CODING_CATEGORY_MASK_ISO_7BIT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1528 mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1529 }
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
1530 break;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
1531
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1532 case ISO_CODE_SI:
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1533 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1534 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1535 single_shifting = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1536 if (shift_out == 1)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1537 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1538 /* Locking shift in. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1539 mask &= ~CODING_CATEGORY_MASK_ISO_7BIT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1540 mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1541 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1542 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1543
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1544 case ISO_CODE_CSI:
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1545 single_shifting = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1546 case ISO_CODE_SS2:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1547 case ISO_CODE_SS3:
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1548 {
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1549 int newmask = CODING_CATEGORY_MASK_ISO_8_ELSE;
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1550
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1551 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1552 break;
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
1553 if (c != ISO_CODE_CSI)
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
1554 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1555 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_1]->flags
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1556 & CODING_FLAG_ISO_SINGLE_SHIFT)
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
1557 newmask |= CODING_CATEGORY_MASK_ISO_8_1;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1558 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_2]->flags
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1559 & CODING_FLAG_ISO_SINGLE_SHIFT)
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
1560 newmask |= CODING_CATEGORY_MASK_ISO_8_2;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1561 single_shifting = 1;
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
1562 }
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1563 if (VECTORP (Vlatin_extra_code_table)
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1564 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c]))
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1565 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1566 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_1]->flags
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1567 & CODING_FLAG_ISO_LATIN_EXTRA)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1568 newmask |= CODING_CATEGORY_MASK_ISO_8_1;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1569 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_2]->flags
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1570 & CODING_FLAG_ISO_LATIN_EXTRA)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1571 newmask |= CODING_CATEGORY_MASK_ISO_8_2;
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1572 }
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1573 mask &= newmask;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1574 mask_found |= newmask;
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1575 }
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1576 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1577
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1578 default:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1579 if (c < 0x80)
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1580 {
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1581 single_shifting = 0;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1582 break;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1583 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1584 else if (c < 0xA0)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
1585 {
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1586 single_shifting = 0;
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1587 if (VECTORP (Vlatin_extra_code_table)
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1588 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c]))
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
1589 {
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1590 int newmask = 0;
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1591
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1592 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_1]->flags
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1593 & CODING_FLAG_ISO_LATIN_EXTRA)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1594 newmask |= CODING_CATEGORY_MASK_ISO_8_1;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1595 if (coding_system_table[CODING_CATEGORY_IDX_ISO_8_2]->flags
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1596 & CODING_FLAG_ISO_LATIN_EXTRA)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1597 newmask |= CODING_CATEGORY_MASK_ISO_8_2;
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1598 mask &= newmask;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1599 mask_found |= newmask;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
1600 }
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1601 else
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1602 return 0;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
1603 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1604 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1605 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1606 mask &= ~(CODING_CATEGORY_MASK_ISO_7BIT
18787
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
1607 | CODING_CATEGORY_MASK_ISO_7_ELSE);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1608 mask_found |= CODING_CATEGORY_MASK_ISO_8_1;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1609 /* Check the length of succeeding codes of the range
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1610 0xA0..0FF. If the byte length is odd, we exclude
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1611 CODING_CATEGORY_MASK_ISO_8_2. We can check this only
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1612 when we are not single shifting. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1613 if (!single_shifting
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1614 && mask & CODING_CATEGORY_MASK_ISO_8_2)
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1615 {
29299
b33b38d81020 (detect_coding_iso2022): Fix code for checking
Kenichi Handa <handa@m17n.org>
parents: 29275
diff changeset
1616 int i = 1;
46702
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1617
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1618 c = -1;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1619 while (src < src_end)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1620 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1621 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1622 if (c < 0xA0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1623 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1624 i++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1625 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1626
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1627 if (i & 1 && src < src_end)
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1628 mask &= ~CODING_CATEGORY_MASK_ISO_8_2;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1629 else
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1630 mask_found |= CODING_CATEGORY_MASK_ISO_8_2;
46702
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1631 if (c >= 0)
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1632 /* This means that we have read one extra byte. */
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1633 goto retry;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1634 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1635 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1636 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1637 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1638 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1639 label_end_of_loop:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1640 return (mask & mask_found);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1641 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1642
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1643 /* Decode a character of which charset is CHARSET, the 1st position
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1644 code is C1, the 2nd position code is C2, and return the decoded
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1645 character code. If the variable `translation_table' is non-nil,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1646 returned the translated code. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1647
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1648 #define DECODE_ISO_CHARACTER(charset, c1, c2) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1649 (NILP (translation_table) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1650 ? MAKE_CHAR (charset, c1, c2) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1651 : translate_char (translation_table, -1, charset, c1, c2))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1652
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1653 /* Set designation state into CODING. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1654 #define DECODE_DESIGNATION(reg, dimension, chars, final_char) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1655 do { \
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1656 int charset, c; \
23881
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1657 \
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1658 if (final_char < '0' || final_char >= 128) \
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1659 goto label_invalid_code; \
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1660 charset = ISO_CHARSET_TABLE (make_number (dimension), \
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1661 make_number (chars), \
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1662 make_number (final_char)); \
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1663 c = MAKE_CHAR (charset, 0, 0); \
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1664 if (charset >= 0 \
21331
4c89837392b3 (CHARSET_OK): Don't reject safe charsets.
Kenichi Handa <handa@m17n.org>
parents: 21321
diff changeset
1665 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) == reg \
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1666 || CODING_SAFE_CHAR_P (safe_chars, c))) \
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1667 { \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1668 if (coding->spec.iso2022.last_invalid_designation_register == 0 \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1669 && reg == 0 \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1670 && charset == CHARSET_ASCII) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1671 { \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1672 /* We should insert this designation sequence as is so \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1673 that it is surely written back to a file. */ \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1674 coding->spec.iso2022.last_invalid_designation_register = -1; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1675 goto label_invalid_code; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1676 } \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1677 coding->spec.iso2022.last_invalid_designation_register = -1; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1678 if ((coding->mode & CODING_MODE_DIRECTION) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1679 && CHARSET_REVERSE_CHARSET (charset) >= 0) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1680 charset = CHARSET_REVERSE_CHARSET (charset); \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1681 CODING_SPEC_ISO_DESIGNATION (coding, reg) = charset; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1682 } \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1683 else \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1684 { \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1685 coding->spec.iso2022.last_invalid_designation_register = reg; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1686 goto label_invalid_code; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1687 } \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1688 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1689
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1690 /* Allocate a memory block for storing information about compositions.
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1691 The block is chained to the already allocated blocks. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1692
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1693 void
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1694 coding_allocate_composition_data (coding, char_offset)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1695 struct coding_system *coding;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1696 int char_offset;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1697 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1698 struct composition_data *cmp_data
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1699 = (struct composition_data *) xmalloc (sizeof *cmp_data);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1700
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1701 cmp_data->char_offset = char_offset;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1702 cmp_data->used = 0;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1703 cmp_data->prev = coding->cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1704 cmp_data->next = NULL;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1705 if (coding->cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1706 coding->cmp_data->next = cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1707 coding->cmp_data = cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1708 coding->cmp_data_start = 0;
53007
36796e056954 (coding_allocate_composition_data): Reset
Kenichi Handa <handa@m17n.org>
parents: 52806
diff changeset
1709 coding->composing = COMPOSITION_NO;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1710 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1711
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1712 /* Handle composition start sequence ESC 0, ESC 2, ESC 3, or ESC 4.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1713 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
1714 ESC 2 : rulebase composition : ESC 2 CHAR RULE CHAR RULE ... CHAR ESC 1
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1715 ESC 3 : altchar composition : ESC 3 ALT ... ESC 0 CHAR ... ESC 1
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1716 ESC 4 : alt&rule composition : ESC 4 ALT RULE .. ALT ESC 0 CHAR ... ESC 1
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1717 */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1718
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1719 #define DECODE_COMPOSITION_START(c1) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1720 do { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1721 if (coding->composing == COMPOSITION_DISABLED) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1722 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1723 *dst++ = ISO_CODE_ESC; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1724 *dst++ = c1 & 0x7f; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1725 coding->produced_char += 2; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1726 } \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1727 else if (!COMPOSING_P (coding)) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1728 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1729 /* This is surely the start of a composition. We must be sure \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1730 that coding->cmp_data has enough space to store the \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1731 information about the composition. If not, terminate the \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1732 current decoding loop, allocate one more memory block for \
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
1733 coding->cmp_data in the caller, then start the decoding \
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1734 loop again. We can't allocate memory here directly because \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1735 it may cause buffer/string relocation. */ \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1736 if (!coding->cmp_data \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1737 || (coding->cmp_data->used + COMPOSITION_DATA_MAX_BUNCH_LENGTH \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1738 >= COMPOSITION_DATA_SIZE)) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1739 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1740 coding->result = CODING_FINISH_INSUFFICIENT_CMP; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1741 goto label_end_of_loop; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1742 } \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1743 coding->composing = (c1 == '0' ? COMPOSITION_RELATIVE \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1744 : c1 == '2' ? COMPOSITION_WITH_RULE \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1745 : c1 == '3' ? COMPOSITION_WITH_ALTCHARS \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1746 : COMPOSITION_WITH_RULE_ALTCHARS); \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1747 CODING_ADD_COMPOSITION_START (coding, coding->produced_char, \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1748 coding->composing); \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1749 coding->composition_rule_follows = 0; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1750 } \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1751 else \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1752 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1753 /* We are already handling a composition. If the method is \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1754 the following two, the codes following the current escape \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1755 sequence are actual characters stored in a buffer. */ \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1756 if (coding->composing == COMPOSITION_WITH_ALTCHARS \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1757 || coding->composing == COMPOSITION_WITH_RULE_ALTCHARS) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1758 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1759 coding->composing = COMPOSITION_RELATIVE; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1760 coding->composition_rule_follows = 0; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1761 } \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1762 } \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1763 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1764
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
1765 /* Handle composition end sequence ESC 1. */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1766
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1767 #define DECODE_COMPOSITION_END(c1) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1768 do { \
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
1769 if (! COMPOSING_P (coding)) \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1770 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1771 *dst++ = ISO_CODE_ESC; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1772 *dst++ = c1; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1773 coding->produced_char += 2; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1774 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1775 else \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1776 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1777 CODING_ADD_COMPOSITION_END (coding, coding->produced_char); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1778 coding->composing = COMPOSITION_NO; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1779 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1780 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1781
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1782 /* Decode a composition rule from the byte C1 (and maybe one more byte
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1783 from SRC) and store one encoded composition rule in
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1784 coding->cmp_data. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1785
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1786 #define DECODE_COMPOSITION_RULE(c1) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1787 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1788 int rule = 0; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1789 (c1) -= 32; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1790 if (c1 < 81) /* old format (before ver.21) */ \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1791 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1792 int gref = (c1) / 9; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1793 int nref = (c1) % 9; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1794 if (gref == 4) gref = 10; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1795 if (nref == 4) nref = 10; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1796 rule = COMPOSITION_ENCODE_RULE (gref, nref); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1797 } \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1798 else if (c1 < 93) /* new format (after ver.21) */ \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1799 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1800 ONE_MORE_BYTE (c2); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1801 rule = COMPOSITION_ENCODE_RULE (c1 - 81, c2 - 32); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1802 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1803 CODING_ADD_COMPOSITION_COMPONENT (coding, rule); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1804 coding->composition_rule_follows = 0; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1805 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1806
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1807
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1808 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1809
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1810 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1811 decode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1812 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1813 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1814 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1815 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1816 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1817 unsigned char *src_end = source + src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1818 unsigned char *dst = destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1819 unsigned char *dst_end = destination + dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1820 /* Charsets invoked to graphic plane 0 and 1 respectively. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1821 int charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1822 int charset1 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1823 /* SRC_BASE remembers the start position in source in each loop.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1824 The loop will be exited when there's not enough source code
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1825 (within macro ONE_MORE_BYTE), or when there's not enough
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1826 destination area to produce a character (within macro
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1827 EMIT_CHAR). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1828 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1829 int c, charset;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1830 Lisp_Object translation_table;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1831 Lisp_Object safe_chars;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1832
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
1833 safe_chars = coding_safe_chars (coding->symbol);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1834
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1835 if (NILP (Venable_character_translation))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1836 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1837 else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1838 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1839 translation_table = coding->translation_table_for_decode;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1840 if (NILP (translation_table))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1841 translation_table = Vstandard_translation_table_for_decode;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1842 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1843
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1844 coding->result = CODING_FINISH_NORMAL;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1845
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1846 while (1)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1847 {
52354
5480186284b2 (decode_coding_iso2022): Initialized local variable c2.
Kenichi Handa <handa@m17n.org>
parents: 52016
diff changeset
1848 int c1, c2 = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1849
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1850 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1851 ONE_MORE_BYTE (c1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1852
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1853 /* We produce no character or one character. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1854 switch (iso_code_class [c1])
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1855 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1856 case ISO_0x20_or_0x7F:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1857 if (COMPOSING_P (coding) && coding->composition_rule_follows)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1858 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1859 DECODE_COMPOSITION_RULE (c1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1860 continue;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1861 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1862 if (charset0 < 0 || CHARSET_CHARS (charset0) == 94)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1863 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1864 /* This is SPACE or DEL. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1865 charset = CHARSET_ASCII;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1866 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1867 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1868 /* This is a graphic character, we fall down ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1869
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1870 case ISO_graphic_plane_0:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1871 if (COMPOSING_P (coding) && coding->composition_rule_follows)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1872 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1873 DECODE_COMPOSITION_RULE (c1);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1874 continue;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1875 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1876 charset = charset0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1877 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1878
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1879 case ISO_0xA0_or_0xFF:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1880 if (charset1 < 0 || CHARSET_CHARS (charset1) == 94
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1881 || coding->flags & CODING_FLAG_ISO_SEVEN_BITS)
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
1882 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1883 /* This is a graphic character, we fall down ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1884
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1885 case ISO_graphic_plane_1:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1886 if (charset1 < 0)
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
1887 goto label_invalid_code;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1888 charset = charset1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1889 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1890
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1891 case ISO_control_0:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1892 if (COMPOSING_P (coding))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1893 DECODE_COMPOSITION_END ('1');
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1894
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1895 /* All ISO2022 control characters in this class have the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1896 same representation in Emacs internal format. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1897 if (c1 == '\n'
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1898 && (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1899 && (coding->eol_type == CODING_EOL_CR
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1900 || coding->eol_type == CODING_EOL_CRLF))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1901 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1902 coding->result = CODING_FINISH_INCONSISTENT_EOL;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1903 goto label_end_of_loop;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1904 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1905 charset = CHARSET_ASCII;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1906 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1907
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1908 case ISO_control_1:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1909 if (COMPOSING_P (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1910 DECODE_COMPOSITION_END ('1');
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1911 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1912
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1913 case ISO_carriage_return:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1914 if (COMPOSING_P (coding))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1915 DECODE_COMPOSITION_END ('1');
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1916
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1917 if (coding->eol_type == CODING_EOL_CR)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1918 c1 = '\n';
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1919 else if (coding->eol_type == CODING_EOL_CRLF)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1920 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1921 ONE_MORE_BYTE (c1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1922 if (c1 != ISO_CODE_LF)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1923 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1924 src--;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1925 c1 = '\r';
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1926 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1927 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1928 charset = CHARSET_ASCII;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1929 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1930
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1931 case ISO_shift_out:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1932 if (! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1933 || CODING_SPEC_ISO_DESIGNATION (coding, 1) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1934 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1935 CODING_SPEC_ISO_INVOCATION (coding, 0) = 1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1936 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1937 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1938
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1939 case ISO_shift_in:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1940 if (! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1941 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1942 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1943 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1944 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1945
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1946 case ISO_single_shift_2_7:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1947 case ISO_single_shift_2:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1948 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1949 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1950 /* SS2 is handled as an escape sequence of ESC 'N' */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1951 c1 = 'N';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1952 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1953
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1954 case ISO_single_shift_3:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1955 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1956 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1957 /* SS2 is handled as an escape sequence of ESC 'O' */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1958 c1 = 'O';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1959 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1960
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1961 case ISO_control_sequence_introducer:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1962 /* CSI is handled as an escape sequence of ESC '[' ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1963 c1 = '[';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1964 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1965
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1966 case ISO_escape:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1967 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1968 label_escape_sequence:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1969 /* Escape sequences handled by Emacs are invocation,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1970 designation, direction specification, and character
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1971 composition specification. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1972 switch (c1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1973 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1974 case '&': /* revision of following character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1975 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1976 if (!(c1 >= '@' && c1 <= '~'))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1977 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1978 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1979 if (c1 != ISO_CODE_ESC)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1980 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1981 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1982 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1983
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1984 case '$': /* designation of 2-byte character set */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1985 if (! (coding->flags & CODING_FLAG_ISO_DESIGNATION))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1986 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1987 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1988 if (c1 >= '@' && c1 <= 'B')
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1989 { /* 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
1990 or JISX0208.1980 */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1991 DECODE_DESIGNATION (0, 2, 94, c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1992 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1993 else if (c1 >= 0x28 && c1 <= 0x2B)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1994 { /* designation of DIMENSION2_CHARS94 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1995 ONE_MORE_BYTE (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1996 DECODE_DESIGNATION (c1 - 0x28, 2, 94, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1997 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1998 else if (c1 >= 0x2C && c1 <= 0x2F)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1999 { /* designation of DIMENSION2_CHARS96 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2000 ONE_MORE_BYTE (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2001 DECODE_DESIGNATION (c1 - 0x2C, 2, 96, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2002 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2003 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2004 goto label_invalid_code;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2005 /* We must update these variables now. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2006 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2007 charset1 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 1);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2008 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2009
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2010 case 'n': /* invocation of locking-shift-2 */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2011 if (! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2012 || CODING_SPEC_ISO_DESIGNATION (coding, 2) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2013 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2014 CODING_SPEC_ISO_INVOCATION (coding, 0) = 2;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2015 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2016 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2017
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2018 case 'o': /* invocation of locking-shift-3 */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2019 if (! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2020 || CODING_SPEC_ISO_DESIGNATION (coding, 3) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2021 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2022 CODING_SPEC_ISO_INVOCATION (coding, 0) = 3;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2023 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2024 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2025
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2026 case 'N': /* invocation of single-shift-2 */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2027 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2028 || CODING_SPEC_ISO_DESIGNATION (coding, 2) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2029 goto label_invalid_code;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2030 charset = CODING_SPEC_ISO_DESIGNATION (coding, 2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2031 ONE_MORE_BYTE (c1);
30578
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
2032 if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
2033 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2034 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2035
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2036 case 'O': /* invocation of single-shift-3 */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2037 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2038 || CODING_SPEC_ISO_DESIGNATION (coding, 3) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2039 goto label_invalid_code;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2040 charset = CODING_SPEC_ISO_DESIGNATION (coding, 3);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2041 ONE_MORE_BYTE (c1);
30578
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
2042 if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
2043 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2044 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2045
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2046 case '0': case '2': case '3': case '4': /* start composition */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2047 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
2048 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2049
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2050 case '1': /* end composition */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2051 DECODE_COMPOSITION_END (c1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2052 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2053
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2054 case '[': /* specification of direction */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2055 if (coding->flags & CODING_FLAG_ISO_NO_DIRECTION)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2056 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2057 /* 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
2058 So, `coding->mode & CODING_MODE_DIRECTION' zero means
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2059 left-to-right, and nonzero means right-to-left. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2060 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2061 switch (c1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2062 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2063 case ']': /* end of the current direction */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2064 coding->mode &= ~CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2065
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2066 case '0': /* end of the current direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2067 case '1': /* start of left-to-right direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2068 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2069 if (c1 == ']')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2070 coding->mode &= ~CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2071 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2072 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2073 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2074
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2075 case '2': /* start of right-to-left direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2076 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2077 if (c1 == ']')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2078 coding->mode |= CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2079 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2080 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2081 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2082
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2083 default:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2084 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2085 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2086 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2087
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2088 case '%':
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2089 if (COMPOSING_P (coding))
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2090 DECODE_COMPOSITION_END ('1');
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2091 ONE_MORE_BYTE (c1);
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2092 if (c1 == '/')
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2093 {
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2094 /* CTEXT extended segment:
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2095 ESC % / [0-4] M L --ENCODING-NAME-- \002 --BYTES--
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2096 We keep these bytes as is for the moment.
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2097 They may be decoded by post-read-conversion. */
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2098 int dim, M, L;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2099 int size, required;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2100 int produced_chars;
56191
75f56340b4f9 (MAX_ALLOCA): Remove define.
Kim F. Storm <storm@cua.dk>
parents: 56028
diff changeset
2101
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2102 ONE_MORE_BYTE (dim);
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2103 ONE_MORE_BYTE (M);
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2104 ONE_MORE_BYTE (L);
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2105 size = ((M - 128) * 128) + (L - 128);
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2106 required = 8 + size * 2;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2107 if (dst + required > (dst_bytes ? dst_end : src))
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2108 goto label_end_of_loop;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2109 *dst++ = ISO_CODE_ESC;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2110 *dst++ = '%';
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2111 *dst++ = '/';
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2112 *dst++ = dim;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2113 produced_chars = 4;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2114 dst += CHAR_STRING (M, dst), produced_chars++;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2115 dst += CHAR_STRING (L, dst), produced_chars++;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2116 while (size-- > 0)
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2117 {
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2118 ONE_MORE_BYTE (c1);
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2119 dst += CHAR_STRING (c1, dst), produced_chars++;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2120 }
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2121 coding->produced_char += produced_chars;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2122 }
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2123 else if (c1 == 'G')
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2124 {
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2125 unsigned char *d = dst;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2126 int produced_chars;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2127
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2128 /* XFree86 extension for embedding UTF-8 in CTEXT:
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2129 ESC % G --UTF-8-BYTES-- ESC % @
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2130 We keep these bytes as is for the moment.
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2131 They may be decoded by post-read-conversion. */
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2132 if (d + 6 > (dst_bytes ? dst_end : src))
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2133 goto label_end_of_loop;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2134 *d++ = ISO_CODE_ESC;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2135 *d++ = '%';
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2136 *d++ = 'G';
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2137 produced_chars = 3;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2138 while (d + 1 < (dst_bytes ? dst_end : src))
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2139 {
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2140 ONE_MORE_BYTE (c1);
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2141 if (c1 == ISO_CODE_ESC
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2142 && src + 1 < src_end
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2143 && src[0] == '%'
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2144 && src[1] == '@')
53239
82690620d562 (decode_coding_iso2022): Fix for preserving UTF-8
Kenichi Handa <handa@m17n.org>
parents: 53087
diff changeset
2145 {
82690620d562 (decode_coding_iso2022): Fix for preserving UTF-8
Kenichi Handa <handa@m17n.org>
parents: 53087
diff changeset
2146 src += 2;
82690620d562 (decode_coding_iso2022): Fix for preserving UTF-8
Kenichi Handa <handa@m17n.org>
parents: 53087
diff changeset
2147 break;
82690620d562 (decode_coding_iso2022): Fix for preserving UTF-8
Kenichi Handa <handa@m17n.org>
parents: 53087
diff changeset
2148 }
51311
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2149 d += CHAR_STRING (c1, d), produced_chars++;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2150 }
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2151 if (d + 3 > (dst_bytes ? dst_end : src))
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2152 goto label_end_of_loop;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2153 *d++ = ISO_CODE_ESC;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2154 *d++ = '%';
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2155 *d++ = '@';
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2156 dst = d;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2157 coding->produced_char += produced_chars + 3;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2158 }
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2159 else
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2160 goto label_invalid_code;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2161 continue;
e723bcb43569 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 51231
diff changeset
2162
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2163 default:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2164 if (! (coding->flags & CODING_FLAG_ISO_DESIGNATION))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2165 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2166 if (c1 >= 0x28 && c1 <= 0x2B)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2167 { /* designation of DIMENSION1_CHARS94 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2168 ONE_MORE_BYTE (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2169 DECODE_DESIGNATION (c1 - 0x28, 1, 94, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2170 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2171 else if (c1 >= 0x2C && c1 <= 0x2F)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2172 { /* designation of DIMENSION1_CHARS96 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2173 ONE_MORE_BYTE (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2174 DECODE_DESIGNATION (c1 - 0x2C, 1, 96, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2175 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2176 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2177 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2178 /* We must update these variables now. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2179 charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2180 charset1 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 1);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2181 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2182 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2183 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2184
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2185 /* Now we know CHARSET and 1st position code C1 of a character.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2186 Produce a multibyte sequence for that character while getting
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2187 2nd position code C2 if necessary. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2188 if (CHARSET_DIMENSION (charset) == 2)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2189 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2190 ONE_MORE_BYTE (c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2191 if (c1 < 0x80 ? c2 < 0x20 || c2 >= 0x80 : c2 < 0xA0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2192 /* C2 is not in a valid range. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2193 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2194 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2195 c = DECODE_ISO_CHARACTER (charset, c1, c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2196 EMIT_CHAR (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2197 continue;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2198
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2199 label_invalid_code:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2200 coding->errors++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2201 if (COMPOSING_P (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2202 DECODE_COMPOSITION_END ('1');
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2203 src = src_base;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2204 c = *src++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2205 EMIT_CHAR (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2206 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2207
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2208 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2209 coding->consumed = coding->consumed_char = src_base - source;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2210 coding->produced = dst - destination;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2211 return;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2212 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2213
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2214
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2215 /* ISO2022 encoding stuff. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2216
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2217 /*
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2218 It is not enough to say just "ISO2022" on encoding, we have to
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2219 specify more details. In Emacs, each ISO2022 coding system
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2220 variant has the following specifications:
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2221 1. Initial designation to G0 through G3.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2222 2. Allows short-form designation?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2223 3. ASCII should be designated to G0 before control characters?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2224 4. ASCII should be designated to G0 at end of line?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2225 5. 7-bit environment or 8-bit environment?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2226 6. Use locking-shift?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2227 7. Use Single-shift?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2228 And the following two are only for Japanese:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2229 8. Use ASCII in place of JIS0201-1976-Roman?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2230 9. Use JISX0208-1983 in place of JISX0208-1978?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2231 These specifications are encoded in `coding->flags' as flag bits
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2232 defined by macros CODING_FLAG_ISO_XXX. See `coding.h' for more
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2233 details.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2234 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2235
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2236 /* 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
2237 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
2238 '@', '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
2239 designation sequence of short-form. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2240
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2241 #define ENCODE_DESIGNATION(charset, reg, coding) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2242 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2243 unsigned char final_char = CHARSET_ISO_FINAL_CHAR (charset); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2244 char *intermediate_char_94 = "()*+"; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2245 char *intermediate_char_96 = ",-./"; \
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
2246 int revision = CODING_SPEC_ISO_REVISION_NUMBER(coding, charset); \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2247 \
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
2248 if (revision < 255) \
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
2249 { \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2250 *dst++ = ISO_CODE_ESC; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2251 *dst++ = '&'; \
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
2252 *dst++ = '@' + revision; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2253 } \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2254 *dst++ = ISO_CODE_ESC; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2255 if (CHARSET_DIMENSION (charset) == 1) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2256 { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2257 if (CHARSET_CHARS (charset) == 94) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2258 *dst++ = (unsigned char) (intermediate_char_94[reg]); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2259 else \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2260 *dst++ = (unsigned char) (intermediate_char_96[reg]); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2261 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2262 else \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2263 { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2264 *dst++ = '$'; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2265 if (CHARSET_CHARS (charset) == 94) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2266 { \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2267 if (! (coding->flags & CODING_FLAG_ISO_SHORT_FORM) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2268 || reg != 0 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2269 || final_char < '@' || final_char > 'B') \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2270 *dst++ = (unsigned char) (intermediate_char_94[reg]); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2271 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2272 else \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2273 *dst++ = (unsigned char) (intermediate_char_96[reg]); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2274 } \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2275 *dst++ = final_char; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2276 CODING_SPEC_ISO_DESIGNATION (coding, reg) = charset; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2277 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2278
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2279 /* The following two macros produce codes (control character or escape
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2280 sequence) for ISO2022 single-shift functions (single-shift-2 and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2281 single-shift-3). */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2282
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2283 #define ENCODE_SINGLE_SHIFT_2 \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2284 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2285 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2286 *dst++ = ISO_CODE_ESC, *dst++ = 'N'; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2287 else \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2288 *dst++ = ISO_CODE_SS2; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2289 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2290 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2291
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2292 #define ENCODE_SINGLE_SHIFT_3 \
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2293 do { \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2294 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2295 *dst++ = ISO_CODE_ESC, *dst++ = 'O'; \
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2296 else \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2297 *dst++ = ISO_CODE_SS3; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2298 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2299 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2300
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2301 /* The following four macros produce codes (control character or
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2302 escape sequence) for ISO2022 locking-shift functions (shift-in,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2303 shift-out, locking-shift-2, and locking-shift-3). */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2304
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2305 #define ENCODE_SHIFT_IN \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2306 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2307 *dst++ = ISO_CODE_SI; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2308 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2309 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2310
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2311 #define ENCODE_SHIFT_OUT \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2312 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2313 *dst++ = ISO_CODE_SO; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2314 CODING_SPEC_ISO_INVOCATION (coding, 0) = 1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2315 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2316
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2317 #define ENCODE_LOCKING_SHIFT_2 \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2318 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2319 *dst++ = ISO_CODE_ESC, *dst++ = 'n'; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2320 CODING_SPEC_ISO_INVOCATION (coding, 0) = 2; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2321 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2322
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2323 #define ENCODE_LOCKING_SHIFT_3 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2324 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2325 *dst++ = ISO_CODE_ESC, *dst++ = 'o'; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2326 CODING_SPEC_ISO_INVOCATION (coding, 0) = 3; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2327 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2328
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2329 /* Produce codes for a DIMENSION1 character whose character set is
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2330 CHARSET and whose position-code is C1. Designation and invocation
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2331 sequences are also produced in advance if necessary. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2332
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2333 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2334 do { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2335 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2336 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2337 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2338 *dst++ = c1 & 0x7F; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2339 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2340 *dst++ = c1 | 0x80; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2341 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2342 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2343 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2344 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 0)) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2345 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2346 *dst++ = c1 & 0x7F; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2347 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2348 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2349 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 1)) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2350 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2351 *dst++ = c1 | 0x80; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2352 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2353 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2354 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2355 /* 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
2356 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
2357 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
2358 character. */ \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2359 dst = encode_invocation_designation (charset, coding, dst); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2360 } while (1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2361
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2362 /* Produce codes for a DIMENSION2 character whose character set is
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2363 CHARSET and whose position-codes are C1 and C2. Designation and
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2364 invocation codes are also produced in advance if necessary. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2365
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2366 #define ENCODE_ISO_CHARACTER_DIMENSION2(charset, c1, c2) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2367 do { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2368 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2369 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2370 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2371 *dst++ = c1 & 0x7F, *dst++ = c2 & 0x7F; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2372 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2373 *dst++ = c1 | 0x80, *dst++ = c2 | 0x80; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2374 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2375 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2376 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2377 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 0)) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2378 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2379 *dst++ = c1 & 0x7F, *dst++= c2 & 0x7F; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2380 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2381 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2382 else if (charset == CODING_SPEC_ISO_PLANE_CHARSET (coding, 1)) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2383 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2384 *dst++ = c1 | 0x80, *dst++= c2 | 0x80; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2385 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2386 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2387 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2388 /* 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
2389 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
2390 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
2391 character. */ \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2392 dst = encode_invocation_designation (charset, coding, dst); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2393 } while (1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2394
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2395 #define ENCODE_ISO_CHARACTER(c) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2396 do { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2397 int charset, c1, c2; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2398 \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2399 SPLIT_CHAR (c, charset, c1, c2); \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2400 if (CHARSET_DEFINED_P (charset)) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2401 { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2402 if (CHARSET_DIMENSION (charset) == 1) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2403 { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2404 if (charset == CHARSET_ASCII \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2405 && coding->flags & CODING_FLAG_ISO_USE_ROMAN) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2406 charset = charset_latin_jisx0201; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2407 ENCODE_ISO_CHARACTER_DIMENSION1 (charset, c1); \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2408 } \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2409 else \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2410 { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2411 if (charset == charset_jisx0208 \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2412 && coding->flags & CODING_FLAG_ISO_USE_OLDJIS) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2413 charset = charset_jisx0208_1978; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2414 ENCODE_ISO_CHARACTER_DIMENSION2 (charset, c1, c2); \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2415 } \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2416 } \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2417 else \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2418 { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2419 *dst++ = c1; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2420 if (c2 >= 0) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2421 *dst++ = c2; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2422 } \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2423 } while (0)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2424
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2425
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2426 /* Instead of encoding character C, produce one or two `?'s. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2427
51140
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2428 #define ENCODE_UNSAFE_CHARACTER(c) \
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2429 do { \
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2430 ENCODE_ISO_CHARACTER (CODING_REPLACEMENT_CHARACTER); \
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2431 if (CHARSET_WIDTH (CHAR_CHARSET (c)) > 1) \
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2432 ENCODE_ISO_CHARACTER (CODING_REPLACEMENT_CHARACTER); \
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
2433 } while (0)
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2434
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2435
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2436 /* Produce designation and invocation codes at a place pointed by DST
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2437 to use CHARSET. The element `spec.iso2022' of *CODING is updated.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2438 Return new DST. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2439
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2440 unsigned char *
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2441 encode_invocation_designation (charset, coding, dst)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2442 int charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2443 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2444 unsigned char *dst;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2445 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2446 int reg; /* graphic register number */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2447
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2448 /* At first, check designations. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2449 for (reg = 0; reg < 4; reg++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2450 if (charset == CODING_SPEC_ISO_DESIGNATION (coding, reg))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2451 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2452
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2453 if (reg >= 4)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2454 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2455 /* CHARSET is not yet designated to any graphic registers. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2456 /* At first check the requested designation. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2457 reg = CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
2458 if (reg == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION)
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
2459 /* Since CHARSET requests no special designation, designate it
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
2460 to graphic register 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2461 reg = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2462
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2463 ENCODE_DESIGNATION (charset, reg, coding);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2464 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2465
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2466 if (CODING_SPEC_ISO_INVOCATION (coding, 0) != reg
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2467 && CODING_SPEC_ISO_INVOCATION (coding, 1) != reg)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2468 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2469 /* Since the graphic register REG is not invoked to any graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2470 planes, invoke it to graphic plane 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2471 switch (reg)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2472 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2473 case 0: /* graphic register 0 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2474 ENCODE_SHIFT_IN;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2475 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2476
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2477 case 1: /* graphic register 1 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2478 ENCODE_SHIFT_OUT;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2479 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2480
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2481 case 2: /* graphic register 2 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2482 if (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2483 ENCODE_SINGLE_SHIFT_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2484 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2485 ENCODE_LOCKING_SHIFT_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2486 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2487
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2488 case 3: /* graphic register 3 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2489 if (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2490 ENCODE_SINGLE_SHIFT_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2491 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2492 ENCODE_LOCKING_SHIFT_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2493 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2494 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2495 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2496
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2497 return dst;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2498 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2499
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2500 /* Produce 2-byte codes for encoded composition rule RULE. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2501
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2502 #define ENCODE_COMPOSITION_RULE(rule) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2503 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2504 int gref, nref; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2505 COMPOSITION_DECODE_RULE (rule, gref, nref); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2506 *dst++ = 32 + 81 + gref; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2507 *dst++ = 32 + nref; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2508 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2509
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2510 /* Produce codes for indicating the start of a composition sequence
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2511 (ESC 0, ESC 3, or ESC 4). DATA points to an array of integers
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2512 which specify information about the composition. See the comment
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2513 in coding.h for the format of DATA. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2514
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2515 #define ENCODE_COMPOSITION_START(coding, data) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2516 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2517 coding->composing = data[3]; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2518 *dst++ = ISO_CODE_ESC; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2519 if (coding->composing == COMPOSITION_RELATIVE) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2520 *dst++ = '0'; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2521 else \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2522 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2523 *dst++ = (coding->composing == COMPOSITION_WITH_ALTCHARS \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2524 ? '3' : '4'); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2525 coding->cmp_data_index = coding->cmp_data_start + 4; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2526 coding->composition_rule_follows = 0; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2527 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2528 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2529
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2530 /* Produce codes for indicating the end of the current composition. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2531
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2532 #define ENCODE_COMPOSITION_END(coding, data) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2533 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2534 *dst++ = ISO_CODE_ESC; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2535 *dst++ = '1'; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2536 coding->cmp_data_start += data[0]; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2537 coding->composing = COMPOSITION_NO; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2538 if (coding->cmp_data_start == coding->cmp_data->used \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2539 && coding->cmp_data->next) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2540 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2541 coding->cmp_data = coding->cmp_data->next; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2542 coding->cmp_data_start = 0; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2543 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2544 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2545
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2546 /* Produce composition start sequence ESC 0. Here, this sequence
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2547 doesn't mean the start of a new composition but means that we have
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2548 just produced components (alternate chars and composition rules) of
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2549 the composition and the actual text follows in SRC. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2550
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2551 #define ENCODE_COMPOSITION_FAKE_START(coding) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2552 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2553 *dst++ = ISO_CODE_ESC; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2554 *dst++ = '0'; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2555 coding->composing = COMPOSITION_RELATIVE; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2556 } while (0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2557
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2558 /* The following three macros produce codes for indicating direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2559 of text. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2560 #define ENCODE_CONTROL_SEQUENCE_INTRODUCER \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2561 do { \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2562 if (coding->flags == CODING_FLAG_ISO_SEVEN_BITS) \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2563 *dst++ = ISO_CODE_ESC, *dst++ = '['; \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2564 else \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2565 *dst++ = ISO_CODE_CSI; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2566 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2567
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2568 #define ENCODE_DIRECTION_R2L \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2569 ENCODE_CONTROL_SEQUENCE_INTRODUCER (dst), *dst++ = '2', *dst++ = ']'
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2570
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2571 #define ENCODE_DIRECTION_L2R \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2572 ENCODE_CONTROL_SEQUENCE_INTRODUCER (dst), *dst++ = '0', *dst++ = ']'
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2573
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2574 /* Produce codes for designation and invocation to reset the graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2575 planes and registers to initial state. */
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2576 #define ENCODE_RESET_PLANE_AND_REGISTER \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2577 do { \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2578 int reg; \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2579 if (CODING_SPEC_ISO_INVOCATION (coding, 0) != 0) \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2580 ENCODE_SHIFT_IN; \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2581 for (reg = 0; reg < 4; reg++) \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2582 if (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, reg) >= 0 \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2583 && (CODING_SPEC_ISO_DESIGNATION (coding, reg) \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2584 != CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, reg))) \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2585 ENCODE_DESIGNATION \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2586 (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, reg), reg, coding); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2587 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2588
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2589 /* 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
2590 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
2591
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2592 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
2593 find all the necessary designations. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2594
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2595 static unsigned char *
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2596 encode_designation_at_bol (coding, translation_table, src, src_end, dst)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2597 struct coding_system *coding;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2598 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2599 unsigned char *src, *src_end, *dst;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2600 {
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2601 int charset, c, found = 0, reg;
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2602 /* 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
2603 int r[4];
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2604
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2605 for (reg = 0; reg < 4; reg++)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2606 r[reg] = -1;
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2607
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2608 while (found < 4)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2609 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2610 ONE_MORE_CHAR (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2611 if (c == '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2612 break;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
2613
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2614 charset = CHAR_CHARSET (c);
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2615 reg = CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2616 if (reg != CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION && r[reg] < 0)
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2617 {
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2618 found++;
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2619 r[reg] = charset;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2620 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2621 }
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2622
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2623 label_end_of_loop:
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2624 if (found)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2625 {
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2626 for (reg = 0; reg < 4; reg++)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2627 if (r[reg] >= 0
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2628 && CODING_SPEC_ISO_DESIGNATION (coding, reg) != r[reg])
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2629 ENCODE_DESIGNATION (r[reg], reg, coding);
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2630 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2631
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2632 return dst;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2633 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2634
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2635 /* See the above "GENERAL NOTES on `encode_coding_XXX ()' functions". */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2636
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2637 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2638 encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2639 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2640 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2641 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2642 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2643 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2644 unsigned char *src_end = source + src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2645 unsigned char *dst = destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2646 unsigned char *dst_end = destination + dst_bytes;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2647 /* Since the maximum bytes produced by each loop is 20, we subtract 19
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2648 from DST_END to assure overflow checking is necessary only at the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2649 head of loop. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2650 unsigned char *adjusted_dst_end = dst_end - 19;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2651 /* SRC_BASE remembers the start position in source in each loop.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2652 The loop will be exited when there's not enough source text to
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2653 analyze multi-byte codes (within macro ONE_MORE_CHAR), or when
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2654 there's not enough destination area to produce encoded codes
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2655 (within macro EMIT_BYTES). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2656 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2657 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2658 Lisp_Object translation_table;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2659 Lisp_Object safe_chars;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2660
51140
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2661 if (coding->flags & CODING_FLAG_ISO_SAFE)
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2662 coding->mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR;
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2663
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
2664 safe_chars = coding_safe_chars (coding->symbol);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2665
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2666 if (NILP (Venable_character_translation))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2667 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2668 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2669 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2670 translation_table = coding->translation_table_for_encode;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2671 if (NILP (translation_table))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2672 translation_table = Vstandard_translation_table_for_encode;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2673 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2674
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2675 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
2676 coding->errors = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2677 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2678 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2679 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2680
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2681 if (dst >= (dst_bytes ? adjusted_dst_end : (src - 19)))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2682 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2683 coding->result = CODING_FINISH_INSUFFICIENT_DST;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2684 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2685 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2686
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2687 if (coding->flags & CODING_FLAG_ISO_DESIGNATE_AT_BOL
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2688 && CODING_SPEC_ISO_BOL (coding))
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2689 {
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2690 /* We have to produce designation sequences if any now. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2691 dst = encode_designation_at_bol (coding, translation_table,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2692 src, src_end, dst);
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2693 CODING_SPEC_ISO_BOL (coding) = 0;
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2694 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2695
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2696 /* Check composition start and end. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2697 if (coding->composing != COMPOSITION_DISABLED
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2698 && coding->cmp_data_start < coding->cmp_data->used)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2699 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2700 struct composition_data *cmp_data = coding->cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2701 int *data = cmp_data->data + coding->cmp_data_start;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2702 int this_pos = cmp_data->char_offset + coding->consumed_char;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2703
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2704 if (coding->composing == COMPOSITION_RELATIVE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2705 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2706 if (this_pos == data[2])
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2707 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2708 ENCODE_COMPOSITION_END (coding, data);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2709 cmp_data = coding->cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2710 data = cmp_data->data + coding->cmp_data_start;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2711 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2712 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2713 else if (COMPOSING_P (coding))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2714 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2715 /* COMPOSITION_WITH_ALTCHARS or COMPOSITION_WITH_RULE_ALTCHAR */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2716 if (coding->cmp_data_index == coding->cmp_data_start + data[0])
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2717 /* We have consumed components of the composition.
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2718 What follows in SRC is the composition's base
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2719 text. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2720 ENCODE_COMPOSITION_FAKE_START (coding);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2721 else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2722 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2723 int c = cmp_data->data[coding->cmp_data_index++];
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2724 if (coding->composition_rule_follows)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2725 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2726 ENCODE_COMPOSITION_RULE (c);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2727 coding->composition_rule_follows = 0;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2728 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2729 else
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2730 {
51140
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2731 if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2732 && ! CODING_SAFE_CHAR_P (safe_chars, c))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2733 ENCODE_UNSAFE_CHARACTER (c);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2734 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2735 ENCODE_ISO_CHARACTER (c);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2736 if (coding->composing == COMPOSITION_WITH_RULE_ALTCHARS)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2737 coding->composition_rule_follows = 1;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2738 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2739 continue;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2740 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2741 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2742 if (!COMPOSING_P (coding))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2743 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2744 if (this_pos == data[1])
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2745 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2746 ENCODE_COMPOSITION_START (coding, data);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2747 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2748 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2749 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2750 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2751
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2752 ONE_MORE_CHAR (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2753
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2754 /* 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
2755 if (c < 0x20 || c == 0x7F)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2756 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2757 if (c == '\r')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2758 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2759 if (! (coding->mode & CODING_MODE_SELECTIVE_DISPLAY))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2760 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2761 if (coding->flags & CODING_FLAG_ISO_RESET_AT_CNTL)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2762 ENCODE_RESET_PLANE_AND_REGISTER;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2763 *dst++ = c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2764 continue;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2765 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2766 /* fall down to treat '\r' as '\n' ... */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2767 c = '\n';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2768 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2769 if (c == '\n')
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 if (coding->flags & CODING_FLAG_ISO_RESET_AT_EOL)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2772 ENCODE_RESET_PLANE_AND_REGISTER;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2773 if (coding->flags & CODING_FLAG_ISO_INIT_AT_BOL)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2774 bcopy (coding->spec.iso2022.initial_designation,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2775 coding->spec.iso2022.current_designation,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2776 sizeof coding->spec.iso2022.initial_designation);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2777 if (coding->eol_type == CODING_EOL_LF
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2778 || coding->eol_type == CODING_EOL_UNDECIDED)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2779 *dst++ = ISO_CODE_LF;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2780 else if (coding->eol_type == CODING_EOL_CRLF)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2781 *dst++ = ISO_CODE_CR, *dst++ = ISO_CODE_LF;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2782 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2783 *dst++ = ISO_CODE_CR;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2784 CODING_SPEC_ISO_BOL (coding) = 1;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2785 }
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
2786 else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2787 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2788 if (coding->flags & CODING_FLAG_ISO_RESET_AT_CNTL)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2789 ENCODE_RESET_PLANE_AND_REGISTER;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2790 *dst++ = c;
19052
302a7b2a6948 (encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents: 18910
diff changeset
2791 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2792 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2793 else if (ASCII_BYTE_P (c))
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2794 ENCODE_ISO_CHARACTER (c);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2795 else if (SINGLE_BYTE_CHAR_P (c))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2796 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2797 *dst++ = c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2798 coding->errors++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2799 }
51140
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
2800 else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2801 && ! CODING_SAFE_CHAR_P (safe_chars, c))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2802 ENCODE_UNSAFE_CHARACTER (c);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2803 else
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2804 ENCODE_ISO_CHARACTER (c);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2805
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2806 coding->consumed_char++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2807 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2808
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2809 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2810 coding->consumed = src_base - source;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2811 coding->produced = coding->produced_char = dst - destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2812 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2813
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2814
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2815 /*** 4. SJIS and BIG5 handlers ***/
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2816
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2817 /* Although SJIS and BIG5 are not ISO coding systems, they are used
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2818 quite widely. So, for the moment, Emacs supports them in the bare
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2819 C code. But, in the future, they may be supported only by CCL. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2820
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2821 /* SJIS is a coding system encoding three character sets: ASCII, right
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2822 half of JISX0201-Kana, and JISX0208. An ASCII character is encoded
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2823 as is. A character of charset katakana-jisx0201 is encoded by
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2824 "position-code + 0x80". A character of charset japanese-jisx0208
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2825 is encoded in 2-byte but two position-codes are divided and shifted
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2826 so that it fits in the range below.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2827
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2828 --- CODE RANGE of SJIS ---
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2829 (character set) (range)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2830 ASCII 0x00 .. 0x7F
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2831 KATAKANA-JISX0201 0xA1 .. 0xDF
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
2832 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
2833 (2nd byte) 0x40 .. 0x7E and 0x80 .. 0xFC
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2834 -------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2835
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2836 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2837
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2838 /* BIG5 is a coding system encoding two character sets: ASCII and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2839 Big5. An ASCII character is encoded as is. Big5 is a two-byte
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2840 character set and is encoded in two bytes.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2841
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2842 --- CODE RANGE of BIG5 ---
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2843 (character set) (range)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2844 ASCII 0x00 .. 0x7F
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2845 Big5 (1st byte) 0xA1 .. 0xFE
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2846 (2nd byte) 0x40 .. 0x7E and 0xA1 .. 0xFE
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2847 --------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2848
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2849 Since the number of characters in Big5 is larger than maximum
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2850 characters in Emacs' charset (96x96), it can't be handled as one
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2851 charset. So, in Emacs, Big5 is divided into two: `charset-big5-1'
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2852 and `charset-big5-2'. Both are DIMENSION2 and CHARS94. The former
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2853 contains frequently used characters and the latter contains less
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2854 frequently used characters. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2855
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2856 /* Macros to decode or encode a character of Big5 in BIG5. B1 and B2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2857 are the 1st and 2nd position-codes of Big5 in BIG5 coding system.
46150
5d6d01bbbe87 Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 45981
diff changeset
2858 C1 and C2 are the 1st and 2nd position-codes of Emacs' internal
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2859 format. CHARSET is `charset_big5_1' or `charset_big5_2'. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2860
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2861 /* Number of Big5 characters which have the same code in 1st byte. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2862 #define BIG5_SAME_ROW (0xFF - 0xA1 + 0x7F - 0x40)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2863
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2864 #define DECODE_BIG5(b1, b2, charset, c1, c2) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2865 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2866 unsigned int temp \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2867 = (b1 - 0xA1) * BIG5_SAME_ROW + b2 - (b2 < 0x7F ? 0x40 : 0x62); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2868 if (b1 < 0xC9) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2869 charset = charset_big5_1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2870 else \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2871 { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2872 charset = charset_big5_2; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2873 temp -= (0xC9 - 0xA1) * BIG5_SAME_ROW; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2874 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2875 c1 = temp / (0xFF - 0xA1) + 0x21; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2876 c2 = temp % (0xFF - 0xA1) + 0x21; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2877 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2878
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2879 #define ENCODE_BIG5(charset, c1, c2, b1, b2) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2880 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2881 unsigned int temp = (c1 - 0x21) * (0xFF - 0xA1) + (c2 - 0x21); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2882 if (charset == charset_big5_2) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2883 temp += BIG5_SAME_ROW * (0xC9 - 0xA1); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2884 b1 = temp / BIG5_SAME_ROW + 0xA1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2885 b2 = temp % BIG5_SAME_ROW; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2886 b2 += b2 < 0x3F ? 0x40 : 0x62; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2887 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2888
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2889 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2890 Check if a text is encoded in SJIS. If it is, return
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2891 CODING_CATEGORY_MASK_SJIS, else return 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2892
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2893 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2894 detect_coding_sjis (src, src_end, multibytep)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2895 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2896 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2897 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2898 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2899 /* Dummy for ONE_MORE_BYTE. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2900 struct coding_system dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2901 struct coding_system *coding = &dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2902
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2903 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2904 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2905 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2906 if (c < 0x80)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2907 continue;
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2908 if (c == 0x80 || c == 0xA0 || c > 0xEF)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2909 return 0;
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2910 if (c <= 0x9F || c >= 0xE0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2911 {
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2912 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2913 if (c < 0x40 || c == 0x7F || c > 0xFC)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2914 return 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2915 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2916 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2917 label_end_of_loop:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2918 return CODING_CATEGORY_MASK_SJIS;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2919 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2920
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2921 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2922 Check if a text is encoded in BIG5. If it is, return
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2923 CODING_CATEGORY_MASK_BIG5, else return 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2924
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2925 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2926 detect_coding_big5 (src, src_end, multibytep)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2927 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2928 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2929 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2930 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2931 /* Dummy for ONE_MORE_BYTE. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2932 struct coding_system dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2933 struct coding_system *coding = &dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2934
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2935 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2936 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2937 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2938 if (c < 0x80)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2939 continue;
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2940 if (c < 0xA1 || c > 0xFE)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2941 return 0;
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2942 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2943 if (c < 0x40 || (c > 0x7F && c < 0xA1) || c > 0xFE)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2944 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2945 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2946 label_end_of_loop:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2947 return CODING_CATEGORY_MASK_BIG5;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2948 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2949
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2950 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2951 Check if a text is encoded in UTF-8. If it is, return
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2952 CODING_CATEGORY_MASK_UTF_8, else return 0. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2953
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2954 #define UTF_8_1_OCTET_P(c) ((c) < 0x80)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2955 #define UTF_8_EXTRA_OCTET_P(c) (((c) & 0xC0) == 0x80)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2956 #define UTF_8_2_OCTET_LEADING_P(c) (((c) & 0xE0) == 0xC0)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2957 #define UTF_8_3_OCTET_LEADING_P(c) (((c) & 0xF0) == 0xE0)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2958 #define UTF_8_4_OCTET_LEADING_P(c) (((c) & 0xF8) == 0xF0)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2959 #define UTF_8_5_OCTET_LEADING_P(c) (((c) & 0xFC) == 0xF8)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2960 #define UTF_8_6_OCTET_LEADING_P(c) (((c) & 0xFE) == 0xFC)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2961
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2962 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2963 detect_coding_utf_8 (src, src_end, multibytep)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2964 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2965 int multibytep;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2966 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2967 unsigned char c;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2968 int seq_maybe_bytes;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2969 /* Dummy for ONE_MORE_BYTE. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2970 struct coding_system dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2971 struct coding_system *coding = &dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2972
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2973 while (1)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2974 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2975 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2976 if (UTF_8_1_OCTET_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2977 continue;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2978 else if (UTF_8_2_OCTET_LEADING_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2979 seq_maybe_bytes = 1;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2980 else if (UTF_8_3_OCTET_LEADING_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2981 seq_maybe_bytes = 2;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2982 else if (UTF_8_4_OCTET_LEADING_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2983 seq_maybe_bytes = 3;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2984 else if (UTF_8_5_OCTET_LEADING_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2985 seq_maybe_bytes = 4;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2986 else if (UTF_8_6_OCTET_LEADING_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2987 seq_maybe_bytes = 5;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2988 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2989 return 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2990
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2991 do
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2992 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2993 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2994 if (!UTF_8_EXTRA_OCTET_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2995 return 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2996 seq_maybe_bytes--;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2997 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2998 while (seq_maybe_bytes > 0);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2999 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3000
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3001 label_end_of_loop:
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3002 return CODING_CATEGORY_MASK_UTF_8;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3003 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3004
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3005 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3006 Check if a text is encoded in UTF-16 Big Endian (endian == 1) or
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3007 Little Endian (otherwise). If it is, return
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3008 CODING_CATEGORY_MASK_UTF_16_BE or CODING_CATEGORY_MASK_UTF_16_LE,
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3009 else return 0. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3010
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3011 #define UTF_16_INVALID_P(val) \
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3012 (((val) == 0xFFFE) \
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3013 || ((val) == 0xFFFF))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3014
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3015 #define UTF_16_HIGH_SURROGATE_P(val) \
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3016 (((val) & 0xD800) == 0xD800)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3017
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3018 #define UTF_16_LOW_SURROGATE_P(val) \
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3019 (((val) & 0xDC00) == 0xDC00)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3020
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3021 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3022 detect_coding_utf_16 (src, src_end, multibytep)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3023 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3024 int multibytep;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3025 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3026 unsigned char c1, c2;
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
3027 /* Dummy for ONE_MORE_BYTE_CHECK_MULTIBYTE. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3028 struct coding_system dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3029 struct coding_system *coding = &dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3030
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3031 ONE_MORE_BYTE_CHECK_MULTIBYTE (c1, multibytep);
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3032 ONE_MORE_BYTE_CHECK_MULTIBYTE (c2, multibytep);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3033
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3034 if ((c1 == 0xFF) && (c2 == 0xFE))
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3035 return CODING_CATEGORY_MASK_UTF_16_LE;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3036 else if ((c1 == 0xFE) && (c2 == 0xFF))
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3037 return CODING_CATEGORY_MASK_UTF_16_BE;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3038
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3039 label_end_of_loop:
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3040 return 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3041 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3042
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3043 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3044 If SJIS_P is 1, decode SJIS text, else decode BIG5 test. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3045
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3046 static void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3047 decode_coding_sjis_big5 (coding, source, destination,
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3048 src_bytes, dst_bytes, sjis_p)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3049 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3050 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3051 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3052 int sjis_p;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3053 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3054 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3055 unsigned char *src_end = source + src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3056 unsigned char *dst = destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3057 unsigned char *dst_end = destination + dst_bytes;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3058 /* SRC_BASE remembers the start position in source in each loop.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3059 The loop will be exited when there's not enough source code
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3060 (within macro ONE_MORE_BYTE), or when there's not enough
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3061 destination area to produce a character (within macro
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3062 EMIT_CHAR). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3063 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3064 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3065
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3066 if (NILP (Venable_character_translation))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3067 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3068 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3069 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3070 translation_table = coding->translation_table_for_decode;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3071 if (NILP (translation_table))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3072 translation_table = Vstandard_translation_table_for_decode;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3073 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3074
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3075 coding->produced_char = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3076 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3077 {
52354
5480186284b2 (decode_coding_iso2022): Initialized local variable c2.
Kenichi Handa <handa@m17n.org>
parents: 52016
diff changeset
3078 int c, charset, c1, c2 = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3079
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3080 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3081 ONE_MORE_BYTE (c1);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3082
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3083 if (c1 < 0x80)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3084 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3085 charset = CHARSET_ASCII;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3086 if (c1 < 0x20)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3087 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3088 if (c1 == '\r')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3089 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3090 if (coding->eol_type == CODING_EOL_CRLF)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3091 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3092 ONE_MORE_BYTE (c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3093 if (c2 == '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3094 c1 = c2;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3095 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3096 /* To process C2 again, SRC is subtracted by 1. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3097 src--;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3098 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3099 else if (coding->eol_type == CODING_EOL_CR)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3100 c1 = '\n';
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3101 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3102 else if (c1 == '\n'
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3103 && (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3104 && (coding->eol_type == CODING_EOL_CR
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3105 || coding->eol_type == CODING_EOL_CRLF))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3106 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3107 coding->result = CODING_FINISH_INCONSISTENT_EOL;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3108 goto label_end_of_loop;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3109 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3110 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3111 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3112 else
24870
b0f6eab5deeb (decode_coding_sjis_big5): Avoid compiler warning.
Kenichi Handa <handa@m17n.org>
parents: 24822
diff changeset
3113 {
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3114 if (sjis_p)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3115 {
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
3116 if (c1 == 0x80 || c1 == 0xA0 || c1 > 0xEF)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3117 goto label_invalid_code;
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
3118 if (c1 <= 0x9F || c1 >= 0xE0)
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3119 {
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3120 /* SJIS -> JISX0208 */
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3121 ONE_MORE_BYTE (c2);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3122 if (c2 < 0x40 || c2 == 0x7F || c2 > 0xFC)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3123 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3124 DECODE_SJIS (c1, c2, c1, c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3125 charset = charset_jisx0208;
24870
b0f6eab5deeb (decode_coding_sjis_big5): Avoid compiler warning.
Kenichi Handa <handa@m17n.org>
parents: 24822
diff changeset
3126 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3127 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3128 /* SJIS -> JISX0201-Kana */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3129 charset = charset_katakana_jisx0201;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3130 }
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3131 else
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3132 {
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3133 /* BIG5 -> Big5 */
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
3134 if (c1 < 0xA0 || c1 > 0xFE)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3135 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3136 ONE_MORE_BYTE (c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3137 if (c2 < 0x40 || (c2 > 0x7E && c2 < 0xA1) || c2 > 0xFE)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3138 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3139 DECODE_BIG5 (c1, c2, charset, c1, c2);
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3140 }
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3141 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3142
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3143 c = DECODE_ISO_CHARACTER (charset, c1, c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3144 EMIT_CHAR (c);
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3145 continue;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3146
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3147 label_invalid_code:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3148 coding->errors++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3149 src = src_base;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3150 c = *src++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3151 EMIT_CHAR (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3152 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3153
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3154 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3155 coding->consumed = coding->consumed_char = src_base - source;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3156 coding->produced = dst - destination;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3157 return;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3158 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3159
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3160 /* 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
3161 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
3162 `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
3163 are sure that all these charsets are registered as official charset
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3164 (i.e. do not have extended leading-codes). Characters of other
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3165 charsets are produced without any encoding. If SJIS_P is 1, encode
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3166 SJIS text, else encode BIG5 text. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3167
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3168 static void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3169 encode_coding_sjis_big5 (coding, source, destination,
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3170 src_bytes, dst_bytes, sjis_p)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3171 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3172 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3173 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3174 int sjis_p;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3175 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3176 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3177 unsigned char *src_end = source + src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3178 unsigned char *dst = destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3179 unsigned char *dst_end = destination + dst_bytes;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3180 /* SRC_BASE remembers the start position in source in each loop.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3181 The loop will be exited when there's not enough source text to
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3182 analyze multi-byte codes (within macro ONE_MORE_CHAR), or when
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3183 there's not enough destination area to produce encoded codes
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3184 (within macro EMIT_BYTES). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3185 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3186 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3187
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3188 if (NILP (Venable_character_translation))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3189 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3190 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3191 {
31455
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
3192 translation_table = coding->translation_table_for_encode;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3193 if (NILP (translation_table))
31455
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
3194 translation_table = Vstandard_translation_table_for_encode;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3195 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3196
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3197 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3198 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3199 int c, charset, c1, c2;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3200
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3201 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3202 ONE_MORE_CHAR (c);
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
3203
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3204 /* 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
3205 if (SINGLE_BYTE_CHAR_P (c))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3206 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3207 switch (c)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3208 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3209 case '\r':
45227
6ce63e0a93f1 (encode_coding_sjis_big5): Enclose bitwise AND in
Eli Zaretskii <eliz@gnu.org>
parents: 44562
diff changeset
3210 if (!(coding->mode & CODING_MODE_SELECTIVE_DISPLAY))
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3211 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3212 EMIT_ONE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3213 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3214 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3215 c = '\n';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3216 case '\n':
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3217 if (coding->eol_type == CODING_EOL_CRLF)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3218 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3219 EMIT_TWO_BYTES ('\r', c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3220 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3221 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3222 else if (coding->eol_type == CODING_EOL_CR)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3223 c = '\r';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3224 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3225 EMIT_ONE_BYTE (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3226 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3227 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3228 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3229 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3230 SPLIT_CHAR (c, charset, c1, c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3231 if (sjis_p)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3232 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3233 if (charset == charset_jisx0208
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3234 || charset == charset_jisx0208_1978)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3235 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3236 ENCODE_SJIS (c1, c2, c1, c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3237 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
3238 }
31455
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
3239 else if (charset == charset_katakana_jisx0201)
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
3240 EMIT_ONE_BYTE (c1 | 0x80);
31457
b1c66af9aba5 (encode_coding_sjis_big5): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 31455
diff changeset
3241 else if (charset == charset_latin_jisx0201)
b1c66af9aba5 (encode_coding_sjis_big5): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 31455
diff changeset
3242 EMIT_ONE_BYTE (c1);
51140
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3243 else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR)
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3244 {
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3245 EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER);
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3246 if (CHARSET_WIDTH (charset) > 1)
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3247 EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER);
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3248 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3249 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3250 /* There's no way other than producing the internal
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3251 codes as is. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3252 EMIT_BYTES (src_base, src);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3253 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3254 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3255 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3256 if (charset == charset_big5_1 || charset == charset_big5_2)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3257 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3258 ENCODE_BIG5 (charset, c1, c2, c1, c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3259 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
3260 }
51140
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3261 else if (coding->mode & CODING_MODE_INHIBIT_UNENCODABLE_CHAR)
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3262 {
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3263 EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER);
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3264 if (CHARSET_WIDTH (charset) > 1)
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3265 EMIT_ONE_BYTE (CODING_REPLACEMENT_CHARACTER);
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
3266 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3267 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3268 /* There's no way other than producing the internal
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3269 codes as is. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3270 EMIT_BYTES (src_base, src);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3271 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3272 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3273 coding->consumed_char++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3274 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3275
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3276 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3277 coding->consumed = src_base - source;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3278 coding->produced = coding->produced_char = dst - destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3279 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3280
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3281
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3282 /*** 5. CCL handlers ***/
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3283
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3284 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3285 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
3286 encoder/decoder are written in CCL program. If it is, return
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3287 CODING_CATEGORY_MASK_CCL, else return 0. */
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3288
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3289 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3290 detect_coding_ccl (src, src_end, multibytep)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3291 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3292 int multibytep;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3293 {
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3294 unsigned char *valid;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3295 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3296 /* Dummy for ONE_MORE_BYTE. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3297 struct coding_system dummy_coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3298 struct coding_system *coding = &dummy_coding;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3299
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3300 /* No coding system is assigned to coding-category-ccl. */
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3301 if (!coding_system_table[CODING_CATEGORY_IDX_CCL])
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3302 return 0;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3303
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3304 valid = coding_system_table[CODING_CATEGORY_IDX_CCL]->spec.ccl.valid_codes;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3305 while (1)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3306 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3307 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3308 if (! valid[c])
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3309 return 0;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3310 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3311 label_end_of_loop:
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3312 return CODING_CATEGORY_MASK_CCL;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3313 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3314
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3315
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3316 /*** 6. End-of-line handlers ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3317
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3318 /* 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
3319
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3320 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3321 decode_eol (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3322 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3323 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3324 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3325 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3326 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3327 unsigned char *dst = destination;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3328 unsigned char *src_end = src + src_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3329 unsigned char *dst_end = dst + dst_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3330 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3331 /* SRC_BASE remembers the start position in source in each loop.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3332 The loop will be exited when there's not enough source code
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3333 (within macro ONE_MORE_BYTE), or when there's not enough
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3334 destination area to produce a character (within macro
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3335 EMIT_CHAR). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3336 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3337 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3338
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3339 translation_table = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3340 switch (coding->eol_type)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3341 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3342 case CODING_EOL_CRLF:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3343 while (1)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3344 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3345 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3346 ONE_MORE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3347 if (c == '\r')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3348 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3349 ONE_MORE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3350 if (c != '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3351 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3352 src--;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3353 c = '\r';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3354 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3355 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3356 else if (c == '\n'
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3357 && (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3358 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3359 coding->result = CODING_FINISH_INCONSISTENT_EOL;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3360 goto label_end_of_loop;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3361 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3362 EMIT_CHAR (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3363 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3364 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3365
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3366 case CODING_EOL_CR:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3367 while (1)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3368 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3369 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3370 ONE_MORE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3371 if (c == '\n')
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3372 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3373 if (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3374 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3375 coding->result = CODING_FINISH_INCONSISTENT_EOL;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3376 goto label_end_of_loop;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3377 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3378 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3379 else if (c == '\r')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3380 c = '\n';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3381 EMIT_CHAR (c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3382 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3383 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3384
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3385 default: /* no need for EOL handling */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3386 while (1)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3387 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3388 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3389 ONE_MORE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3390 EMIT_CHAR (c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3391 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3392 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3393
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3394 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3395 coding->consumed = coding->consumed_char = src_base - source;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3396 coding->produced = dst - destination;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3397 return;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3398 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3399
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3400 /* See "GENERAL NOTES about `encode_coding_XXX ()' functions". Encode
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3401 format of end-of-line according to `coding->eol_type'. It also
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
3402 convert multibyte form 8-bit characters to unibyte if
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3403 CODING->src_multibyte is nonzero. If `coding->mode &
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3404 CODING_MODE_SELECTIVE_DISPLAY' is nonzero, code '\r' in source text
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3405 also means end-of-line. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3406
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3407 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3408 encode_eol (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3409 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3410 const unsigned char *source;
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3411 unsigned char *destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3412 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3413 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3414 const unsigned char *src = source;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3415 unsigned char *dst = destination;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3416 const unsigned char *src_end = src + src_bytes;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3417 unsigned char *dst_end = dst + dst_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3418 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3419 /* SRC_BASE remembers the start position in source in each loop.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3420 The loop will be exited when there's not enough source text to
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3421 analyze multi-byte codes (within macro ONE_MORE_CHAR), or when
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3422 there's not enough destination area to produce encoded codes
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3423 (within macro EMIT_BYTES). */
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3424 const unsigned char *src_base;
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3425 unsigned char *tmp;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3426 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3427 int selective_display = coding->mode & CODING_MODE_SELECTIVE_DISPLAY;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3428
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3429 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3430 if (coding->src_multibyte
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3431 && *(src_end - 1) == LEADING_CODE_8_BIT_CONTROL)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3432 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3433 src_end--;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3434 src_bytes--;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3435 coding->result = CODING_FINISH_INSUFFICIENT_SRC;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3436 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3437
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3438 if (coding->eol_type == CODING_EOL_CRLF)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3439 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3440 while (src < src_end)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3441 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3442 src_base = src;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3443 c = *src++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3444 if (c >= 0x20)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3445 EMIT_ONE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3446 else if (c == '\n' || (c == '\r' && selective_display))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3447 EMIT_TWO_BYTES ('\r', '\n');
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3448 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3449 EMIT_ONE_BYTE (c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3450 }
29093
176708661b08 (encode_eol): Fix a bug of DOS style EOL encoding.
Kenichi Handa <handa@m17n.org>
parents: 29005
diff changeset
3451 src_base = src;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3452 label_end_of_loop:
29182
1d1c27067af4 (encode_eol): Add null statement after label.
Dave Love <fx@gnu.org>
parents: 29172
diff changeset
3453 ;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3454 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3455 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3456 {
31123
097593e77185 (encode_eol): Fix bug for the case of dst_bytes being zero. Set
Kenichi Handa <handa@m17n.org>
parents: 30951
diff changeset
3457 if (!dst_bytes || src_bytes <= dst_bytes)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3458 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3459 safe_bcopy (src, dst, src_bytes);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3460 src_base = src_end;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3461 dst += src_bytes;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3462 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3463 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3464 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3465 if (coding->src_multibyte
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3466 && *(src + dst_bytes - 1) == LEADING_CODE_8_BIT_CONTROL)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3467 dst_bytes--;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3468 safe_bcopy (src, dst, dst_bytes);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3469 src_base = src + dst_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3470 dst = destination + dst_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3471 coding->result = CODING_FINISH_INSUFFICIENT_DST;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3472 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3473 if (coding->eol_type == CODING_EOL_CR)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3474 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3475 for (tmp = destination; tmp < dst; tmp++)
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3476 if (*tmp == '\n') *tmp = '\r';
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3477 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3478 else if (selective_display)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3479 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3480 for (tmp = destination; tmp < dst; tmp++)
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3481 if (*tmp == '\r') *tmp = '\n';
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3482 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3483 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3484 if (coding->src_multibyte)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3485 dst = destination + str_as_unibyte (destination, dst - destination);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3486
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3487 coding->consumed = src_base - source;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3488 coding->produced = dst - destination;
31123
097593e77185 (encode_eol): Fix bug for the case of dst_bytes being zero. Set
Kenichi Handa <handa@m17n.org>
parents: 30951
diff changeset
3489 coding->produced_char = coding->produced;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3490 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3491
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3492
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3493 /*** 7. C library functions ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3494
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3495 /* In Emacs Lisp, a coding system is represented by a Lisp symbol which
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3496 has a property `coding-system'. The value of this property is a
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3497 vector of length 5 (called the coding-vector). Among elements of
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3498 this vector, the first (element[0]) and the fifth (element[4])
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3499 carry important information for decoding/encoding. Before
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3500 decoding/encoding, this information should be set in fields of a
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3501 structure of type `coding_system'.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3502
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3503 The value of the property `coding-system' can be a symbol of another
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3504 subsidiary coding-system. In that case, Emacs gets coding-vector
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3505 from that symbol.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3506
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3507 `element[0]' contains information to be set in `coding->type'. The
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3508 value and its meaning is as follows:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3509
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3510 0 -- coding_type_emacs_mule
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3511 1 -- coding_type_sjis
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3512 2 -- coding_type_iso2022
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3513 3 -- coding_type_big5
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3514 4 -- coding_type_ccl encoder/decoder written in CCL
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3515 nil -- coding_type_no_conversion
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3516 t -- coding_type_undecided (automatic conversion on decoding,
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3517 no-conversion on encoding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3518
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3519 `element[4]' contains information to be set in `coding->flags' and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3520 `coding->spec'. The meaning varies by `coding->type'.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3521
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3522 If `coding->type' is `coding_type_iso2022', element[4] is a vector
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3523 of length 32 (of which the first 13 sub-elements are used now).
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3524 Meanings of these sub-elements are:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3525
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3526 sub-element[N] where N is 0 through 3: to be set in `coding->spec.iso2022'
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3527 If the value is an integer of valid charset, the charset is
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3528 assumed to be designated to graphic register N initially.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3529
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3530 If the value is minus, it is a minus value of charset which
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3531 reserves graphic register N, which means that the charset is
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3532 not designated initially but should be designated to graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3533 register N just before encoding a character in that charset.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3534
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3535 If the value is nil, graphic register N is never used on
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3536 encoding.
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
3537
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3538 sub-element[N] where N is 4 through 11: to be set in `coding->flags'
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3539 Each value takes t or nil. See the section ISO2022 of
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3540 `coding.h' for more information.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3541
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3542 If `coding->type' is `coding_type_big5', element[4] is t to denote
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3543 BIG5-ETen or nil to denote BIG5-HKU.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3544
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3545 If `coding->type' takes the other value, element[4] is ignored.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3546
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3547 Emacs Lisp's coding systems also carry information about format of
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3548 end-of-line in a value of property `eol-type'. If the value is
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3549 integer, 0 means CODING_EOL_LF, 1 means CODING_EOL_CRLF, and 2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3550 means CODING_EOL_CR. If it is not integer, it should be a vector
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3551 of subsidiary coding systems of which property `eol-type' has one
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3552 of the above values.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3553
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3554 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3555
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3556 /* Extract information for decoding/encoding from CODING_SYSTEM_SYMBOL
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3557 and set it in CODING. If CODING_SYSTEM_SYMBOL is invalid, CODING
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3558 is setup so that no conversion is necessary and return -1, else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3559 return 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3560
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3561 int
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3562 setup_coding_system (coding_system, coding)
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3563 Lisp_Object coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3564 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3565 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3566 Lisp_Object coding_spec, coding_type, eol_type, plist;
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3567 Lisp_Object val;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3568
34591
9d5d795f9315 (setup_coding_system): Clear all members of the struct
Kenichi Handa <handa@m17n.org>
parents: 34536
diff changeset
3569 /* At first, zero clear all members. */
9d5d795f9315 (setup_coding_system): Clear all members of the struct
Kenichi Handa <handa@m17n.org>
parents: 34536
diff changeset
3570 bzero (coding, sizeof (struct coding_system));
9d5d795f9315 (setup_coding_system): Clear all members of the struct
Kenichi Handa <handa@m17n.org>
parents: 34536
diff changeset
3571
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3572 /* Initialize some fields required for all kinds of coding systems. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3573 coding->symbol = coding_system;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3574 coding->heading_ascii = -1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3575 coding->post_read_conversion = coding->pre_write_conversion = Qnil;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3576 coding->composing = COMPOSITION_DISABLED;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3577 coding->cmp_data = NULL;
24460
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3578
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3579 if (NILP (coding_system))
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3580 goto label_invalid_coding_system;
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3581
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3582 coding_spec = Fget (coding_system, Qcoding_system);
24460
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3583
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3584 if (!VECTORP (coding_spec)
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3585 || XVECTOR (coding_spec)->size != 5
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3586 || !CONSP (XVECTOR (coding_spec)->contents[3]))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3587 goto label_invalid_coding_system;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3588
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3589 eol_type = inhibit_eol_conversion ? Qnil : Fget (coding_system, Qeol_type);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3590 if (VECTORP (eol_type))
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3591 {
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3592 coding->eol_type = CODING_EOL_UNDECIDED;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3593 coding->common_flags = CODING_REQUIRE_DETECTION_MASK;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3594 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3595 else if (XFASTINT (eol_type) == 1)
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3596 {
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3597 coding->eol_type = CODING_EOL_CRLF;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3598 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3599 = CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3600 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3601 else if (XFASTINT (eol_type) == 2)
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3602 {
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3603 coding->eol_type = CODING_EOL_CR;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3604 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3605 = CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3606 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3607 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3608 coding->eol_type = CODING_EOL_LF;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3609
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3610 coding_type = XVECTOR (coding_spec)->contents[0];
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3611 /* Try short cut. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3612 if (SYMBOLP (coding_type))
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3613 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3614 if (EQ (coding_type, Qt))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3615 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3616 coding->type = coding_type_undecided;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3617 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3618 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3619 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3620 coding->type = coding_type_no_conversion;
34197
78561a43cdd1 (setup_coding_system): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 33931
diff changeset
3621 /* Initialize this member. Any thing other than
78561a43cdd1 (setup_coding_system): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 33931
diff changeset
3622 CODING_CATEGORY_IDX_UTF_16_BE and
78561a43cdd1 (setup_coding_system): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 33931
diff changeset
3623 CODING_CATEGORY_IDX_UTF_16_LE are ok because they have
78561a43cdd1 (setup_coding_system): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 33931
diff changeset
3624 special treatment in detect_eol. */
78561a43cdd1 (setup_coding_system): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 33931
diff changeset
3625 coding->category_idx = CODING_CATEGORY_IDX_EMACS_MULE;
78561a43cdd1 (setup_coding_system): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 33931
diff changeset
3626
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3627 return 0;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3628 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3629
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3630 /* Get values of coding system properties:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3631 `post-read-conversion', `pre-write-conversion',
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3632 `translation-table-for-decode', `translation-table-for-encode'. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3633 plist = XVECTOR (coding_spec)->contents[3];
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3634 /* Pre & post conversion functions should be disabled if
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
3635 inhibit_eol_conversion is nonzero. This is the case that a code
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3636 conversion function is called while those functions are running. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3637 if (! inhibit_pre_post_conversion)
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3638 {
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3639 coding->post_read_conversion = Fplist_get (plist, Qpost_read_conversion);
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3640 coding->pre_write_conversion = Fplist_get (plist, Qpre_write_conversion);
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3641 }
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3642 val = Fplist_get (plist, Qtranslation_table_for_decode);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3643 if (SYMBOLP (val))
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3644 val = Fget (val, Qtranslation_table_for_decode);
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3645 coding->translation_table_for_decode = CHAR_TABLE_P (val) ? val : Qnil;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3646 val = Fplist_get (plist, Qtranslation_table_for_encode);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3647 if (SYMBOLP (val))
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3648 val = Fget (val, Qtranslation_table_for_encode);
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3649 coding->translation_table_for_encode = CHAR_TABLE_P (val) ? val : Qnil;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3650 val = Fplist_get (plist, Qcoding_category);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3651 if (!NILP (val))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3652 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3653 val = Fget (val, Qcoding_category_index);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3654 if (INTEGERP (val))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3655 coding->category_idx = XINT (val);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3656 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3657 goto label_invalid_coding_system;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3658 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3659 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3660 goto label_invalid_coding_system;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
3661
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3662 /* If the coding system has non-nil `composition' property, enable
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3663 composition handling. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3664 val = Fplist_get (plist, Qcomposition);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3665 if (!NILP (val))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3666 coding->composing = COMPOSITION_NO;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3667
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3668 switch (XFASTINT (coding_type))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3669 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3670 case 0:
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3671 coding->type = coding_type_emacs_mule;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
3672 coding->common_flags
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
3673 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3674 if (!NILP (coding->post_read_conversion))
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3675 coding->common_flags |= CODING_REQUIRE_DECODING_MASK;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3676 if (!NILP (coding->pre_write_conversion))
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3677 coding->common_flags |= CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3678 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3679
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3680 case 1:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3681 coding->type = coding_type_sjis;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3682 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3683 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3684 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3685
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3686 case 2:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3687 coding->type = coding_type_iso2022;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3688 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3689 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3690 {
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3691 Lisp_Object val, temp;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3692 Lisp_Object *flags;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3693 int i, charset, reg_bits = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3694
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3695 val = XVECTOR (coding_spec)->contents[4];
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
3696
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3697 if (!VECTORP (val) || XVECTOR (val)->size != 32)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3698 goto label_invalid_coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3699
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3700 flags = XVECTOR (val)->contents;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3701 coding->flags
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3702 = ((NILP (flags[4]) ? 0 : CODING_FLAG_ISO_SHORT_FORM)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3703 | (NILP (flags[5]) ? 0 : CODING_FLAG_ISO_RESET_AT_EOL)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3704 | (NILP (flags[6]) ? 0 : CODING_FLAG_ISO_RESET_AT_CNTL)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3705 | (NILP (flags[7]) ? 0 : CODING_FLAG_ISO_SEVEN_BITS)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3706 | (NILP (flags[8]) ? 0 : CODING_FLAG_ISO_LOCKING_SHIFT)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3707 | (NILP (flags[9]) ? 0 : CODING_FLAG_ISO_SINGLE_SHIFT)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3708 | (NILP (flags[10]) ? 0 : CODING_FLAG_ISO_USE_ROMAN)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3709 | (NILP (flags[11]) ? 0 : CODING_FLAG_ISO_USE_OLDJIS)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3710 | (NILP (flags[12]) ? 0 : CODING_FLAG_ISO_NO_DIRECTION)
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3711 | (NILP (flags[13]) ? 0 : CODING_FLAG_ISO_INIT_AT_BOL)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
3712 | (NILP (flags[14]) ? 0 : CODING_FLAG_ISO_DESIGNATE_AT_BOL)
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
3713 | (NILP (flags[15]) ? 0 : CODING_FLAG_ISO_SAFE)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
3714 | (NILP (flags[16]) ? 0 : CODING_FLAG_ISO_LATIN_EXTRA)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
3715 );
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3716
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3717 /* Invoke graphic register 0 to plane 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3718 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3719 /* Invoke graphic register 1 to plane 1 if we can use full 8-bit. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3720 CODING_SPEC_ISO_INVOCATION (coding, 1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3721 = (coding->flags & CODING_FLAG_ISO_SEVEN_BITS ? -1 : 1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3722 /* Not single shifting at first. */
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3723 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3724 /* Beginning of buffer should also be regarded as bol. */
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3725 CODING_SPEC_ISO_BOL (coding) = 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3726
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3727 for (charset = 0; charset <= MAX_CHARSET; charset++)
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3728 CODING_SPEC_ISO_REVISION_NUMBER (coding, charset) = 255;
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3729 val = Vcharset_revision_alist;
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3730 while (CONSP (val))
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3731 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3732 charset = get_charset_id (Fcar_safe (XCAR (val)));
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3733 if (charset >= 0
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3734 && (temp = Fcdr_safe (XCAR (val)), INTEGERP (temp))
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3735 && (i = XINT (temp), (i >= 0 && (i + '@') < 128)))
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3736 CODING_SPEC_ISO_REVISION_NUMBER (coding, charset) = i;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3737 val = XCDR (val);
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3738 }
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3739
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3740 /* Checks FLAGS[REG] (REG = 0, 1, 2 3) and decide designations.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3741 FLAGS[REG] can be one of below:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3742 integer CHARSET: CHARSET occupies register I,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3743 t: designate nothing to REG initially, but can be used
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3744 by any charsets,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3745 list of integer, nil, or t: designate the first
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3746 element (if integer) to REG initially, the remaining
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3747 elements (if integer) is designated to REG on request,
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3748 if an element is t, REG can be used by any charsets,
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3749 nil: REG is never used. */
17190
6637001cdb4b Adjusted for the change of MAX_CHARSET.
Kenichi Handa <handa@m17n.org>
parents: 17137
diff changeset
3750 for (charset = 0; charset <= MAX_CHARSET; charset++)
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
3751 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
3752 = CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3753 for (i = 0; i < 4; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3754 {
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3755 if ((INTEGERP (flags[i])
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3756 && (charset = XINT (flags[i]), CHARSET_VALID_P (charset)))
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3757 || (charset = get_charset_id (flags[i])) >= 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3758 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3759 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3760 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) = i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3761 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3762 else if (EQ (flags[i], Qt))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3763 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3764 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = -1;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3765 reg_bits |= 1 << i;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3766 coding->flags |= CODING_FLAG_ISO_DESIGNATION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3767 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3768 else if (CONSP (flags[i]))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3769 {
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3770 Lisp_Object tail;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3771 tail = flags[i];
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3772
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3773 coding->flags |= CODING_FLAG_ISO_DESIGNATION;
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3774 if ((INTEGERP (XCAR (tail))
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3775 && (charset = XINT (XCAR (tail)),
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3776 CHARSET_VALID_P (charset)))
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3777 || (charset = get_charset_id (XCAR (tail))) >= 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3778 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3779 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3780 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) =i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3781 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3782 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3783 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = -1;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3784 tail = XCDR (tail);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3785 while (CONSP (tail))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3786 {
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3787 if ((INTEGERP (XCAR (tail))
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3788 && (charset = XINT (XCAR (tail)),
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3789 CHARSET_VALID_P (charset)))
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3790 || (charset = get_charset_id (XCAR (tail))) >= 0)
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3791 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3792 = i;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3793 else if (EQ (XCAR (tail), Qt))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3794 reg_bits |= 1 << i;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3795 tail = XCDR (tail);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3796 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3797 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3798 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3799 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = -1;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
3800
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3801 CODING_SPEC_ISO_DESIGNATION (coding, i)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3802 = CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3803 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3804
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3805 if (reg_bits && ! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3806 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3807 /* REG 1 can be used only by locking shift in 7-bit env. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3808 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3809 reg_bits &= ~2;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3810 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3811 /* Without any shifting, only REG 0 and 1 can be used. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3812 reg_bits &= 3;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3813 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3814
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3815 if (reg_bits)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3816 for (charset = 0; charset <= MAX_CHARSET; charset++)
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3817 {
38473
f5a9d9707da5 * coding.c (setup_coding_system): Don't do any designation based on reg_bits if
Ken Raeburn <raeburn@raeburn.org>
parents: 38391
diff changeset
3818 if (CHARSET_DEFINED_P (charset)
30263
b8083f5b4b7c (setup_coding_system): Don't override the explicitly specified
Kenichi Handa <handa@m17n.org>
parents: 30204
diff changeset
3819 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
b8083f5b4b7c (setup_coding_system): Don't override the explicitly specified
Kenichi Handa <handa@m17n.org>
parents: 30204
diff changeset
3820 == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3821 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3822 /* There exist some default graphic registers to be
30263
b8083f5b4b7c (setup_coding_system): Don't override the explicitly specified
Kenichi Handa <handa@m17n.org>
parents: 30204
diff changeset
3823 used by CHARSET. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3824
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3825 /* We had better avoid designating a charset of
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3826 CHARS96 to REG 0 as far as possible. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3827 if (CHARSET_CHARS (charset) == 96)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3828 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3829 = (reg_bits & 2
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3830 ? 1 : (reg_bits & 4 ? 2 : (reg_bits & 8 ? 3 : 0)));
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3831 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3832 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3833 = (reg_bits & 1
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3834 ? 0 : (reg_bits & 2 ? 1 : (reg_bits & 4 ? 2 : 3)));
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3835 }
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3836 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3837 }
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3838 coding->common_flags |= CODING_REQUIRE_FLUSHING_MASK;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3839 coding->spec.iso2022.last_invalid_designation_register = -1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3840 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3841
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3842 case 3:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3843 coding->type = coding_type_big5;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3844 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3845 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3846 coding->flags
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3847 = (NILP (XVECTOR (coding_spec)->contents[4])
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3848 ? CODING_FLAG_BIG5_HKU
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3849 : CODING_FLAG_BIG5_ETEN);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3850 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3851
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3852 case 4:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3853 coding->type = coding_type_ccl;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3854 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3855 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3856 {
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3857 val = XVECTOR (coding_spec)->contents[4];
25067
23910b121ced (setup_coding_system): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24870
diff changeset
3858 if (! CONSP (val)
23910b121ced (setup_coding_system): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24870
diff changeset
3859 || setup_ccl_program (&(coding->spec.ccl.decoder),
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3860 XCAR (val)) < 0
25067
23910b121ced (setup_coding_system): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24870
diff changeset
3861 || setup_ccl_program (&(coding->spec.ccl.encoder),
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3862 XCDR (val)) < 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3863 goto label_invalid_coding_system;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3864
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3865 bzero (coding->spec.ccl.valid_codes, 256);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3866 val = Fplist_get (plist, Qvalid_codes);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3867 if (CONSP (val))
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3868 {
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3869 Lisp_Object this;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3870
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3871 for (; CONSP (val); val = XCDR (val))
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3872 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3873 this = XCAR (val);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3874 if (INTEGERP (this)
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3875 && XINT (this) >= 0 && XINT (this) < 256)
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3876 coding->spec.ccl.valid_codes[XINT (this)] = 1;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3877 else if (CONSP (this)
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3878 && INTEGERP (XCAR (this))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3879 && INTEGERP (XCDR (this)))
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3880 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3881 int start = XINT (XCAR (this));
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3882 int end = XINT (XCDR (this));
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3883
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3884 if (start >= 0 && start <= end && end < 256)
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
3885 while (start <= end)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3886 coding->spec.ccl.valid_codes[start++] = 1;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3887 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3888 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3889 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3890 }
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3891 coding->common_flags |= CODING_REQUIRE_FLUSHING_MASK;
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
3892 coding->spec.ccl.cr_carryover = 0;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
3893 coding->spec.ccl.eight_bit_carryover[0] = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3894 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3895
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
3896 case 5:
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
3897 coding->type = coding_type_raw_text;
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
3898 break;
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
3899
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3900 default:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3901 goto label_invalid_coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3902 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3903 return 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3904
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3905 label_invalid_coding_system:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3906 coding->type = coding_type_no_conversion;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3907 coding->category_idx = CODING_CATEGORY_IDX_BINARY;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3908 coding->common_flags = 0;
17485
abfa77a2693b (setup_coding_system): Setup coding->eol_type as LF
Kenichi Handa <handa@m17n.org>
parents: 17368
diff changeset
3909 coding->eol_type = CODING_EOL_LF;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3910 coding->pre_write_conversion = coding->post_read_conversion = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3911 return -1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3912 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3913
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3914 /* Free memory blocks allocated for storing composition information. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3915
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3916 void
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3917 coding_free_composition_data (coding)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3918 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3919 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3920 struct composition_data *cmp_data = coding->cmp_data, *next;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3921
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3922 if (!cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3923 return;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3924 /* Memory blocks are chained. At first, rewind to the first, then,
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3925 free blocks one by one. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3926 while (cmp_data->prev)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3927 cmp_data = cmp_data->prev;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3928 while (cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3929 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3930 next = cmp_data->next;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3931 xfree (cmp_data);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3932 cmp_data = next;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3933 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3934 coding->cmp_data = NULL;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3935 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3936
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3937 /* Set `char_offset' member of all memory blocks pointed by
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3938 coding->cmp_data to POS. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3939
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3940 void
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3941 coding_adjust_composition_offset (coding, pos)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3942 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3943 int pos;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3944 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3945 struct composition_data *cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3946
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3947 for (cmp_data = coding->cmp_data; cmp_data; cmp_data = cmp_data->next)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3948 cmp_data->char_offset = pos;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3949 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3950
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3951 /* Setup raw-text or one of its subsidiaries in the structure
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3952 coding_system CODING according to the already setup value eol_type
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3953 in CODING. CODING should be setup for some coding system in
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3954 advance. */
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3955
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3956 void
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3957 setup_raw_text_coding_system (coding)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3958 struct coding_system *coding;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3959 {
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3960 if (coding->type != coding_type_raw_text)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3961 {
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3962 coding->symbol = Qraw_text;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3963 coding->type = coding_type_raw_text;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3964 if (coding->eol_type != CODING_EOL_UNDECIDED)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3965 {
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3966 Lisp_Object subsidiaries;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3967 subsidiaries = Fget (Qraw_text, Qeol_type);
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3968
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3969 if (VECTORP (subsidiaries)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3970 && XVECTOR (subsidiaries)->size == 3)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3971 coding->symbol
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3972 = XVECTOR (subsidiaries)->contents[coding->eol_type];
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3973 }
24667
6156dc5f5ce0 [andrewi]
Andrew Innes <andrewi@gnu.org>
parents: 24568
diff changeset
3974 setup_coding_system (coding->symbol, coding);
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3975 }
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3976 return;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3977 }
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3978
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3979 /* Emacs has a mechanism to automatically detect a coding system if it
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3980 is one of Emacs' internal format, ISO2022, SJIS, and BIG5. But,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3981 it's impossible to distinguish some coding systems accurately
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3982 because they use the same range of codes. So, at first, coding
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3983 systems are categorized into 7, those are:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3984
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3985 o coding-category-emacs-mule
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3986
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3987 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3988 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
3989 symbol) `emacs-mule' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3990
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3991 o coding-category-sjis
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3992
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3993 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3994 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
3995 symbol) `japanese-shift-jis' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3996
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3997 o coding-category-iso-7
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3998
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3999 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
4000 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
4001 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
4002 charsets. Assigned the coding-system (Lisp symbol)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4003 `iso-2022-7bit' by default.
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4004
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4005 o coding-category-iso-7-tight
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4006
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4007 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
4008 encode/decode only the specified charsets.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4009
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4010 o coding-category-iso-8-1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4011
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4012 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4013 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
4014 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
4015 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
4016 symbol) `iso-latin-1' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4017
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4018 o coding-category-iso-8-2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4019
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4020 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4021 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
4022 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
4023 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
4024 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
4025
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
4026 o coding-category-iso-7-else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4027
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4028 The category for a coding system which has the same code range
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
4029 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
4030 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
4031 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
4032
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
4033 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
4034
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
4035 The category for a coding system which has the same code range
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
4036 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
4037 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
4038 symbol) `iso-2022-8bit-ss2' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4039
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4040 o coding-category-big5
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4041
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4042 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4043 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
4044 `cn-big5' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4045
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4046 o coding-category-utf-8
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4047
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4048 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
4049 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
4050 symbol) `utf-8' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4051
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4052 o coding-category-utf-16-be
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4053
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4054 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
4055 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
4056 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
4057 `utf-16-be' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4058
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4059 o coding-category-utf-16-le
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4060
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4061 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
4062 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
4063 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
4064 symbol) `utf-16-le' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4065
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4066 o coding-category-ccl
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4067
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4068 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
4069 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
4070 coding system is assigned.
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4071
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4072 o coding-category-binary
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4073
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4074 The category for a coding system not categorized in any of the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4075 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
4076 `no-conversion' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4077
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4078 Each of them is a Lisp symbol and the value is an actual
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
4079 `coding-system' (this is also a Lisp symbol) assigned by a user.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4080 What Emacs does actually is to detect a category of coding system.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4081 Then, it uses a `coding-system' assigned to it. If Emacs can't
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
4082 decide a single possible category, it selects a category of the
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4083 highest priority. Priorities of categories are also specified by a
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4084 user in a Lisp variable `coding-category-list'.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4085
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4086 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4087
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4088 static
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4089 int ascii_skip_code[256];
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4090
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4091 /* Detect how a text of length SRC_BYTES pointed by SOURCE is encoded.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4092 If it detects possible coding systems, return an integer in which
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4093 appropriate flag bits are set. Flag bits are defined by macros
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4094 CODING_CATEGORY_MASK_XXX in `coding.h'. If PRIORITIES is non-NULL,
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4095 it should point the table `coding_priorities'. In that case, only
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4096 the flag bit for a coding system of the highest priority is set in
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4097 the returned value. If MULTIBYTEP is nonzero, 8-bit codes of the
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4098 range 0x80..0x9F are in multibyte form.
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4099
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4100 How many ASCII characters are at the head is returned as *SKIP. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4101
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4102 static int
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4103 detect_coding_mask (source, src_bytes, priorities, skip, multibytep)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4104 unsigned char *source;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4105 int src_bytes, *priorities, *skip;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4106 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4107 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4108 register unsigned char c;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4109 unsigned char *src = source, *src_end = source + src_bytes;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4110 unsigned int mask, utf16_examined_p, iso2022_examined_p;
34988
8cd5e6ad71a2 (detect_coding_iso2022, setup_coding_system): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 34892
diff changeset
4111 int i;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4112
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4113 /* At first, skip all ASCII characters and control characters except
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4114 for three ISO2022 specific control characters. */
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4115 ascii_skip_code[ISO_CODE_SO] = 0;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4116 ascii_skip_code[ISO_CODE_SI] = 0;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4117 ascii_skip_code[ISO_CODE_ESC] = 0;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4118
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
4119 label_loop_detect_coding:
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4120 while (src < src_end && ascii_skip_code[*src]) src++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4121 *skip = src - source;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4122
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4123 if (src >= src_end)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4124 /* We found nothing other than ASCII. There's nothing to do. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4125 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4126
22329
4786b00d2973 (detect_coding_mask): Initilize local variable C.
Kenichi Handa <handa@m17n.org>
parents: 22254
diff changeset
4127 c = *src;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4128 /* The text seems to be encoded in some multilingual coding system.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4129 Now, try to find in which coding system the text is encoded. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4130 if (c < 0x80)
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
4131 {
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
4132 /* i.e. (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO) */
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
4133 /* C is an ISO2022 specific control code of C0. */
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4134 mask = detect_coding_iso2022 (src, src_end, multibytep);
19743
b228f82192d5 (detect_coding_mask): Re-work previous change.
Richard M. Stallman <rms@gnu.org>
parents: 19688
diff changeset
4135 if (mask == 0)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4136 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4137 /* No valid ISO2022 code follows C. Try again. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4138 src++;
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4139 if (c == ISO_CODE_ESC)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4140 ascii_skip_code[ISO_CODE_ESC] = 1;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4141 else
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
4142 ascii_skip_code[ISO_CODE_SO] = ascii_skip_code[ISO_CODE_SI] = 1;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4143 goto label_loop_detect_coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4144 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4145 if (priorities)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4146 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4147 for (i = 0; i < CODING_CATEGORY_IDX_MAX; i++)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4148 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4149 if (mask & priorities[i])
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4150 return priorities[i];
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4151 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4152 return CODING_CATEGORY_MASK_RAW_TEXT;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4153 }
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
4154 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4155 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4156 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4157 int try;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4158
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4159 if (multibytep && c == LEADING_CODE_8_BIT_CONTROL)
36649
5dc88f9ab0ef (detect_coding_mask): Fix the incorrect handling of arg MULTIBYTEP.
Kenichi Handa <handa@m17n.org>
parents: 36647
diff changeset
4160 c = src[1] - 0x20;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4161
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4162 if (c < 0xA0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4163 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4164 /* C is the first byte of SJIS character code,
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4165 or a leading-code of Emacs' internal format (emacs-mule),
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4166 or the first byte of UTF-16. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4167 try = (CODING_CATEGORY_MASK_SJIS
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4168 | CODING_CATEGORY_MASK_EMACS_MULE
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4169 | CODING_CATEGORY_MASK_UTF_16_BE
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4170 | CODING_CATEGORY_MASK_UTF_16_LE);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4171
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4172 /* Or, if C is a special latin extra code,
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
4173 or is an ISO2022 specific control code of C1 (SS2 or SS3),
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4174 or is an ISO2022 control-sequence-introducer (CSI),
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4175 we should also consider the possibility of ISO2022 codings. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4176 if ((VECTORP (Vlatin_extra_code_table)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4177 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c]))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4178 || (c == ISO_CODE_SS2 || c == ISO_CODE_SS3)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4179 || (c == ISO_CODE_CSI
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4180 && (src < src_end
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4181 && (*src == ']'
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4182 || ((*src == '0' || *src == '1' || *src == '2')
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4183 && src + 1 < src_end
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4184 && src[1] == ']')))))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4185 try |= (CODING_CATEGORY_MASK_ISO_8_ELSE
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4186 | CODING_CATEGORY_MASK_ISO_8BIT);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4187 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4188 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4189 /* C is a character of ISO2022 in graphic plane right,
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4190 or a SJIS's 1-byte character code (i.e. JISX0201),
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4191 or the first byte of BIG5's 2-byte code,
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4192 or the first byte of UTF-8/16. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4193 try = (CODING_CATEGORY_MASK_ISO_8_ELSE
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4194 | CODING_CATEGORY_MASK_ISO_8BIT
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4195 | CODING_CATEGORY_MASK_SJIS
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4196 | CODING_CATEGORY_MASK_BIG5
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4197 | CODING_CATEGORY_MASK_UTF_8
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4198 | CODING_CATEGORY_MASK_UTF_16_BE
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4199 | CODING_CATEGORY_MASK_UTF_16_LE);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4200
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4201 /* Or, we may have to consider the possibility of CCL. */
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4202 if (coding_system_table[CODING_CATEGORY_IDX_CCL]
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4203 && (coding_system_table[CODING_CATEGORY_IDX_CCL]
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4204 ->spec.ccl.valid_codes)[c])
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4205 try |= CODING_CATEGORY_MASK_CCL;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4206
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4207 mask = 0;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4208 utf16_examined_p = iso2022_examined_p = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4209 if (priorities)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4210 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4211 for (i = 0; i < CODING_CATEGORY_IDX_MAX; i++)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4212 {
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4213 if (!iso2022_examined_p
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4214 && (priorities[i] & try & CODING_CATEGORY_MASK_ISO))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4215 {
41678
5aa97e545399 (syms_of_coding) <Qchar_coding_system>: Give it an
Dave Love <fx@gnu.org>
parents: 41624
diff changeset
4216 mask |= detect_coding_iso2022 (src, src_end, multibytep);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4217 iso2022_examined_p = 1;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4218 }
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4219 else if (priorities[i] & try & CODING_CATEGORY_MASK_SJIS)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4220 mask |= detect_coding_sjis (src, src_end, multibytep);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4221 else if (priorities[i] & try & CODING_CATEGORY_MASK_UTF_8)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4222 mask |= detect_coding_utf_8 (src, src_end, multibytep);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4223 else if (!utf16_examined_p
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4224 && (priorities[i] & try &
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4225 CODING_CATEGORY_MASK_UTF_16_BE_LE))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4226 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4227 mask |= detect_coding_utf_16 (src, src_end, multibytep);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4228 utf16_examined_p = 1;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4229 }
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4230 else if (priorities[i] & try & CODING_CATEGORY_MASK_BIG5)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4231 mask |= detect_coding_big5 (src, src_end, multibytep);
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4232 else if (priorities[i] & try & CODING_CATEGORY_MASK_EMACS_MULE)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4233 mask |= detect_coding_emacs_mule (src, src_end, multibytep);
23027
0dc823b2335f (coding_category_name): Fix the order of initial
Kenichi Handa <handa@m17n.org>
parents: 22979
diff changeset
4234 else if (priorities[i] & try & CODING_CATEGORY_MASK_CCL)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4235 mask |= detect_coding_ccl (src, src_end, multibytep);
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4236 else if (priorities[i] & CODING_CATEGORY_MASK_RAW_TEXT)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4237 mask |= CODING_CATEGORY_MASK_RAW_TEXT;
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4238 else if (priorities[i] & CODING_CATEGORY_MASK_BINARY)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4239 mask |= CODING_CATEGORY_MASK_BINARY;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4240 if (mask & priorities[i])
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4241 return priorities[i];
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4242 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4243 return CODING_CATEGORY_MASK_RAW_TEXT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4244 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4245 if (try & CODING_CATEGORY_MASK_ISO)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4246 mask |= detect_coding_iso2022 (src, src_end, multibytep);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4247 if (try & CODING_CATEGORY_MASK_SJIS)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4248 mask |= detect_coding_sjis (src, src_end, multibytep);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4249 if (try & CODING_CATEGORY_MASK_BIG5)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4250 mask |= detect_coding_big5 (src, src_end, multibytep);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4251 if (try & CODING_CATEGORY_MASK_UTF_8)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4252 mask |= detect_coding_utf_8 (src, src_end, multibytep);
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4253 if (try & CODING_CATEGORY_MASK_UTF_16_BE_LE)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4254 mask |= detect_coding_utf_16 (src, src_end, multibytep);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4255 if (try & CODING_CATEGORY_MASK_EMACS_MULE)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4256 mask |= detect_coding_emacs_mule (src, src_end, multibytep);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4257 if (try & CODING_CATEGORY_MASK_CCL)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4258 mask |= detect_coding_ccl (src, src_end, multibytep);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4259 }
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4260 return (mask | CODING_CATEGORY_MASK_RAW_TEXT | CODING_CATEGORY_MASK_BINARY);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4261 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4262
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4263 /* Detect how a text of length SRC_BYTES pointed by SRC is encoded.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4264 The information of the detected coding system is set in CODING. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4265
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4266 void
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4267 detect_coding (coding, src, src_bytes)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4268 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4269 const unsigned char *src;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4270 int src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4271 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4272 unsigned int idx;
34988
8cd5e6ad71a2 (detect_coding_iso2022, setup_coding_system): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 34892
diff changeset
4273 int skip, mask;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4274 Lisp_Object val;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4275
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4276 val = Vcoding_category_list;
34593
f727eb496b4e (detect_coding): Call detect_coding_mask with a correct MULTIBYTEP
Kenichi Handa <handa@m17n.org>
parents: 34591
diff changeset
4277 mask = detect_coding_mask (src, src_bytes, coding_priorities, &skip,
f727eb496b4e (detect_coding): Call detect_coding_mask with a correct MULTIBYTEP
Kenichi Handa <handa@m17n.org>
parents: 34591
diff changeset
4278 coding->src_multibyte);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4279 coding->heading_ascii = skip;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4280
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4281 if (!mask) return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4282
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4283 /* We found a single coding system of the highest priority in MASK. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4284 idx = 0;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4285 while (mask && ! (mask & 1)) mask >>= 1, idx++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4286 if (! mask)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4287 idx = CODING_CATEGORY_IDX_RAW_TEXT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4288
39581
6d9fa06012a6 Use SYMBOL_VALUE/SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents: 38518
diff changeset
4289 val = SYMBOL_VALUE (XVECTOR (Vcoding_category_table)->contents[idx]);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4290
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4291 if (coding->eol_type != CODING_EOL_UNDECIDED)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4292 {
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4293 Lisp_Object tmp;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4294
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4295 tmp = Fget (val, Qeol_type);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4296 if (VECTORP (tmp))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4297 val = XVECTOR (tmp)->contents[coding->eol_type];
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4298 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4299
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4300 /* Setup this new coding system while preserving some slots. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4301 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4302 int src_multibyte = coding->src_multibyte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4303 int dst_multibyte = coding->dst_multibyte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4304
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4305 setup_coding_system (val, coding);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4306 coding->src_multibyte = src_multibyte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4307 coding->dst_multibyte = dst_multibyte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4308 coding->heading_ascii = skip;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4309 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4310 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4311
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4312 /* Detect how end-of-line of a text of length SRC_BYTES pointed by
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4313 SOURCE is encoded. Return one of CODING_EOL_LF, CODING_EOL_CRLF,
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4314 CODING_EOL_CR, and CODING_EOL_UNDECIDED.
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4315
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4316 How many non-eol characters are at the head is returned as *SKIP. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4317
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4318 #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
4319
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4320 static int
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4321 detect_eol_type (source, src_bytes, skip)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4322 unsigned char *source;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4323 int src_bytes, *skip;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4324 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4325 unsigned char *src = source, *src_end = src + src_bytes;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4326 unsigned char c;
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4327 int total = 0; /* How many end-of-lines are found so far. */
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4328 int eol_type = CODING_EOL_UNDECIDED;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4329 int this_eol_type;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4330
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4331 *skip = 0;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4332
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4333 while (src < src_end && total < MAX_EOL_CHECK_COUNT)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4334 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4335 c = *src++;
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4336 if (c == '\n' || c == '\r')
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4337 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4338 if (*skip == 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4339 *skip = src - 1 - source;
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4340 total++;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4341 if (c == '\n')
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4342 this_eol_type = CODING_EOL_LF;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4343 else if (src >= src_end || *src != '\n')
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4344 this_eol_type = CODING_EOL_CR;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4345 else
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4346 this_eol_type = CODING_EOL_CRLF, src++;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4347
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4348 if (eol_type == CODING_EOL_UNDECIDED)
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4349 /* This is the first end-of-line. */
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4350 eol_type = this_eol_type;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4351 else if (eol_type != this_eol_type)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4352 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4353 /* The found type is different from what found before. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4354 eol_type = CODING_EOL_INCONSISTENT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4355 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4356 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4357 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4358 }
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4359
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4360 if (*skip == 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4361 *skip = src_end - source;
19181
917138730635 (detect_eol_type): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 19173
diff changeset
4362 return eol_type;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4363 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4364
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4365 /* Like detect_eol_type, but detect EOL type in 2-octet
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4366 big-endian/little-endian format for coding systems utf-16-be and
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4367 utf-16-le. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4368
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4369 static int
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4370 detect_eol_type_in_2_octet_form (source, src_bytes, skip, big_endian_p)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4371 unsigned char *source;
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
4372 int src_bytes, *skip, big_endian_p;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4373 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4374 unsigned char *src = source, *src_end = src + src_bytes;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4375 unsigned int c1, c2;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4376 int total = 0; /* How many end-of-lines are found so far. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4377 int eol_type = CODING_EOL_UNDECIDED;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4378 int this_eol_type;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4379 int msb, lsb;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4380
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4381 if (big_endian_p)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4382 msb = 0, lsb = 1;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4383 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4384 msb = 1, lsb = 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4385
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4386 *skip = 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4387
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4388 while ((src + 1) < src_end && total < MAX_EOL_CHECK_COUNT)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4389 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4390 c1 = (src[msb] << 8) | (src[lsb]);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4391 src += 2;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4392
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4393 if (c1 == '\n' || c1 == '\r')
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4394 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4395 if (*skip == 0)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4396 *skip = src - 2 - source;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4397 total++;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4398 if (c1 == '\n')
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4399 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4400 this_eol_type = CODING_EOL_LF;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4401 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4402 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4403 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4404 if ((src + 1) >= src_end)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4405 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4406 this_eol_type = CODING_EOL_CR;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4407 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4408 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4409 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4410 c2 = (src[msb] << 8) | (src[lsb]);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4411 if (c2 == '\n')
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4412 this_eol_type = CODING_EOL_CRLF, src += 2;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4413 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4414 this_eol_type = CODING_EOL_CR;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4415 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4416 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4417
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4418 if (eol_type == CODING_EOL_UNDECIDED)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4419 /* This is the first end-of-line. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4420 eol_type = this_eol_type;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4421 else if (eol_type != this_eol_type)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4422 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4423 /* The found type is different from what found before. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4424 eol_type = CODING_EOL_INCONSISTENT;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4425 break;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4426 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4427 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4428 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4429
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4430 if (*skip == 0)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4431 *skip = src_end - source;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4432 return eol_type;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4433 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4434
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4435 /* Detect how end-of-line of a text of length SRC_BYTES pointed by SRC
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4436 is encoded. If it detects an appropriate format of end-of-line, it
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4437 sets the information in *CODING. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4438
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4439 void
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4440 detect_eol (coding, src, src_bytes)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4441 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4442 const unsigned char *src;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4443 int src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4444 {
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
4445 Lisp_Object val;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4446 int skip;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4447 int eol_type;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4448
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4449 switch (coding->category_idx)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4450 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4451 case CODING_CATEGORY_IDX_UTF_16_BE:
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4452 eol_type = detect_eol_type_in_2_octet_form (src, src_bytes, &skip, 1);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4453 break;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4454 case CODING_CATEGORY_IDX_UTF_16_LE:
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4455 eol_type = detect_eol_type_in_2_octet_form (src, src_bytes, &skip, 0);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4456 break;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4457 default:
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4458 eol_type = detect_eol_type (src, src_bytes, &skip);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4459 break;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4460 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4461
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4462 if (coding->heading_ascii > skip)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4463 coding->heading_ascii = skip;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4464 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4465 skip = coding->heading_ascii;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4466
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
4467 if (eol_type == CODING_EOL_UNDECIDED)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4468 return;
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4469 if (eol_type == CODING_EOL_INCONSISTENT)
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4470 {
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4471 #if 0
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4472 /* This code is suppressed until we find a better way to
19613
666288d82ae1 (detect_eol): Do not select no-conversion even if EOL
Kenichi Handa <handa@m17n.org>
parents: 19612
diff changeset
4473 distinguish raw text file and binary file. */
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4474
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4475 /* If we have already detected that the coding is raw-text, the
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4476 coding should actually be no-conversion. */
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4477 if (coding->type == coding_type_raw_text)
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4478 {
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4479 setup_coding_system (Qno_conversion, coding);
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4480 return;
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4481 }
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4482 /* Else, let's decode only text code anyway. */
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4483 #endif /* 0 */
19743
b228f82192d5 (detect_coding_mask): Re-work previous change.
Richard M. Stallman <rms@gnu.org>
parents: 19688
diff changeset
4484 eol_type = CODING_EOL_LF;
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4485 }
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4486
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
4487 val = Fget (coding->symbol, Qeol_type);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4488 if (VECTORP (val) && XVECTOR (val)->size == 3)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4489 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4490 int src_multibyte = coding->src_multibyte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4491 int dst_multibyte = coding->dst_multibyte;
45981
e513f55424f6 (detect_eol): Preserve coding->cmp_data.
Kenichi Handa <handa@m17n.org>
parents: 45396
diff changeset
4492 struct composition_data *cmp_data = coding->cmp_data;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4493
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4494 setup_coding_system (XVECTOR (val)->contents[eol_type], coding);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4495 coding->src_multibyte = src_multibyte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4496 coding->dst_multibyte = dst_multibyte;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4497 coding->heading_ascii = skip;
45981
e513f55424f6 (detect_eol): Preserve coding->cmp_data.
Kenichi Handa <handa@m17n.org>
parents: 45396
diff changeset
4498 coding->cmp_data = cmp_data;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4499 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4500 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4501
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4502 #define CONVERSION_BUFFER_EXTRA_ROOM 256
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4503
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4504 #define DECODING_BUFFER_MAG(coding) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4505 (coding->type == coding_type_iso2022 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4506 ? 3 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4507 : (coding->type == coding_type_ccl \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4508 ? coding->spec.ccl.decoder.buf_magnification \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4509 : 2))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4510
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4511 /* Return maximum size (bytes) of a buffer enough for decoding
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4512 SRC_BYTES of text encoded in CODING. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4513
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4514 int
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4515 decoding_buffer_size (coding, src_bytes)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4516 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4517 int src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4518 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4519 return (src_bytes * DECODING_BUFFER_MAG (coding)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4520 + CONVERSION_BUFFER_EXTRA_ROOM);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4521 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4522
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4523 /* Return maximum size (bytes) of a buffer enough for encoding
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4524 SRC_BYTES of text to CODING. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4525
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4526 int
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4527 encoding_buffer_size (coding, src_bytes)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4528 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4529 int src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4530 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4531 int magnification;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4532
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4533 if (coding->type == coding_type_ccl)
51458
28be64986453 _buffer_size): If coding->type is
Kenichi Handa <handa@m17n.org>
parents: 51406
diff changeset
4534 {
28be64986453 _buffer_size): If coding->type is
Kenichi Handa <handa@m17n.org>
parents: 51406
diff changeset
4535 magnification = coding->spec.ccl.encoder.buf_magnification;
28be64986453 _buffer_size): If coding->type is
Kenichi Handa <handa@m17n.org>
parents: 51406
diff changeset
4536 if (coding->eol_type == CODING_EOL_CRLF)
28be64986453 _buffer_size): If coding->type is
Kenichi Handa <handa@m17n.org>
parents: 51406
diff changeset
4537 magnification *= 2;
28be64986453 _buffer_size): If coding->type is
Kenichi Handa <handa@m17n.org>
parents: 51406
diff changeset
4538 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4539 else if (CODING_REQUIRE_ENCODING (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4540 magnification = 3;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4541 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4542 magnification = 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4543
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4544 return (src_bytes * magnification + CONVERSION_BUFFER_EXTRA_ROOM);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4545 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4546
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4547 /* Working buffer for code conversion. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4548 struct conversion_buffer
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4549 {
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4550 int size; /* size of data. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4551 int on_stack; /* 1 if allocated by alloca. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4552 unsigned char *data;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4553 };
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4554
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4555 /* Allocate LEN bytes of memory for BUF (struct conversion_buffer). */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4556 #define allocate_conversion_buffer(buf, len) \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4557 do { \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4558 if (len < MAX_ALLOCA) \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4559 { \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4560 buf.data = (unsigned char *) alloca (len); \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4561 buf.on_stack = 1; \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4562 } \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4563 else \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4564 { \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4565 buf.data = (unsigned char *) xmalloc (len); \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4566 buf.on_stack = 0; \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4567 } \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4568 buf.size = len; \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4569 } while (0)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4570
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4571 /* Double the allocated memory for *BUF. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4572 static void
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4573 extend_conversion_buffer (buf)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4574 struct conversion_buffer *buf;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4575 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4576 if (buf->on_stack)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4577 {
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4578 unsigned char *save = buf->data;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4579 buf->data = (unsigned char *) xmalloc (buf->size * 2);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4580 bcopy (save, buf->data, buf->size);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4581 buf->on_stack = 0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4582 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4583 else
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4584 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4585 buf->data = (unsigned char *) xrealloc (buf->data, buf->size * 2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4586 }
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4587 buf->size *= 2;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4588 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4589
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4590 /* Free the allocated memory for BUF if it is not on stack. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4591 static void
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4592 free_conversion_buffer (buf)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4593 struct conversion_buffer *buf;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4594 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4595 if (!buf->on_stack)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4596 xfree (buf->data);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4597 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4598
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4599 int
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4600 ccl_coding_driver (coding, source, destination, src_bytes, dst_bytes, encodep)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4601 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4602 unsigned char *source, *destination;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4603 int src_bytes, dst_bytes, encodep;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4604 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4605 struct ccl_program *ccl
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4606 = encodep ? &coding->spec.ccl.encoder : &coding->spec.ccl.decoder;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4607 unsigned char *dst = destination;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4608
35531
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
4609 ccl->suppress_error = coding->suppress_error;
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
4610 ccl->last_block = 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
4611 if (encodep)
34813
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4612 {
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4613 /* On encoding, EOL format is converted within ccl_driver. For
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4614 that, setup proper information in the structure CCL. */
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4615 ccl->eol_type = coding->eol_type;
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4616 if (ccl->eol_type ==CODING_EOL_UNDECIDED)
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4617 ccl->eol_type = CODING_EOL_LF;
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4618 ccl->cr_consumed = coding->spec.ccl.cr_carryover;
51327
389d833cd25e (ccl_coding_driver): Set ccl->eight_bit_control
Kenichi Handa <handa@m17n.org>
parents: 51311
diff changeset
4619 ccl->eight_bit_control = coding->dst_multibyte;
389d833cd25e (ccl_coding_driver): Set ccl->eight_bit_control
Kenichi Handa <handa@m17n.org>
parents: 51311
diff changeset
4620 }
389d833cd25e (ccl_coding_driver): Set ccl->eight_bit_control
Kenichi Handa <handa@m17n.org>
parents: 51311
diff changeset
4621 else
389d833cd25e (ccl_coding_driver): Set ccl->eight_bit_control
Kenichi Handa <handa@m17n.org>
parents: 51311
diff changeset
4622 ccl->eight_bit_control = 1;
30756
b72c2759ac70 (ccl_coding_driver): Initialize ccl->multibyte.
Kenichi Handa <handa@m17n.org>
parents: 30674
diff changeset
4623 ccl->multibyte = coding->src_multibyte;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4624 if (coding->spec.ccl.eight_bit_carryover[0] != 0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4625 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4626 /* Move carryover bytes to DESTINATION. */
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4627 unsigned char *p = coding->spec.ccl.eight_bit_carryover;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4628 while (*p)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4629 *dst++ = *p++;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4630 coding->spec.ccl.eight_bit_carryover[0] = 0;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4631 if (dst_bytes)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4632 dst_bytes -= dst - destination;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4633 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4634
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4635 coding->produced = (ccl_driver (ccl, source, dst, src_bytes, dst_bytes,
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4636 &(coding->consumed))
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4637 + dst - destination);
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4638
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4639 if (encodep)
34813
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4640 {
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4641 coding->produced_char = coding->produced;
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4642 coding->spec.ccl.cr_carryover = ccl->cr_consumed;
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4643 }
36410
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4644 else if (!ccl->eight_bit_control)
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4645 {
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4646 /* The produced bytes forms a valid multibyte sequence. */
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4647 coding->produced_char
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4648 = multibyte_chars_in_text (destination, coding->produced);
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4649 coding->spec.ccl.eight_bit_carryover[0] = 0;
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4650 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4651 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4652 {
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4653 /* On decoding, the destination should always multibyte. But,
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4654 CCL program might have been generated an invalid multibyte
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4655 sequence. Here we make such a sequence valid as
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4656 multibyte. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4657 int bytes
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4658 = dst_bytes ? dst_bytes : source + coding->consumed - destination;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4659
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4660 if ((coding->consumed < src_bytes
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4661 || !ccl->last_block)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4662 && coding->produced >= 1
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4663 && destination[coding->produced - 1] >= 0x80)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4664 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4665 /* We should not convert the tailing 8-bit codes to
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4666 multibyte form even if they doesn't form a valid
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4667 multibyte sequence. They may form a valid sequence in
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4668 the next call. */
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4669 int carryover = 0;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4670
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4671 if (destination[coding->produced - 1] < 0xA0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4672 carryover = 1;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4673 else if (coding->produced >= 2)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4674 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4675 if (destination[coding->produced - 2] >= 0x80)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4676 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4677 if (destination[coding->produced - 2] < 0xA0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4678 carryover = 2;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4679 else if (coding->produced >= 3
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4680 && destination[coding->produced - 3] >= 0x80
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4681 && destination[coding->produced - 3] < 0xA0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4682 carryover = 3;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4683 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4684 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4685 if (carryover > 0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4686 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4687 BCOPY_SHORT (destination + coding->produced - carryover,
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4688 coding->spec.ccl.eight_bit_carryover,
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4689 carryover);
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4690 coding->spec.ccl.eight_bit_carryover[carryover] = 0;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4691 coding->produced -= carryover;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4692 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4693 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4694 coding->produced = str_as_multibyte (destination, bytes,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4695 coding->produced,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4696 &(coding->produced_char));
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4697 }
23201
392b44751a22 (ccl_coding_driver): Always calculate correct mulibyte
Kenichi Handa <handa@m17n.org>
parents: 23153
diff changeset
4698
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4699 switch (ccl->status)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4700 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4701 case CCL_STAT_SUSPEND_BY_SRC:
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4702 coding->result = CODING_FINISH_INSUFFICIENT_SRC;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4703 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4704 case CCL_STAT_SUSPEND_BY_DST:
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4705 coding->result = CODING_FINISH_INSUFFICIENT_DST;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4706 break;
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
4707 case CCL_STAT_QUIT:
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
4708 case CCL_STAT_INVALID_CMD:
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4709 coding->result = CODING_FINISH_INTERRUPT;
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
4710 break;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4711 default:
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4712 coding->result = CODING_FINISH_NORMAL;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4713 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4714 }
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4715 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4716 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4717
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4718 /* Decode EOL format of the text at PTR of BYTES length destructively
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4719 according to CODING->eol_type. This is called after the CCL
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4720 program produced a decoded text at PTR. If we do CRLF->LF
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4721 conversion, update CODING->produced and CODING->produced_char. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4722
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4723 static void
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4724 decode_eol_post_ccl (coding, ptr, bytes)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4725 struct coding_system *coding;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4726 unsigned char *ptr;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4727 int bytes;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4728 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4729 Lisp_Object val, saved_coding_symbol;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4730 unsigned char *pend = ptr + bytes;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4731 int dummy;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4732
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4733 /* Remember the current coding system symbol. We set it back when
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4734 an inconsistent EOL is found so that `last-coding-system-used' is
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4735 set to the coding system that doesn't specify EOL conversion. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4736 saved_coding_symbol = coding->symbol;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4737
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4738 coding->spec.ccl.cr_carryover = 0;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4739 if (coding->eol_type == CODING_EOL_UNDECIDED)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4740 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4741 /* Here, to avoid the call of setup_coding_system, we directly
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4742 call detect_eol_type. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4743 coding->eol_type = detect_eol_type (ptr, bytes, &dummy);
29877
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4744 if (coding->eol_type == CODING_EOL_INCONSISTENT)
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4745 coding->eol_type = CODING_EOL_LF;
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4746 if (coding->eol_type != CODING_EOL_UNDECIDED)
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4747 {
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4748 val = Fget (coding->symbol, Qeol_type);
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4749 if (VECTORP (val) && XVECTOR (val)->size == 3)
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4750 coding->symbol = XVECTOR (val)->contents[coding->eol_type];
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4751 }
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4752 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4753 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4754
29877
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4755 if (coding->eol_type == CODING_EOL_LF
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4756 || coding->eol_type == CODING_EOL_UNDECIDED)
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4757 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4758 /* We have nothing to do. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4759 ptr = pend;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4760 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4761 else if (coding->eol_type == CODING_EOL_CRLF)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4762 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4763 unsigned char *pstart = ptr, *p = ptr;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4764
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4765 if (! (coding->mode & CODING_MODE_LAST_BLOCK)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4766 && *(pend - 1) == '\r')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4767 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4768 /* If the last character is CR, we can't handle it here
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4769 because LF will be in the not-yet-decoded source text.
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4770 Record that the CR is not yet processed. */
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4771 coding->spec.ccl.cr_carryover = 1;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4772 coding->produced--;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4773 coding->produced_char--;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4774 pend--;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4775 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4776 while (ptr < pend)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4777 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4778 if (*ptr == '\r')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4779 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4780 if (ptr + 1 < pend && *(ptr + 1) == '\n')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4781 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4782 *p++ = '\n';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4783 ptr += 2;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4784 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4785 else
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4786 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4787 if (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4788 goto undo_eol_conversion;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4789 *p++ = *ptr++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4790 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4791 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4792 else if (*ptr == '\n'
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4793 && coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4794 goto undo_eol_conversion;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4795 else
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4796 *p++ = *ptr++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4797 continue;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4798
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4799 undo_eol_conversion:
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4800 /* We have faced with inconsistent EOL format at PTR.
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4801 Convert all LFs before PTR back to CRLFs. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4802 for (p--, ptr--; p >= pstart; p--)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4803 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4804 if (*p == '\n')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4805 *ptr-- = '\n', *ptr-- = '\r';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4806 else
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4807 *ptr-- = *p;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4808 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4809 /* If carryover is recorded, cancel it because we don't
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4810 convert CRLF anymore. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4811 if (coding->spec.ccl.cr_carryover)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4812 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4813 coding->spec.ccl.cr_carryover = 0;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4814 coding->produced++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4815 coding->produced_char++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4816 pend++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4817 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4818 p = ptr = pend;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4819 coding->eol_type = CODING_EOL_LF;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4820 coding->symbol = saved_coding_symbol;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4821 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4822 if (p < pend)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4823 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4824 /* As each two-byte sequence CRLF was converted to LF, (PEND
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4825 - P) is the number of deleted characters. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4826 coding->produced -= pend - p;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4827 coding->produced_char -= pend - p;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4828 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4829 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4830 else /* i.e. coding->eol_type == CODING_EOL_CR */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4831 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4832 unsigned char *p = ptr;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4833
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4834 for (; ptr < pend; ptr++)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4835 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4836 if (*ptr == '\r')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4837 *ptr = '\n';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4838 else if (*ptr == '\n'
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4839 && coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4840 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4841 for (; p < ptr; p++)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4842 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4843 if (*p == '\n')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4844 *p = '\r';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4845 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4846 ptr = pend;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4847 coding->eol_type = CODING_EOL_LF;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4848 coding->symbol = saved_coding_symbol;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4849 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4850 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4851 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4852 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4853
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4854 /* See "GENERAL NOTES about `decode_coding_XXX ()' functions". Before
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4855 decoding, it may detect coding system and format of end-of-line if
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4856 those are not yet decided. The source should be unibyte, the
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4857 result is multibyte if CODING->dst_multibyte is nonzero, else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4858 unibyte. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4859
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4860 int
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4861 decode_coding (coding, source, destination, src_bytes, dst_bytes)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4862 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4863 const unsigned char *source;
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4864 unsigned char *destination;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4865 int src_bytes, dst_bytes;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4866 {
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4867 int extra = 0;
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4868
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4869 if (coding->type == coding_type_undecided)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4870 detect_coding (coding, source, src_bytes);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4871
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4872 if (coding->eol_type == CODING_EOL_UNDECIDED
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4873 && coding->type != coding_type_ccl)
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4874 {
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4875 detect_eol (coding, source, src_bytes);
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4876 /* We had better recover the original eol format if we
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
4877 encounter an inconsistent eol format while decoding. */
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4878 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL;
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4879 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4880
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4881 coding->produced = coding->produced_char = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4882 coding->consumed = coding->consumed_char = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4883 coding->errors = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4884 coding->result = CODING_FINISH_NORMAL;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4885
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4886 switch (coding->type)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4887 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4888 case coding_type_sjis:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4889 decode_coding_sjis_big5 (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4890 src_bytes, dst_bytes, 1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4891 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4892
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4893 case coding_type_iso2022:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4894 decode_coding_iso2022 (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4895 src_bytes, dst_bytes);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4896 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4897
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4898 case coding_type_big5:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4899 decode_coding_sjis_big5 (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4900 src_bytes, dst_bytes, 0);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4901 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4902
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4903 case coding_type_emacs_mule:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4904 decode_coding_emacs_mule (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4905 src_bytes, dst_bytes);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4906 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4907
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4908 case coding_type_ccl:
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4909 if (coding->spec.ccl.cr_carryover)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4910 {
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4911 /* Put the CR which was not processed by the previous call
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4912 of decode_eol_post_ccl in DESTINATION. It will be
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4913 decoded together with the following LF by the call to
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4914 decode_eol_post_ccl below. */
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4915 *destination = '\r';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4916 coding->produced++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4917 coding->produced_char++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4918 dst_bytes--;
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4919 extra = coding->spec.ccl.cr_carryover;
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4920 }
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4921 ccl_coding_driver (coding, source, destination + extra,
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4922 src_bytes, dst_bytes, 0);
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4923 if (coding->eol_type != CODING_EOL_LF)
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4924 {
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4925 coding->produced += extra;
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4926 coding->produced_char += extra;
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4927 decode_eol_post_ccl (coding, destination, coding->produced);
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4928 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4929 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4930
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4931 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4932 decode_eol (coding, source, destination, src_bytes, dst_bytes);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4933 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4934
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4935 if (coding->result == CODING_FINISH_INSUFFICIENT_SRC
32896
3d8fb019040f (decode_coding): Fix previous change (check also
Kenichi Handa <handa@m17n.org>
parents: 32806
diff changeset
4936 && coding->mode & CODING_MODE_LAST_BLOCK
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4937 && coding->consumed == src_bytes)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4938 coding->result = CODING_FINISH_NORMAL;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4939
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4940 if (coding->mode & CODING_MODE_LAST_BLOCK
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4941 && coding->result == CODING_FINISH_INSUFFICIENT_SRC)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4942 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4943 const unsigned char *src = source + coding->consumed;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4944 unsigned char *dst = destination + coding->produced;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4945
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4946 src_bytes -= coding->consumed;
30847
91e24edb537a (encode_coding): Fix the bug of not flushing ISO escape sequence at
Kenichi Handa <handa@m17n.org>
parents: 30833
diff changeset
4947 coding->errors++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4948 if (COMPOSING_P (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4949 DECODE_COMPOSITION_END ('1');
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4950 while (src_bytes--)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4951 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4952 int c = *src++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4953 dst += CHAR_STRING (c, dst);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4954 coding->produced_char++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4955 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4956 coding->consumed = coding->consumed_char = src - source;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4957 coding->produced = dst - destination;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4958 coding->result = CODING_FINISH_NORMAL;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4959 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4960
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4961 if (!coding->dst_multibyte)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4962 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4963 coding->produced = str_as_unibyte (destination, coding->produced);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4964 coding->produced_char = coding->produced;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4965 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4966
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4967 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4968 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4969
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4970 /* See "GENERAL NOTES about `encode_coding_XXX ()' functions". The
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4971 multibyteness of the source is CODING->src_multibyte, the
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4972 multibyteness of the result is always unibyte. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4973
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4974 int
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4975 encode_coding (coding, source, destination, src_bytes, dst_bytes)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4976 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4977 const unsigned char *source;
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4978 unsigned char *destination;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4979 int src_bytes, dst_bytes;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4980 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4981 coding->produced = coding->produced_char = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4982 coding->consumed = coding->consumed_char = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4983 coding->errors = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4984 coding->result = CODING_FINISH_NORMAL;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4985
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4986 switch (coding->type)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4987 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4988 case coding_type_sjis:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4989 encode_coding_sjis_big5 (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4990 src_bytes, dst_bytes, 1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4991 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4992
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4993 case coding_type_iso2022:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4994 encode_coding_iso2022 (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4995 src_bytes, dst_bytes);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4996 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4997
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4998 case coding_type_big5:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4999 encode_coding_sjis_big5 (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5000 src_bytes, dst_bytes, 0);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5001 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5002
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5003 case coding_type_emacs_mule:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5004 encode_coding_emacs_mule (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5005 src_bytes, dst_bytes);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5006 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5007
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5008 case coding_type_ccl:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5009 ccl_coding_driver (coding, source, destination,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5010 src_bytes, dst_bytes, 1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5011 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5012
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5013 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5014 encode_eol (coding, source, destination, src_bytes, dst_bytes);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5015 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5016
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5017 if (coding->mode & CODING_MODE_LAST_BLOCK
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5018 && coding->result == CODING_FINISH_INSUFFICIENT_SRC)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5019 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
5020 const unsigned char *src = source + coding->consumed;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5021 unsigned char *dst = destination + coding->produced;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5022
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5023 if (coding->type == coding_type_iso2022)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5024 ENCODE_RESET_PLANE_AND_REGISTER;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5025 if (COMPOSING_P (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5026 *dst++ = ISO_CODE_ESC, *dst++ = '1';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5027 if (coding->consumed < src_bytes)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5028 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5029 int len = src_bytes - coding->consumed;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5030
40842
27fa759cd153 (encode_coding): Use precomputed value of `src'.
Pavel Janík <Pavel@Janik.cz>
parents: 40713
diff changeset
5031 BCOPY_SHORT (src, dst, len);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5032 if (coding->src_multibyte)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5033 len = str_as_unibyte (dst, len);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5034 dst += len;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5035 coding->consumed = src_bytes;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5036 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5037 coding->produced = coding->produced_char = dst - destination;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5038 coding->result = CODING_FINISH_NORMAL;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5039 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5040
30847
91e24edb537a (encode_coding): Fix the bug of not flushing ISO escape sequence at
Kenichi Handa <handa@m17n.org>
parents: 30833
diff changeset
5041 if (coding->result == CODING_FINISH_INSUFFICIENT_SRC
91e24edb537a (encode_coding): Fix the bug of not flushing ISO escape sequence at
Kenichi Handa <handa@m17n.org>
parents: 30833
diff changeset
5042 && coding->consumed == src_bytes)
91e24edb537a (encode_coding): Fix the bug of not flushing ISO escape sequence at
Kenichi Handa <handa@m17n.org>
parents: 30833
diff changeset
5043 coding->result = CODING_FINISH_NORMAL;
91e24edb537a (encode_coding): Fix the bug of not flushing ISO escape sequence at
Kenichi Handa <handa@m17n.org>
parents: 30833
diff changeset
5044
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5045 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5046 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5047
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5048 /* Scan text in the region between *BEG and *END (byte positions),
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5049 skip characters which we don't have to decode by coding system
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5050 CODING at the head and tail, then set *BEG and *END to the region
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5051 of the text we actually have to convert. The caller should move
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5052 the gap out of the region in advance if the region is from a
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5053 buffer.
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5054
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5055 If STR is not NULL, *BEG and *END are indices into STR. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5056
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5057 static void
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5058 shrink_decoding_region (beg, end, coding, str)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5059 int *beg, *end;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5060 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5061 unsigned char *str;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5062 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5063 unsigned char *begp_orig, *begp, *endp_orig, *endp, c;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5064 int eol_conversion;
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5065 Lisp_Object translation_table;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5066
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5067 if (coding->type == coding_type_ccl
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5068 || coding->type == coding_type_undecided
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5069 || coding->eol_type != CODING_EOL_LF
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5070 || !NILP (coding->post_read_conversion)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5071 || coding->composing != COMPOSITION_DISABLED)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5072 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5073 /* We can't skip any data. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5074 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5075 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5076 if (coding->type == coding_type_no_conversion
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5077 || coding->type == coding_type_raw_text
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5078 || coding->type == coding_type_emacs_mule)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5079 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5080 /* We need no conversion, but don't have to skip any data here.
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5081 Decoding routine handles them effectively anyway. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5082 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5083 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5084
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5085 translation_table = coding->translation_table_for_decode;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5086 if (NILP (translation_table) && !NILP (Venable_character_translation))
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5087 translation_table = Vstandard_translation_table_for_decode;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5088 if (CHAR_TABLE_P (translation_table))
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5089 {
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5090 int i;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5091 for (i = 0; i < 128; i++)
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5092 if (!NILP (CHAR_TABLE_REF (translation_table, i)))
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5093 break;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5094 if (i < 128)
29247
c748b4b1c785 (shrink_decoding_region): Initialize eol_conversion.
Dave Love <fx@gnu.org>
parents: 29184
diff changeset
5095 /* Some ASCII character should be translated. We give up
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5096 shrinking. */
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5097 return;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5098 }
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5099
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5100 if (coding->heading_ascii >= 0)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5101 /* Detection routine has already found how much we can skip at the
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5102 head. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5103 *beg += coding->heading_ascii;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5104
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5105 if (str)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5106 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5107 begp_orig = begp = str + *beg;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5108 endp_orig = endp = str + *end;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5109 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5110 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5111 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5112 begp_orig = begp = BYTE_POS_ADDR (*beg);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5113 endp_orig = endp = begp + *end - *beg;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5114 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5115
29247
c748b4b1c785 (shrink_decoding_region): Initialize eol_conversion.
Dave Love <fx@gnu.org>
parents: 29184
diff changeset
5116 eol_conversion = (coding->eol_type == CODING_EOL_CR
c748b4b1c785 (shrink_decoding_region): Initialize eol_conversion.
Dave Love <fx@gnu.org>
parents: 29184
diff changeset
5117 || coding->eol_type == CODING_EOL_CRLF);
c748b4b1c785 (shrink_decoding_region): Initialize eol_conversion.
Dave Love <fx@gnu.org>
parents: 29184
diff changeset
5118
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5119 switch (coding->type)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5120 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5121 case coding_type_sjis:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5122 case coding_type_big5:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5123 /* We can skip all ASCII characters at the head. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5124 if (coding->heading_ascii < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5125 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5126 if (eol_conversion)
21273
3d9e12cf2e63 (shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents: 21253
diff changeset
5127 while (begp < endp && *begp < 0x80 && *begp != '\r') begp++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5128 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5129 while (begp < endp && *begp < 0x80) begp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5130 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5131 /* We can skip all ASCII characters at the tail except for the
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5132 second byte of SJIS or BIG5 code. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5133 if (eol_conversion)
21273
3d9e12cf2e63 (shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents: 21253
diff changeset
5134 while (begp < endp && endp[-1] < 0x80 && endp[-1] != '\r') endp--;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5135 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5136 while (begp < endp && endp[-1] < 0x80) endp--;
21744
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
5137 /* Do not consider LF as ascii if preceded by CR, since that
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
5138 confuses eol decoding. */
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
5139 if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n')
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
5140 endp++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5141 if (begp < endp && endp < endp_orig && endp[-1] >= 0x80)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5142 endp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5143 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5144
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5145 case coding_type_iso2022:
23426
088cb2a804c7 (shrink_decoding_region): If a charset other than ascii
Kenichi Handa <handa@m17n.org>
parents: 23402
diff changeset
5146 if (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, 0) != CHARSET_ASCII)
088cb2a804c7 (shrink_decoding_region): If a charset other than ascii
Kenichi Handa <handa@m17n.org>
parents: 23402
diff changeset
5147 /* We can't skip any data. */
088cb2a804c7 (shrink_decoding_region): If a charset other than ascii
Kenichi Handa <handa@m17n.org>
parents: 23402
diff changeset
5148 break;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5149 if (coding->heading_ascii < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5150 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5151 /* We can skip all ASCII characters at the head except for a
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5152 few control codes. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5153 while (begp < endp && (c = *begp) < 0x80
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5154 && c != ISO_CODE_CR && c != ISO_CODE_SO
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5155 && c != ISO_CODE_SI && c != ISO_CODE_ESC
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5156 && (!eol_conversion || c != ISO_CODE_LF))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5157 begp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5158 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5159 switch (coding->category_idx)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5160 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5161 case CODING_CATEGORY_IDX_ISO_8_1:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5162 case CODING_CATEGORY_IDX_ISO_8_2:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5163 /* We can skip all ASCII characters at the tail. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5164 if (eol_conversion)
21273
3d9e12cf2e63 (shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents: 21253
diff changeset
5165 while (begp < endp && (c = endp[-1]) < 0x80 && c != '\r') endp--;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5166 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5167 while (begp < endp && endp[-1] < 0x80) endp--;
21744
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
5168 /* Do not consider LF as ascii if preceded by CR, since that
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
5169 confuses eol decoding. */
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
5170 if (begp < endp && endp < endp_orig && endp[-1] == '\r' && endp[0] == '\n')
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
5171 endp++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5172 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5173
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5174 case CODING_CATEGORY_IDX_ISO_7:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5175 case CODING_CATEGORY_IDX_ISO_7_TIGHT:
23325
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5176 {
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5177 /* We can skip all characters at the tail except for 8-bit
23325
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5178 codes and ESC and the following 2-byte at the tail. */
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5179 unsigned char *eight_bit = NULL;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5180
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5181 if (eol_conversion)
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5182 while (begp < endp
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5183 && (c = endp[-1]) != ISO_CODE_ESC && c != '\r')
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5184 {
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5185 if (!eight_bit && c & 0x80) eight_bit = endp;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5186 endp--;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5187 }
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5188 else
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5189 while (begp < endp
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5190 && (c = endp[-1]) != ISO_CODE_ESC)
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5191 {
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5192 if (!eight_bit && c & 0x80) eight_bit = endp;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5193 endp--;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5194 }
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5195 /* Do not consider LF as ascii if preceded by CR, since that
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5196 confuses eol decoding. */
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5197 if (begp < endp && endp < endp_orig
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5198 && endp[-1] == '\r' && endp[0] == '\n')
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5199 endp++;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5200 if (begp < endp && endp[-1] == ISO_CODE_ESC)
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5201 {
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5202 if (endp + 1 < endp_orig && end[0] == '(' && end[1] == 'B')
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5203 /* This is an ASCII designation sequence. We can
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5204 surely skip the tail. But, if we have
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5205 encountered an 8-bit code, skip only the codes
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5206 after that. */
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5207 endp = eight_bit ? eight_bit : endp + 2;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5208 else
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5209 /* Hmmm, we can't skip the tail. */
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5210 endp = endp_orig;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5211 }
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5212 else if (eight_bit)
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5213 endp = eight_bit;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5214 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5215 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5216 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5217
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5218 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5219 abort ();
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5220 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5221 *beg += begp - begp_orig;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5222 *end += endp - endp_orig;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5223 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5224 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5225
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5226 /* Like shrink_decoding_region but for encoding. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5227
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5228 static void
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5229 shrink_encoding_region (beg, end, coding, str)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5230 int *beg, *end;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5231 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5232 unsigned char *str;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5233 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5234 unsigned char *begp_orig, *begp, *endp_orig, *endp;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5235 int eol_conversion;
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5236 Lisp_Object translation_table;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5237
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5238 if (coding->type == coding_type_ccl
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5239 || coding->eol_type == CODING_EOL_CRLF
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5240 || coding->eol_type == CODING_EOL_CR
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
5241 || (coding->cmp_data && coding->cmp_data->used > 0))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5242 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5243 /* We can't skip any data. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5244 return;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5245 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5246 if (coding->type == coding_type_no_conversion
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5247 || coding->type == coding_type_raw_text
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5248 || coding->type == coding_type_emacs_mule
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5249 || coding->type == coding_type_undecided)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5250 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5251 /* We need no conversion, but don't have to skip any data here.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5252 Encoding routine handles them effectively anyway. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5253 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5254 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5255
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5256 translation_table = coding->translation_table_for_encode;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5257 if (NILP (translation_table) && !NILP (Venable_character_translation))
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5258 translation_table = Vstandard_translation_table_for_encode;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5259 if (CHAR_TABLE_P (translation_table))
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5260 {
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5261 int i;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5262 for (i = 0; i < 128; i++)
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5263 if (!NILP (CHAR_TABLE_REF (translation_table, i)))
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5264 break;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5265 if (i < 128)
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5266 /* Some ASCII character should be translated. We give up
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5267 shrinking. */
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5268 return;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5269 }
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5270
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5271 if (str)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5272 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5273 begp_orig = begp = str + *beg;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5274 endp_orig = endp = str + *end;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5275 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5276 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5277 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5278 begp_orig = begp = BYTE_POS_ADDR (*beg);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5279 endp_orig = endp = begp + *end - *beg;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5280 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5281
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5282 eol_conversion = (coding->eol_type == CODING_EOL_CR
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5283 || coding->eol_type == CODING_EOL_CRLF);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5284
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5285 /* Here, we don't have to check coding->pre_write_conversion because
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5286 the caller is expected to have handled it already. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5287 switch (coding->type)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5288 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5289 case coding_type_iso2022:
23426
088cb2a804c7 (shrink_decoding_region): If a charset other than ascii
Kenichi Handa <handa@m17n.org>
parents: 23402
diff changeset
5290 if (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, 0) != CHARSET_ASCII)
088cb2a804c7 (shrink_decoding_region): If a charset other than ascii
Kenichi Handa <handa@m17n.org>
parents: 23402
diff changeset
5291 /* We can't skip any data. */
088cb2a804c7 (shrink_decoding_region): If a charset other than ascii
Kenichi Handa <handa@m17n.org>
parents: 23402
diff changeset
5292 break;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5293 if (coding->flags & CODING_FLAG_ISO_DESIGNATE_AT_BOL)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5294 {
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
5295 unsigned char *bol = begp;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5296 while (begp < endp && *begp < 0x80)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5297 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5298 begp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5299 if (begp[-1] == '\n')
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5300 bol = begp;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5301 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5302 begp = bol;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5303 goto label_skip_tail;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5304 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5305 /* fall down ... */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5306
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5307 case coding_type_sjis:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5308 case coding_type_big5:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5309 /* We can skip all ASCII characters at the head and tail. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5310 if (eol_conversion)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5311 while (begp < endp && *begp < 0x80 && *begp != '\n') begp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5312 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5313 while (begp < endp && *begp < 0x80) begp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5314 label_skip_tail:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5315 if (eol_conversion)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5316 while (begp < endp && endp[-1] < 0x80 && endp[-1] != '\n') endp--;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5317 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5318 while (begp < endp && *(endp - 1) < 0x80) endp--;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5319 break;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5320
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5321 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5322 abort ();
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5323 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5324
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5325 *beg += begp - begp_orig;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5326 *end += endp - endp_orig;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5327 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5328 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5329
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5330 /* As shrinking conversion region requires some overhead, we don't try
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5331 shrinking if the length of conversion region is less than this
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5332 value. */
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5333 static int shrink_conversion_region_threshhold = 1024;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5334
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5335 #define SHRINK_CONVERSION_REGION(beg, end, coding, str, encodep) \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5336 do { \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5337 if (*(end) - *(beg) > shrink_conversion_region_threshhold) \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5338 { \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5339 if (encodep) shrink_encoding_region (beg, end, coding, str); \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5340 else shrink_decoding_region (beg, end, coding, str); \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5341 } \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5342 } while (0)
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5343
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5344 static Lisp_Object
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5345 code_convert_region_unwind (arg)
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5346 Lisp_Object arg;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5347 {
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5348 inhibit_pre_post_conversion = 0;
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5349 Vlast_coding_system_used = arg;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5350 return Qnil;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5351 }
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5352
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5353 /* Store information about all compositions in the range FROM and TO
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5354 of OBJ in memory blocks pointed by CODING->cmp_data. OBJ is a
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5355 buffer or a string, defaults to the current buffer. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5356
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5357 void
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5358 coding_save_composition (coding, from, to, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5359 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5360 int from, to;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5361 Lisp_Object obj;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5362 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5363 Lisp_Object prop;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5364 int start, end;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5365
27943
c2e0998057f9 (coding_save_composition): Be sure to allocate
Kenichi Handa <handa@m17n.org>
parents: 27271
diff changeset
5366 if (coding->composing == COMPOSITION_DISABLED)
c2e0998057f9 (coding_save_composition): Be sure to allocate
Kenichi Handa <handa@m17n.org>
parents: 27271
diff changeset
5367 return;
c2e0998057f9 (coding_save_composition): Be sure to allocate
Kenichi Handa <handa@m17n.org>
parents: 27271
diff changeset
5368 if (!coding->cmp_data)
c2e0998057f9 (coding_save_composition): Be sure to allocate
Kenichi Handa <handa@m17n.org>
parents: 27271
diff changeset
5369 coding_allocate_composition_data (coding, from);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5370 if (!find_composition (from, to, &start, &end, &prop, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5371 || end > to)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5372 return;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5373 if (start < from
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5374 && (!find_composition (end, to, &start, &end, &prop, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5375 || end > to))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5376 return;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5377 coding->composing = COMPOSITION_NO;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5378 do
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5379 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5380 if (COMPOSITION_VALID_P (start, end, prop))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5381 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5382 enum composition_method method = COMPOSITION_METHOD (prop);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5383 if (coding->cmp_data->used + COMPOSITION_DATA_MAX_BUNCH_LENGTH
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5384 >= COMPOSITION_DATA_SIZE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5385 coding_allocate_composition_data (coding, from);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5386 /* For relative composition, we remember start and end
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5387 positions, for the other compositions, we also remember
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5388 components. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5389 CODING_ADD_COMPOSITION_START (coding, start - from, method);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5390 if (method != COMPOSITION_RELATIVE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5391 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5392 /* We must store a*/
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5393 Lisp_Object val, ch;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5394
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5395 val = COMPOSITION_COMPONENTS (prop);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5396 if (CONSP (val))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5397 while (CONSP (val))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5398 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5399 ch = XCAR (val), val = XCDR (val);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5400 CODING_ADD_COMPOSITION_COMPONENT (coding, XINT (ch));
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5401 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5402 else if (VECTORP (val) || STRINGP (val))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5403 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5404 int len = (VECTORP (val)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
5405 ? XVECTOR (val)->size : SCHARS (val));
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5406 int i;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5407 for (i = 0; i < len; i++)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5408 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5409 ch = (STRINGP (val)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5410 ? Faref (val, make_number (i))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5411 : XVECTOR (val)->contents[i]);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5412 CODING_ADD_COMPOSITION_COMPONENT (coding, XINT (ch));
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5413 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5414 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5415 else /* INTEGERP (val) */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5416 CODING_ADD_COMPOSITION_COMPONENT (coding, XINT (val));
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5417 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5418 CODING_ADD_COMPOSITION_END (coding, end - from);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5419 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5420 start = end;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5421 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5422 while (start < to
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5423 && find_composition (start, to, &start, &end, &prop, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5424 && end <= to);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5425
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5426 /* Make coding->cmp_data point to the first memory block. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5427 while (coding->cmp_data->prev)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5428 coding->cmp_data = coding->cmp_data->prev;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5429 coding->cmp_data_start = 0;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5430 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5431
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5432 /* Reflect the saved information about compositions to OBJ.
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5433 CODING->cmp_data points to a memory block for the information. OBJ
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5434 is a buffer or a string, defaults to the current buffer. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5435
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
5436 void
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5437 coding_restore_composition (coding, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5438 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5439 Lisp_Object obj;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5440 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5441 struct composition_data *cmp_data = coding->cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5442
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5443 if (!cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5444 return;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5445
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5446 while (cmp_data->prev)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5447 cmp_data = cmp_data->prev;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5448
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5449 while (cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5450 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5451 int i;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5452
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5453 for (i = 0; i < cmp_data->used && cmp_data->data[i] > 0;
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5454 i += cmp_data->data[i])
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5455 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5456 int *data = cmp_data->data + i;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5457 enum composition_method method = (enum composition_method) data[3];
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5458 Lisp_Object components;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5459
53007
36796e056954 (coding_allocate_composition_data): Reset
Kenichi Handa <handa@m17n.org>
parents: 52806
diff changeset
5460 if (data[0] < 0 || i + data[0] > cmp_data->used)
36796e056954 (coding_allocate_composition_data): Reset
Kenichi Handa <handa@m17n.org>
parents: 52806
diff changeset
5461 /* Invalid composition data. */
36796e056954 (coding_allocate_composition_data): Reset
Kenichi Handa <handa@m17n.org>
parents: 52806
diff changeset
5462 break;
36796e056954 (coding_allocate_composition_data): Reset
Kenichi Handa <handa@m17n.org>
parents: 52806
diff changeset
5463
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5464 if (method == COMPOSITION_RELATIVE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5465 components = Qnil;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5466 else
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5467 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5468 int len = data[0] - 4, j;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5469 Lisp_Object args[MAX_COMPOSITION_COMPONENTS * 2 - 1];
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5470
50047
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
5471 if (method == COMPOSITION_WITH_RULE_ALTCHARS
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
5472 && len % 2 == 0)
8e17fbb2ac77 (CODING_ADD_COMPOSITION_COMPONENT): If the number of
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
5473 len --;
53775
68f86fa2b022 (coding_restore_composition): Check invalid
Kenichi Handa <handa@m17n.org>
parents: 53348
diff changeset
5474 if (len < 1)
68f86fa2b022 (coding_restore_composition): Check invalid
Kenichi Handa <handa@m17n.org>
parents: 53348
diff changeset
5475 /* Invalid composition data. */
68f86fa2b022 (coding_restore_composition): Check invalid
Kenichi Handa <handa@m17n.org>
parents: 53348
diff changeset
5476 break;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5477 for (j = 0; j < len; j++)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5478 args[j] = make_number (data[4 + j]);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5479 components = (method == COMPOSITION_WITH_ALTCHARS
53087
858cdfcb7635 (coding_restore_composition): Lisp_Object/int mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53007
diff changeset
5480 ? Fstring (len, args)
858cdfcb7635 (coding_restore_composition): Lisp_Object/int mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53007
diff changeset
5481 : Fvector (len, args));
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5482 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5483 compose_text (data[1], data[2], components, Qnil, obj);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5484 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5485 cmp_data = cmp_data->next;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5486 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5487 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5488
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5489 /* Decode (if ENCODEP is zero) or encode (if ENCODEP is nonzero) the
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5490 text from FROM to TO (byte positions are FROM_BYTE and TO_BYTE) by
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5491 coding system CODING, and return the status code of code conversion
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5492 (currently, this value has no meaning).
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5493
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5494 How many characters (and bytes) are converted to how many
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5495 characters (and bytes) are recorded in members of the structure
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5496 CODING.
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5497
21190
d704dd953837 (code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents: 21140
diff changeset
5498 If REPLACE is nonzero, we do various things as if the original text
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5499 is deleted and a new text is inserted. See the comments in
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5500 replace_range (insdel.c) to know what we are doing.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5501
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5502 If REPLACE is zero, it is assumed that the source text is unibyte.
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5503 Otherwise, it is assumed that the source text is multibyte. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5504
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5505 int
21190
d704dd953837 (code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents: 21140
diff changeset
5506 code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
d704dd953837 (code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents: 21140
diff changeset
5507 int from, from_byte, to, to_byte, encodep, replace;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5508 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5509 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5510 int len = to - from, len_byte = to_byte - from_byte;
42661
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5511 int nchars_del = 0, nbytes_del = 0;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5512 int require, inserted, inserted_byte;
27271
7b495b311f18 (code_convert_region): Initialize total_skip.
Andreas Schwab <schwab@suse.de>
parents: 26900
diff changeset
5513 int head_skip, tail_skip, total_skip = 0;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
5514 Lisp_Object saved_coding_symbol;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5515 int first = 1;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5516 unsigned char *src, *dst;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
5517 Lisp_Object deletion;
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5518 int orig_point = PT, orig_len = len;
23537
28cd5faf93dd (code_convert_region): While preserving the orignal
Kenichi Handa <handa@m17n.org>
parents: 23514
diff changeset
5519 int prev_Z;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5520 int multibyte_p = !NILP (current_buffer->enable_multibyte_characters);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5521
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
5522 deletion = Qnil;
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
5523 saved_coding_symbol = coding->symbol;
21190
d704dd953837 (code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents: 21140
diff changeset
5524
21576
8043d47984fd (code_convert_region): If point in the conversion
Kenichi Handa <handa@m17n.org>
parents: 21574
diff changeset
5525 if (from < PT && PT < to)
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5526 {
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5527 TEMP_SET_PT_BOTH (from, from_byte);
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5528 orig_point = from;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5529 }
21576
8043d47984fd (code_convert_region): If point in the conversion
Kenichi Handa <handa@m17n.org>
parents: 21574
diff changeset
5530
21190
d704dd953837 (code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents: 21140
diff changeset
5531 if (replace)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5532 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5533 int saved_from = from;
30315
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5534 int saved_inhibit_modification_hooks;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5535
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5536 prepare_to_modify_buffer (from, to, &from);
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5537 if (saved_from != from)
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5538 {
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5539 to = from + len;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5540 from_byte = CHAR_TO_BYTE (from), to_byte = CHAR_TO_BYTE (to);
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5541 len_byte = to_byte - from_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5542 }
30315
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5543
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5544 /* The code conversion routine can not preserve text properties
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5545 for now. So, we must remove all text properties in the
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5546 region. Here, we must suppress all modification hooks. */
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5547 saved_inhibit_modification_hooks = inhibit_modification_hooks;
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5548 inhibit_modification_hooks = 1;
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5549 Fset_text_properties (make_number (from), make_number (to), Qnil, Qnil);
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5550 inhibit_modification_hooks = saved_inhibit_modification_hooks;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5551 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5552
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5553 if (! encodep && CODING_REQUIRE_DETECTION (coding))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5554 {
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5555 /* We must detect encoding of text and eol format. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5556
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5557 if (from < GPT && to > GPT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5558 move_gap_both (from, from_byte);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5559 if (coding->type == coding_type_undecided)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5560 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5561 detect_coding (coding, BYTE_POS_ADDR (from_byte), len_byte);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5562 if (coding->type == coding_type_undecided)
32443
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5563 {
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5564 /* It seems that the text contains only ASCII, but we
32745
70dcd0333504 Fix a typo in a comment.
Eli Zaretskii <eliz@gnu.org>
parents: 32445
diff changeset
5565 should not leave it undecided because the deeper
32443
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5566 decoding routine (decode_coding) tries to detect the
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5567 encodings again in vain. */
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5568 coding->type = coding_type_emacs_mule;
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5569 coding->category_idx = CODING_CATEGORY_IDX_EMACS_MULE;
35995
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5570 /* As emacs-mule decoder will handle composition, we
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5571 need this setting to allocate coding->cmp_data
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5572 later. */
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5573 coding->composing = COMPOSITION_NO;
32443
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5574 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5575 }
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5576 if (coding->eol_type == CODING_EOL_UNDECIDED
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5577 && coding->type != coding_type_ccl)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5578 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5579 detect_eol (coding, BYTE_POS_ADDR (from_byte), len_byte);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5580 if (coding->eol_type == CODING_EOL_UNDECIDED)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5581 coding->eol_type = CODING_EOL_LF;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5582 /* We had better recover the original eol format if we
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5583 encounter an inconsistent eol format while decoding. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5584 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5585 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5586 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5587
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5588 /* Now we convert the text. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5589
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5590 /* For encoding, we must process pre-write-conversion in advance. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5591 if (! inhibit_pre_post_conversion
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5592 && encodep
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5593 && SYMBOLP (coding->pre_write_conversion)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5594 && ! NILP (Ffboundp (coding->pre_write_conversion)))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5595 {
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5596 /* The function in pre-write-conversion may put a new text in a
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5597 new buffer. */
23542
eaf358b2e8dd (code_convert_region): Kill the work buffer created by
Kenichi Handa <handa@m17n.org>
parents: 23537
diff changeset
5598 struct buffer *prev = current_buffer;
eaf358b2e8dd (code_convert_region): Kill the work buffer created by
Kenichi Handa <handa@m17n.org>
parents: 23537
diff changeset
5599 Lisp_Object new;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5600
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5601 record_unwind_protect (code_convert_region_unwind,
50486
b67e5e5b8fc4 (code_convert_region): Fix last change.
Kenichi Handa <handa@m17n.org>
parents: 50484
diff changeset
5602 Vlast_coding_system_used);
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5603 /* We should not call any more pre-write/post-read-conversion
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5604 functions while this pre-write-conversion is running. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5605 inhibit_pre_post_conversion = 1;
21520
ca4819c36ab9 (code_convert_region): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
5606 call2 (coding->pre_write_conversion,
ca4819c36ab9 (code_convert_region): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
5607 make_number (from), make_number (to));
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5608 inhibit_pre_post_conversion = 0;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5609 /* Discard the unwind protect. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5610 specpdl_ptr--;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5611
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5612 if (current_buffer != prev)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5613 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5614 len = ZV - BEGV;
23542
eaf358b2e8dd (code_convert_region): Kill the work buffer created by
Kenichi Handa <handa@m17n.org>
parents: 23537
diff changeset
5615 new = Fcurrent_buffer ();
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5616 set_buffer_internal_1 (prev);
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26526
diff changeset
5617 del_range_2 (from, from_byte, to, to_byte, 0);
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5618 TEMP_SET_PT_BOTH (from, from_byte);
23542
eaf358b2e8dd (code_convert_region): Kill the work buffer created by
Kenichi Handa <handa@m17n.org>
parents: 23537
diff changeset
5619 insert_from_buffer (XBUFFER (new), 1, len, 0);
eaf358b2e8dd (code_convert_region): Kill the work buffer created by
Kenichi Handa <handa@m17n.org>
parents: 23537
diff changeset
5620 Fkill_buffer (new);
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5621 if (orig_point >= to)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5622 orig_point += len - orig_len;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5623 else if (orig_point > from)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5624 orig_point = from;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5625 orig_len = len;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5626 to = from + len;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5627 from_byte = CHAR_TO_BYTE (from);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5628 to_byte = CHAR_TO_BYTE (to);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5629 len_byte = to_byte - from_byte;
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5630 TEMP_SET_PT_BOTH (from, from_byte);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5631 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5632 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5633
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5634 if (replace)
42661
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5635 {
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5636 if (! EQ (current_buffer->undo_list, Qt))
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5637 deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1);
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5638 else
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5639 {
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5640 nchars_del = to - from;
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5641 nbytes_del = to_byte - from_byte;
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5642 }
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5643 }
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5644
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5645 if (coding->composing != COMPOSITION_DISABLED)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5646 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5647 if (encodep)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5648 coding_save_composition (coding, from, to, Fcurrent_buffer ());
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5649 else
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5650 coding_allocate_composition_data (coding, from);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5651 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5652
57285
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
5653 /* Try to skip the heading and tailing ASCIIs. We can't skip them
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
5654 if we must run CCL program or there are compositions to
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
5655 encode. */
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
5656 if (coding->type != coding_type_ccl
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
5657 && (! coding->cmp_data || coding->cmp_data->used == 0))
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5658 {
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5659 int from_byte_orig = from_byte, to_byte_orig = to_byte;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5660
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5661 if (from < GPT && GPT < to)
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5662 move_gap_both (from, from_byte);
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5663 SHRINK_CONVERSION_REGION (&from_byte, &to_byte, coding, NULL, encodep);
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5664 if (from_byte == to_byte
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5665 && (encodep || NILP (coding->post_read_conversion))
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5666 && ! CODING_REQUIRE_FLUSHING (coding))
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5667 {
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5668 coding->produced = len_byte;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5669 coding->produced_char = len;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5670 if (!replace)
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5671 /* We must record and adjust for this new text now. */
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5672 adjust_after_insert (from, from_byte_orig, to, to_byte_orig, len);
57285
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
5673 coding_free_composition_data (coding);
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5674 return 0;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5675 }
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5676
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5677 head_skip = from_byte - from_byte_orig;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5678 tail_skip = to_byte_orig - to_byte;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5679 total_skip = head_skip + tail_skip;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5680 from += head_skip;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5681 to -= tail_skip;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5682 len -= total_skip; len_byte -= total_skip;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5683 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5684
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5685 /* For conversion, we must put the gap before the text in addition to
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5686 making the gap larger for efficient decoding. The required gap
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5687 size starts from 2000 which is the magic number used in make_gap.
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5688 But, after one batch of conversion, it will be incremented if we
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5689 find that it is not enough . */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5690 require = 2000;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5691
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5692 if (GAP_SIZE < require)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5693 make_gap (require - GAP_SIZE);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5694 move_gap_both (from, from_byte);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5695
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5696 inserted = inserted_byte = 0;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5697
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5698 GAP_SIZE += len_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5699 ZV -= len;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5700 Z -= len;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5701 ZV_BYTE -= len_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5702 Z_BYTE -= len_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5703
25370
20d8158841b0 (code_convert_region): Compute beg/end_unchanged per
Gerd Moellmann <gerd@gnu.org>
parents: 25067
diff changeset
5704 if (GPT - BEG < BEG_UNCHANGED)
20d8158841b0 (code_convert_region): Compute beg/end_unchanged per
Gerd Moellmann <gerd@gnu.org>
parents: 25067
diff changeset
5705 BEG_UNCHANGED = GPT - BEG;
20d8158841b0 (code_convert_region): Compute beg/end_unchanged per
Gerd Moellmann <gerd@gnu.org>
parents: 25067
diff changeset
5706 if (Z - GPT < END_UNCHANGED)
20d8158841b0 (code_convert_region): Compute beg/end_unchanged per
Gerd Moellmann <gerd@gnu.org>
parents: 25067
diff changeset
5707 END_UNCHANGED = Z - GPT;
23258
2f8585bcea90 (code_convert_region): Update beg_unchanged and
Kenichi Handa <handa@m17n.org>
parents: 23201
diff changeset
5708
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5709 if (!encodep && coding->src_multibyte)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5710 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5711 /* Decoding routines expects that the source text is unibyte.
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5712 We must convert 8-bit characters of multibyte form to
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5713 unibyte. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5714 int len_byte_orig = len_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5715 len_byte = str_as_unibyte (GAP_END_ADDR - len_byte, len_byte);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5716 if (len_byte < len_byte_orig)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5717 safe_bcopy (GAP_END_ADDR - len_byte_orig, GAP_END_ADDR - len_byte,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5718 len_byte);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5719 coding->src_multibyte = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5720 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5721
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5722 for (;;)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5723 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5724 int result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5725
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5726 /* The buffer memory is now:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5727 +--------+converted-text+---------+-------original-text-------+---+
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5728 |<-from->|<--inserted-->|---------|<--------len_byte--------->|---|
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5729 |<---------------------- GAP ----------------------->| */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5730 src = GAP_END_ADDR - len_byte;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5731 dst = GPT_ADDR + inserted_byte;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5732
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5733 if (encodep)
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5734 result = encode_coding (coding, src, dst, len_byte, 0);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5735 else
42105
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
5736 {
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
5737 if (coding->composing != COMPOSITION_DISABLED)
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
5738 coding->cmp_data->char_offset = from + inserted;
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
5739 result = decode_coding (coding, src, dst, len_byte, 0);
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
5740 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5741
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5742 /* The buffer memory is now:
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5743 +--------+-------converted-text----+--+------original-text----+---+
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5744 |<-from->|<-inserted->|<-produced->|--|<-(len_byte-consumed)->|---|
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5745 |<---------------------- GAP ----------------------->| */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5746
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5747 inserted += coding->produced_char;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5748 inserted_byte += coding->produced;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5749 len_byte -= coding->consumed;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5750
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5751 if (result == CODING_FINISH_INSUFFICIENT_CMP)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5752 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5753 coding_allocate_composition_data (coding, from + inserted);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5754 continue;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5755 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5756
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5757 src += coding->consumed;
26240
93f3d2337323 (code_convert_region): Update `dst' correctly.
Kenichi Handa <handa@m17n.org>
parents: 26088
diff changeset
5758 dst += coding->produced;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5759
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5760 if (result == CODING_FINISH_NORMAL)
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5761 {
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5762 src += len_byte;
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5763 break;
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5764 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5765 if (! encodep && result == CODING_FINISH_INCONSISTENT_EOL)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5766 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5767 unsigned char *pend = dst, *p = pend - inserted_byte;
24706
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5768 Lisp_Object eol_type;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5769
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5770 /* Encode LFs back to the original eol format (CR or CRLF). */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5771 if (coding->eol_type == CODING_EOL_CR)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5772 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5773 while (p < pend) if (*p++ == '\n') p[-1] = '\r';
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5774 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5775 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5776 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5777 int count = 0;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5778
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5779 while (p < pend) if (*p++ == '\n') count++;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5780 if (src - dst < count)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5781 {
24706
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5782 /* We don't have sufficient room for encoding LFs
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5783 back to CRLF. We must record converted and
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5784 not-yet-converted text back to the buffer
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5785 content, enlarge the gap, then record them out of
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5786 the buffer contents again. */
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5787 int add = len_byte + inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5788
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5789 GAP_SIZE -= add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5790 ZV += add; Z += add; ZV_BYTE += add; Z_BYTE += add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5791 GPT += inserted_byte; GPT_BYTE += inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5792 make_gap (count - GAP_SIZE);
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5793 GAP_SIZE += add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5794 ZV -= add; Z -= add; ZV_BYTE -= add; Z_BYTE -= add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5795 GPT -= inserted_byte; GPT_BYTE -= inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5796 /* Don't forget to update SRC, DST, and PEND. */
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5797 src = GAP_END_ADDR - len_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5798 dst = GPT_ADDR + inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5799 pend = dst;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5800 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5801 inserted += count;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5802 inserted_byte += count;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5803 coding->produced += count;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5804 p = dst = pend + count;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5805 while (count)
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5806 {
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5807 *--p = *--pend;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5808 if (*p == '\n') count--, *--p = '\r';
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5809 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5810 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5811
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5812 /* Suppress eol-format conversion in the further conversion. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5813 coding->eol_type = CODING_EOL_LF;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5814
24706
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5815 /* Set the coding system symbol to that for Unix-like EOL. */
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5816 eol_type = Fget (saved_coding_symbol, Qeol_type);
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5817 if (VECTORP (eol_type)
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5818 && XVECTOR (eol_type)->size == 3
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5819 && SYMBOLP (XVECTOR (eol_type)->contents[CODING_EOL_LF]))
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5820 coding->symbol = XVECTOR (eol_type)->contents[CODING_EOL_LF];
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5821 else
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5822 coding->symbol = saved_coding_symbol;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
5823
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5824 continue;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5825 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5826 if (len_byte <= 0)
23881
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5827 {
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5828 if (coding->type != coding_type_ccl
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5829 || coding->mode & CODING_MODE_LAST_BLOCK)
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5830 break;
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5831 coding->mode |= CODING_MODE_LAST_BLOCK;
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5832 continue;
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5833 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5834 if (result == CODING_FINISH_INSUFFICIENT_SRC)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5835 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5836 /* The source text ends in invalid codes. Let's just
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5837 make them valid buffer contents, and finish conversion. */
38518
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5838 if (multibyte_p)
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5839 {
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5840 unsigned char *start = dst;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
5841
38518
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5842 inserted += len_byte;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5843 while (len_byte--)
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5844 {
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5845 int c = *src++;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5846 dst += CHAR_STRING (c, dst);
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5847 }
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5848
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5849 inserted_byte += dst - start;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5850 }
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5851 else
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5852 {
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5853 inserted += len_byte;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5854 inserted_byte += len_byte;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5855 while (len_byte--)
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5856 *dst++ = *src++;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5857 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5858 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5859 }
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5860 if (result == CODING_FINISH_INTERRUPT)
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5861 {
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5862 /* The conversion procedure was interrupted by a user. */
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5863 break;
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5864 }
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5865 /* Now RESULT == CODING_FINISH_INSUFFICIENT_DST */
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5866 if (coding->consumed < 1)
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5867 {
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5868 /* It's quite strange to require more memory without
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5869 consuming any bytes. Perhaps CCL program bug. */
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5870 break;
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5871 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5872 if (first)
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5873 {
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5874 /* We have just done the first batch of conversion which was
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5875 stopped because of insufficient gap. Let's reconsider the
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5876 required gap size (i.e. SRT - DST) now.
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5877
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5878 We have converted ORIG bytes (== coding->consumed) into
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5879 NEW bytes (coding->produced). To convert the remaining
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5880 LEN bytes, we may need REQUIRE bytes of gap, where:
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5881 REQUIRE + LEN_BYTE = LEN_BYTE * (NEW / ORIG)
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5882 REQUIRE = LEN_BYTE * (NEW - ORIG) / ORIG
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5883 Here, we are sure that NEW >= ORIG. */
47791
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5884 float ratio;
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5885
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5886 if (coding->produced <= coding->consumed)
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5887 {
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5888 /* This happens because of CCL-based coding system with
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5889 eol-type CRLF. */
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5890 require = 0;
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5891 }
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5892 else
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5893 {
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5894 ratio = (coding->produced - coding->consumed) / coding->consumed;
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5895 require = len_byte * ratio;
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5896 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5897 first = 0;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5898 }
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5899 if ((src - dst) < (require + 2000))
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5900 {
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5901 /* See the comment above the previous call of make_gap. */
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5902 int add = len_byte + inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5903
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5904 GAP_SIZE -= add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5905 ZV += add; Z += add; ZV_BYTE += add; Z_BYTE += add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5906 GPT += inserted_byte; GPT_BYTE += inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5907 make_gap (require + 2000);
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5908 GAP_SIZE += add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5909 ZV -= add; Z -= add; ZV_BYTE -= add; Z_BYTE -= add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5910 GPT -= inserted_byte; GPT_BYTE -= inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5911 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5912 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5913 if (src - dst > 0) *dst = 0; /* Put an anchor. */
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5914
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5915 if (encodep && coding->dst_multibyte)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5916 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5917 /* The output is unibyte. We must convert 8-bit characters to
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5918 multibyte form. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5919 if (inserted_byte * 2 > GAP_SIZE)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5920 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5921 GAP_SIZE -= inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5922 ZV += inserted_byte; Z += inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5923 ZV_BYTE += inserted_byte; Z_BYTE += inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5924 GPT += inserted_byte; GPT_BYTE += inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5925 make_gap (inserted_byte - GAP_SIZE);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5926 GAP_SIZE += inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5927 ZV -= inserted_byte; Z -= inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5928 ZV_BYTE -= inserted_byte; Z_BYTE -= inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5929 GPT -= inserted_byte; GPT_BYTE -= inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5930 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5931 inserted_byte = str_to_multibyte (GPT_ADDR, GAP_SIZE, inserted_byte);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5932 }
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5933
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
5934 /* If we shrank the conversion area, adjust it now. */
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5935 if (total_skip > 0)
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5936 {
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5937 if (tail_skip > 0)
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5938 safe_bcopy (GAP_END_ADDR, GPT_ADDR + inserted_byte, tail_skip);
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5939 inserted += total_skip; inserted_byte += total_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5940 GAP_SIZE += total_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5941 GPT -= head_skip; GPT_BYTE -= head_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5942 ZV -= total_skip; ZV_BYTE -= total_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5943 Z -= total_skip; Z_BYTE -= total_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5944 from -= head_skip; from_byte -= head_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5945 to += tail_skip; to_byte += tail_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5946 }
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5947
23537
28cd5faf93dd (code_convert_region): While preserving the orignal
Kenichi Handa <handa@m17n.org>
parents: 23514
diff changeset
5948 prev_Z = Z;
42661
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5949 if (! EQ (current_buffer->undo_list, Qt))
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5950 adjust_after_replace (from, from_byte, deletion, inserted, inserted_byte);
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5951 else
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5952 adjust_after_replace_noundo (from, from_byte, nchars_del, nbytes_del,
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5953 inserted, inserted_byte);
23537
28cd5faf93dd (code_convert_region): While preserving the orignal
Kenichi Handa <handa@m17n.org>
parents: 23514
diff changeset
5954 inserted = Z - prev_Z;
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5955
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5956 if (!encodep && coding->cmp_data && coding->cmp_data->used)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5957 coding_restore_composition (coding, Fcurrent_buffer ());
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5958 coding_free_composition_data (coding);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5959
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5960 if (! inhibit_pre_post_conversion
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5961 && ! encodep && ! NILP (coding->post_read_conversion))
21062
839b22ad1e42 (code_convert_region): Handle the case that codes
Kenichi Handa <handa@m17n.org>
parents: 20999
diff changeset
5962 {
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5963 Lisp_Object val;
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5964 Lisp_Object saved_coding_system;
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5965
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5966 if (from != PT)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5967 TEMP_SET_PT_BOTH (from, from_byte);
23537
28cd5faf93dd (code_convert_region): While preserving the orignal
Kenichi Handa <handa@m17n.org>
parents: 23514
diff changeset
5968 prev_Z = Z;
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5969 record_unwind_protect (code_convert_region_unwind,
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5970 Vlast_coding_system_used);
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5971 saved_coding_system = Vlast_coding_system_used;
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5972 Vlast_coding_system_used = coding->symbol;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5973 /* We should not call any more pre-write/post-read-conversion
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5974 functions while this post-read-conversion is running. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5975 inhibit_pre_post_conversion = 1;
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5976 val = call1 (coding->post_read_conversion, make_number (inserted));
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5977 inhibit_pre_post_conversion = 0;
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5978 coding->symbol = Vlast_coding_system_used;
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
5979 Vlast_coding_system_used = saved_coding_system;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5980 /* Discard the unwind protect. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5981 specpdl_ptr--;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
5982 CHECK_NUMBER (val);
23881
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5983 inserted += Z - prev_Z;
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5984 }
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5985
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5986 if (orig_point >= from)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5987 {
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5988 if (orig_point >= from + orig_len)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5989 orig_point += inserted - orig_len;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5990 else
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5991 orig_point = from;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5992 TEMP_SET_PT (orig_point);
21062
839b22ad1e42 (code_convert_region): Handle the case that codes
Kenichi Handa <handa@m17n.org>
parents: 20999
diff changeset
5993 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5994
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5995 if (replace)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5996 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5997 signal_after_change (from, to - from, inserted);
26900
a8f4cebb614d (code_convert_region): Fix the secoding arg to
Kenichi Handa <handa@m17n.org>
parents: 26847
diff changeset
5998 update_compositions (from, from + inserted, CHECK_BORDER);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5999 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6000
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6001 {
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
6002 coding->consumed = to_byte - from_byte;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
6003 coding->consumed_char = to - from;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
6004 coding->produced = inserted_byte;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
6005 coding->produced_char = inserted;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6006 }
21132
75c6408013e5 (code_convert_region): Fix previous change. Adjusted
Richard M. Stallman <rms@gnu.org>
parents: 21067
diff changeset
6007
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6008 return 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6009 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6010
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6011 Lisp_Object
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6012 run_pre_post_conversion_on_str (str, coding, encodep)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6013 Lisp_Object str;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6014 struct coding_system *coding;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6015 int encodep;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6016 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46150
diff changeset
6017 int count = SPECPDL_INDEX ();
47632
551472d77d2a (run_pre_post_conversion_on_str): Save and restore Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 47274
diff changeset
6018 struct gcpro gcpro1, gcpro2;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6019 int multibyte = STRING_MULTIBYTE (str);
44562
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6020 Lisp_Object buffer;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6021 struct buffer *buf;
47632
551472d77d2a (run_pre_post_conversion_on_str): Save and restore Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 47274
diff changeset
6022 Lisp_Object old_deactivate_mark;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6023
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6024 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
6025 record_unwind_protect (code_convert_region_unwind,
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
6026 Vlast_coding_system_used);
47632
551472d77d2a (run_pre_post_conversion_on_str): Save and restore Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 47274
diff changeset
6027 /* It is not crucial to specbind this. */
551472d77d2a (run_pre_post_conversion_on_str): Save and restore Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 47274
diff changeset
6028 old_deactivate_mark = Vdeactivate_mark;
551472d77d2a (run_pre_post_conversion_on_str): Save and restore Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 47274
diff changeset
6029 GCPRO2 (str, old_deactivate_mark);
44562
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6030
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6031 buffer = Fget_buffer_create (build_string (" *code-converting-work*"));
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6032 buf = XBUFFER (buffer);
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6033
52016
95dd8ee86d65 (run_pre_post_conversion_on_str): Use delete_all_overlays.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51855
diff changeset
6034 delete_all_overlays (buf);
44562
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6035 buf->directory = current_buffer->directory;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6036 buf->read_only = Qnil;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6037 buf->filename = Qnil;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6038 buf->undo_list = Qt;
52016
95dd8ee86d65 (run_pre_post_conversion_on_str): Use delete_all_overlays.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51855
diff changeset
6039 eassert (buf->overlays_before == NULL);
95dd8ee86d65 (run_pre_post_conversion_on_str): Use delete_all_overlays.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51855
diff changeset
6040 eassert (buf->overlays_after == NULL);
44562
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6041
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6042 set_buffer_internal (buf);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6043 /* We must insert the contents of STR as is without
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6044 unibyte<->multibyte conversion. For that, we adjust the
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6045 multibyteness of the working buffer to that of STR. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6046 Ferase_buffer ();
44562
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6047 buf->enable_multibyte_characters = multibyte ? Qt : Qnil;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
6048
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6049 insert_from_string (str, 0, 0,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6050 SCHARS (str), SBYTES (str), 0);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6051 UNGCPRO;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6052 inhibit_pre_post_conversion = 1;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6053 if (encodep)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6054 call2 (coding->pre_write_conversion, make_number (BEG), make_number (Z));
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6055 else
29172
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
6056 {
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
6057 Vlast_coding_system_used = coding->symbol;
29172
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
6058 TEMP_SET_PT_BOTH (BEG, BEG_BYTE);
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
6059 call1 (coding->post_read_conversion, make_number (Z - BEG));
50484
6818550bfbc7 (code_convert_region_unwind): Set
Kenichi Handa <handa@m17n.org>
parents: 50185
diff changeset
6060 coding->symbol = Vlast_coding_system_used;
29172
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
6061 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6062 inhibit_pre_post_conversion = 0;
47632
551472d77d2a (run_pre_post_conversion_on_str): Save and restore Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 47274
diff changeset
6063 Vdeactivate_mark = old_deactivate_mark;
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6064 str = make_buffer_string (BEG, Z, 1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6065 return unbind_to (count, str);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6066 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6067
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6068 Lisp_Object
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6069 decode_coding_string (str, coding, nocopy)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6070 Lisp_Object str;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6071 struct coding_system *coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6072 int nocopy;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6073 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6074 int len;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6075 struct conversion_buffer buf;
34988
8cd5e6ad71a2 (detect_coding_iso2022, setup_coding_system): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 34892
diff changeset
6076 int from, to_byte;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
6077 Lisp_Object saved_coding_symbol;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6078 int result;
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6079 int require_decoding;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6080 int shrinked_bytes = 0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6081 Lisp_Object newstr;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6082 int consumed, consumed_char, produced, produced_char;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6083
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6084 from = 0;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6085 to_byte = SBYTES (str);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6086
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6087 saved_coding_symbol = coding->symbol;
34536
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
6088 coding->src_multibyte = STRING_MULTIBYTE (str);
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
6089 coding->dst_multibyte = 1;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6090 if (CODING_REQUIRE_DETECTION (coding))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6091 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6092 /* See the comments in code_convert_region. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6093 if (coding->type == coding_type_undecided)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6094 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6095 detect_coding (coding, SDATA (str), to_byte);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6096 if (coding->type == coding_type_undecided)
35995
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
6097 {
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
6098 coding->type = coding_type_emacs_mule;
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
6099 coding->category_idx = CODING_CATEGORY_IDX_EMACS_MULE;
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
6100 /* As emacs-mule decoder will handle composition, we
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
6101 need this setting to allocate coding->cmp_data
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
6102 later. */
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
6103 coding->composing = COMPOSITION_NO;
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
6104 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6105 }
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6106 if (coding->eol_type == CODING_EOL_UNDECIDED
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
6107 && coding->type != coding_type_ccl)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6108 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6109 saved_coding_symbol = coding->symbol;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6110 detect_eol (coding, SDATA (str), to_byte);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6111 if (coding->eol_type == CODING_EOL_UNDECIDED)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6112 coding->eol_type = CODING_EOL_LF;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6113 /* We had better recover the original eol format if we
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
6114 encounter an inconsistent eol format while decoding. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6115 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6116 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6117 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6118
34536
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
6119 if (coding->type == coding_type_no_conversion
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
6120 || coding->type == coding_type_raw_text)
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
6121 coding->dst_multibyte = 0;
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
6122
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6123 require_decoding = CODING_REQUIRE_DECODING (coding);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6124
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6125 if (STRING_MULTIBYTE (str))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6126 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6127 /* Decoding routines expect the source text to be unibyte. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6128 str = Fstring_as_unibyte (str);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6129 to_byte = SBYTES (str);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6130 nocopy = 1;
34536
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
6131 coding->src_multibyte = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6132 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6133
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6134 /* Try to skip the heading and tailing ASCIIs. */
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6135 if (require_decoding && coding->type != coding_type_ccl)
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6136 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6137 SHRINK_CONVERSION_REGION (&from, &to_byte, coding, SDATA (str),
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6138 0);
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6139 if (from == to_byte)
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6140 require_decoding = 0;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6141 shrinked_bytes = from + (SBYTES (str) - to_byte);
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6142 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6143
51090
269d016f45bd (decode_coding_string): Handle post-read-conversion
Kenichi Handa <handa@m17n.org>
parents: 50896
diff changeset
6144 if (!require_decoding
269d016f45bd (decode_coding_string): Handle post-read-conversion
Kenichi Handa <handa@m17n.org>
parents: 50896
diff changeset
6145 && !(SYMBOLP (coding->post_read_conversion)
269d016f45bd (decode_coding_string): Handle post-read-conversion
Kenichi Handa <handa@m17n.org>
parents: 50896
diff changeset
6146 && !NILP (Ffboundp (coding->post_read_conversion))))
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6147 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6148 coding->consumed = SBYTES (str);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6149 coding->consumed_char = SCHARS (str);
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6150 if (coding->dst_multibyte)
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6151 {
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6152 str = Fstring_as_multibyte (str);
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6153 nocopy = 1;
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6154 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6155 coding->produced = SBYTES (str);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6156 coding->produced_char = SCHARS (str);
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6157 return (nocopy ? str : Fcopy_sequence (str));
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6158 }
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6159
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6160 if (coding->composing != COMPOSITION_DISABLED)
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6161 coding_allocate_composition_data (coding, from);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6162 len = decoding_buffer_size (coding, to_byte - from);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6163 allocate_conversion_buffer (buf, len);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6164
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6165 consumed = consumed_char = produced = produced_char = 0;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6166 while (1)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6167 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6168 result = decode_coding (coding, SDATA (str) + from + consumed,
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6169 buf.data + produced, to_byte - from - consumed,
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6170 buf.size - produced);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6171 consumed += coding->consumed;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6172 consumed_char += coding->consumed_char;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6173 produced += coding->produced;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6174 produced_char += coding->produced_char;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6175 if (result == CODING_FINISH_NORMAL
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6176 || (result == CODING_FINISH_INSUFFICIENT_SRC
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6177 && coding->consumed == 0))
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6178 break;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6179 if (result == CODING_FINISH_INSUFFICIENT_CMP)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6180 coding_allocate_composition_data (coding, from + produced_char);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6181 else if (result == CODING_FINISH_INSUFFICIENT_DST)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6182 extend_conversion_buffer (&buf);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6183 else if (result == CODING_FINISH_INCONSISTENT_EOL)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6184 {
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6185 Lisp_Object eol_type;
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6186
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6187 /* Recover the original EOL format. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6188 if (coding->eol_type == CODING_EOL_CR)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6189 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6190 unsigned char *p;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6191 for (p = buf.data; p < buf.data + produced; p++)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6192 if (*p == '\n') *p = '\r';
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6193 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6194 else if (coding->eol_type == CODING_EOL_CRLF)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6195 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6196 int num_eol = 0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6197 unsigned char *p0, *p1;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6198 for (p0 = buf.data, p1 = p0 + produced; p0 < p1; p0++)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6199 if (*p0 == '\n') num_eol++;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6200 if (produced + num_eol >= buf.size)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6201 extend_conversion_buffer (&buf);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6202 for (p0 = buf.data + produced, p1 = p0 + num_eol; p0 > buf.data;)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6203 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6204 *--p1 = *--p0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6205 if (*p0 == '\n') *--p1 = '\r';
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6206 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6207 produced += num_eol;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6208 produced_char += num_eol;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
6209 }
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6210 /* Suppress eol-format conversion in the further conversion. */
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6211 coding->eol_type = CODING_EOL_LF;
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6212
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6213 /* Set the coding system symbol to that for Unix-like EOL. */
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6214 eol_type = Fget (saved_coding_symbol, Qeol_type);
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6215 if (VECTORP (eol_type)
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6216 && XVECTOR (eol_type)->size == 3
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6217 && SYMBOLP (XVECTOR (eol_type)->contents[CODING_EOL_LF]))
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6218 coding->symbol = XVECTOR (eol_type)->contents[CODING_EOL_LF];
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6219 else
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6220 coding->symbol = saved_coding_symbol;
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6221
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6222
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6223 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6224 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6225
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6226 coding->consumed = consumed;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6227 coding->consumed_char = consumed_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6228 coding->produced = produced;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6229 coding->produced_char = produced_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6230
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6231 if (coding->dst_multibyte)
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6232 newstr = make_uninit_multibyte_string (produced_char + shrinked_bytes,
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6233 produced + shrinked_bytes);
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6234 else
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6235 newstr = make_uninit_string (produced + shrinked_bytes);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6236 if (from > 0)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6237 STRING_COPYIN (newstr, 0, SDATA (str), from);
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6238 STRING_COPYIN (newstr, from, buf.data, produced);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6239 if (shrinked_bytes > from)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6240 STRING_COPYIN (newstr, from + produced,
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6241 SDATA (str) + to_byte,
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6242 shrinked_bytes - from);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6243 free_conversion_buffer (&buf);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6244
56595
40a0843be50a (decode_coding_string): Adjust coding->consumed, and
Kenichi Handa <handa@m17n.org>
parents: 56191
diff changeset
6245 coding->consumed += shrinked_bytes;
40a0843be50a (decode_coding_string): Adjust coding->consumed, and
Kenichi Handa <handa@m17n.org>
parents: 56191
diff changeset
6246 coding->consumed_char += shrinked_bytes;
40a0843be50a (decode_coding_string): Adjust coding->consumed, and
Kenichi Handa <handa@m17n.org>
parents: 56191
diff changeset
6247 coding->produced += shrinked_bytes;
40a0843be50a (decode_coding_string): Adjust coding->consumed, and
Kenichi Handa <handa@m17n.org>
parents: 56191
diff changeset
6248 coding->produced_char += shrinked_bytes;
40a0843be50a (decode_coding_string): Adjust coding->consumed, and
Kenichi Handa <handa@m17n.org>
parents: 56191
diff changeset
6249
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6250 if (coding->cmp_data && coding->cmp_data->used)
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6251 coding_restore_composition (coding, newstr);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6252 coding_free_composition_data (coding);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6253
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6254 if (SYMBOLP (coding->post_read_conversion)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6255 && !NILP (Ffboundp (coding->post_read_conversion)))
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6256 newstr = run_pre_post_conversion_on_str (newstr, coding, 0);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6257
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6258 return newstr;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6259 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6260
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6261 Lisp_Object
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6262 encode_coding_string (str, coding, nocopy)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6263 Lisp_Object str;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6264 struct coding_system *coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6265 int nocopy;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6266 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6267 int len;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6268 struct conversion_buffer buf;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6269 int from, to, to_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6270 int result;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6271 int shrinked_bytes = 0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6272 Lisp_Object newstr;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6273 int consumed, consumed_char, produced, produced_char;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6274
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6275 if (SYMBOLP (coding->pre_write_conversion)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6276 && !NILP (Ffboundp (coding->pre_write_conversion)))
29172
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
6277 str = run_pre_post_conversion_on_str (str, coding, 1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6278
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6279 from = 0;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6280 to = SCHARS (str);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6281 to_byte = SBYTES (str);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6282
32445
05513a882886 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 32443
diff changeset
6283 /* Encoding routines determine the multibyteness of the source text
05513a882886 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 32443
diff changeset
6284 by coding->src_multibyte. */
05513a882886 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 32443
diff changeset
6285 coding->src_multibyte = STRING_MULTIBYTE (str);
05513a882886 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 32443
diff changeset
6286 coding->dst_multibyte = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6287 if (! CODING_REQUIRE_ENCODING (coding))
22723
04b653d7f842 (code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents: 22717
diff changeset
6288 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6289 coding->consumed = SBYTES (str);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6290 coding->consumed_char = SCHARS (str);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6291 if (STRING_MULTIBYTE (str))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6292 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6293 str = Fstring_as_unibyte (str);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6294 nocopy = 1;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6295 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6296 coding->produced = SBYTES (str);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6297 coding->produced_char = SCHARS (str);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6298 return (nocopy ? str : Fcopy_sequence (str));
22723
04b653d7f842 (code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents: 22717
diff changeset
6299 }
04b653d7f842 (code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents: 22717
diff changeset
6300
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6301 if (coding->composing != COMPOSITION_DISABLED)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6302 coding_save_composition (coding, from, to, str);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6303
57285
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6304 /* Try to skip the heading and tailing ASCIIs. We can't skip them
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6305 if we must run CCL program or there are compositions to
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6306 encode. */
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6307 if (coding->type != coding_type_ccl
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6308 && (! coding->cmp_data || coding->cmp_data->used == 0))
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6309 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6310 SHRINK_CONVERSION_REGION (&from, &to_byte, coding, SDATA (str),
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6311 1);
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6312 if (from == to_byte)
57285
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6313 {
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6314 coding_free_composition_data (coding);
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6315 return (nocopy ? str : Fcopy_sequence (str));
9093a2e9c3fd (code_convert_region): Don't skip ASCIIs if there are compositions to encode.
Kenichi Handa <handa@m17n.org>
parents: 56595
diff changeset
6316 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6317 shrinked_bytes = from + (SBYTES (str) - to_byte);
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6318 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6319
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6320 len = encoding_buffer_size (coding, to_byte - from);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6321 allocate_conversion_buffer (buf, len);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6322
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6323 consumed = consumed_char = produced = produced_char = 0;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6324 while (1)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6325 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6326 result = encode_coding (coding, SDATA (str) + from + consumed,
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6327 buf.data + produced, to_byte - from - consumed,
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6328 buf.size - produced);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6329 consumed += coding->consumed;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6330 consumed_char += coding->consumed_char;
30951
e6acd4b6a8d5 (encode_coding_string): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 30950
diff changeset
6331 produced += coding->produced;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6332 produced_char += coding->produced_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6333 if (result == CODING_FINISH_NORMAL
56028
32381d1c4eab (encode_coding_string): Check CODING_FINISH_INTERRUPT.
Kenichi Handa <handa@m17n.org>
parents: 55964
diff changeset
6334 || result == CODING_FINISH_INTERRUPT
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6335 || (result == CODING_FINISH_INSUFFICIENT_SRC
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6336 && coding->consumed == 0))
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6337 break;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6338 /* Now result should be CODING_FINISH_INSUFFICIENT_DST. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6339 extend_conversion_buffer (&buf);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6340 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6341
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6342 coding->consumed = consumed;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6343 coding->consumed_char = consumed_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6344 coding->produced = produced;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6345 coding->produced_char = produced_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6346
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6347 newstr = make_uninit_string (produced + shrinked_bytes);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6348 if (from > 0)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6349 STRING_COPYIN (newstr, 0, SDATA (str), from);
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6350 STRING_COPYIN (newstr, from, buf.data, produced);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6351 if (shrinked_bytes > from)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6352 STRING_COPYIN (newstr, from + produced,
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6353 SDATA (str) + to_byte,
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6354 shrinked_bytes - from);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6355
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6356 free_conversion_buffer (&buf);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6357 coding_free_composition_data (coding);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6358
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6359 return newstr;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6360 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6361
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6362
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6363 #ifdef emacs
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
6364 /*** 8. Emacs Lisp library functions ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6365
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6366 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
6367 doc: /* Return t if OBJECT is nil or a coding-system.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6368 See the documentation of `make-coding-system' for information
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6369 about coding-system objects. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6370 (obj)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6371 Lisp_Object obj;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6372 {
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6373 if (NILP (obj))
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6374 return Qt;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6375 if (!SYMBOLP (obj))
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6376 return Qnil;
52806
4519d019f12e (Fcoding_system_p): Return t for auto-loading coding system.
Kenichi Handa <handa@m17n.org>
parents: 52794
diff changeset
6377 if (! NILP (Fget (obj, Qcoding_system_define_form)))
4519d019f12e (Fcoding_system_p): Return t for auto-loading coding system.
Kenichi Handa <handa@m17n.org>
parents: 52794
diff changeset
6378 return Qt;
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6379 /* Get coding-spec vector for OBJ. */
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6380 obj = Fget (obj, Qcoding_system);
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6381 return ((VECTORP (obj) && XVECTOR (obj)->size == 5)
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6382 ? Qt : Qnil);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6383 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6384
17717
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6385 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
6386 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
6387 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
6388 (prompt)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6389 Lisp_Object prompt;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6390 {
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6391 Lisp_Object val;
17717
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6392 do
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6393 {
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6394 val = Fcompleting_read (prompt, Vcoding_system_alist, Qnil,
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6395 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
6396 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6397 while (SCHARS (val) == 0);
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6398 return (Fintern (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6399 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6400
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
6401 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
6402 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
6403 If the user enters null input, return second argument DEFAULT-CODING-SYSTEM. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6404 (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
6405 Lisp_Object prompt, default_coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6406 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
6407 Lisp_Object val;
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
6408 if (SYMBOLP (default_coding_system))
45396
cab845213388 * coding.c (Fread_coding_system, code_convert_region1)
Ken Raeburn <raeburn@raeburn.org>
parents: 45239
diff changeset
6409 default_coding_system = SYMBOL_NAME (default_coding_system);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6410 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
6411 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
6412 default_coding_system, Qnil);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6413 return (SCHARS (val) == 0 ? Qnil : Fintern (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6414 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6415
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6416 DEFUN ("check-coding-system", Fcheck_coding_system, Scheck_coding_system,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6417 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
6418 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
6419 If valid, return CODING-SYSTEM, else signal a `coding-system-error' error.
53347
7138148f7ace (Fcheck_coding_system): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 53239
diff changeset
6420 It is valid if it is nil or a symbol with a non-nil `coding-system' property.
53348
58de40c3a5c1 (Fcheck_coding_system): Further doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 53347
diff changeset
6421 The value of this property should be a vector of length 5. */)
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6422 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6423 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6424 {
52794
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
6425 Lisp_Object define_form;
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
6426
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
6427 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
6428 if (! NILP (define_form))
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
6429 {
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
6430 Fput (coding_system, Qcoding_system_define_form, Qnil);
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
6431 safe_eval (define_form);
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
6432 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6433 if (!NILP (Fcoding_system_p (coding_system)))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6434 return coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6435 while (1)
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
6436 Fsignal (Qcoding_system_error, Fcons (coding_system, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6437 }
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6438
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6439 Lisp_Object
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6440 detect_coding_system (src, src_bytes, highest, multibytep)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6441 const unsigned char *src;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6442 int src_bytes, highest;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6443 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6444 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6445 int coding_mask, eol_type;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6446 Lisp_Object val, tmp;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6447 int dummy;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6448
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6449 coding_mask = detect_coding_mask (src, src_bytes, NULL, &dummy, multibytep);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6450 eol_type = detect_eol_type (src, src_bytes, &dummy);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6451 if (eol_type == CODING_EOL_INCONSISTENT)
23082
910740dcedb5 (detect_coding_system): If detect_eol_type returns
Kenichi Handa <handa@m17n.org>
parents: 23067
diff changeset
6452 eol_type = CODING_EOL_UNDECIDED;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6453
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6454 if (!coding_mask)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6455 {
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
6456 val = Qundecided;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6457 if (eol_type != CODING_EOL_UNDECIDED)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6458 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
6459 Lisp_Object val2;
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
6460 val2 = Fget (Qundecided, Qeol_type);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6461 if (VECTORP (val2))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6462 val = XVECTOR (val2)->contents[eol_type];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6463 }
22460
7ca919476042 (detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents: 22341
diff changeset
6464 return (highest ? val : Fcons (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6465 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6466
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6467 /* At first, gather possible coding systems in VAL. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6468 val = Qnil;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6469 for (tmp = Vcoding_category_list; CONSP (tmp); tmp = XCDR (tmp))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6470 {
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6471 Lisp_Object category_val, category_index;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6472
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6473 category_index = Fget (XCAR (tmp), Qcoding_category_index);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6474 category_val = Fsymbol_value (XCAR (tmp));
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6475 if (!NILP (category_val)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6476 && NATNUMP (category_index)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6477 && (coding_mask & (1 << XFASTINT (category_index))))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6478 {
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6479 val = Fcons (category_val, val);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6480 if (highest)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6481 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6482 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6483 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6484 if (!highest)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6485 val = Fnreverse (val);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6486
22254
1deb7d79af00 (detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents: 22226
diff changeset
6487 /* Then, replace the elements with subsidiary coding systems. */
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6488 for (tmp = val; CONSP (tmp); tmp = XCDR (tmp))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6489 {
22254
1deb7d79af00 (detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents: 22226
diff changeset
6490 if (eol_type != CODING_EOL_UNDECIDED
1deb7d79af00 (detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents: 22226
diff changeset
6491 && eol_type != CODING_EOL_INCONSISTENT)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6492 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6493 Lisp_Object eol;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
6494 eol = Fget (XCAR (tmp), Qeol_type);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6495 if (VECTORP (eol))
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39581
diff changeset
6496 XSETCAR (tmp, XVECTOR (eol)->contents[eol_type]);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6497 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6498 }
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
6499 return (highest ? XCAR (val) : val);
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
6500 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6501
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6502 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
6503 2, 3, 0,
50121
71039837d881 (Fdetect_coding_region): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50120
diff changeset
6504 doc: /* Detect how the byte sequence in the region is encoded.
71039837d881 (Fdetect_coding_region): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50120
diff changeset
6505 Return a list of possible coding systems used on decoding a byte
71039837d881 (Fdetect_coding_region): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50120
diff changeset
6506 sequence containing the bytes in the region between START and END when
71039837d881 (Fdetect_coding_region): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50120
diff changeset
6507 the coding system `undecided' is specified. The list is ordered by
71039837d881 (Fdetect_coding_region): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50120
diff changeset
6508 priority decided in the current language environment.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6509
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6510 If only ASCII characters are found, it returns a list of single element
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6511 `undecided' or its subsidiary coding system according to a detected
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6512 end-of-line format.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6513
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6514 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
6515 highest priority. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6516 (start, end, highest)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6517 Lisp_Object start, end, highest;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6518 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6519 int from, to;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6520 int from_byte, to_byte;
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6521 int include_anchor_byte = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6522
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6523 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
6524 CHECK_NUMBER_COERCE_MARKER (end);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6525
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6526 validate_region (&start, &end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6527 from = XINT (start), to = XINT (end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6528 from_byte = CHAR_TO_BYTE (from);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6529 to_byte = CHAR_TO_BYTE (to);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6530
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6531 if (from < GPT && to >= GPT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6532 move_gap_both (to, to_byte);
36650
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6533 /* If we an anchor byte `\0' follows the region, we include it in
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6534 the detecting source. Then code detectors can handle the tailing
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6535 byte sequence more accurately.
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6536
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47791
diff changeset
6537 Fix me: This is not a perfect solution. It is better that we
36650
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6538 add one more argument, say LAST_BLOCK, to all detect_coding_XXX.
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6539 */
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6540 if (to == Z || (to == GPT && GAP_SIZE > 0))
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6541 include_anchor_byte = 1;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6542 return detect_coding_system (BYTE_POS_ADDR (from_byte),
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6543 to_byte - from_byte + include_anchor_byte,
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6544 !NILP (highest),
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6545 !NILP (current_buffer
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6546 ->enable_multibyte_characters));
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6547 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6548
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6549 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
6550 1, 2, 0,
50120
34d5ae26ea24 (Fdetect_coding_string): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50047
diff changeset
6551 doc: /* Detect how the byte sequence in STRING is encoded.
34d5ae26ea24 (Fdetect_coding_string): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50047
diff changeset
6552 Return a list of possible coding systems used on decoding a byte
34d5ae26ea24 (Fdetect_coding_string): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50047
diff changeset
6553 sequence containing the bytes in STRING when the coding system
34d5ae26ea24 (Fdetect_coding_string): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50047
diff changeset
6554 `undecided' is specified. The list is ordered by priority decided in
34d5ae26ea24 (Fdetect_coding_string): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents: 50047
diff changeset
6555 the current language environment.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6556
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6557 If only ASCII characters are found, it returns a list of single element
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6558 `undecided' or its subsidiary coding system according to a detected
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6559 end-of-line format.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6560
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6561 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
6562 highest priority. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6563 (string, highest)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6564 Lisp_Object string, highest;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6565 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6566 CHECK_STRING (string);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6567
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6568 return detect_coding_system (SDATA (string),
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6569 /* "+ 1" is to include the anchor byte
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6570 `\0'. With this, code detectors can
36650
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6571 handle the tailing bytes more
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6572 accurately. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6573 SBYTES (string) + 1,
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6574 !NILP (highest),
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6575 STRING_MULTIBYTE (string));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6576 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6577
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6578 /* Subroutine for Fsafe_coding_systems_region_internal.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6579
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6580 Return a list of coding systems that safely encode the multibyte
50765
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6581 text between P and PEND. SAFE_CODINGS, if non-nil, is an alist of
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6582 possible coding systems. If it is nil, it means that we have not
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6583 yet found any coding systems.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6584
55964
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6585 WORK_TABLE a char-table of which element is set to t once the
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6586 element is looked up.
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6587
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6588 If a non-ASCII single byte char is found, set
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6589 *single_byte_char_found to 1. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6590
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6591 static Lisp_Object
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6592 find_safe_codings (p, pend, safe_codings, work_table, single_byte_char_found)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6593 unsigned char *p, *pend;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6594 Lisp_Object safe_codings, work_table;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6595 int *single_byte_char_found;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6596 {
51231
b020f1a52615 (find_safe_codings): Remove unused var `i'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51186
diff changeset
6597 int c, len;
50185
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6598 Lisp_Object val, ch;
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6599 Lisp_Object prev, tail;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6600
55964
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6601 if (NILP (safe_codings))
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6602 goto done_safe_codings;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6603 while (p < pend)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6604 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6605 c = STRING_CHAR_AND_LENGTH (p, pend - p, len);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6606 p += len;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6607 if (ASCII_BYTE_P (c))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6608 /* We can ignore ASCII characters here. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6609 continue;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6610 if (SINGLE_BYTE_CHAR_P (c))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6611 *single_byte_char_found = 1;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6612 /* Check the safe coding systems for C. */
50185
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6613 ch = make_number (c);
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6614 val = Faref (work_table, ch);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6615 if (EQ (val, Qt))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6616 /* This element was already checked. Ignore it. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6617 continue;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6618 /* Remember that we checked this element. */
50185
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6619 Faset (work_table, ch, Qt);
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6620
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6621 for (prev = tail = safe_codings; CONSP (tail); tail = XCDR (tail))
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6622 {
50765
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6623 Lisp_Object elt, translation_table, hash_table, accept_latin_extra;
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6624 int encodable;
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6625
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6626 elt = XCAR (tail);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6627 if (CONSP (XCDR (elt)))
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6628 {
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6629 /* This entry has this format now:
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6630 ( CODING SAFE-CHARS TRANSLATION-TABLE HASH-TABLE
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6631 ACCEPT-LATIN-EXTRA ) */
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6632 val = XCDR (elt);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6633 encodable = ! NILP (Faref (XCAR (val), ch));
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6634 if (! encodable)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6635 {
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6636 val = XCDR (val);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6637 translation_table = XCAR (val);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6638 hash_table = XCAR (XCDR (val));
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6639 accept_latin_extra = XCAR (XCDR (XCDR (val)));
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6640 }
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6641 }
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6642 else
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6643 {
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6644 /* This entry has this format now: ( CODING . SAFE-CHARS) */
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6645 encodable = ! NILP (Faref (XCDR (elt), ch));
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6646 if (! encodable)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6647 {
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6648 /* Transform the format to:
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6649 ( CODING SAFE-CHARS TRANSLATION-TABLE HASH-TABLE
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6650 ACCEPT-LATIN-EXTRA ) */
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6651 val = Fget (XCAR (elt), Qcoding_system);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6652 translation_table
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6653 = Fplist_get (AREF (val, 3),
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6654 Qtranslation_table_for_encode);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6655 if (SYMBOLP (translation_table))
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6656 translation_table = Fget (translation_table,
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6657 Qtranslation_table);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6658 hash_table
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6659 = (CHAR_TABLE_P (translation_table)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6660 ? XCHAR_TABLE (translation_table)->extras[1]
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6661 : Qnil);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6662 accept_latin_extra
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6663 = ((EQ (AREF (val, 0), make_number (2))
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6664 && VECTORP (AREF (val, 4)))
51186
e610d367508d (find_safe_codings): Fix last change.
Andreas Schwab <schwab@suse.de>
parents: 51140
diff changeset
6665 ? AREF (AREF (val, 4), 16)
50765
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6666 : Qnil);
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6667 XSETCAR (tail, list5 (XCAR (elt), XCDR (elt),
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6668 translation_table, hash_table,
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6669 accept_latin_extra));
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6670 }
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6671 }
56191
75f56340b4f9 (MAX_ALLOCA): Remove define.
Kim F. Storm <storm@cua.dk>
parents: 56028
diff changeset
6672
50765
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6673 if (! encodable
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6674 && ((CHAR_TABLE_P (translation_table)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6675 && ! NILP (Faref (translation_table, ch)))
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6676 || (HASH_TABLE_P (hash_table)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6677 && ! NILP (Fgethash (ch, hash_table, Qnil)))
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6678 || (SINGLE_BYTE_CHAR_P (c)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6679 && ! NILP (accept_latin_extra)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6680 && VECTORP (Vlatin_extra_code_table)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6681 && ! NILP (AREF (Vlatin_extra_code_table, c)))))
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6682 encodable = 1;
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6683 if (encodable)
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6684 prev = tail;
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
6685 else
50185
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6686 {
50896
0aba658cfdd2 (Vlast_coding_system_used): Doc fix.
Dave Love <fx@gnu.org>
parents: 50765
diff changeset
6687 /* Exclude this coding system from SAFE_CODINGS. */
50185
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6688 if (EQ (tail, safe_codings))
55964
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6689 {
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6690 safe_codings = XCDR (safe_codings);
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6691 if (NILP (safe_codings))
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6692 goto done_safe_codings;
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6693 }
50185
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6694 else
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6695 XSETCDR (prev, XCDR (tail));
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6696 }
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6697 }
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6698 }
55964
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6699
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6700 done_safe_codings:
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6701 /* If the above loop was terminated before P reaches PEND, it means
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6702 SAFE_CODINGS was set to nil. If we have not yet found an
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6703 non-ASCII single-byte char, check it now. */
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6704 if (! *single_byte_char_found)
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6705 while (p < pend)
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6706 {
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6707 c = STRING_CHAR_AND_LENGTH (p, pend - p, len);
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6708 p += len;
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6709 if (! ASCII_BYTE_P (c)
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6710 && SINGLE_BYTE_CHAR_P (c))
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6711 {
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6712 *single_byte_char_found = 1;
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6713 break;
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6714 }
49894995b543 (find_safe_codings): Check NILP (safe_codings) only at
Kenichi Handa <handa@m17n.org>
parents: 55759
diff changeset
6715 }
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6716 return safe_codings;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6717 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6718
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6719 DEFUN ("find-coding-systems-region-internal",
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6720 Ffind_coding_systems_region_internal,
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6721 Sfind_coding_systems_region_internal, 2, 2, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6722 doc: /* Internal use only. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6723 (start, end)
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6724 Lisp_Object start, end;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6725 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6726 Lisp_Object work_table, safe_codings;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6727 int non_ascii_p = 0;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6728 int single_byte_char_found = 0;
46462
c6bb99a483e0 (Ffind_coding_systems_region_interval): Use const for
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
6729 const unsigned char *p1, *p1end, *p2, *p2end, *p;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6730
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6731 if (STRINGP (start))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6732 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6733 if (!STRING_MULTIBYTE (start))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6734 return Qt;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6735 p1 = SDATA (start), p1end = p1 + SBYTES (start);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6736 p2 = p2end = p1end;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6737 if (SCHARS (start) != SBYTES (start))
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6738 non_ascii_p = 1;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6739 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6740 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6741 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6742 int from, to, stop;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6743
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6744 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
6745 CHECK_NUMBER_COERCE_MARKER (end);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6746 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
6747 args_out_of_range (start, end);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6748 if (NILP (current_buffer->enable_multibyte_characters))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6749 return Qt;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6750 from = CHAR_TO_BYTE (XINT (start));
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6751 to = CHAR_TO_BYTE (XINT (end));
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6752 stop = from < GPT_BYTE && GPT_BYTE < to ? GPT_BYTE : to;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6753 p1 = BYTE_POS_ADDR (from), p1end = p1 + (stop - from);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6754 if (stop == to)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6755 p2 = p2end = p1end;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6756 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6757 p2 = BYTE_POS_ADDR (stop), p2end = p2 + (to - stop);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6758 if (XINT (end) - XINT (start) != to - from)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6759 non_ascii_p = 1;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6760 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6761
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6762 if (!non_ascii_p)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6763 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6764 /* We are sure that the text contains no multibyte character.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6765 Check if it contains eight-bit-graphic. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6766 p = p1;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6767 for (p = p1; p < p1end && ASCII_BYTE_P (*p); p++);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6768 if (p == p1end)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6769 {
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
6770 for (p = p2; p < p2end && ASCII_BYTE_P (*p); p++);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6771 if (p == p2end)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6772 return Qt;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6773 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6774 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6775
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6776 /* The text contains non-ASCII characters. */
50185
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6777
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6778 work_table = Fmake_char_table (Qchar_coding_system, Qnil);
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6779 safe_codings = Fcopy_sequence (XCDR (Vcoding_system_safe_chars));
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6780
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
6781 safe_codings = find_safe_codings (p1, p1end, safe_codings, work_table,
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6782 &single_byte_char_found);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6783 if (p2 < p2end)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6784 safe_codings = find_safe_codings (p2, p2end, safe_codings, work_table,
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6785 &single_byte_char_found);
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6786 if (EQ (safe_codings, XCDR (Vcoding_system_safe_chars)))
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6787 safe_codings = Qt;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6788 else
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6789 {
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6790 /* Turn safe_codings to a list of coding systems... */
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6791 Lisp_Object val;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6792
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6793 if (single_byte_char_found)
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6794 /* ... and append these for eight-bit chars. */
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6795 val = Fcons (Qraw_text,
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6796 Fcons (Qemacs_mule, Fcons (Qno_conversion, Qnil)));
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6797 else
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6798 /* ... and append generic coding systems. */
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6799 val = Fcopy_sequence (XCAR (Vcoding_system_safe_chars));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49539
diff changeset
6800
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6801 for (; CONSP (safe_codings); safe_codings = XCDR (safe_codings))
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6802 val = Fcons (XCAR (XCAR (safe_codings)), val);
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6803 safe_codings = val;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6804 }
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6805
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6806 return safe_codings;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6807 }
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6808
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6809
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6810 /* Search from position POS for such characters that are unencodable
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6811 accoding to SAFE_CHARS, and return a list of their positions. P
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6812 points where in the memory the character at POS exists. Limit the
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6813 search at PEND or when Nth unencodable characters are found.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6814
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6815 If SAFE_CHARS is a char table, an element for an unencodable
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6816 character is nil.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6817
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6818 If SAFE_CHARS is nil, all non-ASCII characters are unencodable.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6819
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6820 Otherwise, SAFE_CHARS is t, and only eight-bit-contrl and
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6821 eight-bit-graphic characters are unencodable. */
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6822
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6823 static Lisp_Object
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6824 unencodable_char_position (safe_chars, pos, p, pend, n)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6825 Lisp_Object safe_chars;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6826 int pos;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6827 unsigned char *p, *pend;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6828 int n;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6829 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6830 Lisp_Object pos_list;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6831
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6832 pos_list = Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6833 while (p < pend)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6834 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6835 int len;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6836 int c = STRING_CHAR_AND_LENGTH (p, MAX_MULTIBYTE_LENGTH, len);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47791
diff changeset
6837
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6838 if (c >= 128
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6839 && (CHAR_TABLE_P (safe_chars)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6840 ? NILP (CHAR_TABLE_REF (safe_chars, c))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6841 : (NILP (safe_chars) || c < 256)))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6842 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6843 pos_list = Fcons (make_number (pos), pos_list);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6844 if (--n <= 0)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6845 break;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6846 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6847 pos++;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6848 p += len;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6849 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6850 return Fnreverse (pos_list);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6851 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6852
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6853
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6854 DEFUN ("unencodable-char-position", Funencodable_char_position,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6855 Sunencodable_char_position, 3, 5, 0,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6856 doc: /*
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6857 Return position of first un-encodable character in a region.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6858 START and END specfiy the region and CODING-SYSTEM specifies the
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6859 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
6860
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6861 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
6862 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
6863 list of positions.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6864
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6865 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
6866 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
6867 to the string. */)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6868 (start, end, coding_system, count, string)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6869 Lisp_Object start, end, coding_system, count, string;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6870 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6871 int n;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6872 Lisp_Object safe_chars;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6873 struct coding_system coding;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6874 Lisp_Object positions;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6875 int from, to;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6876 unsigned char *p, *pend;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6877
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6878 if (NILP (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6879 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6880 validate_region (&start, &end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6881 from = XINT (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6882 to = XINT (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6883 if (NILP (current_buffer->enable_multibyte_characters))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6884 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6885 p = CHAR_POS_ADDR (from);
48829
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
6886 if (to == GPT)
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
6887 pend = GPT_ADDR;
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
6888 else
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
6889 pend = CHAR_POS_ADDR (to);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6890 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6891 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6892 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6893 CHECK_STRING (string);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6894 CHECK_NATNUM (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6895 CHECK_NATNUM (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6896 from = XINT (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6897 to = XINT (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6898 if (from > to
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6899 || to > SCHARS (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6900 args_out_of_range_3 (string, start, end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6901 if (! STRING_MULTIBYTE (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6902 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6903 p = SDATA (string) + string_char_to_byte (string, from);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6904 pend = SDATA (string) + string_char_to_byte (string, to);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6905 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6906
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6907 setup_coding_system (Fcheck_coding_system (coding_system), &coding);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6908
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6909 if (NILP (count))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6910 n = 1;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6911 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6912 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6913 CHECK_NATNUM (count);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6914 n = XINT (count);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6915 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6916
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6917 if (coding.type == coding_type_no_conversion
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6918 || coding.type == coding_type_raw_text)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6919 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6920
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6921 if (coding.type == coding_type_undecided)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6922 safe_chars = Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6923 else
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
6924 safe_chars = coding_safe_chars (coding_system);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6925
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6926 if (STRINGP (string)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6927 || from >= GPT || to <= GPT)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6928 positions = unencodable_char_position (safe_chars, from, p, pend, n);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6929 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6930 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6931 Lisp_Object args[2];
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6932
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6933 args[0] = unencodable_char_position (safe_chars, from, p, GPT_ADDR, n);
46875
f88c982e1f79 (Funencodable_char_position): Lisp_Object/int mixup.
Gerd Moellmann <gerd@gnu.org>
parents: 46859
diff changeset
6934 n -= XINT (Flength (args[0]));
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6935 if (n <= 0)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6936 positions = args[0];
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6937 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6938 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6939 args[1] = unencodable_char_position (safe_chars, GPT, GAP_END_ADDR,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6940 pend, n);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6941 positions = Fappend (2, args);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6942 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6943 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6944
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6945 return (NILP (count) ? Fcar (positions) : positions);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6946 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6947
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6948
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6949 Lisp_Object
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6950 code_convert_region1 (start, end, coding_system, encodep)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6951 Lisp_Object start, end, coding_system;
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6952 int encodep;
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6953 {
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6954 struct coding_system coding;
34988
8cd5e6ad71a2 (detect_coding_iso2022, setup_coding_system): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 34892
diff changeset
6955 int from, to;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6956
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6957 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
6958 CHECK_NUMBER_COERCE_MARKER (end);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6959 CHECK_SYMBOL (coding_system);
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6960
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6961 validate_region (&start, &end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6962 from = XFASTINT (start);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6963 to = XFASTINT (end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6964
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6965 if (NILP (coding_system))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6966 return make_number (to - from);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6967
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6968 if (setup_coding_system (Fcheck_coding_system (coding_system), &coding) < 0)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6969 error ("Invalid coding system: %s", SDATA (SYMBOL_NAME (coding_system)));
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6970
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6971 coding.mode |= CODING_MODE_LAST_BLOCK;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6972 coding.src_multibyte = coding.dst_multibyte
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6973 = !NILP (current_buffer->enable_multibyte_characters);
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6974 code_convert_region (from, CHAR_TO_BYTE (from), to, CHAR_TO_BYTE (to),
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6975 &coding, encodep, 1);
22020
e144ad749084 (code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents: 22009
diff changeset
6976 Vlast_coding_system_used = coding.symbol;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6977 return make_number (coding.produced_char);
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6978 }
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6979
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6980 DEFUN ("decode-coding-region", Fdecode_coding_region, Sdecode_coding_region,
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6981 3, 3, "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
6982 doc: /* Decode the current region from the specified coding system.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6983 When called from a program, takes three arguments:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6984 START, END, and CODING-SYSTEM. START and END are buffer positions.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6985 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
6986 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6987 not fully specified.)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6988 It returns the length of the decoded text. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6989 (start, end, coding_system)
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6990 Lisp_Object start, end, coding_system;
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6991 {
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6992 return code_convert_region1 (start, end, coding_system, 0);
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6993 }
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6994
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6995 DEFUN ("encode-coding-region", Fencode_coding_region, Sencode_coding_region,
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6996 3, 3, "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
6997 doc: /* Encode the current region into the specified coding system.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6998 When called from a program, takes three arguments:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6999 START, END, and CODING-SYSTEM. START and END are buffer positions.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7000 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
7001 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7002 not fully specified.)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7003 It returns the length of the encoded text. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7004 (start, end, coding_system)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7005 Lisp_Object start, end, coding_system;
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7006 {
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7007 return code_convert_region1 (start, end, coding_system, 1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7008 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7009
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7010 Lisp_Object
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7011 code_convert_string1 (string, coding_system, nocopy, encodep)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7012 Lisp_Object string, coding_system, nocopy;
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7013 int encodep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7014 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7015 struct coding_system coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7016
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7017 CHECK_STRING (string);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7018 CHECK_SYMBOL (coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7019
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7020 if (NILP (coding_system))
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7021 return (NILP (nocopy) ? Fcopy_sequence (string) : string);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7022
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7023 if (setup_coding_system (Fcheck_coding_system (coding_system), &coding) < 0)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7024 error ("Invalid coding system: %s", SDATA (SYMBOL_NAME (coding_system)));
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7025
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7026 coding.mode |= CODING_MODE_LAST_BLOCK;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7027 string = (encodep
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7028 ? encode_coding_string (string, &coding, !NILP (nocopy))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7029 : decode_coding_string (string, &coding, !NILP (nocopy)));
22020
e144ad749084 (code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents: 22009
diff changeset
7030 Vlast_coding_system_used = coding.symbol;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7031
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7032 return string;
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7033 }
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7034
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7035 DEFUN ("decode-coding-string", Fdecode_coding_string, Sdecode_coding_string,
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7036 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
7037 doc: /* Decode STRING which is encoded in CODING-SYSTEM, and return the result.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7038 Optional arg NOCOPY non-nil means it is OK to return STRING itself
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7039 if the decoding operation is trivial.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7040 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
7041 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7042 not fully specified.) */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7043 (string, coding_system, nocopy)
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7044 Lisp_Object string, coding_system, nocopy;
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7045 {
22020
e144ad749084 (code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents: 22009
diff changeset
7046 return code_convert_string1 (string, coding_system, nocopy, 0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7047 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7048
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7049 DEFUN ("encode-coding-string", Fencode_coding_string, Sencode_coding_string,
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7050 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
7051 doc: /* Encode STRING to CODING-SYSTEM, and return the result.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7052 Optional arg NOCOPY non-nil means it is OK to return STRING itself
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7053 if the encoding operation is trivial.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7054 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
7055 used (which may be different from CODING-SYSTEM if CODING-SYSTEM is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7056 not fully specified.) */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7057 (string, coding_system, nocopy)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7058 Lisp_Object string, coding_system, nocopy;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7059 {
22020
e144ad749084 (code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents: 22009
diff changeset
7060 return code_convert_string1 (string, coding_system, nocopy, 1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7061 }
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
7062
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7063 /* Encode or decode STRING according to CODING_SYSTEM.
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7064 Do not set Vlast_coding_system_used.
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7065
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7066 This function is called only from macros DECODE_FILE and
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7067 ENCODE_FILE, thus we ignore character composition. */
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7068
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7069 Lisp_Object
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7070 code_convert_string_norecord (string, coding_system, encodep)
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7071 Lisp_Object string, coding_system;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7072 int encodep;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7073 {
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7074 struct coding_system coding;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7075
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7076 CHECK_STRING (string);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7077 CHECK_SYMBOL (coding_system);
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7078
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7079 if (NILP (coding_system))
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7080 return string;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7081
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7082 if (setup_coding_system (Fcheck_coding_system (coding_system), &coding) < 0)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7083 error ("Invalid coding system: %s", SDATA (SYMBOL_NAME (coding_system)));
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7084
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7085 coding.composing = COMPOSITION_DISABLED;
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7086 coding.mode |= CODING_MODE_LAST_BLOCK;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7087 return (encodep
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7088 ? encode_coding_string (string, &coding, 1)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7089 : decode_coding_string (string, &coding, 1));
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
7090 }
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7091
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7092 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
7093 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
7094 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
7095 (code)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7096 Lisp_Object code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7097 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7098 unsigned char c1, c2, s1, s2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7099 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7100
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7101 CHECK_NUMBER (code);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7102 s1 = (XFASTINT (code)) >> 8, s2 = (XFASTINT (code)) & 0xFF;
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7103 if (s1 == 0)
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7104 {
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7105 if (s2 < 0x80)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7106 XSETFASTINT (val, s2);
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7107 else if (s2 >= 0xA0 || s2 <= 0xDF)
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7108 XSETFASTINT (val, MAKE_CHAR (charset_katakana_jisx0201, s2, 0));
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7109 else
24344
8b7ef7fb9e2e (Fdecode_sjis_char): In case of error, use %x for
Kenichi Handa <handa@m17n.org>
parents: 24324
diff changeset
7110 error ("Invalid Shift JIS code: %x", XFASTINT (code));
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7111 }
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7112 else
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7113 {
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
7114 if ((s1 < 0x80 || (s1 > 0x9F && s1 < 0xE0) || s1 > 0xEF)
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7115 || (s2 < 0x40 || s2 == 0x7F || s2 > 0xFC))
24344
8b7ef7fb9e2e (Fdecode_sjis_char): In case of error, use %x for
Kenichi Handa <handa@m17n.org>
parents: 24324
diff changeset
7116 error ("Invalid Shift JIS code: %x", XFASTINT (code));
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7117 DECODE_SJIS (s1, s2, c1, c2);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7118 XSETFASTINT (val, MAKE_CHAR (charset_jisx0208, c1, c2));
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7119 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7120 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7121 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7122
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7123 DEFUN ("encode-sjis-char", Fencode_sjis_char, Sencode_sjis_char, 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7124 doc: /* Encode a Japanese character CHAR to shift_jis encoding.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7125 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
7126 (ch)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7127 Lisp_Object ch;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7128 {
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
7129 int charset, c1, c2, s1, s2;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7130 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7131
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7132 CHECK_NUMBER (ch);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7133 SPLIT_CHAR (XFASTINT (ch), charset, c1, c2);
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7134 if (charset == CHARSET_ASCII)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7135 {
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7136 val = ch;
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7137 }
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7138 else if (charset == charset_jisx0208
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7139 && c1 > 0x20 && c1 < 0x7F && c2 > 0x20 && c2 < 0x7F)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7140 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7141 ENCODE_SJIS (c1, c2, s1, s2);
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
7142 XSETFASTINT (val, (s1 << 8) | s2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7143 }
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7144 else if (charset == charset_katakana_jisx0201
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7145 && c1 > 0x20 && c2 < 0xE0)
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7146 {
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7147 XSETFASTINT (val, c1 | 0x80);
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7148 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7149 else
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
7150 error ("Can't encode to shift_jis: %d", XFASTINT (ch));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7151 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7152 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7153
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7154 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
7155 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
7156 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
7157 (code)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7158 Lisp_Object code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7159 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7160 int charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7161 unsigned char b1, b2, c1, c2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7162 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7163
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7164 CHECK_NUMBER (code);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7165 b1 = (XFASTINT (code)) >> 8, b2 = (XFASTINT (code)) & 0xFF;
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7166 if (b1 == 0)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7167 {
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7168 if (b2 >= 0x80)
24344
8b7ef7fb9e2e (Fdecode_sjis_char): In case of error, use %x for
Kenichi Handa <handa@m17n.org>
parents: 24324
diff changeset
7169 error ("Invalid BIG5 code: %x", XFASTINT (code));
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7170 val = code;
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7171 }
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7172 else
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7173 {
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7174 if ((b1 < 0xA1 || b1 > 0xFE)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7175 || (b2 < 0x40 || (b2 > 0x7E && b2 < 0xA1) || b2 > 0xFE))
24344
8b7ef7fb9e2e (Fdecode_sjis_char): In case of error, use %x for
Kenichi Handa <handa@m17n.org>
parents: 24324
diff changeset
7176 error ("Invalid BIG5 code: %x", XFASTINT (code));
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7177 DECODE_BIG5 (b1, b2, charset, c1, c2);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7178 XSETFASTINT (val, MAKE_CHAR (charset, c1, c2));
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7179 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7180 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7181 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7182
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7183 DEFUN ("encode-big5-char", Fencode_big5_char, Sencode_big5_char, 1, 1, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7184 doc: /* Encode the Big5 character CHAR to BIG5 coding system.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7185 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
7186 (ch)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7187 Lisp_Object ch;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7188 {
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
7189 int charset, c1, c2, b1, b2;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7190 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7191
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7192 CHECK_NUMBER (ch);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7193 SPLIT_CHAR (XFASTINT (ch), charset, c1, c2);
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7194 if (charset == CHARSET_ASCII)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7195 {
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7196 val = ch;
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7197 }
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7198 else if ((charset == charset_big5_1
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7199 && (XFASTINT (ch) >= 0x250a1 && XFASTINT (ch) <= 0x271ec))
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7200 || (charset == charset_big5_2
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7201 && XFASTINT (ch) >= 0x290a1 && XFASTINT (ch) <= 0x2bdb2))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7202 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7203 ENCODE_BIG5 (charset, c1, c2, b1, b2);
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
7204 XSETFASTINT (val, (b1 << 8) | b2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7205 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7206 else
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
7207 error ("Can't encode to Big5: %d", XFASTINT (ch));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7208 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7209 }
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
7210
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7211 DEFUN ("set-terminal-coding-system-internal", Fset_terminal_coding_system_internal,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7212 Sset_terminal_coding_system_internal, 1, 1, 0,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7213 doc: /* Internal use only. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7214 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7215 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7216 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7217 CHECK_SYMBOL (coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7218 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
7219 /* We had better not send unsafe characters to terminal. */
51140
94d903190cee (ENCODE_UNSAFE_CHARACTER): Adjusted for the name change
Kenichi Handa <handa@m17n.org>
parents: 51090
diff changeset
7220 terminal_coding.mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR;
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
7221 /* Character composition should be disabled. */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7222 terminal_coding.composing = COMPOSITION_DISABLED;
35531
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
7223 /* Error notification should be suppressed. */
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
7224 terminal_coding.suppress_error = 1;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7225 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
7226 terminal_coding.dst_multibyte = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7227 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7228 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7229
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7230 DEFUN ("set-safe-terminal-coding-system-internal", 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
7231 Sset_safe_terminal_coding_system_internal, 1, 1, 0,
41006
fd83ec62a495 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 40842
diff changeset
7232 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
7233 (coding_system)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7234 Lisp_Object coding_system;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7235 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7236 CHECK_SYMBOL (coding_system);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7237 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
7238 &safe_terminal_coding);
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
7239 /* Character composition should be disabled. */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7240 safe_terminal_coding.composing = COMPOSITION_DISABLED;
35531
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
7241 /* Error notification should be suppressed. */
55759
8f316e69dd4b (Fset_safe_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 54320
diff changeset
7242 safe_terminal_coding.suppress_error = 1;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
7243 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
7244 safe_terminal_coding.dst_multibyte = 0;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7245 return Qnil;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7246 }
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7247
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7248 DEFUN ("terminal-coding-system", Fterminal_coding_system,
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7249 Sterminal_coding_system, 0, 0, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7250 doc: /* Return coding system specified for terminal output. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7251 ()
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7252 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7253 return terminal_coding.symbol;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7254 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7255
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7256 DEFUN ("set-keyboard-coding-system-internal", Fset_keyboard_coding_system_internal,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7257 Sset_keyboard_coding_system_internal, 1, 1, 0,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7258 doc: /* Internal use only. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7259 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7260 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7261 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
7262 CHECK_SYMBOL (coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7263 setup_coding_system (Fcheck_coding_system (coding_system), &keyboard_coding);
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
7264 /* Character composition should be disabled. */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7265 keyboard_coding.composing = COMPOSITION_DISABLED;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7266 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7267 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7268
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7269 DEFUN ("keyboard-coding-system", Fkeyboard_coding_system,
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7270 Skeyboard_coding_system, 0, 0, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7271 doc: /* Return coding system specified for decoding keyboard input. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7272 ()
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7273 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7274 return keyboard_coding.symbol;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7275 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7276
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7277
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
7278 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
7279 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
7280 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
7281 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
7282 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
7283 \(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
7284 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
7285
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7286 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
7287 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
7288 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
7289 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
7290
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7291 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
7292 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
7293 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
7294 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
7295
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7296 TARGET has a meaning which depends on OPERATION:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7297 For file I/O, TARGET is a file name.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7298 For process I/O, TARGET is a process name.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7299 For network I/O, TARGET is a service name or a port number
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7300
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7301 This function looks up what specified for TARGET in,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7302 `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
7303 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
7304 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
7305 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
7306 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
7307 which is a list of all the arguments given to this function.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7308
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7309 usage: (find-operation-coding-system OPERATION ARGUMENTS ...) */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7310 (nargs, args)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7311 int nargs;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7312 Lisp_Object *args;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7313 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7314 Lisp_Object operation, target_idx, target, val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7315 register Lisp_Object chain;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7316
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7317 if (nargs < 2)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7318 error ("Too few arguments");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7319 operation = args[0];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7320 if (!SYMBOLP (operation)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7321 || !INTEGERP (target_idx = Fget (operation, Qtarget_idx)))
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
7322 error ("Invalid first argument");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7323 if (nargs < 1 + XINT (target_idx))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7324 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
7325 SDATA (SYMBOL_NAME (operation)));
46838
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7326 /* For write-region, if the 6th argument (i.e. VISIT, the 5th
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7327 argument to write-region) is string, it must be treated as a
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7328 target file name. */
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7329 if (EQ (operation, Qwrite_region)
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7330 && nargs > 5
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7331 && STRINGP (args[5]))
46839
4acadb428f41 (Ffind_operation_coding_system): Fix Lisp_Object/int mixup.
Ken Raeburn <raeburn@raeburn.org>
parents: 46838
diff changeset
7332 target_idx = make_number (4);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7333 target = args[XINT (target_idx) + 1];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7334 if (!(STRINGP (target)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7335 || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
7336 error ("Invalid argument %d", XINT (target_idx) + 1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7337
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18536
diff changeset
7338 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
7339 || EQ (operation, Qwrite_region))
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7340 ? 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
7341 : (EQ (operation, Qopen_network_stream)
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7342 ? Vnetwork_coding_system_alist
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7343 : Vprocess_coding_system_alist));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7344 if (NILP (chain))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7345 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7346
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7347 for (; CONSP (chain); chain = XCDR (chain))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7348 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
7349 Lisp_Object elt;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7350 elt = XCAR (chain);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7351
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7352 if (CONSP (elt)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7353 && ((STRINGP (target)
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7354 && STRINGP (XCAR (elt))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7355 && 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
7356 || (INTEGERP (target) && EQ (target, XCAR (elt)))))
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7357 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7358 val = XCDR (elt);
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7359 /* 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
7360 function symbol, we return VAL as a coding system. */
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7361 if (CONSP (val))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7362 return val;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7363 if (! SYMBOLP (val))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7364 return Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7365 if (! NILP (Fcoding_system_p (val)))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7366 return Fcons (val, val);
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7367 if (! NILP (Ffboundp (val)))
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7368 {
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7369 val = call1 (val, Flist (nargs, args));
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7370 if (CONSP (val))
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7371 return val;
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7372 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
7373 return Fcons (val, val);
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7374 }
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7375 return Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7376 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7377 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7378 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7379 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7380
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7381 DEFUN ("update-coding-systems-internal", Fupdate_coding_systems_internal,
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7382 Supdate_coding_systems_internal, 0, 0, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7383 doc: /* Update internal database for ISO2022 and CCL based coding systems.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7384 When values of any coding categories are changed, you must
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7385 call this function. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7386 ()
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7387 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7388 int i;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7389
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
7390 for (i = CODING_CATEGORY_IDX_EMACS_MULE; i < CODING_CATEGORY_IDX_MAX; i++)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7391 {
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7392 Lisp_Object val;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7393
39581
6d9fa06012a6 Use SYMBOL_VALUE/SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents: 38518
diff changeset
7394 val = SYMBOL_VALUE (XVECTOR (Vcoding_category_table)->contents[i]);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7395 if (!NILP (val))
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7396 {
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7397 if (! coding_system_table[i])
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7398 coding_system_table[i] = ((struct coding_system *)
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7399 xmalloc (sizeof (struct coding_system)));
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7400 setup_coding_system (val, coding_system_table[i]);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7401 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7402 else if (coding_system_table[i])
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7403 {
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7404 xfree (coding_system_table[i]);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7405 coding_system_table[i] = NULL;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7406 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7407 }
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7408
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7409 return Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7410 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7411
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7412 DEFUN ("set-coding-priority-internal", Fset_coding_priority_internal,
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7413 Sset_coding_priority_internal, 0, 0, 0,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7414 doc: /* Update internal database for the current value of `coding-category-list'.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7415 This function is internal use only. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7416 ()
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7417 {
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7418 int i = 0, idx;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
7419 Lisp_Object val;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
7420
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
7421 val = Vcoding_category_list;
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7422
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7423 while (CONSP (val) && i < CODING_CATEGORY_IDX_MAX)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7424 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7425 if (! SYMBOLP (XCAR (val)))
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7426 break;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7427 idx = XFASTINT (Fget (XCAR (val), Qcoding_category_index));
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7428 if (idx >= CODING_CATEGORY_IDX_MAX)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7429 break;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7430 coding_priorities[i++] = (1 << idx);
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7431 val = XCDR (val);
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7432 }
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7433 /* If coding-category-list is valid and contains all coding
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7434 categories, `i' should be CODING_CATEGORY_IDX_MAX now. If not,
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
7435 the following code saves Emacs from crashing. */
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7436 while (i < CODING_CATEGORY_IDX_MAX)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7437 coding_priorities[i++] = CODING_CATEGORY_MASK_RAW_TEXT;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7438
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7439 return Qnil;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7440 }
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7441
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7442 DEFUN ("define-coding-system-internal", Fdefine_coding_system_internal,
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7443 Sdefine_coding_system_internal, 1, 1, 0,
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7444 doc: /* Register CODING-SYSTEM as a base coding system.
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7445 This function is internal use only. */)
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7446 (coding_system)
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7447 Lisp_Object coding_system;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7448 {
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7449 Lisp_Object safe_chars, slot;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7450
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7451 if (NILP (Fcheck_coding_system (coding_system)))
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7452 Fsignal (Qcoding_system_error, Fcons (coding_system, Qnil));
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7453 safe_chars = coding_safe_chars (coding_system);
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7454 if (! EQ (safe_chars, Qt) && ! CHAR_TABLE_P (safe_chars))
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7455 error ("No valid safe-chars property for %s",
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7456 SDATA (SYMBOL_NAME (coding_system)));
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7457 if (EQ (safe_chars, Qt))
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7458 {
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7459 if (NILP (Fmemq (coding_system, XCAR (Vcoding_system_safe_chars))))
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7460 XSETCAR (Vcoding_system_safe_chars,
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7461 Fcons (coding_system, XCAR (Vcoding_system_safe_chars)));
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7462 }
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7463 else
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7464 {
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7465 slot = Fassq (coding_system, XCDR (Vcoding_system_safe_chars));
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7466 if (NILP (slot))
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7467 XSETCDR (Vcoding_system_safe_chars,
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7468 nconc2 (XCDR (Vcoding_system_safe_chars),
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7469 Fcons (Fcons (coding_system, safe_chars), Qnil)));
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7470 else
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7471 XSETCDR (slot, safe_chars);
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7472 }
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7473 return Qnil;
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7474 }
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7475
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7476 #endif /* emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7477
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7478
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7479 /*** 9. Post-amble ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7480
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21505
diff changeset
7481 void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7482 init_coding_once ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7483 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7484 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7485
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
7486 /* Emacs' internal format specific initialize routine. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7487 for (i = 0; i <= 0x20; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7488 emacs_code_class[i] = EMACS_control_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7489 emacs_code_class[0x0A] = EMACS_linefeed_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7490 emacs_code_class[0x0D] = EMACS_carriage_return_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7491 for (i = 0x21 ; i < 0x7F; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7492 emacs_code_class[i] = EMACS_ascii_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7493 emacs_code_class[0x7F] = EMACS_control_code;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7494 for (i = 0x80; i < 0xFF; i++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7495 emacs_code_class[i] = EMACS_invalid_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7496 emacs_code_class[LEADING_CODE_PRIVATE_11] = EMACS_leading_code_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7497 emacs_code_class[LEADING_CODE_PRIVATE_12] = EMACS_leading_code_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7498 emacs_code_class[LEADING_CODE_PRIVATE_21] = EMACS_leading_code_4;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7499 emacs_code_class[LEADING_CODE_PRIVATE_22] = EMACS_leading_code_4;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7500
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7501 /* ISO2022 specific initialize routine. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7502 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
7503 iso_code_class[i] = ISO_control_0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7504 for (i = 0x21; i < 0x7F; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7505 iso_code_class[i] = ISO_graphic_plane_0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7506 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
7507 iso_code_class[i] = ISO_control_1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7508 for (i = 0xA1; i < 0xFF; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7509 iso_code_class[i] = ISO_graphic_plane_1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7510 iso_code_class[0x20] = iso_code_class[0x7F] = ISO_0x20_or_0x7F;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7511 iso_code_class[0xA0] = iso_code_class[0xFF] = ISO_0xA0_or_0xFF;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7512 iso_code_class[ISO_CODE_CR] = ISO_carriage_return;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7513 iso_code_class[ISO_CODE_SO] = ISO_shift_out;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7514 iso_code_class[ISO_CODE_SI] = ISO_shift_in;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7515 iso_code_class[ISO_CODE_SS2_7] = ISO_single_shift_2_7;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7516 iso_code_class[ISO_CODE_ESC] = ISO_escape;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7517 iso_code_class[ISO_CODE_SS2] = ISO_single_shift_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7518 iso_code_class[ISO_CODE_SS3] = ISO_single_shift_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7519 iso_code_class[ISO_CODE_CSI] = ISO_control_sequence_introducer;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7520
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7521 setup_coding_system (Qnil, &keyboard_coding);
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7522 setup_coding_system (Qnil, &terminal_coding);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7523 setup_coding_system (Qnil, &safe_terminal_coding);
22979
ceb8e4a89a32 (default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22964
diff changeset
7524 setup_coding_system (Qnil, &default_buffer_file_coding);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7525
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7526 bzero (coding_system_table, sizeof coding_system_table);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7527
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7528 bzero (ascii_skip_code, sizeof ascii_skip_code);
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7529 for (i = 0; i < 128; i++)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7530 ascii_skip_code[i] = 1;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7531
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7532 #if defined (MSDOS) || defined (WINDOWSNT)
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7533 system_eol_type = CODING_EOL_CRLF;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7534 #else
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7535 system_eol_type = CODING_EOL_LF;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7536 #endif
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
7537
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
7538 inhibit_pre_post_conversion = 0;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7539 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7540
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7541 #ifdef emacs
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7542
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21505
diff changeset
7543 void
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7544 syms_of_coding ()
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7545 {
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7546 Qtarget_idx = intern ("target-idx");
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7547 staticpro (&Qtarget_idx);
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7548
19750
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
7549 Qcoding_system_history = intern ("coding-system-history");
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
7550 staticpro (&Qcoding_system_history);
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
7551 Fset (Qcoding_system_history, Qnil);
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
7552
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7553 /* 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
7554 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
7555 /* 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
7556 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
7557
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7558 Qcall_process = intern ("call-process");
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7559 staticpro (&Qcall_process);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7560 /* 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
7561 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
7562
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7563 Qcall_process_region = intern ("call-process-region");
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7564 staticpro (&Qcall_process_region);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7565 /* 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
7566 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
7567
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7568 Qstart_process = intern ("start-process");
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7569 staticpro (&Qstart_process);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7570 /* 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
7571 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
7572
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7573 Qopen_network_stream = intern ("open-network-stream");
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7574 staticpro (&Qopen_network_stream);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7575 /* 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
7576 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
7577
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7578 Qcoding_system = intern ("coding-system");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7579 staticpro (&Qcoding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7580
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7581 Qeol_type = intern ("eol-type");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7582 staticpro (&Qeol_type);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7583
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7584 Qbuffer_file_coding_system = intern ("buffer-file-coding-system");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7585 staticpro (&Qbuffer_file_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7586
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7587 Qpost_read_conversion = intern ("post-read-conversion");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7588 staticpro (&Qpost_read_conversion);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7589
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7590 Qpre_write_conversion = intern ("pre-write-conversion");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7591 staticpro (&Qpre_write_conversion);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7592
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7593 Qno_conversion = intern ("no-conversion");
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7594 staticpro (&Qno_conversion);
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7595
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7596 Qundecided = intern ("undecided");
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7597 staticpro (&Qundecided);
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7598
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7599 Qcoding_system_p = intern ("coding-system-p");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7600 staticpro (&Qcoding_system_p);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7601
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7602 Qcoding_system_error = intern ("coding-system-error");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7603 staticpro (&Qcoding_system_error);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7604
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7605 Fput (Qcoding_system_error, Qerror_conditions,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7606 Fcons (Qcoding_system_error, Fcons (Qerror, Qnil)));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7607 Fput (Qcoding_system_error, Qerror_message,
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7608 build_string ("Invalid coding system"));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7609
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7610 Qcoding_category = intern ("coding-category");
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7611 staticpro (&Qcoding_category);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7612 Qcoding_category_index = intern ("coding-category-index");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7613 staticpro (&Qcoding_category_index);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7614
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7615 Vcoding_category_table
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7616 = Fmake_vector (make_number (CODING_CATEGORY_IDX_MAX), Qnil);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7617 staticpro (&Vcoding_category_table);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7618 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7619 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7620 for (i = 0; i < CODING_CATEGORY_IDX_MAX; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7621 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7622 XVECTOR (Vcoding_category_table)->contents[i]
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7623 = intern (coding_category_name[i]);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7624 Fput (XVECTOR (Vcoding_category_table)->contents[i],
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7625 Qcoding_category_index, make_number (i));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7626 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7627 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7628
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7629 Vcoding_system_safe_chars = Fcons (Qnil, Qnil);
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7630 staticpro (&Vcoding_system_safe_chars);
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7631
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7632 Qtranslation_table = intern ("translation-table");
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7633 staticpro (&Qtranslation_table);
50765
43076e9d9aaa (coding_system_accept_latin_extra_p): Delete this
Kenichi Handa <handa@m17n.org>
parents: 50487
diff changeset
7634 Fput (Qtranslation_table, Qchar_table_extra_slots, make_number (2));
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7635
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7636 Qtranslation_table_id = intern ("translation-table-id");
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7637 staticpro (&Qtranslation_table_id);
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7638
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7639 Qtranslation_table_for_decode = intern ("translation-table-for-decode");
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7640 staticpro (&Qtranslation_table_for_decode);
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7641
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7642 Qtranslation_table_for_encode = intern ("translation-table-for-encode");
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7643 staticpro (&Qtranslation_table_for_encode);
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
7644
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7645 Qsafe_chars = intern ("safe-chars");
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7646 staticpro (&Qsafe_chars);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7647
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7648 Qchar_coding_system = intern ("char-coding-system");
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7649 staticpro (&Qchar_coding_system);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7650
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7651 /* 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
7652 Setting this variable twice is harmless.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7653 But don't staticpro it here--that is done in alloc.c. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7654 Qchar_table_extra_slots = intern ("char-table-extra-slots");
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7655 Fput (Qsafe_chars, Qchar_table_extra_slots, make_number (0));
50185
b64f1af6e142 (Vchar_coding_system_table): Remove this variable.
Kenichi Handa <handa@m17n.org>
parents: 50121
diff changeset
7656 Fput (Qchar_coding_system, Qchar_table_extra_slots, make_number (0));
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
7657
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7658 Qvalid_codes = intern ("valid-codes");
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7659 staticpro (&Qvalid_codes);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7660
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7661 Qemacs_mule = intern ("emacs-mule");
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7662 staticpro (&Qemacs_mule);
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7663
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7664 Qraw_text = intern ("raw-text");
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7665 staticpro (&Qraw_text);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7666
51406
3c675181c3d8 (Qutf_8): New.
Dave Love <fx@gnu.org>
parents: 51356
diff changeset
7667 Qutf_8 = intern ("utf-8");
3c675181c3d8 (Qutf_8): New.
Dave Love <fx@gnu.org>
parents: 51356
diff changeset
7668 staticpro (&Qutf_8);
3c675181c3d8 (Qutf_8): New.
Dave Love <fx@gnu.org>
parents: 51356
diff changeset
7669
52794
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
7670 Qcoding_system_define_form = intern ("coding-system-define-form");
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
7671 staticpro (&Qcoding_system_define_form);
f4d906e31662 (Qcoding_system_define_form): New variable.
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
7672
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7673 defsubr (&Scoding_system_p);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7674 defsubr (&Sread_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7675 defsubr (&Sread_non_nil_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7676 defsubr (&Scheck_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7677 defsubr (&Sdetect_coding_region);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7678 defsubr (&Sdetect_coding_string);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7679 defsubr (&Sfind_coding_systems_region_internal);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7680 defsubr (&Sunencodable_char_position);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7681 defsubr (&Sdecode_coding_region);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7682 defsubr (&Sencode_coding_region);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7683 defsubr (&Sdecode_coding_string);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7684 defsubr (&Sencode_coding_string);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7685 defsubr (&Sdecode_sjis_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7686 defsubr (&Sencode_sjis_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7687 defsubr (&Sdecode_big5_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7688 defsubr (&Sencode_big5_char);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
7689 defsubr (&Sset_terminal_coding_system_internal);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7690 defsubr (&Sset_safe_terminal_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7691 defsubr (&Sterminal_coding_system);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
7692 defsubr (&Sset_keyboard_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7693 defsubr (&Skeyboard_coding_system);
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
7694 defsubr (&Sfind_operation_coding_system);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7695 defsubr (&Supdate_coding_systems_internal);
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7696 defsubr (&Sset_coding_priority_internal);
49539
1ad5bfbb831a (syms_of_coding): Add `...' for symbols in the docstring of
Kenichi Handa <handa@m17n.org>
parents: 48874
diff changeset
7697 defsubr (&Sdefine_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7698
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7699 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
7700 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
7701
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7702 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
7703 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
7704 `define-coding-system-alias'. */);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7705 Vcoding_system_list = Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7706
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7707 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
7708 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
7709 Each element is one element list of coding system name.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7710 This variable is given to `completing-read' as TABLE argument.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7711
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7712 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
7713 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
7714 `define-coding-system-alias'. */);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7715 Vcoding_system_alist = Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7716
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7717 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
7718 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
7719
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7720 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
7721 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
7722 one algorithm agrees with a byte sequence of source text, the coding
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7723 system bound to the corresponding coding-category is selected. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7724 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7725 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7726
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7727 Vcoding_category_list = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7728 for (i = CODING_CATEGORY_IDX_MAX - 1; i >= 0; i--)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7729 Vcoding_category_list
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7730 = Fcons (XVECTOR (Vcoding_category_table)->contents[i],
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7731 Vcoding_category_list);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7732 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7733
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7734 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
7735 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
7736 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
7737 If the value is a coding system, it is used for decoding on read operation.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7738 If not, an appropriate element is used from one of the coding system alists:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7739 There are three such tables, `file-coding-system-alist',
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7740 `process-coding-system-alist', and `network-coding-system-alist'. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7741 Vcoding_system_for_read = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7742
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7743 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
7744 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
7745 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
7746 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
7747 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
7748
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7749 If this does not specify a coding system, an appropriate element
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7750 is used from one of the coding system alists:
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7751 There are three such tables, `file-coding-system-alist',
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7752 `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
7753 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
7754 the value of `buffer-file-coding-system' is used. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7755 Vcoding_system_for_write = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7756
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7757 DEFVAR_LISP ("last-coding-system-used", &Vlast_coding_system_used,
50896
0aba658cfdd2 (Vlast_coding_system_used): Doc fix.
Dave Love <fx@gnu.org>
parents: 50765
diff changeset
7758 doc: /* Coding system used in the latest file or process I/O.
0aba658cfdd2 (Vlast_coding_system_used): Doc fix.
Dave Love <fx@gnu.org>
parents: 50765
diff changeset
7759 Also set by `encode-coding-region', `decode-coding-region',
0aba658cfdd2 (Vlast_coding_system_used): Doc fix.
Dave Love <fx@gnu.org>
parents: 50765
diff changeset
7760 `encode-coding-string' and `decode-coding-string'. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7761 Vlast_coding_system_used = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7762
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7763 DEFVAR_BOOL ("inhibit-eol-conversion", &inhibit_eol_conversion,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7764 doc: /* *Non-nil means always inhibit code conversion of end-of-line format.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7765 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
7766 such conversion. */);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7767 inhibit_eol_conversion = 0;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7768
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
7769 DEFVAR_BOOL ("inherit-process-coding-system", &inherit_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
7770 doc: /* Non-nil means process buffer inherits coding system of process output.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7771 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
7772 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
7773 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
7774
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7775 DEFVAR_LISP ("file-coding-system-alist", &Vfile_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
7776 doc: /* Alist to decide a coding system to use for a file I/O operation.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7777 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
7778 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
7779 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
7780 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
7781 the file contents.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7782 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
7783 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
7784 If VAL is a function symbol, the function must return a coding system
41678
5aa97e545399 (syms_of_coding) <Qchar_coding_system>: Give it an
Dave Love <fx@gnu.org>
parents: 41624
diff changeset
7785 or a cons of coding systems which are used as above. The function gets
43841
5ad6c4210a07 (syms_of_coding) <file-coding-system-alist>: Doc fix
Andreas Schwab <schwab@suse.de>
parents: 43041
diff changeset
7786 the arguments with which `find-operation-coding-system' was called.
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7787
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7788 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
7789 and the variable `auto-coding-alist'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7790 Vfile_coding_system_alist = Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7791
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7792 DEFVAR_LISP ("process-coding-system-alist", &Vprocess_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
7793 doc: /* Alist to decide a coding system to use for a process I/O operation.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7794 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
7795 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
7796 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
7797 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
7798 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
7799 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
7800 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
7801 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
7802 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
7803
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7804 See also the function `find-operation-coding-system'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7805 Vprocess_coding_system_alist = Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7806
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7807 DEFVAR_LISP ("network-coding-system-alist", &Vnetwork_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
7808 doc: /* Alist to decide a coding system to use for a network I/O operation.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7809 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
7810 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
7811 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
7812 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
7813 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
7814 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
7815 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
7816 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
7817 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
7818 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
7819
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7820 See also the function `find-operation-coding-system'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7821 Vnetwork_coding_system_alist = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7822
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7823 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
7824 doc: /* Coding system to use with system messages.
6f20449b7e12 (syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 41006
diff changeset
7825 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
7826 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
7827
29182
1d1c27067af4 (encode_eol): Add null statement after label.
Dave Love <fx@gnu.org>
parents: 29172
diff changeset
7828 /* 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
7829 DEFVAR_LISP ("eol-mnemonic-unix", &eol_mnemonic_unix,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7830 doc: /* *String displayed in mode line for UNIX-like (LF) end-of-line format. */);
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7831 eol_mnemonic_unix = build_string (":");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7832
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7833 DEFVAR_LISP ("eol-mnemonic-dos", &eol_mnemonic_dos,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7834 doc: /* *String displayed in mode line for DOS-like (CRLF) end-of-line format. */);
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7835 eol_mnemonic_dos = build_string ("\\");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7836
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7837 DEFVAR_LISP ("eol-mnemonic-mac", &eol_mnemonic_mac,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7838 doc: /* *String displayed in mode line for MAC-like (CR) end-of-line format. */);
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7839 eol_mnemonic_mac = build_string ("/");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7840
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7841 DEFVAR_LISP ("eol-mnemonic-undecided", &eol_mnemonic_undecided,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7842 doc: /* *String displayed in mode line when end-of-line format is not yet determined. */);
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7843 eol_mnemonic_undecided = build_string (":");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7844
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
7845 DEFVAR_LISP ("enable-character-translation", &Venable_character_translation,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7846 doc: /* *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
7847 Venable_character_translation = Qt;
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
7848
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7849 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
7850 &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
7851 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
7852 Vstandard_translation_table_for_decode = Qnil;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7853
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7854 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
7855 &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
7856 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
7857 Vstandard_translation_table_for_encode = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7858
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7859 DEFVAR_LISP ("charset-revision-table", &Vcharset_revision_alist,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7860 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
7861 While encoding, if a charset (car part of an element) is found,
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7862 designate it with the escape sequence identifying revision (cdr part of the element). */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7863 Vcharset_revision_alist = Qnil;
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7864
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7865 DEFVAR_LISP ("default-process-coding-system",
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7866 &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
7867 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
7868 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
7869 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
7870 Vdefault_process_coding_system = Qnil;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7871
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
7872 DEFVAR_LISP ("latin-extra-code-table", &Vlatin_extra_code_table,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7873 doc: /* Table of extra Latin codes in the range 128..159 (inclusive).
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7874 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
7875 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
7876 \(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
7877 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
7878 `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
7879 or reading output of a subprocess.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7880 Only 128th through 159th elements has a meaning. */);
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
7881 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
7882
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7883 DEFVAR_LISP ("select-safe-coding-system-function",
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7884 &Vselect_safe_coding_system_function,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7885 doc: /* Function to call to select safe coding system for encoding a text.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7886
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7887 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
7888 coding system which can encode the text in the case that a default
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7889 coding system used in each operation can't encode the text.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7890
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7891 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
7892 Vselect_safe_coding_system_function = Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7893
48874
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7894 DEFVAR_BOOL ("coding-system-require-warning",
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7895 &coding_system_require_warning,
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7896 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
7897 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
7898 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
7899 `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
7900 coding_system_require_warning = 0;
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7901
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7902
30292
14a9937df1f5 (syms_of_coding): Fix typo in spelling of variable
Gerd Moellmann <gerd@gnu.org>
parents: 30263
diff changeset
7903 DEFVAR_BOOL ("inhibit-iso-escape-detection",
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
7904 &inhibit_iso_escape_detection,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7905 doc: /* If non-nil, Emacs ignores ISO2022's escape sequence on code detection.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7906
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7907 By default, on reading a file, Emacs tries to detect how the text is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7908 encoded. This code detection is sensitive to escape sequences. If
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7909 the sequence is valid as ISO2022, the code is determined as one of
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7910 the ISO2022 encodings, and the file is decoded by the corresponding
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7911 coding system (e.g. `iso-2022-7bit').
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7912
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7913 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
7914 a file as is. In such a case, you can set this variable to non-nil.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7915 Then, as the code detection ignores any escape sequences, no file is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7916 detected as encoded in some ISO2022 encoding. The result is that all
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7917 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
7918
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7919 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
7920 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
7921 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
7922 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
7923 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
7924
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7925 The other way to read escape sequences in a file without decoding is
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7926 to explicitly specify some coding system that doesn't use ISO2022's
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7927 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
7928 inhibit_iso_escape_detection = 0;
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7929
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7930 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
7931 doc: /* Char table for translating self-inserting characters.
c2ce8280fb97 (Vtranslation_table_for_input): New.
Dave Love <fx@gnu.org>
parents: 48182
diff changeset
7932 This is applied to the result of input methods, not their input. See also
c2ce8280fb97 (Vtranslation_table_for_input): New.
Dave Love <fx@gnu.org>
parents: 48182
diff changeset
7933 `keyboard-translate-table'. */);
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7934 Vtranslation_table_for_input = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7935 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7936
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7937 char *
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7938 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
7939 int error_number;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7940 {
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7941 char *str;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7942
26526
b7438760079b * callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents: 26240
diff changeset
7943 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
7944 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
7945
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7946 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
7947 {
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7948 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
7949 Vlocale_coding_system,
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7950 0);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7951 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
7952 }
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7953
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7954 return str;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7955 }
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7956
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7957 #endif /* emacs */
29184
446621f88d68 Fix junk from last checkin.
Dave Love <fx@gnu.org>
parents: 29182
diff changeset
7958
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52354
diff changeset
7959 /* arch-tag: 3a3a2b01-5ff6-4071-9afe-f5b808d9229d
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52354
diff changeset
7960 (do not change this comment) */