annotate src/coding.c @ 49506:ac9e2eeeb03d

New format of AUTHORS file; list each author name once followed by contributed and changed files. Improve selection of entries to include in list, and generate list of unrecognized entries indicating syntax errors in ChangeLog files. (authors-coding-system): New variable. (authors-many-files): Update doc string. (authors-aliases): Change format. Now one entry with multiple aliases per author. (authors-valid-file-names, authors-renamed-files-alist) (authors-renamed-files-regexps): New variables. (authors-canonical-file-name): New function. Validates that file exists or occurs in one of the above lists. Record unrecognized file names in global authors-invalid-file-names list. (authors-add): Change to record per-change counts. (authors-canonical-author-name): Handle new format of authors-aliases list. (authors-scan-change-log): Rename FILE arg to LOG-FILE. Change doc string to describe new entry format. Only add author entries for valid file names. (authors-print): Replace by authors-add-to-author-list. (authors-add-to-author-list): New function which reorders per-file entries and adds them to global authors-author-list. (authors): Instead of authors-print to insert in *Authors* buffer, use authors-add-to-author-list to reorder the list and then insert result in *Authors* buffer with new format. Generate *Authors Errors* compilation-mode buffer listing unrecognized ChangeLog entries.
author Kim F. Storm <storm@cua.dk>
date Wed, 29 Jan 2003 00:13:11 +0000
parents 3002a87cc629
children 1ad5bfbb831a
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).
43841
5ad6c4210a07 (syms_of_coding) <file-coding-system-alist>: Doc fix
Andreas Schwab <schwab@suse.de>
parents: 43041
diff changeset
2 Copyright (C) 1995, 1997, 1998, 2002 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.
48125
d43e830821e0 (decode_coding_emacs_mule, decode_coding_iso2022)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47942
diff changeset
4 Copyright (C) 2001,2002 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"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
348
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
349 #else /* not emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
350
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
351 #include "mulelib.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
352
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
353 #endif /* not emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
354
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
355 Lisp_Object Qcoding_system, Qeol_type;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
356 Lisp_Object Qbuffer_file_coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
357 Lisp_Object Qpost_read_conversion, Qpre_write_conversion;
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
358 Lisp_Object Qno_conversion, Qundecided;
19750
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
359 Lisp_Object Qcoding_system_history;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
360 Lisp_Object Qsafe_chars;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
361 Lisp_Object Qvalid_codes;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
362
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
363 extern Lisp_Object Qinsert_file_contents, Qwrite_region;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
364 Lisp_Object Qcall_process, Qcall_process_region, Qprocess_argument;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
365 Lisp_Object Qstart_process, Qopen_network_stream;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
366 Lisp_Object Qtarget_idx;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
367
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
368 Lisp_Object Vselect_safe_coding_system_function;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
369
48874
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
370 int coding_system_require_warning;
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
371
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
372 /* 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
373 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
374 /* Mnemonic string to indicate format of end-of-line is not yet
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
375 decided. */
24200
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
376 Lisp_Object eol_mnemonic_undecided;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
377
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
378 /* 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
379 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
380 int system_eol_type;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
381
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
382 #ifdef emacs
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
383
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
384 Lisp_Object Vcoding_system_list, Vcoding_system_alist;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
385
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
386 Lisp_Object Qcoding_system_p, Qcoding_system_error;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
387
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
388 /* 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
389 end-of-line format. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
390 Lisp_Object Qemacs_mule, Qraw_text;
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
391
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
392 /* Coding-systems are handed between Emacs Lisp programs and C internal
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
393 routines by the following three variables. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
394 /* Coding-system for reading files and receiving data from process. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
395 Lisp_Object Vcoding_system_for_read;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
396 /* Coding-system for writing files and sending data to process. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
397 Lisp_Object Vcoding_system_for_write;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
398 /* Coding-system actually used in the latest I/O. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
399 Lisp_Object Vlast_coding_system_used;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
400
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
401 /* A vector of length 256 which contains information about special
22529
d9eac134a41b Doc fixes.
Karl Heuer <kwzh@gnu.org>
parents: 22502
diff changeset
402 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
403 Lisp_Object Vlatin_extra_code_table;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
404
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
405 /* 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
406 int inhibit_eol_conversion;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
407
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
408 /* Flag to inhibit ISO2022 escape sequence detection. */
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
409 int inhibit_iso_escape_detection;
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
410
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
411 /* 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
412 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
413
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
414 /* Coding system to be used to encode text for terminal display. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
415 struct coding_system terminal_coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
416
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
417 /* 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
418 terminal coding system is nil. */
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
419 struct coding_system safe_terminal_coding;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
420
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
421 /* Coding system of what is sent from terminal keyboard. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
422 struct coding_system keyboard_coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
423
22979
ceb8e4a89a32 (default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22964
diff changeset
424 /* 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
425 struct coding_system default_buffer_file_coding;
ceb8e4a89a32 (default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22964
diff changeset
426
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
427 Lisp_Object Vfile_coding_system_alist;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
428 Lisp_Object Vprocess_coding_system_alist;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
429 Lisp_Object Vnetwork_coding_system_alist;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
430
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
431 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
432
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
433 #endif /* emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
434
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
435 Lisp_Object Qcoding_category, Qcoding_category_index;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
436
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
437 /* List of symbols `coding-category-xxx' ordered by priority. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
438 Lisp_Object Vcoding_category_list;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
439
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
440 /* Table of coding categories (Lisp symbols). */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
441 Lisp_Object Vcoding_category_table;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
442
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
443 /* Table of names of symbol for each coding-category. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
444 char *coding_category_name[CODING_CATEGORY_IDX_MAX] = {
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
445 "coding-category-emacs-mule",
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
446 "coding-category-sjis",
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
447 "coding-category-iso-7",
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
448 "coding-category-iso-7-tight",
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
449 "coding-category-iso-8-1",
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
450 "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
451 "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
452 "coding-category-iso-8-else",
23027
0dc823b2335f (coding_category_name): Fix the order of initial
Kenichi Handa <handa@m17n.org>
parents: 22979
diff changeset
453 "coding-category-ccl",
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
454 "coding-category-big5",
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
455 "coding-category-utf-8",
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
456 "coding-category-utf-16-be",
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
457 "coding-category-utf-16-le",
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
458 "coding-category-raw-text",
23027
0dc823b2335f (coding_category_name): Fix the order of initial
Kenichi Handa <handa@m17n.org>
parents: 22979
diff changeset
459 "coding-category-binary"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
460 };
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
461
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
462 /* 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
463 categories. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
464 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
465
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
466 /* 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
467 category of which priority is Nth. */
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
468 static
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
469 int coding_priorities[CODING_CATEGORY_IDX_MAX];
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
470
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
471 /* 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
472 conversion. */
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
473 Lisp_Object Venable_character_translation;
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
474 /* 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
475 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
476 /* 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
477 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
478
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
479 Lisp_Object Qtranslation_table;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
480 Lisp_Object Qtranslation_table_id;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
481 Lisp_Object Qtranslation_table_for_decode;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
482 Lisp_Object Qtranslation_table_for_encode;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
483
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
484 /* Alist of charsets vs revision number. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
485 Lisp_Object Vcharset_revision_alist;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
486
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
487 /* Default coding systems used for process I/O. */
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
488 Lisp_Object Vdefault_process_coding_system;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
489
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
490 /* 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
491 Lisp_Object Vtranslation_table_for_input;
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
492
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
493 /* 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
494 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
495 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
496 to avoid infinite recursive call. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
497 static int inhibit_pre_post_conversion;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
498
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
499 /* Char-table containing safe coding systems of each character. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
500 Lisp_Object Vchar_coding_system_table;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
501 Lisp_Object Qchar_coding_system;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
502
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
503 /* Return `safe-chars' property of coding system CODING. Don't check
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
504 validity of CODING. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
505
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
506 Lisp_Object
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
507 coding_safe_chars (coding)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
508 struct coding_system *coding;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
509 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
510 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
511
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
512 coding_spec = Fget (coding->symbol, Qcoding_system);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
513 plist = XVECTOR (coding_spec)->contents[3];
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
514 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
515 return (CHAR_TABLE_P (safe_chars) ? safe_chars : Qt);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
516 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
517
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
518 #define CODING_SAFE_CHAR_P(safe_chars, c) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
519 (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
520
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
521
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
522 /*** 2. Emacs internal format (emacs-mule) handlers ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
523
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
524 /* Emacs' internal format for representation of multiple character
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
525 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
526 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
527
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
528 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
529 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
530 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
531
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
532 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
533 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
534 code + 0x20).
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
535
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
536 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
537 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
538
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
539 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
540 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
541 `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
542 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
543 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
544 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
545 and position-code.
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
546
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
547 --- 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
548 character set range
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
549 ------------- -----
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
550 ascii 0x00..0x7F
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
551 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
552 eight-bit-graphic 0xA0..0xBF
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
553 ELSE 0x81..0x9D + [0xA0..0xFF]+
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
554 ---------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
555
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
556 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
557 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
558 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
559 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
560
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
561 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
562 form.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
563
37231
8a086ca42e43 comment
Dave Love <fx@gnu.org>
parents: 36650
diff changeset
564 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
565 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
566
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
567 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
568 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
569 where,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
570 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
571 composition_method),
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
572
37231
8a086ca42e43 comment
Dave Love <fx@gnu.org>
parents: 36650
diff changeset
573 BYTES is 0xA0 plus the byte length of these composition data,
8a086ca42e43 comment
Dave Love <fx@gnu.org>
parents: 36650
diff changeset
574
8a086ca42e43 comment
Dave Love <fx@gnu.org>
parents: 36650
diff changeset
575 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
576 data,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
577
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
578 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
579 rules encoded by two-byte of ASCII codes.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
580
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
581 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
582 also recognized as composition data on decoding.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
583
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
584 0x80 MSEQ ...
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
585 0x80 0xFF MSEQ RULE MSEQ RULE ... MSEQ
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
586
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
587 Here,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
588 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
589 ASCII: 0xA0 ASCII_CODE+0x80,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
590 other: LEADING_CODE+0x20 FOLLOWING-BYTE ...,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
591 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
592 represents a composition rule.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
593 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
594
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
595 enum emacs_code_class_type emacs_code_class[256];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
596
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
597 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
598 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
599 return CODING_CATEGORY_MASK_EMACS_MULE, else return 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
600
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
601 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
602 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
603 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
604 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
605 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
606 unsigned char c;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
607 int composing = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
608 /* 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
609 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
610 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
611
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
612 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
613 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
614 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
615
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
616 if (composing)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
617 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
618 if (c < 0xA0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
619 composing = 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
620 else if (c == 0xA0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
621 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
622 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
623 c &= 0x7F;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
624 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
625 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
626 c -= 0x20;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
627 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
628
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
629 if (c < 0x20)
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 (c == ISO_CODE_ESC || c == ISO_CODE_SI || c == ISO_CODE_SO)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
632 return 0;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
633 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
634 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
635 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
636 if (c == 0x80)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
637 /* 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
638 composing = 1;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
639 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
640 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
641 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
642 int bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
643
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
644 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
645 bytes))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
646 return 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
647 src = src_base + bytes;
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 }
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 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
652 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
653 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
654
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
655
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
656 /* 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
657
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
658 #define CODING_ADD_COMPOSITION_START(coding, start, method) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
659 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
660 struct composition_data *cmp_data = coding->cmp_data; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
661 int *data = cmp_data->data + cmp_data->used; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
662 coding->cmp_data_start = cmp_data->used; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
663 data[0] = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
664 data[1] = cmp_data->char_offset + start; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
665 data[3] = (int) method; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
666 cmp_data->used += 4; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
667 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
668
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
669 /* 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
670
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
671 #define CODING_ADD_COMPOSITION_END(coding, end) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
672 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
673 struct composition_data *cmp_data = coding->cmp_data; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
674 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
675 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
676 data[2] = cmp_data->char_offset + end; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
677 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
678
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
679 /* Record one COMPONENT (alternate character or composition rule). */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
680
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
681 #define CODING_ADD_COMPOSITION_COMPONENT(coding, component) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
682 (coding->cmp_data->data[coding->cmp_data->used++] = component)
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
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
685 /* 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
686 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
687
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
688 #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
689
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
690
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
691 /* 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
692 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
693 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
694 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
695
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
696 #define DECODE_EMACS_MULE_COMPOSITION_CHAR(c, p) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
697 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
698 int bytes; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
699 \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
700 c = SAFE_ONE_MORE_BYTE (); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
701 if (c < 0) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
702 break; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
703 if (CHAR_HEAD_P (c)) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
704 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
705 else if (c == 0xA0) \
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 c = SAFE_ONE_MORE_BYTE (); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
708 if (c < 0xA0) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
709 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
710 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
711 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
712 c -= 0xA0; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
713 *p++ = c; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
714 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
715 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
716 else if (BASE_LEADING_CODE_P (c - 0x20)) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
717 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
718 unsigned char *p0 = p; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
719 \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
720 c -= 0x20; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
721 *p++ = c; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
722 bytes = BYTES_BY_CHAR_HEAD (c); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
723 while (--bytes) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
724 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
725 c = SAFE_ONE_MORE_BYTE (); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
726 if (c < 0) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
727 break; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
728 *p++ = c; \
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 if (UNIBYTE_STR_AS_MULTIBYTE_P (p0, p - p0, bytes)) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
731 c = STRING_CHAR (p0, bytes); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
732 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
733 c = -1; \
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 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
736 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
737 } while (0)
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
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
740 /* 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
741 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
742 valid rule is found, set C to -1. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
743
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
744 #define DECODE_EMACS_MULE_COMPOSITION_RULE(c) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
745 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
746 c = SAFE_ONE_MORE_BYTE (); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
747 c -= 0xA0; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
748 if (c < 0 || c >= 81) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
749 c = -1; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
750 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
751 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
752 gref = c / 9, nref = c % 9; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
753 c = COMPOSITION_ENCODE_RULE (gref, nref); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
754 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
755 } while (0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
756
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
757
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
758 /* 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
759 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
760 of the composition in CODING->cmp_data.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
761
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
762 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
763 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
764 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
765 those characters at *DESTINATION in multibyte form.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
766
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
767 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
768 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
769 insufficient space in CODING->cmp_data, return 1.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
770 Otherwise, return consumed bytes in the source.
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
771
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
772 */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
773 static INLINE int
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
774 decode_composition_emacs_mule (coding, src, src_end,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
775 destination, dst_end, dst_bytes)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
776 struct coding_system *coding;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
777 unsigned char *src, *src_end, **destination, *dst_end;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
778 int dst_bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
779 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
780 unsigned char *dst = *destination;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
781 int method, data_len, nchars;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
782 unsigned char *src_base = src++;
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
783 /* Store components of composition. */
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
784 int component[COMPOSITION_DATA_MAX_BUNCH_LENGTH];
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
785 int ncomponent;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
786 /* 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
787 Emacs 20 style composition sequence. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
788 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
789 unsigned char *bufp = buf;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
790 int c, i, gref, nref;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
791
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
792 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
793 >= COMPOSITION_DATA_SIZE)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
794 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
795 coding->result = CODING_FINISH_INSUFFICIENT_CMP;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
796 return -1;
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 ONE_MORE_BYTE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
800 if (c - 0xF0 >= COMPOSITION_RELATIVE
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
801 && c - 0xF0 <= COMPOSITION_WITH_RULE_ALTCHARS)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
802 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
803 int with_rule;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
804
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
805 method = c - 0xF0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
806 with_rule = (method == COMPOSITION_WITH_RULE
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
807 || method == COMPOSITION_WITH_RULE_ALTCHARS);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
808 ONE_MORE_BYTE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
809 data_len = c - 0xA0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
810 if (data_len < 4
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
811 || src_base + data_len > src_end)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
812 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
813 ONE_MORE_BYTE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
814 nchars = c - 0xA0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
815 if (c < 1)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
816 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
817 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
818 {
43041
983767b5ccc0 (decode_composition_emacs_mule):
Richard M. Stallman <rms@gnu.org>
parents: 42661
diff changeset
819 /* 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
820 if (ncomponent >= COMPOSITION_DATA_MAX_BUNCH_LENGTH)
983767b5ccc0 (decode_composition_emacs_mule):
Richard M. Stallman <rms@gnu.org>
parents: 42661
diff changeset
821 return 0;
983767b5ccc0 (decode_composition_emacs_mule):
Richard M. Stallman <rms@gnu.org>
parents: 42661
diff changeset
822
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
823 if (ncomponent % 2 && with_rule)
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 (gref);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
826 gref -= 32;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
827 ONE_MORE_BYTE (nref);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
828 nref -= 32;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
829 c = COMPOSITION_ENCODE_RULE (gref, nref);
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 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
832 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
833 int bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
834 if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes))
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
835 c = STRING_CHAR (src, bytes);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
836 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
837 c = *src, bytes = 1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
838 src += bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
839 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
840 component[ncomponent] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
841 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
842 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
843 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
844 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
845 /* 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
846 the section 2 of this file. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
847 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
848 if (src == src_end
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
849 && !(coding->mode & CODING_MODE_LAST_BLOCK))
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
850 goto label_end_of_loop;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
851
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
852 src_end = src;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
853 src = src_base + 1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
854 if (c < 0xC0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
855 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
856 method = COMPOSITION_RELATIVE;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
857 for (ncomponent = 0; ncomponent < MAX_COMPOSITION_COMPONENTS;)
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 DECODE_EMACS_MULE_COMPOSITION_CHAR (c, bufp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
860 if (c < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
861 break;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
862 component[ncomponent++] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
863 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
864 if (ncomponent < 2)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
865 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
866 nchars = ncomponent;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
867 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
868 else if (c == 0xFF)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
869 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
870 method = COMPOSITION_WITH_RULE;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
871 src++;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
872 DECODE_EMACS_MULE_COMPOSITION_CHAR (c, bufp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
873 if (c < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
874 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
875 component[0] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
876 for (ncomponent = 1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
877 ncomponent < MAX_COMPOSITION_COMPONENTS * 2 - 1;)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
878 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
879 DECODE_EMACS_MULE_COMPOSITION_RULE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
880 if (c < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
881 break;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
882 component[ncomponent++] = c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
883 DECODE_EMACS_MULE_COMPOSITION_CHAR (c, bufp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
884 if (c < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
885 break;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
886 component[ncomponent++] = c;
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 if (ncomponent < 3)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
889 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
890 nchars = (ncomponent + 1) / 2;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
891 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
892 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
893 return 0;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
894 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
895
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
896 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
897 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
898 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
899 for (i = 0; i < ncomponent; i++)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
900 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
901 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
902 if (buf < bufp)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
903 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
904 unsigned char *p = buf;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
905 EMIT_BYTES (p, bufp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
906 *destination += bufp - buf;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
907 coding->produced_char += nchars;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
908 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
909 return (src - src_base);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
910 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
911 label_end_of_loop:
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
912 return -1;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
913 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
914
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
915 /* 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
916
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
917 static void
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
918 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
919 struct coding_system *coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
920 unsigned char *source, *destination;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
921 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
922 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
923 unsigned char *src = source;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
924 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
925 unsigned char *dst = destination;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
926 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
927 /* 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
928 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
929 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
930 character. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
931 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
932
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
933 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
934 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
935 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
936 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
937 int bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
938
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
939 if (*src == '\r')
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
940 {
33828
ef38af5ee8d2 (decode_coding_emacs_mule): Fix the case of
Eli Zaretskii <eliz@gnu.org>
parents: 32896
diff changeset
941 int c = *src++;
ef38af5ee8d2 (decode_coding_emacs_mule): Fix the case of
Eli Zaretskii <eliz@gnu.org>
parents: 32896
diff changeset
942
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
943 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
944 c = '\n';
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
945 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
946 {
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
947 ONE_MORE_BYTE (c);
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
948 if (c != '\n')
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
949 {
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
950 src--;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
951 c = '\r';
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
952 }
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
953 }
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
954 *dst++ = c;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
955 coding->produced_char++;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
956 continue;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
957 }
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
958 else if (*src == '\n')
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
959 {
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
960 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
961 || 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
962 && 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
963 {
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
964 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
965 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
966 }
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
967 *dst++ = *src++;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
968 coding->produced_char++;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
969 continue;
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
970 }
47698
77511decc5ff (decode_coding_emacs_mule): Check coding->cmp_data.
Kenichi Handa <handa@m17n.org>
parents: 47632
diff changeset
971 else if (*src == 0x80 && coding->cmp_data)
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
972 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
973 /* Start of composition data. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
974 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
975 &dst, dst_end,
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
976 dst_bytes);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
977 if (consumed < 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
978 goto label_end_of_loop;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
979 else if (consumed > 0)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
980 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
981 src += consumed;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
982 continue;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
983 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
984 bytes = CHAR_STRING (*src, tmp);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
985 p = tmp;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
986 src++;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
987 }
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
988 else if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes))
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
989 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
990 p = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
991 src += bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
992 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
993 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
994 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
995 bytes = CHAR_STRING (*src, tmp);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
996 p = tmp;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
997 src++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
998 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
999 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
1000 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1001 coding->result = CODING_FINISH_INSUFFICIENT_DST;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1002 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1003 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1004 while (bytes--) *dst++ = *p++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1005 coding->produced_char++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1006 }
32806
9502d0a5b2ad (decode_coding_emacs_mule): If coding->eol_type is CR
Eli Zaretskii <eliz@gnu.org>
parents: 32745
diff changeset
1007 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
1008 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
1009 coding->produced = dst - destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1010 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1011
34888
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 /* 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
1014 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
1015 CODING->cmp_data for the next call. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1016
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1017 #define ENCODE_COMPOSITION_EMACS_MULE(coding, data) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1018 do { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1019 unsigned char buf[1024], *p0 = buf, *p; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1020 int len = data[0]; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1021 int i; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1022 \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1023 buf[0] = 0x80; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1024 buf[1] = 0xF0 + data[3]; /* METHOD */ \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1025 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
1026 p = buf + 4; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1027 if (data[3] == COMPOSITION_WITH_RULE \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1028 || data[3] == COMPOSITION_WITH_RULE_ALTCHARS) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1029 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1030 p += CHAR_STRING (data[4], p); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1031 for (i = 5; i < len; i += 2) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1032 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1033 int gref, nref; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1034 COMPOSITION_DECODE_RULE (data[i], gref, nref); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1035 *p++ = 0x20 + gref; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1036 *p++ = 0x20 + nref; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1037 p += CHAR_STRING (data[i + 1], p); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1038 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1039 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1040 else \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1041 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1042 for (i = 4; i < len; i++) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1043 p += CHAR_STRING (data[i], p); \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1044 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1045 buf[2] = 0xA0 + (p - buf); /* COMPONENTS-BYTES */ \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1046 \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1047 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
1048 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1049 coding->result = CODING_FINISH_INSUFFICIENT_DST; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1050 goto label_end_of_loop; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1051 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1052 while (p0 < p) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1053 *dst++ = *p0++; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1054 coding->cmp_data_start += data[0]; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1055 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
1056 && coding->cmp_data->next) \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1057 { \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1058 coding->cmp_data = coding->cmp_data->next; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1059 coding->cmp_data_start = 0; \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1060 } \
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1061 } while (0)
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
1062
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1063
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
1064 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
1065 unsigned char *, int, int));
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1066
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1067 static void
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1068 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
1069 struct coding_system *coding;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1070 unsigned char *source, *destination;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1071 int src_bytes, dst_bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1072 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1073 unsigned char *src = source;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1074 unsigned char *src_end = source + src_bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1075 unsigned char *dst = destination;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1076 unsigned char *dst_end = destination + dst_bytes;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1077 unsigned char *src_base;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1078 int c;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1079 int char_offset;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1080 int *data;
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 Lisp_Object translation_table;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1083
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1084 translation_table = Qnil;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1085
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1086 /* 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
1087 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
1088 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1089 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
1090 return;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1091 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1092
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1093 char_offset = coding->cmp_data->char_offset;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1094 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
1095 while (1)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1096 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1097 src_base = src;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1098
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1099 /* 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
1100 composition in advance. */
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1101 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
1102 && char_offset + coding->consumed_char == data[1])
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1103 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1104 ENCODE_COMPOSITION_EMACS_MULE (coding, data);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1105 char_offset = coding->cmp_data->char_offset;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1106 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
1107 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1108
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1109 ONE_MORE_CHAR (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1110 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
1111 || coding->eol_type == CODING_EOL_CR))
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1112 {
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1113 if (coding->eol_type == CODING_EOL_CRLF)
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1114 EMIT_TWO_BYTES ('\r', c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1115 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1116 EMIT_ONE_BYTE ('\r');
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1117 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1118 else if (SINGLE_BYTE_CHAR_P (c))
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1119 EMIT_ONE_BYTE (c);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1120 else
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1121 EMIT_BYTES (src_base, src);
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1122 coding->consumed_char++;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1123 }
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1124 label_end_of_loop:
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1125 coding->consumed = src_base - source;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1126 coding->produced = coding->produced_char = dst - destination;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1127 return;
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1128 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1129
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1130
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1131 /*** 3. ISO2022 handlers ***/
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1132
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1133 /* 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
1134 Since the intention of this note is to help understand the
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1135 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
1136 SIMPLIFIED. For thorough understanding, please refer to the
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1137 original document of ISO2022. This is equivalent to the standard
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1138 ECMA-35, obtainable from <URL:http://www.ecma.ch/> (*).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1139
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1140 ISO2022 provides many mechanisms to encode several character sets
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1141 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
1142 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
1143 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
1144 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
1145 Significant Bit).
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1146
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1147 There are two kinds of character sets: control character sets and
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1148 graphic character sets. The former contain control characters such
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1149 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
1150 functions are also provided by escape sequences). The latter
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1151 contain graphic characters such as 'A' and '-'. Emacs recognizes
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1152 two control character sets and many graphic character sets.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1153
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1154 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
1155 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
1156 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
1157 - DIMENSION1_CHARS94
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1158 - DIMENSION1_CHARS96
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1159 - DIMENSION2_CHARS94
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1160 - DIMENSION2_CHARS96
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1161
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1162 In addition, each character set is assigned an identification tag,
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1163 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
1164 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
1165 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
1166 (0x30..0x3F are for private use only).
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1167
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1168 Note (*): ECMA = European Computer Manufacturers Association
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1169
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1170 Here are examples of graphic character sets [NAME(<F>)]:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1171 o DIMENSION1_CHARS94 -- ASCII('B'), right-half-of-JISX0201('I'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1172 o DIMENSION1_CHARS96 -- right-half-of-ISO8859-1('A'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1173 o DIMENSION2_CHARS94 -- GB2312('A'), JISX0208('B'), ...
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1174 o DIMENSION2_CHARS96 -- none for the moment
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1175
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1176 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
1177 C0 [0x00..0x1F] -- control character plane 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1178 GL [0x20..0x7F] -- graphic character plane 0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1179 C1 [0x80..0x9F] -- control character plane 1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1180 GR [0xA0..0xFF] -- graphic character plane 1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1181
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1182 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
1183 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
1184 - 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
1185 - 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
1186 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
1187 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
1188 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
1189 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
1190 defined to have corresponding escape sequences.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1191
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1192 A graphic character set is at first designated to one of four
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1193 graphic registers (G0 through G3), then these graphic registers are
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1194 invoked to GL or GR. These designations and invocations can be
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1195 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
1196 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
1197 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
1198 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
1199
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1200 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
1201 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
1202 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
1203 be used.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1204
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1205 There are two ways of invocation: locking-shift and single-shift.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1206 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
1207 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
1208 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
1209 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
1210 escape sequences:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1211
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1212 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1213 abbrev function cntrl escape seq description
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1214 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1215 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
1216 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
1217 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
1218 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
1219 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
1220 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
1221 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
1222 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
1223 SS3 (single-shift-3) 0x8F ESC 'O' invoke G3 for one char
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1224 ----------------------------------------------------------------------
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1225 (*) 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
1226
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1227 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
1228 ISO_CODE_XXX in `coding.h'.
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1229
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1230 Designations are done by the following escape sequences:
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 escape sequence description
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1233 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1234 ESC '(' <F> designate DIMENSION1_CHARS94<F> to G0
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1235 ESC ')' <F> designate DIMENSION1_CHARS94<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1236 ESC '*' <F> designate DIMENSION1_CHARS94<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1237 ESC '+' <F> designate DIMENSION1_CHARS94<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1238 ESC ',' <F> designate DIMENSION1_CHARS96<F> to G0 (*)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1239 ESC '-' <F> designate DIMENSION1_CHARS96<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1240 ESC '.' <F> designate DIMENSION1_CHARS96<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1241 ESC '/' <F> designate DIMENSION1_CHARS96<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1242 ESC '$' '(' <F> designate DIMENSION2_CHARS94<F> to G0 (**)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1243 ESC '$' ')' <F> designate DIMENSION2_CHARS94<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1244 ESC '$' '*' <F> designate DIMENSION2_CHARS94<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1245 ESC '$' '+' <F> designate DIMENSION2_CHARS94<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1246 ESC '$' ',' <F> designate DIMENSION2_CHARS96<F> to G0 (*)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1247 ESC '$' '-' <F> designate DIMENSION2_CHARS96<F> to G1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1248 ESC '$' '.' <F> designate DIMENSION2_CHARS96<F> to G2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1249 ESC '$' '/' <F> designate DIMENSION2_CHARS96<F> to G3
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1250 ----------------------------------------------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1251
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1252 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
1253 of dimension 1, chars 94, and final character <F>, etc...
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1254
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1255 Note (*): Although these designations are not allowed in ISO2022,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1256 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
1257 CHARS96 character sets in a coding system which is characterized as
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1258 7-bit environment, non-locking-shift, and non-single-shift.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1259
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1260 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
1261 '(' can be omitted. We refer to this as "short-form" hereafter.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1262
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1263 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
1264 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
1265 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
1266 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
1267 (used in Korean Internet), EUC (Extended UNIX Code, used in Asian
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1268 localized platforms), and all of these are variants of ISO2022.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1269
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1270 In addition to the above, Emacs handles two more kinds of escape
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1271 sequences: ISO6429's direction specification and Emacs' private
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1272 sequence for specifying character composition.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1273
24425
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1274 ISO6429's direction specification takes the following form:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1275 o CSI ']' -- end of the current direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1276 o CSI '0' ']' -- end of the current direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1277 o CSI '1' ']' -- start of left-to-right text
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1278 o CSI '2' ']' -- start of right-to-left text
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1279 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
1280 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
1281
61c6b3be1d51 Comment for ISO 2022 encoding mechanism modified.
Kenichi Handa <handa@m17n.org>
parents: 24344
diff changeset
1282 Character composition specification takes the following form:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1283 o ESC '0' -- start relative composition
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1284 o ESC '1' -- end composition
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1285 o ESC '2' -- start rule-base composition (*)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1286 o ESC '3' -- start relative composition with alternate chars (**)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1287 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
1288 Since these are not standard escape sequences of any ISO standard,
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1289 the use of them with these meanings is restricted to Emacs only.
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1290
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1291 (*) 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
1292 but the newer versions can safely decode it.
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1293 (**) 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
1294 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
1295
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1296 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
1297 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
1298
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1299 COMPOSITION_RELATIVE:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1300 ESC 0 CHAR [ CHAR ] ESC 1
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
1301 COMPOSITION_WITH_RULE:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1302 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
1303 COMPOSITION_WITH_ALTCHARS:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1304 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
1305 COMPOSITION_WITH_RULE_ALTCHARS:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1306 ESC 4 ALTCHAR [ RULE ALTCHAR ] ESC 0 CHAR [ CHAR ] ESC 1 */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1307
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1308 enum iso_code_class_type iso_code_class[256];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1309
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1310 #define CHARSET_OK(idx, charset, c) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1311 (coding_system_table[idx] \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1312 && (charset == CHARSET_ASCII \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1313 || (safe_chars = coding_safe_chars (coding_system_table[idx]), \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1314 CODING_SAFE_CHAR_P (safe_chars, c))) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1315 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding_system_table[idx], \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1316 charset) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1317 != CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1318
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1319 #define SHIFT_OUT_OK(idx) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1320 (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
1321
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1322 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
1323 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
1324 integer in which appropriate flag bits any of:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1325 CODING_CATEGORY_MASK_ISO_7
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1326 CODING_CATEGORY_MASK_ISO_7_TIGHT
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1327 CODING_CATEGORY_MASK_ISO_8_1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1328 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
1329 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
1330 CODING_CATEGORY_MASK_ISO_8_ELSE
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1331 are set. If a code which should never appear in ISO2022 is found,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1332 returns 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1333
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1334 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1335 detect_coding_iso2022 (src, src_end, multibytep)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1336 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1337 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1338 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1339 int mask = CODING_CATEGORY_MASK_ISO;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1340 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
1341 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
1342 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
1343 /* 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
1344 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
1345 struct coding_system *coding = &dummy_coding;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1346 Lisp_Object safe_chars;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1347
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1348 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
1349 while (mask && src < src_end)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1350 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1351 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
1352 retry:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1353 switch (c)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1354 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1355 case ISO_CODE_ESC:
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1356 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1357 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1358 single_shifting = 0;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1359 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
1360 if (c >= '(' && c <= '/')
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1361 {
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1362 /* 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
1363 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
1364 if (c1 < ' ' || c1 >= 0x80
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1365 || (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
1366 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1367 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1368 reg[(c - '(') % 4] = charset;
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1369 }
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1370 else if (c == '$')
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1371 {
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1372 /* 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
1373 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
1374 if (c >= '@' && c <= 'B')
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1375 /* 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
1376 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
1377 else if (c >= '(' && c <= '/')
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
1378 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1379 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
1380 if (c1 < ' ' || c1 >= 0x80
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1381 || (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
1382 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1383 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1384 reg[(c - '(') % 4] = charset;
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
1385 }
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1386 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1387 /* Invalid designation sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1388 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1389 }
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1390 else if (c == 'N' || c == 'O')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1391 {
23116
6736da064f4a (detect_coding_iso2022): Handle ESC N and ESC O
Kenichi Handa <handa@m17n.org>
parents: 23089
diff changeset
1392 /* 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
1393 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
1394 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1395 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1396 else if (c >= '0' && c <= '4')
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1397 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1398 /* ESC <Fp> for start/end composition. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1399 mask_found |= CODING_CATEGORY_MASK_ISO;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1400 break;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1401 }
19134
8fa6e23f8d22 (detect_coding_iso2022): Do not exclude posibility of
Kenichi Handa <handa@m17n.org>
parents: 19118
diff changeset
1402 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1403 /* Invalid escape sequence. Just ignore. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1404 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1405
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1406 /* 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
1407 mask &= ~CODING_CATEGORY_MASK_ISO_8BIT;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1408 c = MAKE_CHAR (charset, 0, 0);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1409 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
1410 mask_found |= CODING_CATEGORY_MASK_ISO_7;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1411 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1412 mask &= ~CODING_CATEGORY_MASK_ISO_7;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1413 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
1414 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
1415 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1416 mask &= ~CODING_CATEGORY_MASK_ISO_7_TIGHT;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1417 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
1418 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
1419 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1420 mask &= ~CODING_CATEGORY_MASK_ISO_7_ELSE;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1421 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
1422 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
1423 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1424 mask &= ~CODING_CATEGORY_MASK_ISO_8_ELSE;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1425 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1426
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1427 case ISO_CODE_SO:
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1428 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1429 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1430 single_shifting = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1431 if (shift_out == 0
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1432 && (reg[1] >= 0
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1433 || 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
1434 || 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
1435 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1436 /* Locking shift out. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1437 mask &= ~CODING_CATEGORY_MASK_ISO_7BIT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1438 mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1439 }
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
1440 break;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
1441
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1442 case ISO_CODE_SI:
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1443 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1444 break;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1445 single_shifting = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1446 if (shift_out == 1)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1447 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1448 /* Locking shift in. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1449 mask &= ~CODING_CATEGORY_MASK_ISO_7BIT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1450 mask_found |= CODING_CATEGORY_MASK_ISO_SHIFT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1451 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1452 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1453
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1454 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
1455 single_shifting = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1456 case ISO_CODE_SS2:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1457 case ISO_CODE_SS3:
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1458 {
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1459 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
1460
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1461 if (inhibit_iso_escape_detection)
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
1462 break;
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
1463 if (c != ISO_CODE_CSI)
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
1464 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1465 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
1466 & 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
1467 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
1468 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
1469 & 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
1470 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
1471 single_shifting = 1;
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
1472 }
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1473 if (VECTORP (Vlatin_extra_code_table)
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1474 && !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
1475 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1476 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
1477 & CODING_FLAG_ISO_LATIN_EXTRA)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1478 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
1479 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
1480 & CODING_FLAG_ISO_LATIN_EXTRA)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1481 newmask |= CODING_CATEGORY_MASK_ISO_8_2;
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1482 }
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1483 mask &= newmask;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1484 mask_found |= newmask;
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1485 }
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1486 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1487
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1488 default:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1489 if (c < 0x80)
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1490 {
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1491 single_shifting = 0;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1492 break;
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1493 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1494 else if (c < 0xA0)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
1495 {
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1496 single_shifting = 0;
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1497 if (VECTORP (Vlatin_extra_code_table)
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1498 && !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
1499 {
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1500 int newmask = 0;
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1501
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1502 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
1503 & CODING_FLAG_ISO_LATIN_EXTRA)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1504 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
1505 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
1506 & CODING_FLAG_ISO_LATIN_EXTRA)
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1507 newmask |= CODING_CATEGORY_MASK_ISO_8_2;
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1508 mask &= newmask;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1509 mask_found |= newmask;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
1510 }
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1511 else
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
1512 return 0;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
1513 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1514 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1515 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1516 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
1517 | CODING_CATEGORY_MASK_ISO_7_ELSE);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1518 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
1519 /* 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
1520 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
1521 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
1522 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
1523 if (!single_shifting
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1524 && 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
1525 {
29299
b33b38d81020 (detect_coding_iso2022): Fix code for checking
Kenichi Handa <handa@m17n.org>
parents: 29275
diff changeset
1526 int i = 1;
46702
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1527
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1528 c = -1;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1529 while (src < src_end)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1530 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
1531 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
1532 if (c < 0xA0)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1533 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1534 i++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1535 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1536
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1537 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
1538 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
1539 else
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1540 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
1541 if (c >= 0)
2673ae55a6f9 (detect_coding_iso2022): While checking a byte sequence
Kenichi Handa <handa@m17n.org>
parents: 46548
diff changeset
1542 /* 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
1543 goto retry;
23088
45c36d636f66 (detect_coding_iso2022): Don't check the byte length of
Kenichi Handa <handa@m17n.org>
parents: 23082
diff changeset
1544 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1545 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1546 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1547 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1548 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1549 label_end_of_loop:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1550 return (mask & mask_found);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1551 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1552
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1553 /* 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
1554 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
1555 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
1556 returned the translated code. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1557
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1558 #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
1559 (NILP (translation_table) \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1560 ? 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
1561 : translate_char (translation_table, -1, charset, c1, c2))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1562
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1563 /* Set designation state into CODING. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1564 #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
1565 do { \
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1566 int charset, c; \
23881
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1567 \
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1568 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
1569 goto label_invalid_code; \
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1570 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
1571 make_number (chars), \
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
1572 make_number (final_char)); \
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1573 c = MAKE_CHAR (charset, 0, 0); \
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1574 if (charset >= 0 \
21331
4c89837392b3 (CHARSET_OK): Don't reject safe charsets.
Kenichi Handa <handa@m17n.org>
parents: 21321
diff changeset
1575 && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) == reg \
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1576 || 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
1577 { \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1578 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
1579 && reg == 0 \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1580 && charset == CHARSET_ASCII) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1581 { \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1582 /* 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
1583 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
1584 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
1585 goto label_invalid_code; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1586 } \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1587 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
1588 if ((coding->mode & CODING_MODE_DIRECTION) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1589 && CHARSET_REVERSE_CHARSET (charset) >= 0) \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1590 charset = CHARSET_REVERSE_CHARSET (charset); \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1591 CODING_SPEC_ISO_DESIGNATION (coding, reg) = charset; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1592 } \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1593 else \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1594 { \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1595 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
1596 goto label_invalid_code; \
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1597 } \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1598 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1599
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1600 /* Allocate a memory block for storing information about compositions.
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1601 The block is chained to the already allocated blocks. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1602
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1603 void
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1604 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
1605 struct coding_system *coding;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1606 int char_offset;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1607 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1608 struct composition_data *cmp_data
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1609 = (struct composition_data *) xmalloc (sizeof *cmp_data);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1610
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1611 cmp_data->char_offset = char_offset;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1612 cmp_data->used = 0;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1613 cmp_data->prev = coding->cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1614 cmp_data->next = NULL;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1615 if (coding->cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1616 coding->cmp_data->next = cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1617 coding->cmp_data = cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1618 coding->cmp_data_start = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1619 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1620
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
1621 /* 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
1622 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
1623 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
1624 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
1625 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
1626 */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1627
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1628 #define DECODE_COMPOSITION_START(c1) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1629 do { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1630 if (coding->composing == COMPOSITION_DISABLED) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1631 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1632 *dst++ = ISO_CODE_ESC; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1633 *dst++ = c1 & 0x7f; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1634 coding->produced_char += 2; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1635 } \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1636 else if (!COMPOSING_P (coding)) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1637 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1638 /* 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
1639 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
1640 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
1641 current decoding loop, allocate one more memory block for \
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
1642 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
1643 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
1644 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
1645 if (!coding->cmp_data \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1646 || (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
1647 >= COMPOSITION_DATA_SIZE)) \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1648 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1649 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
1650 goto label_end_of_loop; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1651 } \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1652 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
1653 : c1 == '2' ? COMPOSITION_WITH_RULE \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1654 : c1 == '3' ? COMPOSITION_WITH_ALTCHARS \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1655 : COMPOSITION_WITH_RULE_ALTCHARS); \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1656 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
1657 coding->composing); \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1658 coding->composition_rule_follows = 0; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1659 } \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1660 else \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1661 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1662 /* 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
1663 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
1664 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
1665 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
1666 || 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
1667 { \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1668 coding->composing = COMPOSITION_RELATIVE; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1669 coding->composition_rule_follows = 0; \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1670 } \
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
1671 } \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1672 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1673
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
1674 /* Handle composition end sequence ESC 1. */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1675
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1676 #define DECODE_COMPOSITION_END(c1) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1677 do { \
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
1678 if (! COMPOSING_P (coding)) \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1679 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1680 *dst++ = ISO_CODE_ESC; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1681 *dst++ = c1; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1682 coding->produced_char += 2; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1683 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1684 else \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1685 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1686 CODING_ADD_COMPOSITION_END (coding, coding->produced_char); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1687 coding->composing = COMPOSITION_NO; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1688 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1689 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1690
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1691 /* 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
1692 from SRC) and store one encoded composition rule in
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1693 coding->cmp_data. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1694
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1695 #define DECODE_COMPOSITION_RULE(c1) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1696 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1697 int rule = 0; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1698 (c1) -= 32; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1699 if (c1 < 81) /* old format (before ver.21) */ \
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 int gref = (c1) / 9; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1702 int nref = (c1) % 9; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1703 if (gref == 4) gref = 10; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1704 if (nref == 4) nref = 10; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1705 rule = COMPOSITION_ENCODE_RULE (gref, nref); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1706 } \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1707 else if (c1 < 93) /* new format (after ver.21) */ \
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1708 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1709 ONE_MORE_BYTE (c2); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1710 rule = COMPOSITION_ENCODE_RULE (c1 - 81, c2 - 32); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1711 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1712 CODING_ADD_COMPOSITION_COMPONENT (coding, rule); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1713 coding->composition_rule_follows = 0; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1714 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1715
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1716
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1717 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions". */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1718
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1719 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1720 decode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1721 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1722 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1723 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1724 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1725 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1726 unsigned char *src_end = source + src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1727 unsigned char *dst = destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1728 unsigned char *dst_end = destination + dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1729 /* Charsets invoked to graphic plane 0 and 1 respectively. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1730 int charset0 = CODING_SPEC_ISO_PLANE_CHARSET (coding, 0);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1731 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
1732 /* 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
1733 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
1734 (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
1735 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
1736 EMIT_CHAR). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1737 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1738 int c, charset;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1739 Lisp_Object translation_table;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1740 Lisp_Object safe_chars;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1741
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
1742 safe_chars = coding_safe_chars (coding);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1743
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1744 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
1745 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1746 else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1747 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1748 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
1749 if (NILP (translation_table))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1750 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
1751 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1752
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1753 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
1754
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1755 while (1)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1756 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1757 int c1, c2;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1758
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1759 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1760 ONE_MORE_BYTE (c1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1761
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1762 /* We produce no character or one character. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1763 switch (iso_code_class [c1])
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1764 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1765 case ISO_0x20_or_0x7F:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1766 if (COMPOSING_P (coding) && coding->composition_rule_follows)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1767 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1768 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
1769 continue;
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 if (charset0 < 0 || CHARSET_CHARS (charset0) == 94)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1772 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1773 /* 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
1774 charset = CHARSET_ASCII;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1775 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1776 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1777 /* This is a graphic character, we fall down ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1778
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1779 case ISO_graphic_plane_0:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1780 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
1781 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1782 DECODE_COMPOSITION_RULE (c1);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1783 continue;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1784 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1785 charset = charset0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1786 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1787
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1788 case ISO_0xA0_or_0xFF:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1789 if (charset1 < 0 || CHARSET_CHARS (charset1) == 94
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1790 || 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
1791 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1792 /* This is a graphic character, we fall down ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1793
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1794 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
1795 if (charset1 < 0)
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
1796 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
1797 charset = charset1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1798 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1799
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1800 case ISO_control_0:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1801 if (COMPOSING_P (coding))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1802 DECODE_COMPOSITION_END ('1');
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1803
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1804 /* All ISO2022 control characters in this class have the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1805 same representation in Emacs internal format. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1806 if (c1 == '\n'
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1807 && (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1808 && (coding->eol_type == CODING_EOL_CR
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1809 || coding->eol_type == CODING_EOL_CRLF))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1810 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1811 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
1812 goto label_end_of_loop;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1813 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1814 charset = CHARSET_ASCII;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1815 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1816
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1817 case ISO_control_1:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1818 if (COMPOSING_P (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1819 DECODE_COMPOSITION_END ('1');
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1820 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1821
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1822 case ISO_carriage_return:
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1823 if (COMPOSING_P (coding))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1824 DECODE_COMPOSITION_END ('1');
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1825
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1826 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
1827 c1 = '\n';
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1828 else if (coding->eol_type == CODING_EOL_CRLF)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1829 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1830 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
1831 if (c1 != ISO_CODE_LF)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1832 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1833 src--;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1834 c1 = '\r';
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1835 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1836 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1837 charset = CHARSET_ASCII;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1838 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1839
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1840 case ISO_shift_out:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1841 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
1842 || CODING_SPEC_ISO_DESIGNATION (coding, 1) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1843 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1844 CODING_SPEC_ISO_INVOCATION (coding, 0) = 1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1845 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
1846 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1847
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1848 case ISO_shift_in:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1849 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
1850 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1851 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1852 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
1853 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1854
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1855 case ISO_single_shift_2_7:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1856 case ISO_single_shift_2:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1857 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
1858 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1859 /* SS2 is handled as an escape sequence of ESC 'N' */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1860 c1 = 'N';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1861 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1862
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1863 case ISO_single_shift_3:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1864 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
1865 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1866 /* SS2 is handled as an escape sequence of ESC 'O' */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1867 c1 = 'O';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1868 goto label_escape_sequence;
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_control_sequence_introducer:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1871 /* CSI is handled as an escape sequence of ESC '[' ... */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1872 c1 = '[';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1873 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1874
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1875 case ISO_escape:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1876 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1877 label_escape_sequence:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1878 /* Escape sequences handled by Emacs are invocation,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1879 designation, direction specification, and character
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1880 composition specification. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1881 switch (c1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1882 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1883 case '&': /* revision of following character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1884 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1885 if (!(c1 >= '@' && c1 <= '~'))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1886 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1887 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1888 if (c1 != ISO_CODE_ESC)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1889 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1890 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1891 goto label_escape_sequence;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1892
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1893 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
1894 if (! (coding->flags & CODING_FLAG_ISO_DESIGNATION))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1895 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1896 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1897 if (c1 >= '@' && c1 <= 'B')
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1898 { /* 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
1899 or JISX0208.1980 */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1900 DECODE_DESIGNATION (0, 2, 94, c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1901 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1902 else if (c1 >= 0x28 && c1 <= 0x2B)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1903 { /* designation of DIMENSION2_CHARS94 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1904 ONE_MORE_BYTE (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1905 DECODE_DESIGNATION (c1 - 0x28, 2, 94, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1906 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1907 else if (c1 >= 0x2C && c1 <= 0x2F)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1908 { /* designation of DIMENSION2_CHARS96 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1909 ONE_MORE_BYTE (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1910 DECODE_DESIGNATION (c1 - 0x2C, 2, 96, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1911 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1912 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1913 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
1914 /* 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
1915 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
1916 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
1917 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1918
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1919 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
1920 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
1921 || CODING_SPEC_ISO_DESIGNATION (coding, 2) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1922 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1923 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
1924 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
1925 continue;
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 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
1928 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
1929 || CODING_SPEC_ISO_DESIGNATION (coding, 3) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1930 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1931 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
1932 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
1933 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1934
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1935 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
1936 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
1937 || CODING_SPEC_ISO_DESIGNATION (coding, 2) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1938 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
1939 charset = CODING_SPEC_ISO_DESIGNATION (coding, 2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1940 ONE_MORE_BYTE (c1);
30578
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
1941 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
1942 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1943 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1944
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1945 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
1946 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
1947 || CODING_SPEC_ISO_DESIGNATION (coding, 3) < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1948 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
1949 charset = CODING_SPEC_ISO_DESIGNATION (coding, 3);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1950 ONE_MORE_BYTE (c1);
30578
705b94e152b1 (decode_coding_iso2022): More strict check for handling single
Kenichi Handa <handa@m17n.org>
parents: 30487
diff changeset
1951 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
1952 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1953 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1954
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1955 case '0': case '2': case '3': case '4': /* start composition */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1956 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
1957 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1958
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1959 case '1': /* end composition */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
1960 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
1961 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1962
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1963 case '[': /* specification of direction */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1964 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
1965 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1966 /* 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
1967 So, `coding->mode & CODING_MODE_DIRECTION' zero means
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
1968 left-to-right, and nonzero means right-to-left. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1969 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1970 switch (c1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1971 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1972 case ']': /* end of the current direction */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1973 coding->mode &= ~CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1974
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1975 case '0': /* end of the current direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1976 case '1': /* start of left-to-right direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1977 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1978 if (c1 == ']')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1979 coding->mode &= ~CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1980 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1981 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1982 break;
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 '2': /* start of right-to-left direction */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1985 ONE_MORE_BYTE (c1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1986 if (c1 == ']')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1987 coding->mode |= CODING_MODE_DIRECTION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1988 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1989 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1990 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1991
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1992 default:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1993 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1994 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
1995 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1996
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1997 default:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1998 if (! (coding->flags & CODING_FLAG_ISO_DESIGNATION))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
1999 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2000 if (c1 >= 0x28 && c1 <= 0x2B)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2001 { /* designation of DIMENSION1_CHARS94 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2002 ONE_MORE_BYTE (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2003 DECODE_DESIGNATION (c1 - 0x28, 1, 94, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2004 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2005 else if (c1 >= 0x2C && c1 <= 0x2F)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2006 { /* designation of DIMENSION1_CHARS96 character set */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2007 ONE_MORE_BYTE (c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2008 DECODE_DESIGNATION (c1 - 0x2C, 1, 96, c2);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2009 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2010 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2011 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2012 /* 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
2013 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
2014 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
2015 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2016 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2017 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2018
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2019 /* 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
2020 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
2021 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
2022 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
2023 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2024 ONE_MORE_BYTE (c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2025 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
2026 /* 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
2027 goto label_invalid_code;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2028 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2029 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
2030 EMIT_CHAR (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2031 continue;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2032
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2033 label_invalid_code:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2034 coding->errors++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2035 if (COMPOSING_P (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2036 DECODE_COMPOSITION_END ('1');
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2037 src = src_base;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2038 c = *src++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2039 EMIT_CHAR (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2040 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2041
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2042 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2043 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
2044 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
2045 return;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2046 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2047
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2048
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2049 /* ISO2022 encoding stuff. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2050
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2051 /*
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2052 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
2053 specify more details. In Emacs, each ISO2022 coding system
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2054 variant has the following specifications:
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2055 1. Initial designation to G0 through G3.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2056 2. Allows short-form designation?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2057 3. ASCII should be designated to G0 before control characters?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2058 4. ASCII should be designated to G0 at end of line?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2059 5. 7-bit environment or 8-bit environment?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2060 6. Use locking-shift?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2061 7. Use Single-shift?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2062 And the following two are only for Japanese:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2063 8. Use ASCII in place of JIS0201-1976-Roman?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2064 9. Use JISX0208-1983 in place of JISX0208-1978?
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2065 These specifications are encoded in `coding->flags' as flag bits
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2066 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
2067 details.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2068 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2069
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2070 /* 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
2071 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
2072 '@', '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
2073 designation sequence of short-form. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2074
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2075 #define ENCODE_DESIGNATION(charset, reg, coding) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2076 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2077 unsigned char final_char = CHARSET_ISO_FINAL_CHAR (charset); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2078 char *intermediate_char_94 = "()*+"; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2079 char *intermediate_char_96 = ",-./"; \
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
2080 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
2081 \
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
2082 if (revision < 255) \
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
2083 { \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2084 *dst++ = ISO_CODE_ESC; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2085 *dst++ = '&'; \
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
2086 *dst++ = '@' + revision; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2087 } \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2088 *dst++ = ISO_CODE_ESC; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2089 if (CHARSET_DIMENSION (charset) == 1) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2090 { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2091 if (CHARSET_CHARS (charset) == 94) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2092 *dst++ = (unsigned char) (intermediate_char_94[reg]); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2093 else \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2094 *dst++ = (unsigned char) (intermediate_char_96[reg]); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2095 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2096 else \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2097 { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2098 *dst++ = '$'; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2099 if (CHARSET_CHARS (charset) == 94) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2100 { \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2101 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
2102 || reg != 0 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2103 || final_char < '@' || final_char > 'B') \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2104 *dst++ = (unsigned char) (intermediate_char_94[reg]); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2105 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2106 else \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2107 *dst++ = (unsigned char) (intermediate_char_96[reg]); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2108 } \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2109 *dst++ = final_char; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2110 CODING_SPEC_ISO_DESIGNATION (coding, reg) = charset; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2111 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2112
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2113 /* The following two macros produce codes (control character or escape
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2114 sequence) for ISO2022 single-shift functions (single-shift-2 and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2115 single-shift-3). */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2116
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2117 #define ENCODE_SINGLE_SHIFT_2 \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2118 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2119 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2120 *dst++ = ISO_CODE_ESC, *dst++ = 'N'; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2121 else \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2122 *dst++ = ISO_CODE_SS2; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2123 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2124 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2125
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2126 #define ENCODE_SINGLE_SHIFT_3 \
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2127 do { \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2128 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
2129 *dst++ = ISO_CODE_ESC, *dst++ = 'O'; \
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2130 else \
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2131 *dst++ = ISO_CODE_SS3; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2132 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2133 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2134
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2135 /* The following four macros produce codes (control character or
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2136 escape sequence) for ISO2022 locking-shift functions (shift-in,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2137 shift-out, locking-shift-2, and locking-shift-3). */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2138
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2139 #define ENCODE_SHIFT_IN \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2140 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2141 *dst++ = ISO_CODE_SI; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2142 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2143 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2144
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2145 #define ENCODE_SHIFT_OUT \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2146 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2147 *dst++ = ISO_CODE_SO; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2148 CODING_SPEC_ISO_INVOCATION (coding, 0) = 1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2149 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2150
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2151 #define ENCODE_LOCKING_SHIFT_2 \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2152 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2153 *dst++ = ISO_CODE_ESC, *dst++ = 'n'; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2154 CODING_SPEC_ISO_INVOCATION (coding, 0) = 2; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2155 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2156
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2157 #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
2158 do { \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2159 *dst++ = ISO_CODE_ESC, *dst++ = 'o'; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2160 CODING_SPEC_ISO_INVOCATION (coding, 0) = 3; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2161 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2162
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2163 /* Produce codes for a DIMENSION1 character whose character set is
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2164 CHARSET and whose position-code is C1. Designation and invocation
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2165 sequences are also produced in advance if necessary. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2166
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2167 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2168 do { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2169 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2170 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2171 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2172 *dst++ = c1 & 0x7F; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2173 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2174 *dst++ = c1 | 0x80; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2175 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2176 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2177 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2178 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
2179 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2180 *dst++ = c1 & 0x7F; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2181 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2182 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2183 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
2184 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2185 *dst++ = c1 | 0x80; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2186 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2187 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2188 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2189 /* 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
2190 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
2191 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
2192 character. */ \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2193 dst = encode_invocation_designation (charset, coding, dst); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2194 } while (1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2195
18766
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2196 /* Produce codes for a DIMENSION2 character whose character set is
ac2e7e21abb0 Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 18747
diff changeset
2197 CHARSET and whose position-codes are C1 and C2. Designation and
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2198 invocation codes are also produced in advance if necessary. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2199
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2200 #define ENCODE_ISO_CHARACTER_DIMENSION2(charset, c1, c2) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2201 do { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2202 if (CODING_SPEC_ISO_SINGLE_SHIFTING (coding)) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2203 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2204 if (coding->flags & CODING_FLAG_ISO_SEVEN_BITS) \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2205 *dst++ = c1 & 0x7F, *dst++ = c2 & 0x7F; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2206 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2207 *dst++ = c1 | 0x80, *dst++ = c2 | 0x80; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2208 CODING_SPEC_ISO_SINGLE_SHIFTING (coding) = 0; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2209 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2210 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2211 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
2212 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2213 *dst++ = c1 & 0x7F, *dst++= c2 & 0x7F; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2214 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2215 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2216 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
2217 { \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2218 *dst++ = c1 | 0x80, *dst++= c2 | 0x80; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2219 break; \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2220 } \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2221 else \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2222 /* 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
2223 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
2224 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
2225 character. */ \
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
2226 dst = encode_invocation_designation (charset, coding, dst); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2227 } while (1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2228
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2229 #define ENCODE_ISO_CHARACTER(c) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2230 do { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2231 int charset, c1, c2; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2232 \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2233 SPLIT_CHAR (c, charset, c1, c2); \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2234 if (CHARSET_DEFINED_P (charset)) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2235 { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2236 if (CHARSET_DIMENSION (charset) == 1) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2237 { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2238 if (charset == CHARSET_ASCII \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2239 && coding->flags & CODING_FLAG_ISO_USE_ROMAN) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2240 charset = charset_latin_jisx0201; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2241 ENCODE_ISO_CHARACTER_DIMENSION1 (charset, c1); \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2242 } \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2243 else \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2244 { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2245 if (charset == charset_jisx0208 \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2246 && coding->flags & CODING_FLAG_ISO_USE_OLDJIS) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2247 charset = charset_jisx0208_1978; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2248 ENCODE_ISO_CHARACTER_DIMENSION2 (charset, c1, c2); \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2249 } \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2250 } \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2251 else \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2252 { \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2253 *dst++ = c1; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2254 if (c2 >= 0) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2255 *dst++ = c2; \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2256 } \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2257 } while (0)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2258
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2259
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2260 /* 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
2261
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2262 #define ENCODE_UNSAFE_CHARACTER(c) \
24506
219c99669e4b (ENCODE_ISO_CHARACTER): Check validity of CHARSET. If
Kenichi Handa <handa@m17n.org>
parents: 24460
diff changeset
2263 do { \
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2264 ENCODE_ISO_CHARACTER (CODING_INHIBIT_CHARACTER_SUBSTITUTION); \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2265 if (CHARSET_WIDTH (CHAR_CHARSET (c)) > 1) \
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2266 ENCODE_ISO_CHARACTER (CODING_INHIBIT_CHARACTER_SUBSTITUTION); \
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
2267 } while (0)
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2268
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2269
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2270 /* Produce designation and invocation codes at a place pointed by DST
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2271 to use CHARSET. The element `spec.iso2022' of *CODING is updated.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2272 Return new DST. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2273
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2274 unsigned char *
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2275 encode_invocation_designation (charset, coding, dst)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2276 int charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2277 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2278 unsigned char *dst;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2279 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2280 int reg; /* graphic register number */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2281
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2282 /* At first, check designations. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2283 for (reg = 0; reg < 4; reg++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2284 if (charset == CODING_SPEC_ISO_DESIGNATION (coding, reg))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2285 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2286
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2287 if (reg >= 4)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2288 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2289 /* CHARSET is not yet designated to any graphic registers. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2290 /* At first check the requested designation. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2291 reg = CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
2292 if (reg == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION)
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
2293 /* Since CHARSET requests no special designation, designate it
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
2294 to graphic register 0. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2295 reg = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2296
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2297 ENCODE_DESIGNATION (charset, reg, coding);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2298 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2299
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2300 if (CODING_SPEC_ISO_INVOCATION (coding, 0) != reg
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2301 && CODING_SPEC_ISO_INVOCATION (coding, 1) != reg)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2302 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2303 /* Since the graphic register REG is not invoked to any graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2304 planes, invoke it to graphic plane 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2305 switch (reg)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2306 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2307 case 0: /* graphic register 0 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2308 ENCODE_SHIFT_IN;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2309 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2310
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2311 case 1: /* graphic register 1 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2312 ENCODE_SHIFT_OUT;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2313 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2314
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2315 case 2: /* graphic register 2 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2316 if (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2317 ENCODE_SINGLE_SHIFT_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2318 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2319 ENCODE_LOCKING_SHIFT_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2320 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2321
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2322 case 3: /* graphic register 3 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2323 if (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2324 ENCODE_SINGLE_SHIFT_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2325 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2326 ENCODE_LOCKING_SHIFT_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2327 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2328 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2329 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2330
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2331 return dst;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2332 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2333
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2334 /* Produce 2-byte codes for encoded composition rule RULE. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2335
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2336 #define ENCODE_COMPOSITION_RULE(rule) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2337 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2338 int gref, nref; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2339 COMPOSITION_DECODE_RULE (rule, gref, nref); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2340 *dst++ = 32 + 81 + gref; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2341 *dst++ = 32 + nref; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2342 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2343
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2344 /* Produce codes for indicating the start of a composition sequence
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2345 (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
2346 which specify information about the composition. See the comment
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2347 in coding.h for the format of DATA. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2348
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2349 #define ENCODE_COMPOSITION_START(coding, data) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2350 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2351 coding->composing = data[3]; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2352 *dst++ = ISO_CODE_ESC; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2353 if (coding->composing == COMPOSITION_RELATIVE) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2354 *dst++ = '0'; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2355 else \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2356 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2357 *dst++ = (coding->composing == COMPOSITION_WITH_ALTCHARS \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2358 ? '3' : '4'); \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2359 coding->cmp_data_index = coding->cmp_data_start + 4; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2360 coding->composition_rule_follows = 0; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2361 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2362 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2363
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2364 /* Produce codes for indicating the end of the current composition. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2365
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2366 #define ENCODE_COMPOSITION_END(coding, data) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2367 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2368 *dst++ = ISO_CODE_ESC; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2369 *dst++ = '1'; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2370 coding->cmp_data_start += data[0]; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2371 coding->composing = COMPOSITION_NO; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2372 if (coding->cmp_data_start == coding->cmp_data->used \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2373 && coding->cmp_data->next) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2374 { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2375 coding->cmp_data = coding->cmp_data->next; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2376 coding->cmp_data_start = 0; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2377 } \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2378 } while (0)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2379
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2380 /* Produce composition start sequence ESC 0. Here, this sequence
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2381 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
2382 just produced components (alternate chars and composition rules) of
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2383 the composition and the actual text follows in SRC. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2384
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2385 #define ENCODE_COMPOSITION_FAKE_START(coding) \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2386 do { \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2387 *dst++ = ISO_CODE_ESC; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2388 *dst++ = '0'; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2389 coding->composing = COMPOSITION_RELATIVE; \
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2390 } while (0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2391
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2392 /* The following three macros produce codes for indicating direction
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2393 of text. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2394 #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
2395 do { \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2396 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
2397 *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
2398 else \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2399 *dst++ = ISO_CODE_CSI; \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2400 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2401
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2402 #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
2403 ENCODE_CONTROL_SEQUENCE_INTRODUCER (dst), *dst++ = '2', *dst++ = ']'
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2404
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2405 #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
2406 ENCODE_CONTROL_SEQUENCE_INTRODUCER (dst), *dst++ = '0', *dst++ = ']'
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2407
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2408 /* Produce codes for designation and invocation to reset the graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2409 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
2410 #define ENCODE_RESET_PLANE_AND_REGISTER \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2411 do { \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2412 int reg; \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2413 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
2414 ENCODE_SHIFT_IN; \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2415 for (reg = 0; reg < 4; reg++) \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2416 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
2417 && (CODING_SPEC_ISO_DESIGNATION (coding, reg) \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2418 != 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
2419 ENCODE_DESIGNATION \
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2420 (CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, reg), reg, coding); \
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2421 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2422
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2423 /* 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
2424 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
2425
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2426 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
2427 find all the necessary designations. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2428
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2429 static unsigned char *
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2430 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
2431 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
2432 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2433 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
2434 {
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2435 int charset, c, found = 0, reg;
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2436 /* 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
2437 int r[4];
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2438
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2439 for (reg = 0; reg < 4; reg++)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2440 r[reg] = -1;
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2441
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2442 while (found < 4)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2443 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2444 ONE_MORE_CHAR (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2445 if (c == '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2446 break;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
2447
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2448 charset = CHAR_CHARSET (c);
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2449 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
2450 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
2451 {
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2452 found++;
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2453 r[reg] = charset;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2454 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2455 }
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2456
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2457 label_end_of_loop:
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2458 if (found)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2459 {
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2460 for (reg = 0; reg < 4; reg++)
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2461 if (r[reg] >= 0
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2462 && CODING_SPEC_ISO_DESIGNATION (coding, reg) != r[reg])
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2463 ENCODE_DESIGNATION (r[reg], reg, coding);
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2464 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2465
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2466 return dst;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2467 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2468
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2469 /* See the above "GENERAL NOTES on `encode_coding_XXX ()' functions". */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2470
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2471 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2472 encode_coding_iso2022 (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2473 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2474 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2475 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2476 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2477 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2478 unsigned char *src_end = source + src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2479 unsigned char *dst = destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2480 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
2481 /* 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
2482 from DST_END to assure overflow checking is necessary only at the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2483 head of loop. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2484 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
2485 /* 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
2486 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
2487 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
2488 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
2489 (within macro EMIT_BYTES). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2490 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2491 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2492 Lisp_Object translation_table;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2493 Lisp_Object safe_chars;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2494
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2495 safe_chars = coding_safe_chars (coding);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2496
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2497 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
2498 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2499 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2500 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2501 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
2502 if (NILP (translation_table))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2503 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
2504 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2505
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2506 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
2507 coding->errors = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2508 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2509 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2510 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2511
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2512 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
2513 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2514 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
2515 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2516 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2517
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2518 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
2519 && CODING_SPEC_ISO_BOL (coding))
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2520 {
17725
92f042f73be2 (Valternate_charset_table): The valiable deleted.
Kenichi Handa <handa@m17n.org>
parents: 17717
diff changeset
2521 /* 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
2522 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
2523 src, src_end, dst);
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2524 CODING_SPEC_ISO_BOL (coding) = 0;
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2525 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
2526
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2527 /* Check composition start and end. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2528 if (coding->composing != COMPOSITION_DISABLED
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2529 && coding->cmp_data_start < coding->cmp_data->used)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2530 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2531 struct composition_data *cmp_data = coding->cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2532 int *data = cmp_data->data + coding->cmp_data_start;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2533 int this_pos = cmp_data->char_offset + coding->consumed_char;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2534
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2535 if (coding->composing == COMPOSITION_RELATIVE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2536 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2537 if (this_pos == data[2])
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2538 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2539 ENCODE_COMPOSITION_END (coding, data);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2540 cmp_data = coding->cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2541 data = cmp_data->data + coding->cmp_data_start;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2542 }
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 else if (COMPOSING_P (coding))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2545 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2546 /* COMPOSITION_WITH_ALTCHARS or COMPOSITION_WITH_RULE_ALTCHAR */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2547 if (coding->cmp_data_index == coding->cmp_data_start + data[0])
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2548 /* We have consumed components of the composition.
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
2549 What follows in SRC is the composition's base
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2550 text. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2551 ENCODE_COMPOSITION_FAKE_START (coding);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2552 else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2553 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2554 int c = cmp_data->data[coding->cmp_data_index++];
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2555 if (coding->composition_rule_follows)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2556 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2557 ENCODE_COMPOSITION_RULE (c);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2558 coding->composition_rule_follows = 0;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2559 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2560 else
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2561 {
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2562 if (coding->flags & CODING_FLAG_ISO_SAFE
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2563 && ! CODING_SAFE_CHAR_P (safe_chars, c))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2564 ENCODE_UNSAFE_CHARACTER (c);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2565 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2566 ENCODE_ISO_CHARACTER (c);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2567 if (coding->composing == COMPOSITION_WITH_RULE_ALTCHARS)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2568 coding->composition_rule_follows = 1;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2569 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2570 continue;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2571 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2572 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2573 if (!COMPOSING_P (coding))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2574 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2575 if (this_pos == data[1])
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2576 {
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2577 ENCODE_COMPOSITION_START (coding, data);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2578 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2579 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2580 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2581 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2582
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2583 ONE_MORE_CHAR (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2584
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2585 /* 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
2586 if (c < 0x20 || c == 0x7F)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2587 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2588 if (c == '\r')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2589 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2590 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
2591 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2592 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
2593 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
2594 *dst++ = c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2595 continue;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2596 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2597 /* 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
2598 c = '\n';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2599 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2600 if (c == '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2601 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2602 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
2603 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
2604 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
2605 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
2606 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
2607 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
2608 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
2609 || 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
2610 *dst++ = ISO_CODE_LF;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2611 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
2612 *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
2613 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2614 *dst++ = ISO_CODE_CR;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2615 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
2616 }
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
2617 else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2618 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2619 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
2620 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
2621 *dst++ = c;
19052
302a7b2a6948 (encode_coding_iso2022): Write out invalid multibyte
Kenichi Handa <handa@m17n.org>
parents: 18910
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 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2624 else if (ASCII_BYTE_P (c))
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2625 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
2626 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
2627 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2628 *dst++ = c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2629 coding->errors++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2630 }
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2631 else if (coding->flags & CODING_FLAG_ISO_SAFE
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2632 && ! CODING_SAFE_CHAR_P (safe_chars, c))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2633 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
2634 else
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
2635 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
2636
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2637 coding->consumed_char++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2638 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2639
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2640 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2641 coding->consumed = src_base - source;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2642 coding->produced = coding->produced_char = dst - destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2643 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2644
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2645
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2646 /*** 4. SJIS and BIG5 handlers ***/
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2647
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
2648 /* Although SJIS and BIG5 are not ISO coding systems, they are used
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2649 quite widely. So, for the moment, Emacs supports them in the bare
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2650 C code. But, in the future, they may be supported only by CCL. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2651
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2652 /* SJIS is a coding system encoding three character sets: ASCII, right
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2653 half of JISX0201-Kana, and JISX0208. An ASCII character is encoded
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2654 as is. A character of charset katakana-jisx0201 is encoded by
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2655 "position-code + 0x80". A character of charset japanese-jisx0208
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2656 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
2657 so that it fits in the range below.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2658
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2659 --- CODE RANGE of SJIS ---
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2660 (character set) (range)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2661 ASCII 0x00 .. 0x7F
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2662 KATAKANA-JISX0201 0xA1 .. 0xDF
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
2663 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
2664 (2nd byte) 0x40 .. 0x7E and 0x80 .. 0xFC
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2665 -------------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2666
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2667 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2668
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2669 /* BIG5 is a coding system encoding two character sets: ASCII and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2670 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
2671 character set and is encoded in two bytes.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2672
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2673 --- CODE RANGE of BIG5 ---
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2674 (character set) (range)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2675 ASCII 0x00 .. 0x7F
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2676 Big5 (1st byte) 0xA1 .. 0xFE
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2677 (2nd byte) 0x40 .. 0x7E and 0xA1 .. 0xFE
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2678 --------------------------
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2679
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2680 Since the number of characters in Big5 is larger than maximum
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2681 characters in Emacs' charset (96x96), it can't be handled as one
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2682 charset. So, in Emacs, Big5 is divided into two: `charset-big5-1'
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2683 and `charset-big5-2'. Both are DIMENSION2 and CHARS94. The former
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2684 contains frequently used characters and the latter contains less
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2685 frequently used characters. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2686
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2687 /* 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
2688 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
2689 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
2690 format. CHARSET is `charset_big5_1' or `charset_big5_2'. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2691
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2692 /* Number of Big5 characters which have the same code in 1st byte. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2693 #define BIG5_SAME_ROW (0xFF - 0xA1 + 0x7F - 0x40)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2694
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2695 #define DECODE_BIG5(b1, b2, charset, c1, c2) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2696 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2697 unsigned int temp \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2698 = (b1 - 0xA1) * BIG5_SAME_ROW + b2 - (b2 < 0x7F ? 0x40 : 0x62); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2699 if (b1 < 0xC9) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2700 charset = charset_big5_1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2701 else \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2702 { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2703 charset = charset_big5_2; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2704 temp -= (0xC9 - 0xA1) * BIG5_SAME_ROW; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2705 } \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2706 c1 = temp / (0xFF - 0xA1) + 0x21; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2707 c2 = temp % (0xFF - 0xA1) + 0x21; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2708 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2709
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2710 #define ENCODE_BIG5(charset, c1, c2, b1, b2) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2711 do { \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2712 unsigned int temp = (c1 - 0x21) * (0xFF - 0xA1) + (c2 - 0x21); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2713 if (charset == charset_big5_2) \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2714 temp += BIG5_SAME_ROW * (0xC9 - 0xA1); \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2715 b1 = temp / BIG5_SAME_ROW + 0xA1; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2716 b2 = temp % BIG5_SAME_ROW; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2717 b2 += b2 < 0x3F ? 0x40 : 0x62; \
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2718 } while (0)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2719
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2720 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2721 Check if a text is encoded in SJIS. If it is, return
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2722 CODING_CATEGORY_MASK_SJIS, else return 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2723
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2724 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2725 detect_coding_sjis (src, src_end, multibytep)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2726 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2727 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2728 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2729 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2730 /* 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
2731 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
2732 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
2733
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2734 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2735 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2736 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
2737 if (c < 0x80)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2738 continue;
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2739 if (c == 0x80 || c == 0xA0 || c > 0xEF)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2740 return 0;
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2741 if (c <= 0x9F || c >= 0xE0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2742 {
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2743 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2744 if (c < 0x40 || c == 0x7F || c > 0xFC)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2745 return 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2746 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2747 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2748 label_end_of_loop:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2749 return CODING_CATEGORY_MASK_SJIS;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2750 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2751
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2752 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2753 Check if a text is encoded in BIG5. If it is, return
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2754 CODING_CATEGORY_MASK_BIG5, else return 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2755
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2756 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2757 detect_coding_big5 (src, src_end, multibytep)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2758 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2759 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2760 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2761 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2762 /* 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
2763 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
2764 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
2765
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2766 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2767 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2768 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
2769 if (c < 0x80)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2770 continue;
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2771 if (c < 0xA1 || c > 0xFE)
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2772 return 0;
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2773 ONE_MORE_BYTE_CHECK_MULTIBYTE (c, multibytep);
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2774 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
2775 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2776 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2777 label_end_of_loop:
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2778 return CODING_CATEGORY_MASK_BIG5;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2779 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2780
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2781 /* 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
2782 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
2783 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
2784
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2785 #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
2786 #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
2787 #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
2788 #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
2789 #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
2790 #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
2791 #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
2792
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2793 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2794 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
2795 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2796 int multibytep;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2797 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2798 unsigned char c;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2799 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
2800 /* 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
2801 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
2802 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
2803
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2804 while (1)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2805 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2806 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
2807 if (UTF_8_1_OCTET_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2808 continue;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2809 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
2810 seq_maybe_bytes = 1;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2811 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
2812 seq_maybe_bytes = 2;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2813 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
2814 seq_maybe_bytes = 3;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2815 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
2816 seq_maybe_bytes = 4;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2817 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
2818 seq_maybe_bytes = 5;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2819 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2820 return 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2821
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2822 do
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2823 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2824 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
2825 if (!UTF_8_EXTRA_OCTET_P (c))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2826 return 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2827 seq_maybe_bytes--;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2828 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2829 while (seq_maybe_bytes > 0);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2830 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2831
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2832 label_end_of_loop:
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2833 return CODING_CATEGORY_MASK_UTF_8;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2834 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2835
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2836 /* 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
2837 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
2838 Little Endian (otherwise). If it is, return
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2839 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
2840 else return 0. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2841
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2842 #define UTF_16_INVALID_P(val) \
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2843 (((val) == 0xFFFE) \
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2844 || ((val) == 0xFFFF))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2845
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2846 #define UTF_16_HIGH_SURROGATE_P(val) \
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2847 (((val) & 0xD800) == 0xD800)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2848
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2849 #define UTF_16_LOW_SURROGATE_P(val) \
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2850 (((val) & 0xDC00) == 0xDC00)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2851
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2852 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2853 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
2854 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2855 int multibytep;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2856 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2857 unsigned char c1, c2;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2858 /* Dummy for TWO_MORE_BYTES. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2859 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
2860 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
2861
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2862 ONE_MORE_BYTE_CHECK_MULTIBYTE (c1, multibytep);
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
2863 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
2864
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2865 if ((c1 == 0xFF) && (c2 == 0xFE))
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2866 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
2867 else if ((c1 == 0xFE) && (c2 == 0xFF))
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2868 return CODING_CATEGORY_MASK_UTF_16_BE;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2869
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2870 label_end_of_loop:
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2871 return 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2872 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
2873
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2874 /* See the above "GENERAL NOTES on `decode_coding_XXX ()' functions".
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2875 If SJIS_P is 1, decode SJIS text, else decode BIG5 test. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2876
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2877 static void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2878 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
2879 src_bytes, dst_bytes, sjis_p)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2880 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2881 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2882 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2883 int sjis_p;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2884 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2885 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2886 unsigned char *src_end = source + src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2887 unsigned char *dst = destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2888 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
2889 /* 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
2890 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
2891 (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
2892 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
2893 EMIT_CHAR). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2894 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2895 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2896
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2897 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
2898 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2899 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2900 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2901 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
2902 if (NILP (translation_table))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2903 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
2904 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2905
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2906 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
2907 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2908 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2909 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
2910
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2911 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2912 ONE_MORE_BYTE (c1);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2913
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2914 if (c1 < 0x80)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2915 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2916 charset = CHARSET_ASCII;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2917 if (c1 < 0x20)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2918 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2919 if (c1 == '\r')
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2920 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2921 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
2922 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2923 ONE_MORE_BYTE (c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2924 if (c2 == '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2925 c1 = c2;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2926 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2927 /* 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
2928 src--;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
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 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
2931 c1 = '\n';
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
2932 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2933 else if (c1 == '\n'
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2934 && (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
2935 && (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
2936 || 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
2937 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2938 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
2939 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
2940 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2941 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2942 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2943 else
24870
b0f6eab5deeb (decode_coding_sjis_big5): Avoid compiler warning.
Kenichi Handa <handa@m17n.org>
parents: 24822
diff changeset
2944 {
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2945 if (sjis_p)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2946 {
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2947 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
2948 goto label_invalid_code;
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2949 if (c1 <= 0x9F || c1 >= 0xE0)
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2950 {
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
2951 /* SJIS -> JISX0208 */
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
2952 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
2953 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
2954 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2955 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
2956 charset = charset_jisx0208;
24870
b0f6eab5deeb (decode_coding_sjis_big5): Avoid compiler warning.
Kenichi Handa <handa@m17n.org>
parents: 24822
diff changeset
2957 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2958 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2959 /* SJIS -> JISX0201-Kana */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2960 charset = charset_katakana_jisx0201;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2961 }
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2962 else
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2963 {
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
2964 /* BIG5 -> Big5 */
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
2965 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
2966 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2967 ONE_MORE_BYTE (c2);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2968 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
2969 goto label_invalid_code;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2970 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
2971 }
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2972 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2973
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2974 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
2975 EMIT_CHAR (c);
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2976 continue;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
2977
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2978 label_invalid_code:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2979 coding->errors++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2980 src = src_base;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2981 c = *src++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2982 EMIT_CHAR (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2983 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2984
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2985 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2986 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
2987 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
2988 return;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2989 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2990
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2991 /* 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
2992 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
2993 `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
2994 are sure that all these charsets are registered as official charset
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2995 (i.e. do not have extended leading-codes). Characters of other
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2996 charsets are produced without any encoding. If SJIS_P is 1, encode
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2997 SJIS text, else encode BIG5 text. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2998
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
2999 static void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3000 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
3001 src_bytes, dst_bytes, sjis_p)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3002 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3003 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3004 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3005 int sjis_p;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3006 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3007 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3008 unsigned char *src_end = source + src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3009 unsigned char *dst = destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3010 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
3011 /* 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
3012 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
3013 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
3014 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
3015 (within macro EMIT_BYTES). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3016 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3017 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3018
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3019 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
3020 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3021 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3022 {
31455
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
3023 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
3024 if (NILP (translation_table))
31455
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
3025 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
3026 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3027
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3028 while (1)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3029 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3030 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
3031
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3032 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3033 ONE_MORE_CHAR (c);
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
3034
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3035 /* 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
3036 if (SINGLE_BYTE_CHAR_P (c))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3037 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3038 switch (c)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3039 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3040 case '\r':
45227
6ce63e0a93f1 (encode_coding_sjis_big5): Enclose bitwise AND in
Eli Zaretskii <eliz@gnu.org>
parents: 44562
diff changeset
3041 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
3042 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3043 EMIT_ONE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3044 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3045 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3046 c = '\n';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3047 case '\n':
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3048 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
3049 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3050 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
3051 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3052 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3053 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
3054 c = '\r';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3055 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3056 EMIT_ONE_BYTE (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3057 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3058 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3059 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3060 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3061 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
3062 if (sjis_p)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3063 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3064 if (charset == charset_jisx0208
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3065 || charset == charset_jisx0208_1978)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3066 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3067 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
3068 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
3069 }
31455
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
3070 else if (charset == charset_katakana_jisx0201)
0b33b8c5d16e (encode_coding_sjis_big5): Use translation table for
Kenichi Handa <handa@m17n.org>
parents: 31123
diff changeset
3071 EMIT_ONE_BYTE (c1 | 0x80);
31457
b1c66af9aba5 (encode_coding_sjis_big5): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 31455
diff changeset
3072 else if (charset == charset_latin_jisx0201)
b1c66af9aba5 (encode_coding_sjis_big5): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 31455
diff changeset
3073 EMIT_ONE_BYTE (c1);
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3074 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3075 /* 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
3076 codes as is. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3077 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
3078 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3079 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3080 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3081 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
3082 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3083 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
3084 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
3085 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3086 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3087 /* 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
3088 codes as is. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3089 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
3090 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
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 coding->consumed_char++;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3093 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3094
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3095 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3096 coding->consumed = src_base - source;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3097 coding->produced = coding->produced_char = dst - destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3098 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3099
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3100
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3101 /*** 5. CCL handlers ***/
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3102
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3103 /* See the above "GENERAL NOTES on `detect_coding_XXX ()' functions".
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3104 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
3105 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
3106 CODING_CATEGORY_MASK_CCL, else return 0. */
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3107
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3108 static int
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3109 detect_coding_ccl (src, src_end, multibytep)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3110 unsigned char *src, *src_end;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3111 int multibytep;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3112 {
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3113 unsigned char *valid;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3114 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3115 /* 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
3116 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
3117 struct coding_system *coding = &dummy_coding;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3118
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3119 /* No coding system is assigned to coding-category-ccl. */
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3120 if (!coding_system_table[CODING_CATEGORY_IDX_CCL])
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3121 return 0;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3122
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3123 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
3124 while (1)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3125 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3126 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
3127 if (! valid[c])
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3128 return 0;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3129 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3130 label_end_of_loop:
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3131 return CODING_CATEGORY_MASK_CCL;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3132 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3133
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3134
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3135 /*** 6. End-of-line handlers ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3136
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3137 /* 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
3138
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3139 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3140 decode_eol (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3141 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3142 unsigned char *source, *destination;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3143 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3144 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3145 unsigned char *src = source;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3146 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
3147 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
3148 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
3149 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3150 /* 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
3151 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
3152 (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
3153 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
3154 EMIT_CHAR). */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3155 unsigned char *src_base;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3156 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3157
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3158 translation_table = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3159 switch (coding->eol_type)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3160 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3161 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
3162 while (1)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3163 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3164 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3165 ONE_MORE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3166 if (c == '\r')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3167 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3168 ONE_MORE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3169 if (c != '\n')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3170 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3171 src--;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3172 c = '\r';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3173 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3174 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3175 else if (c == '\n'
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3176 && (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
3177 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3178 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
3179 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
3180 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3181 EMIT_CHAR (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3182 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3183 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3184
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3185 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
3186 while (1)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3187 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3188 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3189 ONE_MORE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3190 if (c == '\n')
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3191 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3192 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
3193 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3194 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
3195 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
3196 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3197 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3198 else if (c == '\r')
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3199 c = '\n';
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3200 EMIT_CHAR (c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3201 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3202 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
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 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
3205 while (1)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
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 src_base = src;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3208 ONE_MORE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3209 EMIT_CHAR (c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3210 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3211 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3212
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3213 label_end_of_loop:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3214 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
3215 coding->produced = dst - destination;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3216 return;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3217 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3218
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3219 /* 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
3220 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
3221 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
3222 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
3223 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
3224 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
3225
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3226 static void
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3227 encode_eol (coding, source, destination, src_bytes, dst_bytes)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3228 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3229 const unsigned char *source;
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3230 unsigned char *destination;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3231 int src_bytes, dst_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3232 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3233 const unsigned char *src = source;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3234 unsigned char *dst = destination;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3235 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
3236 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
3237 Lisp_Object translation_table;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3238 /* 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
3239 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
3240 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
3241 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
3242 (within macro EMIT_BYTES). */
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3243 const unsigned char *src_base;
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3244 unsigned char *tmp;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3245 int c;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3246 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
3247
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3248 translation_table = Qnil;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3249 if (coding->src_multibyte
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3250 && *(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
3251 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3252 src_end--;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3253 src_bytes--;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3254 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
3255 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3256
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3257 if (coding->eol_type == CODING_EOL_CRLF)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3258 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3259 while (src < src_end)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3260 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3261 src_base = src;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3262 c = *src++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3263 if (c >= 0x20)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3264 EMIT_ONE_BYTE (c);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3265 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
3266 EMIT_TWO_BYTES ('\r', '\n');
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3267 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3268 EMIT_ONE_BYTE (c);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3269 }
29093
176708661b08 (encode_eol): Fix a bug of DOS style EOL encoding.
Kenichi Handa <handa@m17n.org>
parents: 29005
diff changeset
3270 src_base = src;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3271 label_end_of_loop:
29182
1d1c27067af4 (encode_eol): Add null statement after label.
Dave Love <fx@gnu.org>
parents: 29172
diff changeset
3272 ;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3273 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3274 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3275 {
31123
097593e77185 (encode_eol): Fix bug for the case of dst_bytes being zero. Set
Kenichi Handa <handa@m17n.org>
parents: 30951
diff changeset
3276 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
3277 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3278 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
3279 src_base = src_end;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3280 dst += src_bytes;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3281 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
3282 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3283 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3284 if (coding->src_multibyte
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3285 && *(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
3286 dst_bytes--;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3287 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
3288 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
3289 dst = destination + dst_bytes;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3290 coding->result = CODING_FINISH_INSUFFICIENT_DST;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3291 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3292 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
3293 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3294 for (tmp = destination; tmp < dst; tmp++)
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3295 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
3296 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3297 else if (selective_display)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3298 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3299 for (tmp = destination; tmp < dst; tmp++)
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
3300 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
3301 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3302 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3303 if (coding->src_multibyte)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3304 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
3305
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
3306 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
3307 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
3308 coding->produced_char = coding->produced;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3309 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3310
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3311
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3312 /*** 7. C library functions ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3313
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3314 /* 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
3315 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
3316 vector of length 5 (called the coding-vector). Among elements of
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3317 this vector, the first (element[0]) and the fifth (element[4])
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3318 carry important information for decoding/encoding. Before
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3319 decoding/encoding, this information should be set in fields of a
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3320 structure of type `coding_system'.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3321
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3322 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
3323 subsidiary coding-system. In that case, Emacs gets coding-vector
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3324 from that symbol.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3325
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3326 `element[0]' contains information to be set in `coding->type'. The
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3327 value and its meaning is as follows:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3328
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3329 0 -- coding_type_emacs_mule
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3330 1 -- coding_type_sjis
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3331 2 -- coding_type_iso2022
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3332 3 -- coding_type_big5
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3333 4 -- coding_type_ccl encoder/decoder written in CCL
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3334 nil -- coding_type_no_conversion
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3335 t -- coding_type_undecided (automatic conversion on decoding,
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3336 no-conversion on encoding)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3337
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3338 `element[4]' contains information to be set in `coding->flags' and
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3339 `coding->spec'. The meaning varies by `coding->type'.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3340
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3341 If `coding->type' is `coding_type_iso2022', element[4] is a vector
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3342 of length 32 (of which the first 13 sub-elements are used now).
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3343 Meanings of these sub-elements are:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3344
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3345 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
3346 If the value is an integer of valid charset, the charset is
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3347 assumed to be designated to graphic register N initially.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3348
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3349 If the value is minus, it is a minus value of charset which
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3350 reserves graphic register N, which means that the charset is
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3351 not designated initially but should be designated to graphic
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3352 register N just before encoding a character in that charset.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3353
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3354 If the value is nil, graphic register N is never used on
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3355 encoding.
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
3356
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3357 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
3358 Each value takes t or nil. See the section ISO2022 of
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3359 `coding.h' for more information.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3360
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3361 If `coding->type' is `coding_type_big5', element[4] is t to denote
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3362 BIG5-ETen or nil to denote BIG5-HKU.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3363
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3364 If `coding->type' takes the other value, element[4] is ignored.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3365
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3366 Emacs Lisp's coding systems also carry information about format of
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3367 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
3368 integer, 0 means CODING_EOL_LF, 1 means CODING_EOL_CRLF, and 2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3369 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
3370 of subsidiary coding systems of which property `eol-type' has one
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
3371 of the above values.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3372
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3373 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3374
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3375 /* Extract information for decoding/encoding from CODING_SYSTEM_SYMBOL
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3376 and set it in CODING. If CODING_SYSTEM_SYMBOL is invalid, CODING
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3377 is setup so that no conversion is necessary and return -1, else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3378 return 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3379
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3380 int
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3381 setup_coding_system (coding_system, coding)
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
3382 Lisp_Object coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3383 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3384 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3385 Lisp_Object coding_spec, coding_type, eol_type, plist;
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3386 Lisp_Object val;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3387
34591
9d5d795f9315 (setup_coding_system): Clear all members of the struct
Kenichi Handa <handa@m17n.org>
parents: 34536
diff changeset
3388 /* 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
3389 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
3390
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3391 /* 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
3392 coding->symbol = coding_system;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3393 coding->heading_ascii = -1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3394 coding->post_read_conversion = coding->pre_write_conversion = Qnil;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3395 coding->composing = COMPOSITION_DISABLED;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3396 coding->cmp_data = NULL;
24460
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3397
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3398 if (NILP (coding_system))
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3399 goto label_invalid_coding_system;
be35d27a4bfb (setup_coding_system): Check for CODING_SYSTEM = nil.
Kenichi Handa <handa@m17n.org>
parents: 24425
diff changeset
3400
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3401 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
3402
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3403 if (!VECTORP (coding_spec)
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3404 || XVECTOR (coding_spec)->size != 5
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3405 || !CONSP (XVECTOR (coding_spec)->contents[3]))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3406 goto label_invalid_coding_system;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3407
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3408 eol_type = inhibit_eol_conversion ? Qnil : Fget (coding_system, Qeol_type);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3409 if (VECTORP (eol_type))
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3410 {
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3411 coding->eol_type = CODING_EOL_UNDECIDED;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3412 coding->common_flags = CODING_REQUIRE_DETECTION_MASK;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3413 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3414 else if (XFASTINT (eol_type) == 1)
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3415 {
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3416 coding->eol_type = CODING_EOL_CRLF;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3417 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3418 = 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
3419 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3420 else if (XFASTINT (eol_type) == 2)
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3421 {
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3422 coding->eol_type = CODING_EOL_CR;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3423 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3424 = 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
3425 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3426 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3427 coding->eol_type = CODING_EOL_LF;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3428
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3429 coding_type = XVECTOR (coding_spec)->contents[0];
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3430 /* Try short cut. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3431 if (SYMBOLP (coding_type))
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3432 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3433 if (EQ (coding_type, Qt))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3434 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3435 coding->type = coding_type_undecided;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3436 coding->common_flags |= CODING_REQUIRE_DETECTION_MASK;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3437 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3438 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3439 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
3440 /* 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
3441 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
3442 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
3443 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
3444 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
3445
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3446 return 0;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3447 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3448
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3449 /* Get values of coding system properties:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3450 `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
3451 `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
3452 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
3453 /* Pre & post conversion functions should be disabled if
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
3454 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
3455 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
3456 if (! inhibit_pre_post_conversion)
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3457 {
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
3458 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
3459 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
3460 }
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3461 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
3462 if (SYMBOLP (val))
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3463 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
3464 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
3465 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
3466 if (SYMBOLP (val))
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
3467 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
3468 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
3469 val = Fplist_get (plist, Qcoding_category);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3470 if (!NILP (val))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3471 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3472 val = Fget (val, Qcoding_category_index);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3473 if (INTEGERP (val))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3474 coding->category_idx = XINT (val);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3475 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3476 goto label_invalid_coding_system;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3477 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3478 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3479 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
3480
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3481 /* If the coding system has non-nil `composition' property, enable
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3482 composition handling. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3483 val = Fplist_get (plist, Qcomposition);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3484 if (!NILP (val))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3485 coding->composing = COMPOSITION_NO;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3486
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3487 switch (XFASTINT (coding_type))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3488 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3489 case 0:
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3490 coding->type = coding_type_emacs_mule;
34888
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
3491 coding->common_flags
b469d29c0815 (SAFE_ONE_MORE_BYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34813
diff changeset
3492 |= 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
3493 if (!NILP (coding->post_read_conversion))
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3494 coding->common_flags |= CODING_REQUIRE_DECODING_MASK;
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3495 if (!NILP (coding->pre_write_conversion))
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3496 coding->common_flags |= CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3497 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3498
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3499 case 1:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3500 coding->type = coding_type_sjis;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3501 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3502 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3503 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3504
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3505 case 2:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3506 coding->type = coding_type_iso2022;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3507 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3508 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3509 {
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3510 Lisp_Object val, temp;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3511 Lisp_Object *flags;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3512 int i, charset, reg_bits = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3513
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3514 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
3515
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3516 if (!VECTORP (val) || XVECTOR (val)->size != 32)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3517 goto label_invalid_coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3518
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3519 flags = XVECTOR (val)->contents;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3520 coding->flags
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3521 = ((NILP (flags[4]) ? 0 : CODING_FLAG_ISO_SHORT_FORM)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3522 | (NILP (flags[5]) ? 0 : CODING_FLAG_ISO_RESET_AT_EOL)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3523 | (NILP (flags[6]) ? 0 : CODING_FLAG_ISO_RESET_AT_CNTL)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3524 | (NILP (flags[7]) ? 0 : CODING_FLAG_ISO_SEVEN_BITS)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3525 | (NILP (flags[8]) ? 0 : CODING_FLAG_ISO_LOCKING_SHIFT)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3526 | (NILP (flags[9]) ? 0 : CODING_FLAG_ISO_SINGLE_SHIFT)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3527 | (NILP (flags[10]) ? 0 : CODING_FLAG_ISO_USE_ROMAN)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3528 | (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
3529 | (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
3530 | (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
3531 | (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
3532 | (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
3533 | (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
3534 );
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3535
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3536 /* Invoke graphic register 0 to plane 0. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3537 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3538 /* 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
3539 CODING_SPEC_ISO_INVOCATION (coding, 1)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3540 = (coding->flags & CODING_FLAG_ISO_SEVEN_BITS ? -1 : 1);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3541 /* Not single shifting at first. */
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3542 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
3543 /* 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
3544 CODING_SPEC_ISO_BOL (coding) = 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3545
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3546 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
3547 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
3548 val = Vcharset_revision_alist;
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3549 while (CONSP (val))
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3550 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3551 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
3552 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
3553 && (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
3554 && (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
3555 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
3556 val = XCDR (val);
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3557 }
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
3558
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3559 /* Checks FLAGS[REG] (REG = 0, 1, 2 3) and decide designations.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3560 FLAGS[REG] can be one of below:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3561 integer CHARSET: CHARSET occupies register I,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3562 t: designate nothing to REG initially, but can be used
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3563 by any charsets,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3564 list of integer, nil, or t: designate the first
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3565 element (if integer) to REG initially, the remaining
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3566 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
3567 if an element is t, REG can be used by any charsets,
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3568 nil: REG is never used. */
17190
6637001cdb4b Adjusted for the change of MAX_CHARSET.
Kenichi Handa <handa@m17n.org>
parents: 17137
diff changeset
3569 for (charset = 0; charset <= MAX_CHARSET; charset++)
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
3570 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
3571 = CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3572 for (i = 0; i < 4; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3573 {
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3574 if ((INTEGERP (flags[i])
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3575 && (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
3576 || (charset = get_charset_id (flags[i])) >= 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3577 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3578 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3579 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) = i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3580 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3581 else if (EQ (flags[i], Qt))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3582 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3583 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
3584 reg_bits |= 1 << i;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3585 coding->flags |= CODING_FLAG_ISO_DESIGNATION;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3586 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3587 else if (CONSP (flags[i]))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3588 {
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3589 Lisp_Object tail;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3590 tail = flags[i];
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3591
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3592 coding->flags |= CODING_FLAG_ISO_DESIGNATION;
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3593 if ((INTEGERP (XCAR (tail))
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3594 && (charset = XINT (XCAR (tail)),
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3595 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
3596 || (charset = get_charset_id (XCAR (tail))) >= 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3597 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3598 CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i) = charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3599 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) =i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3600 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3601 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3602 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
3603 tail = XCDR (tail);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3604 while (CONSP (tail))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3605 {
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3606 if ((INTEGERP (XCAR (tail))
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3607 && (charset = XINT (XCAR (tail)),
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
3608 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
3609 || (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
3610 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
3611 = i;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3612 else if (EQ (XCAR (tail), Qt))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3613 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
3614 tail = XCDR (tail);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3615 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3616 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3617 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3618 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
3619
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3620 CODING_SPEC_ISO_DESIGNATION (coding, i)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3621 = CODING_SPEC_ISO_INITIAL_DESIGNATION (coding, i);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3622 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3623
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3624 if (reg_bits && ! (coding->flags & CODING_FLAG_ISO_LOCKING_SHIFT))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3625 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3626 /* REG 1 can be used only by locking shift in 7-bit env. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3627 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
3628 reg_bits &= ~2;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3629 if (! (coding->flags & CODING_FLAG_ISO_SINGLE_SHIFT))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3630 /* 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
3631 reg_bits &= 3;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3632 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3633
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3634 if (reg_bits)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3635 for (charset = 0; charset <= MAX_CHARSET; charset++)
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3636 {
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
3637 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
3638 && (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
3639 == CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3640 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3641 /* 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
3642 used by CHARSET. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3643
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3644 /* 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
3645 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
3646 if (CHARSET_CHARS (charset) == 96)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3647 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3648 = (reg_bits & 2
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3649 ? 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
3650 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3651 CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3652 = (reg_bits & 1
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3653 ? 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
3654 }
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
3655 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3656 }
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3657 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
3658 coding->spec.iso2022.last_invalid_designation_register = -1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3659 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3660
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3661 case 3:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3662 coding->type = coding_type_big5;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3663 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3664 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3665 coding->flags
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
3666 = (NILP (XVECTOR (coding_spec)->contents[4])
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3667 ? CODING_FLAG_BIG5_HKU
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3668 : CODING_FLAG_BIG5_ETEN);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3669 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3670
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3671 case 4:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3672 coding->type = coding_type_ccl;
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3673 coding->common_flags
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3674 |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3675 {
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3676 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
3677 if (! CONSP (val)
23910b121ced (setup_coding_system): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24870
diff changeset
3678 || 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
3679 XCAR (val)) < 0
25067
23910b121ced (setup_coding_system): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24870
diff changeset
3680 || 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
3681 XCDR (val)) < 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3682 goto label_invalid_coding_system;
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3683
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3684 bzero (coding->spec.ccl.valid_codes, 256);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3685 val = Fplist_get (plist, Qvalid_codes);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3686 if (CONSP (val))
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3687 {
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3688 Lisp_Object this;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3689
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3690 for (; CONSP (val); val = XCDR (val))
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3691 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3692 this = XCAR (val);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3693 if (INTEGERP (this)
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3694 && XINT (this) >= 0 && XINT (this) < 256)
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3695 coding->spec.ccl.valid_codes[XINT (this)] = 1;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3696 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
3697 && INTEGERP (XCAR (this))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3698 && INTEGERP (XCDR (this)))
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3699 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
3700 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
3701 int end = XINT (XCDR (this));
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3702
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3703 if (start >= 0 && start <= end && end < 256)
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
3704 while (start <= end)
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3705 coding->spec.ccl.valid_codes[start++] = 1;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3706 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3707 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3708 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3709 }
20227
71008f909642 (setup_coding_system): Initialize common_flags member
Kenichi Handa <handa@m17n.org>
parents: 20150
diff changeset
3710 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
3711 coding->spec.ccl.cr_carryover = 0;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
3712 coding->spec.ccl.eight_bit_carryover[0] = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3713 break;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3714
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
3715 case 5:
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
3716 coding->type = coding_type_raw_text;
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
3717 break;
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
3718
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3719 default:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3720 goto label_invalid_coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3721 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3722 return 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3723
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3724 label_invalid_coding_system:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3725 coding->type = coding_type_no_conversion;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3726 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
3727 coding->common_flags = 0;
17485
abfa77a2693b (setup_coding_system): Setup coding->eol_type as LF
Kenichi Handa <handa@m17n.org>
parents: 17368
diff changeset
3728 coding->eol_type = CODING_EOL_LF;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3729 coding->pre_write_conversion = coding->post_read_conversion = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3730 return -1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3731 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3732
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3733 /* Free memory blocks allocated for storing composition information. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3734
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3735 void
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3736 coding_free_composition_data (coding)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3737 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3738 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3739 struct composition_data *cmp_data = coding->cmp_data, *next;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3740
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3741 if (!cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3742 return;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3743 /* Memory blocks are chained. At first, rewind to the first, then,
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3744 free blocks one by one. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3745 while (cmp_data->prev)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3746 cmp_data = cmp_data->prev;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3747 while (cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3748 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3749 next = cmp_data->next;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3750 xfree (cmp_data);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3751 cmp_data = next;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3752 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3753 coding->cmp_data = NULL;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3754 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3755
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3756 /* Set `char_offset' member of all memory blocks pointed by
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3757 coding->cmp_data to POS. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3758
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3759 void
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3760 coding_adjust_composition_offset (coding, pos)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3761 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3762 int pos;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3763 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3764 struct composition_data *cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3765
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3766 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
3767 cmp_data->char_offset = pos;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3768 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
3769
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3770 /* 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
3771 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
3772 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
3773 advance. */
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3774
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3775 void
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3776 setup_raw_text_coding_system (coding)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3777 struct coding_system *coding;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3778 {
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3779 if (coding->type != coding_type_raw_text)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3780 {
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3781 coding->symbol = Qraw_text;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3782 coding->type = coding_type_raw_text;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3783 if (coding->eol_type != CODING_EOL_UNDECIDED)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3784 {
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3785 Lisp_Object subsidiaries;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
3786 subsidiaries = Fget (Qraw_text, Qeol_type);
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3787
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3788 if (VECTORP (subsidiaries)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3789 && XVECTOR (subsidiaries)->size == 3)
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3790 coding->symbol
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3791 = XVECTOR (subsidiaries)->contents[coding->eol_type];
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3792 }
24667
6156dc5f5ce0 [andrewi]
Andrew Innes <andrewi@gnu.org>
parents: 24568
diff changeset
3793 setup_coding_system (coding->symbol, coding);
22616
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3794 }
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3795 return;
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3796 }
c493ce6a31e4 (setup_raw_text_coding_system): New function.
Kenichi Handa <handa@m17n.org>
parents: 22529
diff changeset
3797
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3798 /* Emacs has a mechanism to automatically detect a coding system if it
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3799 is one of Emacs' internal format, ISO2022, SJIS, and BIG5. But,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3800 it's impossible to distinguish some coding systems accurately
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3801 because they use the same range of codes. So, at first, coding
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3802 systems are categorized into 7, those are:
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3803
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
3804 o coding-category-emacs-mule
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3805
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3806 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3807 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
3808 symbol) `emacs-mule' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3809
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3810 o coding-category-sjis
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3811
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3812 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3813 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
3814 symbol) `japanese-shift-jis' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3815
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3816 o coding-category-iso-7
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3817
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3818 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
3819 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
3820 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
3821 charsets. Assigned the coding-system (Lisp symbol)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3822 `iso-2022-7bit' by default.
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3823
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3824 o coding-category-iso-7-tight
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3825
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3826 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
3827 encode/decode only the specified charsets.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3828
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3829 o coding-category-iso-8-1
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3830
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3831 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3832 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
3833 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
3834 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
3835 symbol) `iso-latin-1' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3836
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3837 o coding-category-iso-8-2
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3838
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3839 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3840 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
3841 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
3842 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
3843 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
3844
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
3845 o coding-category-iso-7-else
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3846
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3847 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
3848 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
3849 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
3850 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
3851
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
3852 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
3853
954e6be0a757 (detect_coding_iso2022): Distinguish coding-category-iso-7-else and
Kenichi Handa <handa@m17n.org>
parents: 18766
diff changeset
3854 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
3855 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
3856 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
3857 symbol) `iso-2022-8bit-ss2' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3858
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3859 o coding-category-big5
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3860
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3861 The category for a coding system which has the same code range
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3862 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
3863 `cn-big5' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3864
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3865 o coding-category-utf-8
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3866
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3867 The category for a coding system which has the same code range
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3868 as UTF-8 (cf. RFC2279). Assigned the coding-system (Lisp
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3869 symbol) `utf-8' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3870
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3871 o coding-category-utf-16-be
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3872
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3873 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
3874 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
3875 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
3876 `utf-16-be' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3877
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3878 o coding-category-utf-16-le
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3879
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3880 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
3881 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
3882 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
3883 symbol) `utf-16-le' by default.
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3884
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3885 o coding-category-ccl
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3886
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3887 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
3888 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
3889 coding system is assigned.
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
3890
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3891 o coding-category-binary
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3892
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3893 The category for a coding system not categorized in any of the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3894 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
3895 `no-conversion' by default.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3896
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3897 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
3898 `coding-system' (this is also a Lisp symbol) assigned by a user.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3899 What Emacs does actually is to detect a category of coding system.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3900 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
3901 decide a single possible category, it selects a category of the
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3902 highest priority. Priorities of categories are also specified by a
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3903 user in a Lisp variable `coding-category-list'.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3904
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3905 */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3906
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3907 static
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3908 int ascii_skip_code[256];
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3909
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3910 /* 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
3911 If it detects possible coding systems, return an integer in which
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3912 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
3913 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
3914 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
3915 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
3916 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
3917 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
3918
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3919 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
3920
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3921 static int
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3922 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
3923 unsigned char *source;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3924 int src_bytes, *priorities, *skip;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3925 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3926 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3927 register unsigned char c;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3928 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
3929 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
3930 int i;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3931
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3932 /* At first, skip all ASCII characters and control characters except
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3933 for three ISO2022 specific control characters. */
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3934 ascii_skip_code[ISO_CODE_SO] = 0;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3935 ascii_skip_code[ISO_CODE_SI] = 0;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3936 ascii_skip_code[ISO_CODE_ESC] = 0;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3937
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
3938 label_loop_detect_coding:
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3939 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
3940 *skip = src - source;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3941
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3942 if (src >= src_end)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3943 /* 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
3944 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3945
22329
4786b00d2973 (detect_coding_mask): Initilize local variable C.
Kenichi Handa <handa@m17n.org>
parents: 22254
diff changeset
3946 c = *src;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3947 /* The text seems to be encoded in some multilingual coding system.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3948 Now, try to find in which coding system the text is encoded. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3949 if (c < 0x80)
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
3950 {
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
3951 /* 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
3952 /* 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
3953 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
3954 if (mask == 0)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3955 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3956 /* 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
3957 src++;
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3958 if (c == ISO_CODE_ESC)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3959 ascii_skip_code[ISO_CODE_ESC] = 1;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3960 else
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
3961 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
3962 goto label_loop_detect_coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3963 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3964 if (priorities)
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3965 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3966 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
3967 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3968 if (mask & priorities[i])
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3969 return priorities[i];
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3970 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3971 return CODING_CATEGORY_MASK_RAW_TEXT;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3972 }
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
3973 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
3974 else
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3975 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3976 int try;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3977
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3978 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
3979 c = src[1] - 0x20;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
3980
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3981 if (c < 0xA0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3982 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3983 /* 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
3984 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
3985 or the first byte of UTF-16. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3986 try = (CODING_CATEGORY_MASK_SJIS
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3987 | CODING_CATEGORY_MASK_EMACS_MULE
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3988 | CODING_CATEGORY_MASK_UTF_16_BE
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
3989 | CODING_CATEGORY_MASK_UTF_16_LE);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3990
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3991 /* 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
3992 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
3993 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
3994 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
3995 if ((VECTORP (Vlatin_extra_code_table)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3996 && !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
3997 || (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
3998 || (c == ISO_CODE_CSI
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
3999 && (src < src_end
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4000 && (*src == ']'
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4001 || ((*src == '0' || *src == '1' || *src == '2')
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4002 && src + 1 < src_end
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4003 && src[1] == ']')))))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4004 try |= (CODING_CATEGORY_MASK_ISO_8_ELSE
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4005 | CODING_CATEGORY_MASK_ISO_8BIT);
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 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4008 /* 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
4009 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
4010 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
4011 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
4012 try = (CODING_CATEGORY_MASK_ISO_8_ELSE
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4013 | CODING_CATEGORY_MASK_ISO_8BIT
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4014 | CODING_CATEGORY_MASK_SJIS
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4015 | CODING_CATEGORY_MASK_BIG5
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4016 | CODING_CATEGORY_MASK_UTF_8
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4017 | CODING_CATEGORY_MASK_UTF_16_BE
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4018 | CODING_CATEGORY_MASK_UTF_16_LE);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4019
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4020 /* Or, we may have to consider the possibility of CCL. */
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4021 if (coding_system_table[CODING_CATEGORY_IDX_CCL]
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4022 && (coding_system_table[CODING_CATEGORY_IDX_CCL]
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4023 ->spec.ccl.valid_codes)[c])
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4024 try |= CODING_CATEGORY_MASK_CCL;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4025
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4026 mask = 0;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4027 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
4028 if (priorities)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4029 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4030 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
4031 {
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4032 if (!iso2022_examined_p
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4033 && (priorities[i] & try & CODING_CATEGORY_MASK_ISO))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4034 {
41678
5aa97e545399 (syms_of_coding) <Qchar_coding_system>: Give it an
Dave Love <fx@gnu.org>
parents: 41624
diff changeset
4035 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
4036 iso2022_examined_p = 1;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4037 }
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4038 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
4039 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
4040 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
4041 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
4042 else if (!utf16_examined_p
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4043 && (priorities[i] & try &
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4044 CODING_CATEGORY_MASK_UTF_16_BE_LE))
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4045 {
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4046 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
4047 utf16_examined_p = 1;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4048 }
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4049 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
4050 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
4051 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
4052 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
4053 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
4054 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
4055 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
4056 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
4057 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
4058 mask |= CODING_CATEGORY_MASK_BINARY;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4059 if (mask & priorities[i])
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4060 return priorities[i];
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4061 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4062 return CODING_CATEGORY_MASK_RAW_TEXT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4063 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4064 if (try & CODING_CATEGORY_MASK_ISO)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4065 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
4066 if (try & CODING_CATEGORY_MASK_SJIS)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4067 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
4068 if (try & CODING_CATEGORY_MASK_BIG5)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4069 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
4070 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
4071 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
4072 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
4073 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
4074 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
4075 mask |= detect_coding_emacs_mule (src, src_end, multibytep);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
4076 if (try & CODING_CATEGORY_MASK_CCL)
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
4077 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
4078 }
22009
8a2d45cadd66 (detect_coding_mask): Check also coding-category-binary.
Richard M. Stallman <rms@gnu.org>
parents: 21939
diff changeset
4079 return (mask | CODING_CATEGORY_MASK_RAW_TEXT | CODING_CATEGORY_MASK_BINARY);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4080 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4081
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4082 /* Detect how a text of length SRC_BYTES pointed by SRC is encoded.
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4083 The information of the detected coding system is set in CODING. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4084
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4085 void
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4086 detect_coding (coding, src, src_bytes)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4087 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4088 const unsigned char *src;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4089 int src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4090 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4091 unsigned int idx;
34988
8cd5e6ad71a2 (detect_coding_iso2022, setup_coding_system): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 34892
diff changeset
4092 int skip, mask;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4093 Lisp_Object val;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4094
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4095 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
4096 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
4097 coding->src_multibyte);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4098 coding->heading_ascii = skip;
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 if (!mask) return;
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 /* 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
4103 idx = 0;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4104 while (mask && ! (mask & 1)) mask >>= 1, idx++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4105 if (! mask)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4106 idx = CODING_CATEGORY_IDX_RAW_TEXT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4107
39581
6d9fa06012a6 Use SYMBOL_VALUE/SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents: 38518
diff changeset
4108 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
4109
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4110 if (coding->eol_type != CODING_EOL_UNDECIDED)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4111 {
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4112 Lisp_Object tmp;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4113
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
4114 tmp = Fget (val, Qeol_type);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4115 if (VECTORP (tmp))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4116 val = XVECTOR (tmp)->contents[coding->eol_type];
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4117 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4118
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4119 /* 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
4120 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4121 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
4122 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
4123
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4124 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
4125 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
4126 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
4127 coding->heading_ascii = skip;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4128 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4129 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4130
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4131 /* 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
4132 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
4133 CODING_EOL_CR, and CODING_EOL_UNDECIDED.
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4134
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4135 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
4136
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4137 #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
4138
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4139 static int
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4140 detect_eol_type (source, src_bytes, skip)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4141 unsigned char *source;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4142 int src_bytes, *skip;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4143 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4144 unsigned char *src = source, *src_end = src + src_bytes;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4145 unsigned char c;
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4146 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
4147 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
4148 int this_eol_type;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4149
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4150 *skip = 0;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4151
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4152 while (src < src_end && total < MAX_EOL_CHECK_COUNT)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4153 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4154 c = *src++;
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4155 if (c == '\n' || c == '\r')
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4156 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4157 if (*skip == 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4158 *skip = src - 1 - source;
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4159 total++;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4160 if (c == '\n')
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4161 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
4162 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
4163 this_eol_type = CODING_EOL_CR;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4164 else
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4165 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
4166
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4167 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
4168 /* 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
4169 eol_type = this_eol_type;
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4170 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
4171 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4172 /* 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
4173 eol_type = CODING_EOL_INCONSISTENT;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4174 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4175 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4176 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4177 }
19173
04ed7c3f5cee (detect_eol_type): If EOL representation does not
Richard M. Stallman <rms@gnu.org>
parents: 19134
diff changeset
4178
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4179 if (*skip == 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4180 *skip = src_end - source;
19181
917138730635 (detect_eol_type): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 19173
diff changeset
4181 return eol_type;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4182 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4183
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4184 /* 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
4185 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
4186 utf-16-le. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4187
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4188 static int
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4189 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
4190 unsigned char *source;
35053
e3e1ff3616fa Commentary changes.
Dave Love <fx@gnu.org>
parents: 34988
diff changeset
4191 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
4192 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4193 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
4194 unsigned int c1, c2;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4195 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
4196 int eol_type = CODING_EOL_UNDECIDED;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4197 int this_eol_type;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4198 int msb, lsb;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4199
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4200 if (big_endian_p)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4201 msb = 0, lsb = 1;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4202 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4203 msb = 1, lsb = 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4204
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4205 *skip = 0;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4206
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4207 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
4208 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4209 c1 = (src[msb] << 8) | (src[lsb]);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4210 src += 2;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4211
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4212 if (c1 == '\n' || c1 == '\r')
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4213 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4214 if (*skip == 0)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4215 *skip = src - 2 - source;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4216 total++;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4217 if (c1 == '\n')
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4218 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4219 this_eol_type = CODING_EOL_LF;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4220 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4221 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4222 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4223 if ((src + 1) >= src_end)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4224 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4225 this_eol_type = CODING_EOL_CR;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4226 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4227 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4228 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4229 c2 = (src[msb] << 8) | (src[lsb]);
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4230 if (c2 == '\n')
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4231 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
4232 else
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4233 this_eol_type = CODING_EOL_CR;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4234 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4235 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4236
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4237 if (eol_type == CODING_EOL_UNDECIDED)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4238 /* This is the first end-of-line. */
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4239 eol_type = this_eol_type;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4240 else if (eol_type != this_eol_type)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4241 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4242 /* 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
4243 eol_type = CODING_EOL_INCONSISTENT;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4244 break;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4245 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4246 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4247 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4248
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4249 if (*skip == 0)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4250 *skip = src_end - source;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4251 return eol_type;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4252 }
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4253
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4254 /* 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
4255 is encoded. If it detects an appropriate format of end-of-line, it
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4256 sets the information in *CODING. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4257
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4258 void
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4259 detect_eol (coding, src, src_bytes)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4260 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4261 const unsigned char *src;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4262 int src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4263 {
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
4264 Lisp_Object val;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4265 int skip;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4266 int eol_type;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4267
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4268 switch (coding->category_idx)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4269 {
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4270 case CODING_CATEGORY_IDX_UTF_16_BE:
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4271 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
4272 break;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4273 case CODING_CATEGORY_IDX_UTF_16_LE:
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4274 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
4275 break;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4276 default:
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4277 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
4278 break;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
4279 }
20718
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 (coding->heading_ascii > skip)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4282 coding->heading_ascii = skip;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4283 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4284 skip = coding->heading_ascii;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4285
17835
f36ffb6f1208 Name change through the code:
Kenichi Handa <handa@m17n.org>
parents: 17725
diff changeset
4286 if (eol_type == CODING_EOL_UNDECIDED)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4287 return;
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4288 if (eol_type == CODING_EOL_INCONSISTENT)
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4289 {
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4290 #if 0
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4291 /* 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
4292 distinguish raw text file and binary file. */
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4293
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4294 /* 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
4295 coding should actually be no-conversion. */
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4296 if (coding->type == coding_type_raw_text)
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4297 {
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4298 setup_coding_system (Qno_conversion, coding);
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4299 return;
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4300 }
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4301 /* Else, let's decode only text code anyway. */
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4302 #endif /* 0 */
19743
b228f82192d5 (detect_coding_mask): Re-work previous change.
Richard M. Stallman <rms@gnu.org>
parents: 19688
diff changeset
4303 eol_type = CODING_EOL_LF;
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4304 }
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
4305
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
4306 val = Fget (coding->symbol, Qeol_type);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4307 if (VECTORP (val) && XVECTOR (val)->size == 3)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4308 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4309 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
4310 int dst_multibyte = coding->dst_multibyte;
45981
e513f55424f6 (detect_eol): Preserve coding->cmp_data.
Kenichi Handa <handa@m17n.org>
parents: 45396
diff changeset
4311 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
4312
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4313 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
4314 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
4315 coding->dst_multibyte = dst_multibyte;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4316 coding->heading_ascii = skip;
45981
e513f55424f6 (detect_eol): Preserve coding->cmp_data.
Kenichi Handa <handa@m17n.org>
parents: 45396
diff changeset
4317 coding->cmp_data = cmp_data;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4318 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4319 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4320
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4321 #define CONVERSION_BUFFER_EXTRA_ROOM 256
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4322
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4323 #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
4324 (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
4325 ? 3 \
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4326 : (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
4327 ? 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
4328 : 2))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4329
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4330 /* Return maximum size (bytes) of a buffer enough for decoding
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4331 SRC_BYTES of text encoded in CODING. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4332
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4333 int
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4334 decoding_buffer_size (coding, src_bytes)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4335 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4336 int src_bytes;
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 return (src_bytes * DECODING_BUFFER_MAG (coding)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4339 + CONVERSION_BUFFER_EXTRA_ROOM);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4340 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4341
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4342 /* Return maximum size (bytes) of a buffer enough for encoding
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4343 SRC_BYTES of text to CODING. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4344
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4345 int
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4346 encoding_buffer_size (coding, src_bytes)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4347 struct coding_system *coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4348 int src_bytes;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4349 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4350 int magnification;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4351
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4352 if (coding->type == coding_type_ccl)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4353 magnification = coding->spec.ccl.encoder.buf_magnification;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4354 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
4355 magnification = 3;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4356 else
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4357 magnification = 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4358
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4359 return (src_bytes * magnification + CONVERSION_BUFFER_EXTRA_ROOM);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4360 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4361
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4362 /* Working buffer for code conversion. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4363 struct conversion_buffer
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4364 {
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4365 int size; /* size of data. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4366 int on_stack; /* 1 if allocated by alloca. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4367 unsigned char *data;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4368 };
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4369
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4370 /* Don't use alloca for allocating memory space larger than this, lest
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4371 we overflow their stack. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4372 #define MAX_ALLOCA 16*1024
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4373
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4374 /* 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
4375 #define allocate_conversion_buffer(buf, len) \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4376 do { \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4377 if (len < MAX_ALLOCA) \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4378 { \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4379 buf.data = (unsigned char *) alloca (len); \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4380 buf.on_stack = 1; \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4381 } \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4382 else \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4383 { \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4384 buf.data = (unsigned char *) xmalloc (len); \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4385 buf.on_stack = 0; \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4386 } \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4387 buf.size = len; \
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4388 } while (0)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4389
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4390 /* Double the allocated memory for *BUF. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4391 static void
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4392 extend_conversion_buffer (buf)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4393 struct conversion_buffer *buf;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4394 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4395 if (buf->on_stack)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4396 {
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4397 unsigned char *save = buf->data;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4398 buf->data = (unsigned char *) xmalloc (buf->size * 2);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4399 bcopy (save, buf->data, buf->size);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4400 buf->on_stack = 0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4401 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4402 else
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4403 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4404 buf->data = (unsigned char *) xrealloc (buf->data, buf->size * 2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4405 }
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4406 buf->size *= 2;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4407 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4408
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4409 /* 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
4410 static void
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4411 free_conversion_buffer (buf)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4412 struct conversion_buffer *buf;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4413 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4414 if (!buf->on_stack)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4415 xfree (buf->data);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4416 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4417
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4418 int
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4419 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
4420 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4421 unsigned char *source, *destination;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4422 int src_bytes, dst_bytes, encodep;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4423 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4424 struct ccl_program *ccl
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4425 = encodep ? &coding->spec.ccl.encoder : &coding->spec.ccl.decoder;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4426 unsigned char *dst = destination;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4427
35531
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
4428 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
4429 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
4430 if (encodep)
34813
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4431 {
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4432 /* 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
4433 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
4434 ccl->eol_type = coding->eol_type;
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4435 if (ccl->eol_type ==CODING_EOL_UNDECIDED)
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4436 ccl->eol_type = CODING_EOL_LF;
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4437 ccl->cr_consumed = coding->spec.ccl.cr_carryover;
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4438 }
30756
b72c2759ac70 (ccl_coding_driver): Initialize ccl->multibyte.
Kenichi Handa <handa@m17n.org>
parents: 30674
diff changeset
4439 ccl->multibyte = coding->src_multibyte;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4440 if (coding->spec.ccl.eight_bit_carryover[0] != 0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4441 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4442 /* Move carryover bytes to DESTINATION. */
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4443 unsigned char *p = coding->spec.ccl.eight_bit_carryover;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4444 while (*p)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4445 *dst++ = *p++;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4446 coding->spec.ccl.eight_bit_carryover[0] = 0;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4447 if (dst_bytes)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4448 dst_bytes -= dst - destination;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4449 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4450
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4451 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
4452 &(coding->consumed))
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4453 + dst - destination);
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4454
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4455 if (encodep)
34813
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4456 {
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4457 coding->produced_char = coding->produced;
e112f39ea5b6 (ccl_coding_driver): Initialize ccl->cr_consumed.
Kenichi Handa <handa@m17n.org>
parents: 34593
diff changeset
4458 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
4459 }
36410
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4460 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
4461 {
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4462 /* 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
4463 coding->produced_char
27b5c760df31 (ccl_coding_driver): If ccl->eight_bit_control is zero,
Kenichi Handa <handa@m17n.org>
parents: 36087
diff changeset
4464 = 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
4465 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
4466 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4467 else
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4468 {
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4469 /* On decoding, the destination should always multibyte. But,
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4470 CCL program might have been generated an invalid multibyte
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4471 sequence. Here we make such a sequence valid as
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4472 multibyte. */
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4473 int bytes
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4474 = dst_bytes ? dst_bytes : source + coding->consumed - destination;
34892
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4475
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4476 if ((coding->consumed < src_bytes
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4477 || !ccl->last_block)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4478 && coding->produced >= 1
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4479 && destination[coding->produced - 1] >= 0x80)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4480 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4481 /* We should not convert the tailing 8-bit codes to
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4482 multibyte form even if they doesn't form a valid
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4483 multibyte sequence. They may form a valid sequence in
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4484 the next call. */
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4485 int carryover = 0;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4486
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4487 if (destination[coding->produced - 1] < 0xA0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4488 carryover = 1;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4489 else if (coding->produced >= 2)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4490 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4491 if (destination[coding->produced - 2] >= 0x80)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4492 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4493 if (destination[coding->produced - 2] < 0xA0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4494 carryover = 2;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4495 else if (coding->produced >= 3
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4496 && destination[coding->produced - 3] >= 0x80
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4497 && destination[coding->produced - 3] < 0xA0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4498 carryover = 3;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4499 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4500 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4501 if (carryover > 0)
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4502 {
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4503 BCOPY_SHORT (destination + coding->produced - carryover,
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4504 coding->spec.ccl.eight_bit_carryover,
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4505 carryover);
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4506 coding->spec.ccl.eight_bit_carryover[carryover] = 0;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4507 coding->produced -= carryover;
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4508 }
3868f2e7355a (setup_coding_system): Initialize
Kenichi Handa <handa@m17n.org>
parents: 34888
diff changeset
4509 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4510 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
4511 coding->produced,
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4512 &(coding->produced_char));
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4513 }
23201
392b44751a22 (ccl_coding_driver): Always calculate correct mulibyte
Kenichi Handa <handa@m17n.org>
parents: 23153
diff changeset
4514
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4515 switch (ccl->status)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4516 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4517 case CCL_STAT_SUSPEND_BY_SRC:
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4518 coding->result = CODING_FINISH_INSUFFICIENT_SRC;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4519 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4520 case CCL_STAT_SUSPEND_BY_DST:
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4521 coding->result = CODING_FINISH_INSUFFICIENT_DST;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4522 break;
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
4523 case CCL_STAT_QUIT:
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
4524 case CCL_STAT_INVALID_CMD:
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4525 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
4526 break;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4527 default:
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4528 coding->result = CODING_FINISH_NORMAL;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4529 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4530 }
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4531 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4532 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4533
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4534 /* 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
4535 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
4536 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
4537 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
4538
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4539 static void
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4540 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
4541 struct coding_system *coding;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4542 unsigned char *ptr;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4543 int bytes;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4544 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4545 Lisp_Object val, saved_coding_symbol;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4546 unsigned char *pend = ptr + bytes;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4547 int dummy;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4548
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4549 /* 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
4550 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
4551 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
4552 saved_coding_symbol = coding->symbol;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4553
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4554 coding->spec.ccl.cr_carryover = 0;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4555 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
4556 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4557 /* 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
4558 call detect_eol_type. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4559 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
4560 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
4561 coding->eol_type = CODING_EOL_LF;
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4562 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
4563 {
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4564 val = Fget (coding->symbol, Qeol_type);
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4565 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
4566 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
4567 }
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4568 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
4569 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4570
29877
7b43e1fb478a (decode_eol_post_ccl): Special handling for undecided
Eli Zaretskii <eliz@gnu.org>
parents: 29725
diff changeset
4571 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
4572 || 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
4573 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4574 /* We have nothing to do. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4575 ptr = pend;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4576 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4577 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
4578 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4579 unsigned char *pstart = ptr, *p = ptr;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4580
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4581 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
4582 && *(pend - 1) == '\r')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4583 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4584 /* 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
4585 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
4586 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
4587 coding->spec.ccl.cr_carryover = 1;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4588 coding->produced--;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4589 coding->produced_char--;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4590 pend--;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4591 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4592 while (ptr < pend)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4593 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4594 if (*ptr == '\r')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4595 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4596 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
4597 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4598 *p++ = '\n';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4599 ptr += 2;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4600 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4601 else
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4602 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4603 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
4604 goto undo_eol_conversion;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4605 *p++ = *ptr++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4606 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4607 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4608 else if (*ptr == '\n'
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4609 && 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
4610 goto undo_eol_conversion;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4611 else
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4612 *p++ = *ptr++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4613 continue;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4614
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4615 undo_eol_conversion:
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4616 /* 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
4617 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
4618 for (p--, ptr--; p >= pstart; p--)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4619 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4620 if (*p == '\n')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4621 *ptr-- = '\n', *ptr-- = '\r';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4622 else
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4623 *ptr-- = *p;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4624 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4625 /* 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
4626 convert CRLF anymore. */
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4627 if (coding->spec.ccl.cr_carryover)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4628 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4629 coding->spec.ccl.cr_carryover = 0;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4630 coding->produced++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4631 coding->produced_char++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4632 pend++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4633 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4634 p = ptr = pend;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4635 coding->eol_type = CODING_EOL_LF;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4636 coding->symbol = saved_coding_symbol;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4637 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4638 if (p < pend)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4639 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4640 /* 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
4641 - 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
4642 coding->produced -= pend - p;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4643 coding->produced_char -= pend - p;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4644 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4645 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4646 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
4647 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4648 unsigned char *p = ptr;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4649
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4650 for (; ptr < pend; ptr++)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4651 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4652 if (*ptr == '\r')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4653 *ptr = '\n';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4654 else if (*ptr == '\n'
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4655 && 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
4656 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4657 for (; p < ptr; p++)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4658 {
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4659 if (*p == '\n')
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4660 *p = '\r';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4661 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4662 ptr = pend;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4663 coding->eol_type = CODING_EOL_LF;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4664 coding->symbol = saved_coding_symbol;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4665 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4666 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4667 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4668 }
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4669
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4670 /* 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
4671 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
4672 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
4673 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
4674 unibyte. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4675
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4676 int
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4677 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
4678 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4679 const unsigned char *source;
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4680 unsigned char *destination;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4681 int src_bytes, dst_bytes;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4682 {
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4683 int extra = 0;
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4684
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4685 if (coding->type == coding_type_undecided)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4686 detect_coding (coding, source, src_bytes);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4687
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4688 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
4689 && coding->type != coding_type_ccl)
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4690 {
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4691 detect_eol (coding, source, src_bytes);
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4692 /* 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
4693 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
4694 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL;
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
4695 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4696
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4697 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
4698 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
4699 coding->errors = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4700 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
4701
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4702 switch (coding->type)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4703 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4704 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
4705 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
4706 src_bytes, dst_bytes, 1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4707 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4708
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4709 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
4710 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
4711 src_bytes, dst_bytes);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4712 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4713
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4714 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
4715 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
4716 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
4717 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4718
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4719 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
4720 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
4721 src_bytes, dst_bytes);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4722 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4723
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4724 case coding_type_ccl:
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4725 if (coding->spec.ccl.cr_carryover)
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4726 {
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4727 /* 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
4728 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
4729 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
4730 decode_eol_post_ccl below. */
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4731 *destination = '\r';
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4732 coding->produced++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4733 coding->produced_char++;
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
4734 dst_bytes--;
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4735 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
4736 }
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4737 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
4738 src_bytes, dst_bytes, 0);
29725
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_LF)
45239
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4740 {
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4741 coding->produced += extra;
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4742 coding->produced_char += extra;
6a20d4c6bb78 (decode_coding) <coding_type_ccl>: If a lone CR
Eli Zaretskii <eliz@gnu.org>
parents: 45237
diff changeset
4743 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
4744 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4745 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4746
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4747 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4748 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
4749 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4750
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4751 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
4752 && 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
4753 && coding->consumed == src_bytes)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4754 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
4755
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4756 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
4757 && 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
4758 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4759 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
4760 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
4761
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4762 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
4763 coding->errors++;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4764 if (COMPOSING_P (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4765 DECODE_COMPOSITION_END ('1');
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4766 while (src_bytes--)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4767 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4768 int c = *src++;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4769 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
4770 coding->produced_char++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4771 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4772 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
4773 coding->produced = dst - destination;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4774 coding->result = CODING_FINISH_NORMAL;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4775 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4776
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4777 if (!coding->dst_multibyte)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4778 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4779 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
4780 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
4781 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4782
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4783 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4784 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4785
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4786 /* 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
4787 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
4788 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
4789
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4790 int
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4791 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
4792 struct coding_system *coding;
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4793 const unsigned char *source;
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4794 unsigned char *destination;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4795 int src_bytes, dst_bytes;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4796 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4797 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
4798 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
4799 coding->errors = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4800 coding->result = CODING_FINISH_NORMAL;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4801
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4802 switch (coding->type)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4803 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4804 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
4805 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
4806 src_bytes, dst_bytes, 1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4807 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4808
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4809 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
4810 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
4811 src_bytes, dst_bytes);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4812 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4813
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4814 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
4815 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
4816 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
4817 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4818
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4819 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
4820 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
4821 src_bytes, dst_bytes);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4822 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4823
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4824 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
4825 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
4826 src_bytes, dst_bytes, 1);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4827 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4828
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4829 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4830 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
4831 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4832
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4833 if (coding->mode & CODING_MODE_LAST_BLOCK
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4834 && 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
4835 {
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
4836 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
4837 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
4838
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4839 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
4840 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
4841 if (COMPOSING_P (coding))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4842 *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
4843 if (coding->consumed < src_bytes)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4844 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4845 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
4846
40842
27fa759cd153 (encode_coding): Use precomputed value of `src'.
Pavel Janík <Pavel@Janik.cz>
parents: 40713
diff changeset
4847 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
4848 if (coding->src_multibyte)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4849 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
4850 dst += len;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4851 coding->consumed = src_bytes;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4852 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4853 coding->produced = coding->produced_char = dst - destination;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
4854 coding->result = CODING_FINISH_NORMAL;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4855 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4856
30847
91e24edb537a (encode_coding): Fix the bug of not flushing ISO escape sequence at
Kenichi Handa <handa@m17n.org>
parents: 30833
diff changeset
4857 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
4858 && 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
4859 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
4860
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4861 return coding->result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4862 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4863
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4864 /* 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
4865 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
4866 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
4867 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
4868 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
4869 buffer.
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4870
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4871 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
4872
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4873 static void
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4874 shrink_decoding_region (beg, end, coding, str)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4875 int *beg, *end;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4876 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4877 unsigned char *str;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4878 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4879 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
4880 int eol_conversion;
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4881 Lisp_Object translation_table;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4882
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4883 if (coding->type == coding_type_ccl
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4884 || 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
4885 || 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
4886 || !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
4887 || coding->composing != COMPOSITION_DISABLED)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4888 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4889 /* We can't skip any data. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4890 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4891 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4892 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
4893 || 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
4894 || coding->type == coding_type_emacs_mule)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4895 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4896 /* 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
4897 Decoding routine handles them effectively anyway. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4898 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4899 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4900
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4901 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
4902 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
4903 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
4904 if (CHAR_TABLE_P (translation_table))
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4905 {
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4906 int i;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4907 for (i = 0; i < 128; i++)
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4908 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
4909 break;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4910 if (i < 128)
29247
c748b4b1c785 (shrink_decoding_region): Initialize eol_conversion.
Dave Love <fx@gnu.org>
parents: 29184
diff changeset
4911 /* 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
4912 shrinking. */
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4913 return;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4914 }
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
4915
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
4916 if (coding->heading_ascii >= 0)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4917 /* 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
4918 head. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4919 *beg += coding->heading_ascii;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4920
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4921 if (str)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4922 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4923 begp_orig = begp = str + *beg;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4924 endp_orig = endp = str + *end;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4925 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4926 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4927 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
4928 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
4929 endp_orig = endp = begp + *end - *beg;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4930 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4931
29247
c748b4b1c785 (shrink_decoding_region): Initialize eol_conversion.
Dave Love <fx@gnu.org>
parents: 29184
diff changeset
4932 eol_conversion = (coding->eol_type == CODING_EOL_CR
c748b4b1c785 (shrink_decoding_region): Initialize eol_conversion.
Dave Love <fx@gnu.org>
parents: 29184
diff changeset
4933 || coding->eol_type == CODING_EOL_CRLF);
c748b4b1c785 (shrink_decoding_region): Initialize eol_conversion.
Dave Love <fx@gnu.org>
parents: 29184
diff changeset
4934
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4935 switch (coding->type)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4936 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4937 case coding_type_sjis:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4938 case coding_type_big5:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4939 /* 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
4940 if (coding->heading_ascii < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4941 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4942 if (eol_conversion)
21273
3d9e12cf2e63 (shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents: 21253
diff changeset
4943 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
4944 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4945 while (begp < endp && *begp < 0x80) begp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4946 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4947 /* 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
4948 second byte of SJIS or BIG5 code. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4949 if (eol_conversion)
21273
3d9e12cf2e63 (shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents: 21253
diff changeset
4950 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
4951 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4952 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
4953 /* 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
4954 confuses eol decoding. */
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
4955 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
4956 endp++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4957 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
4958 endp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4959 break;
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 case coding_type_iso2022:
23426
088cb2a804c7 (shrink_decoding_region): If a charset other than ascii
Kenichi Handa <handa@m17n.org>
parents: 23402
diff changeset
4962 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
4963 /* 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
4964 break;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4965 if (coding->heading_ascii < 0)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4966 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4967 /* 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
4968 few control codes. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4969 while (begp < endp && (c = *begp) < 0x80
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4970 && 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
4971 && 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
4972 && (!eol_conversion || c != ISO_CODE_LF))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4973 begp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4974 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4975 switch (coding->category_idx)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4976 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4977 case CODING_CATEGORY_IDX_ISO_8_1:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4978 case CODING_CATEGORY_IDX_ISO_8_2:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4979 /* 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
4980 if (eol_conversion)
21273
3d9e12cf2e63 (shrink_decoding_region): If EOL_CONVERSION is nonzero,
Kenichi Handa <handa@m17n.org>
parents: 21253
diff changeset
4981 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
4982 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4983 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
4984 /* 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
4985 confuses eol decoding. */
64c815fe1bdc (shrink_decoding_region): Do not consider LF as ascii
Richard M. Stallman <rms@gnu.org>
parents: 21664
diff changeset
4986 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
4987 endp++;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4988 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4989
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4990 case CODING_CATEGORY_IDX_ISO_7:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
4991 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
4992 {
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
4993 /* 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
4994 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
4995 unsigned char *eight_bit = NULL;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
4996
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
4997 if (eol_conversion)
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
4998 while (begp < endp
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
4999 && (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
5000 {
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5001 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
5002 endp--;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5003 }
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5004 else
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5005 while (begp < endp
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5006 && (c = endp[-1]) != ISO_CODE_ESC)
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5007 {
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5008 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
5009 endp--;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5010 }
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5011 /* 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
5012 confuses eol decoding. */
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5013 if (begp < endp && endp < endp_orig
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5014 && endp[-1] == '\r' && endp[0] == '\n')
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5015 endp++;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5016 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
5017 {
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5018 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
5019 /* 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
5020 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
5021 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
5022 after that. */
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5023 endp = eight_bit ? eight_bit : endp + 2;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5024 else
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5025 /* Hmmm, we can't skip the tail. */
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5026 endp = endp_orig;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5027 }
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5028 else if (eight_bit)
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5029 endp = eight_bit;
bbd06336cd0c (check_composing_code): If the current composing
Kenichi Handa <handa@m17n.org>
parents: 23315
diff changeset
5030 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5031 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5032 break;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5033
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5034 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5035 abort ();
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5036 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5037 *beg += begp - begp_orig;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5038 *end += endp - endp_orig;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5039 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5040 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5041
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5042 /* Like shrink_decoding_region but for encoding. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5043
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5044 static void
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5045 shrink_encoding_region (beg, end, coding, str)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5046 int *beg, *end;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5047 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5048 unsigned char *str;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5049 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5050 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
5051 int eol_conversion;
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5052 Lisp_Object translation_table;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5053
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5054 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
5055 || 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
5056 || coding->eol_type == CODING_EOL_CR
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
5057 || (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
5058 {
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5059 /* 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
5060 return;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5061 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5062 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
5063 || 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
5064 || 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
5065 || 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
5066 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5067 /* 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
5068 Encoding routine handles them effectively anyway. */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5069 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5070 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5071
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5072 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
5073 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
5074 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
5075 if (CHAR_TABLE_P (translation_table))
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5076 {
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5077 int i;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5078 for (i = 0; i < 128; i++)
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5079 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
5080 break;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5081 if (i < 128)
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5082 /* 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
5083 shrinking. */
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5084 return;
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5085 }
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5086
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5087 if (str)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5088 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5089 begp_orig = begp = str + *beg;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5090 endp_orig = endp = str + *end;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5091 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5092 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5093 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5094 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
5095 endp_orig = endp = begp + *end - *beg;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5096 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5097
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5098 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
5099 || coding->eol_type == CODING_EOL_CRLF);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5100
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5101 /* 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
5102 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
5103 switch (coding->type)
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 case coding_type_iso2022:
23426
088cb2a804c7 (shrink_decoding_region): If a charset other than ascii
Kenichi Handa <handa@m17n.org>
parents: 23402
diff changeset
5106 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
5107 /* 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
5108 break;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5109 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
5110 {
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
5111 unsigned char *bol = begp;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5112 while (begp < endp && *begp < 0x80)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5113 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5114 begp++;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5115 if (begp[-1] == '\n')
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5116 bol = begp;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5117 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5118 begp = bol;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5119 goto label_skip_tail;
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 /* fall down ... */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5122
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5123 case coding_type_sjis:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5124 case coding_type_big5:
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5125 /* 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
5126 if (eol_conversion)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5127 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
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 label_skip_tail:
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5131 if (eol_conversion)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5132 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
5133 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5134 while (begp < endp && *(endp - 1) < 0x80) endp--;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5135 break;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5136
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5137 default:
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5138 abort ();
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5139 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5140
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5141 *beg += begp - begp_orig;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5142 *end += endp - endp_orig;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5143 return;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5144 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5145
23339
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5146 /* 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
5147 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
5148 value. */
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5149 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
5150
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5151 #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
5152 do { \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5153 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
5154 { \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5155 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
5156 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
5157 } \
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5158 } while (0)
2da87b489590 (check_composing_code): Fix previous change. Now it
Kenichi Handa <handa@m17n.org>
parents: 23325
diff changeset
5159
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5160 static Lisp_Object
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5161 code_convert_region_unwind (dummy)
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5162 Lisp_Object dummy;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5163 {
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5164 inhibit_pre_post_conversion = 0;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5165 return Qnil;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5166 }
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5167
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5168 /* Store information about all compositions in the range FROM and TO
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5169 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
5170 buffer or a string, defaults to the current buffer. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5171
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5172 void
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5173 coding_save_composition (coding, from, to, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5174 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5175 int from, to;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5176 Lisp_Object obj;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5177 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5178 Lisp_Object prop;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5179 int start, end;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5180
27943
c2e0998057f9 (coding_save_composition): Be sure to allocate
Kenichi Handa <handa@m17n.org>
parents: 27271
diff changeset
5181 if (coding->composing == COMPOSITION_DISABLED)
c2e0998057f9 (coding_save_composition): Be sure to allocate
Kenichi Handa <handa@m17n.org>
parents: 27271
diff changeset
5182 return;
c2e0998057f9 (coding_save_composition): Be sure to allocate
Kenichi Handa <handa@m17n.org>
parents: 27271
diff changeset
5183 if (!coding->cmp_data)
c2e0998057f9 (coding_save_composition): Be sure to allocate
Kenichi Handa <handa@m17n.org>
parents: 27271
diff changeset
5184 coding_allocate_composition_data (coding, from);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5185 if (!find_composition (from, to, &start, &end, &prop, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5186 || end > to)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5187 return;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5188 if (start < from
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5189 && (!find_composition (end, to, &start, &end, &prop, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5190 || end > to))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5191 return;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5192 coding->composing = COMPOSITION_NO;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5193 do
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5194 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5195 if (COMPOSITION_VALID_P (start, end, prop))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5196 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5197 enum composition_method method = COMPOSITION_METHOD (prop);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5198 if (coding->cmp_data->used + COMPOSITION_DATA_MAX_BUNCH_LENGTH
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5199 >= COMPOSITION_DATA_SIZE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5200 coding_allocate_composition_data (coding, from);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5201 /* For relative composition, we remember start and end
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5202 positions, for the other compositions, we also remember
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5203 components. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5204 CODING_ADD_COMPOSITION_START (coding, start - from, method);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5205 if (method != COMPOSITION_RELATIVE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5206 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5207 /* We must store a*/
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5208 Lisp_Object val, ch;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5209
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5210 val = COMPOSITION_COMPONENTS (prop);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5211 if (CONSP (val))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5212 while (CONSP (val))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5213 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5214 ch = XCAR (val), val = XCDR (val);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5215 CODING_ADD_COMPOSITION_COMPONENT (coding, XINT (ch));
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5216 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5217 else if (VECTORP (val) || STRINGP (val))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5218 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5219 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
5220 ? XVECTOR (val)->size : SCHARS (val));
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5221 int i;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5222 for (i = 0; i < len; i++)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5223 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5224 ch = (STRINGP (val)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5225 ? Faref (val, make_number (i))
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5226 : XVECTOR (val)->contents[i]);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5227 CODING_ADD_COMPOSITION_COMPONENT (coding, XINT (ch));
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5228 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5229 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5230 else /* INTEGERP (val) */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5231 CODING_ADD_COMPOSITION_COMPONENT (coding, XINT (val));
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5232 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5233 CODING_ADD_COMPOSITION_END (coding, end - from);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5234 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5235 start = end;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5236 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5237 while (start < to
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5238 && find_composition (start, to, &start, &end, &prop, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5239 && end <= to);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5240
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5241 /* Make coding->cmp_data point to the first memory block. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5242 while (coding->cmp_data->prev)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5243 coding->cmp_data = coding->cmp_data->prev;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5244 coding->cmp_data_start = 0;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5245 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5246
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5247 /* Reflect the saved information about compositions to OBJ.
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5248 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
5249 is a buffer or a string, defaults to the current buffer. */
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5250
29275
b4ea9178e480 (DECODE_COMPOSITION_START): If coding->cmp_data is not
Kenichi Handa <handa@m17n.org>
parents: 29247
diff changeset
5251 void
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5252 coding_restore_composition (coding, obj)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5253 struct coding_system *coding;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5254 Lisp_Object obj;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5255 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5256 struct composition_data *cmp_data = coding->cmp_data;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5257
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5258 if (!cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5259 return;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5260
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5261 while (cmp_data->prev)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5262 cmp_data = cmp_data->prev;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5263
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5264 while (cmp_data)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5265 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5266 int i;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5267
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5268 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
5269 i += cmp_data->data[i])
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5270 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5271 int *data = cmp_data->data + i;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5272 enum composition_method method = (enum composition_method) data[3];
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5273 Lisp_Object components;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5274
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5275 if (method == COMPOSITION_RELATIVE)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5276 components = Qnil;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5277 else
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5278 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5279 int len = data[0] - 4, j;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5280 Lisp_Object args[MAX_COMPOSITION_COMPONENTS * 2 - 1];
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5281
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5282 for (j = 0; j < len; j++)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5283 args[j] = make_number (data[4 + j]);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5284 components = (method == COMPOSITION_WITH_ALTCHARS
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5285 ? Fstring (len, args) : Fvector (len, args));
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5286 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5287 compose_text (data[1], data[2], components, Qnil, obj);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5288 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5289 cmp_data = cmp_data->next;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5290 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5291 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5292
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5293 /* 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
5294 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
5295 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
5296 (currently, this value has no meaning).
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5297
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5298 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
5299 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
5300 CODING.
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5301
21190
d704dd953837 (code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents: 21140
diff changeset
5302 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
5303 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
5304 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
5305
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5306 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
5307 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
5308
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5309 int
21190
d704dd953837 (code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents: 21140
diff changeset
5310 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
5311 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
5312 struct coding_system *coding;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5313 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5314 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
5315 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
5316 int require, inserted, inserted_byte;
27271
7b495b311f18 (code_convert_region): Initialize total_skip.
Andreas Schwab <schwab@suse.de>
parents: 26900
diff changeset
5317 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
5318 Lisp_Object saved_coding_symbol;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5319 int first = 1;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5320 unsigned char *src, *dst;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
5321 Lisp_Object deletion;
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5322 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
5323 int prev_Z;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5324 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
5325
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
5326 deletion = Qnil;
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
5327 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
5328
21576
8043d47984fd (code_convert_region): If point in the conversion
Kenichi Handa <handa@m17n.org>
parents: 21574
diff changeset
5329 if (from < PT && PT < to)
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5330 {
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5331 TEMP_SET_PT_BOTH (from, from_byte);
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5332 orig_point = from;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5333 }
21576
8043d47984fd (code_convert_region): If point in the conversion
Kenichi Handa <handa@m17n.org>
parents: 21574
diff changeset
5334
21190
d704dd953837 (code_convert_region): The 6th arg name is changed to
Kenichi Handa <handa@m17n.org>
parents: 21140
diff changeset
5335 if (replace)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5336 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5337 int saved_from = from;
30315
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5338 int saved_inhibit_modification_hooks;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5339
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5340 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
5341 if (saved_from != from)
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5342 {
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5343 to = from + len;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5344 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
5345 len_byte = to_byte - from_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5346 }
30315
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5347
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5348 /* 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
5349 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
5350 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
5351 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
5352 inhibit_modification_hooks = 1;
8067ad173141 (code_convert_region): Delete text properties before shrinking the
Kenichi Handa <handa@m17n.org>
parents: 30292
diff changeset
5353 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
5354 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
5355 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5356
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5357 if (! encodep && CODING_REQUIRE_DETECTION (coding))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5358 {
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5359 /* 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
5360
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5361 if (from < GPT && to > GPT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5362 move_gap_both (from, from_byte);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5363 if (coding->type == coding_type_undecided)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5364 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5365 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
5366 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
5367 {
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5368 /* 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
5369 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
5370 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
5371 encodings again in vain. */
57fa108c491f (code_convert_region): Be sure to initialize coding->category_idx.
Kenichi Handa <handa@m17n.org>
parents: 31458
diff changeset
5372 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
5373 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
5374 /* 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
5375 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
5376 later. */
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5377 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
5378 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5379 }
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5380 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
5381 && coding->type != coding_type_ccl)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5382 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5383 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
5384 if (coding->eol_type == CODING_EOL_UNDECIDED)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5385 coding->eol_type = CODING_EOL_LF;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5386 /* 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
5387 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
5388 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5389 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5390 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5391
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5392 /* Now we convert the text. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5393
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5394 /* 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
5395 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
5396 && encodep
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5397 && SYMBOLP (coding->pre_write_conversion)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5398 && ! NILP (Ffboundp (coding->pre_write_conversion)))
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5399 {
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5400 /* 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
5401 new buffer. */
23542
eaf358b2e8dd (code_convert_region): Kill the work buffer created by
Kenichi Handa <handa@m17n.org>
parents: 23537
diff changeset
5402 struct buffer *prev = current_buffer;
eaf358b2e8dd (code_convert_region): Kill the work buffer created by
Kenichi Handa <handa@m17n.org>
parents: 23537
diff changeset
5403 Lisp_Object new;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5404
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5405 record_unwind_protect (code_convert_region_unwind, Qnil);
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5406 /* 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
5407 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
5408 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
5409 call2 (coding->pre_write_conversion,
ca4819c36ab9 (code_convert_region): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
5410 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
5411 inhibit_pre_post_conversion = 0;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5412 /* Discard the unwind protect. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5413 specpdl_ptr--;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5414
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5415 if (current_buffer != prev)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5416 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5417 len = ZV - BEGV;
23542
eaf358b2e8dd (code_convert_region): Kill the work buffer created by
Kenichi Handa <handa@m17n.org>
parents: 23537
diff changeset
5418 new = Fcurrent_buffer ();
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5419 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
5420 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
5421 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
5422 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
5423 Fkill_buffer (new);
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5424 if (orig_point >= to)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5425 orig_point += len - orig_len;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5426 else if (orig_point > from)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5427 orig_point = from;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5428 orig_len = len;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5429 to = from + len;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5430 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
5431 to_byte = CHAR_TO_BYTE (to);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5432 len_byte = to_byte - from_byte;
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5433 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
5434 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5435 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5436
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5437 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
5438 {
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5439 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
5440 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
5441 else
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5442 {
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5443 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
5444 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
5445 }
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5446 }
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5447
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5448 if (coding->composing != COMPOSITION_DISABLED)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5449 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5450 if (encodep)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5451 coding_save_composition (coding, from, to, Fcurrent_buffer ());
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5452 else
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5453 coding_allocate_composition_data (coding, from);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5454 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5455
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5456 /* Try to skip the heading and tailing ASCIIs. */
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5457 if (coding->type != coding_type_ccl)
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5458 {
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5459 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
5460
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5461 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
5462 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
5463 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
5464 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
5465 && (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
5466 && ! CODING_REQUIRE_FLUSHING (coding))
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5467 {
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5468 coding->produced = len_byte;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5469 coding->produced_char = len;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5470 if (!replace)
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5471 /* 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
5472 adjust_after_insert (from, from_byte_orig, to, to_byte_orig, len);
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5473 return 0;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5474 }
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5475
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5476 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
5477 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
5478 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
5479 from += head_skip;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5480 to -= tail_skip;
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5481 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
5482 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5483
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
5484 /* 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
5485 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
5486 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
5487 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
5488 find that it is not enough . */
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5489 require = 2000;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5490
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5491 if (GAP_SIZE < require)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5492 make_gap (require - GAP_SIZE);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5493 move_gap_both (from, from_byte);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5494
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5495 inserted = inserted_byte = 0;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5496
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5497 GAP_SIZE += len_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5498 ZV -= len;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5499 Z -= len;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5500 ZV_BYTE -= len_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5501 Z_BYTE -= len_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5502
25370
20d8158841b0 (code_convert_region): Compute beg/end_unchanged per
Gerd Moellmann <gerd@gnu.org>
parents: 25067
diff changeset
5503 if (GPT - BEG < BEG_UNCHANGED)
20d8158841b0 (code_convert_region): Compute beg/end_unchanged per
Gerd Moellmann <gerd@gnu.org>
parents: 25067
diff changeset
5504 BEG_UNCHANGED = GPT - BEG;
20d8158841b0 (code_convert_region): Compute beg/end_unchanged per
Gerd Moellmann <gerd@gnu.org>
parents: 25067
diff changeset
5505 if (Z - GPT < END_UNCHANGED)
20d8158841b0 (code_convert_region): Compute beg/end_unchanged per
Gerd Moellmann <gerd@gnu.org>
parents: 25067
diff changeset
5506 END_UNCHANGED = Z - GPT;
23258
2f8585bcea90 (code_convert_region): Update beg_unchanged and
Kenichi Handa <handa@m17n.org>
parents: 23201
diff changeset
5507
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5508 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
5509 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5510 /* 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
5511 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
5512 unibyte. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5513 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
5514 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
5515 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
5516 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
5517 len_byte);
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5518 coding->src_multibyte = 0;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5519 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5520
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5521 for (;;)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5522 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5523 int result;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5524
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5525 /* 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
5526 +--------+converted-text+---------+-------original-text-------+---+
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5527 |<-from->|<--inserted-->|---------|<--------len_byte--------->|---|
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5528 |<---------------------- GAP ----------------------->| */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5529 src = GAP_END_ADDR - len_byte;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5530 dst = GPT_ADDR + inserted_byte;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5531
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5532 if (encodep)
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5533 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
5534 else
42105
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
5535 {
09cc243e2d14 (code_convert_region): Update coding->cmp_data->char_offset
Richard M. Stallman <rms@gnu.org>
parents: 42104
diff changeset
5536 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
5537 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
5538 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
5539 }
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5540
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5541 /* 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
5542 +--------+-------converted-text----+--+------original-text----+---+
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5543 |<-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
5544 |<---------------------- GAP ----------------------->| */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5545
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5546 inserted += coding->produced_char;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5547 inserted_byte += coding->produced;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5548 len_byte -= coding->consumed;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5549
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5550 if (result == CODING_FINISH_INSUFFICIENT_CMP)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5551 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5552 coding_allocate_composition_data (coding, from + inserted);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5553 continue;
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5554 }
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5555
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5556 src += coding->consumed;
26240
93f3d2337323 (code_convert_region): Update `dst' correctly.
Kenichi Handa <handa@m17n.org>
parents: 26088
diff changeset
5557 dst += coding->produced;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5558
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5559 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
5560 {
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5561 src += len_byte;
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5562 break;
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5563 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5564 if (! encodep && result == CODING_FINISH_INCONSISTENT_EOL)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5565 {
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5566 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
5567 Lisp_Object eol_type;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5568
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5569 /* 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
5570 if (coding->eol_type == CODING_EOL_CR)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5571 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5572 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
5573 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5574 else
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5575 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5576 int count = 0;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5577
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5578 while (p < pend) if (*p++ == '\n') count++;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5579 if (src - dst < count)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5580 {
24706
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5581 /* 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
5582 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
5583 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
5584 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
5585 the buffer contents again. */
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5586 int add = len_byte + inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5587
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5588 GAP_SIZE -= add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5589 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
5590 GPT += inserted_byte; GPT_BYTE += inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5591 make_gap (count - GAP_SIZE);
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5592 GAP_SIZE += add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5593 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
5594 GPT -= inserted_byte; GPT_BYTE -= inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5595 /* 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
5596 src = GAP_END_ADDR - len_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5597 dst = GPT_ADDR + inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5598 pend = dst;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5599 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5600 inserted += count;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5601 inserted_byte += count;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5602 coding->produced += count;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5603 p = dst = pend + count;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5604 while (count)
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5605 {
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5606 *--p = *--pend;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5607 if (*p == '\n') count--, *--p = '\r';
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5608 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5609 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5610
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5611 /* 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
5612 coding->eol_type = CODING_EOL_LF;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5613
24706
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5614 /* 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
5615 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
5616 if (VECTORP (eol_type)
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5617 && XVECTOR (eol_type)->size == 3
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5618 && 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
5619 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
5620 else
778b3f056f7f (code_convert_region): If eol format is inconsistent,
Kenichi Handa <handa@m17n.org>
parents: 24667
diff changeset
5621 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
5622
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5623 continue;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5624 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5625 if (len_byte <= 0)
23881
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5626 {
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5627 if (coding->type != coding_type_ccl
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5628 || coding->mode & CODING_MODE_LAST_BLOCK)
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5629 break;
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5630 coding->mode |= CODING_MODE_LAST_BLOCK;
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5631 continue;
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5632 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5633 if (result == CODING_FINISH_INSUFFICIENT_SRC)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5634 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5635 /* 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
5636 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
5637 if (multibyte_p)
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5638 {
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5639 unsigned char *start = dst;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
5640
38518
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5641 inserted += len_byte;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5642 while (len_byte--)
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5643 {
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5644 int c = *src++;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5645 dst += CHAR_STRING (c, dst);
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5646 }
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5647
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5648 inserted_byte += dst - start;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5649 }
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5650 else
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5651 {
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5652 inserted += len_byte;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5653 inserted_byte += len_byte;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5654 while (len_byte--)
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5655 *dst++ = *src++;
883da5f3dbac (code_convert_region): Handle the multibyte case if
Gerd Moellmann <gerd@gnu.org>
parents: 38473
diff changeset
5656 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5657 break;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5658 }
23279
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5659 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
5660 {
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5661 /* 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
5662 break;
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5663 }
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5664 /* 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
5665 if (coding->consumed < 1)
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5666 {
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5667 /* 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
5668 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
5669 break;
ca159e828a68 (ccl_coding_driver): If ccl_driver is interrupted by a
Kenichi Handa <handa@m17n.org>
parents: 23258
diff changeset
5670 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5671 if (first)
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5672 {
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5673 /* 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
5674 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
5675 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
5676
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5677 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
5678 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
5679 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
5680 REQUIRE + LEN_BYTE = LEN_BYTE * (NEW / ORIG)
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5681 REQUIRE = LEN_BYTE * (NEW - ORIG) / ORIG
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5682 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
5683 float ratio;
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5684
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5685 if (coding->produced <= coding->consumed)
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5686 {
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5687 /* 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
5688 eol-type CRLF. */
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5689 require = 0;
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5690 }
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5691 else
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5692 {
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5693 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
5694 require = len_byte * ratio;
1a71f916ad2f (code_convert_region): When we need more GAP for
Kenichi Handa <handa@m17n.org>
parents: 47698
diff changeset
5695 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5696 first = 0;
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 if ((src - dst) < (require + 2000))
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5699 {
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5700 /* 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
5701 int add = len_byte + inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5702
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5703 GAP_SIZE -= add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5704 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
5705 GPT += inserted_byte; GPT_BYTE += inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5706 make_gap (require + 2000);
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5707 GAP_SIZE += add;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5708 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
5709 GPT -= inserted_byte; GPT_BYTE -= inserted_byte;
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5710 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5711 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5712 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
5713
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5714 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
5715 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5716 /* 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
5717 multibyte form. */
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5718 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
5719 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5720 GAP_SIZE -= inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5721 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
5722 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
5723 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
5724 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
5725 GAP_SIZE += inserted_byte;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5726 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
5727 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
5728 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
5729 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5730 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
5731 }
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5732
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
5733 /* 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
5734 if (total_skip > 0)
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5735 {
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5736 if (tail_skip > 0)
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5737 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
5738 inserted += total_skip; inserted_byte += total_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5739 GAP_SIZE += total_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5740 GPT -= head_skip; GPT_BYTE -= head_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5741 ZV -= total_skip; ZV_BYTE -= total_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5742 Z -= total_skip; Z_BYTE -= total_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5743 from -= head_skip; from_byte -= head_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5744 to += tail_skip; to_byte += tail_skip;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5745 }
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5746
23537
28cd5faf93dd (code_convert_region): While preserving the orignal
Kenichi Handa <handa@m17n.org>
parents: 23514
diff changeset
5747 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
5748 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
5749 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
5750 else
e85e4d9494b1 (code_convert_region): Don't copy old text if undo disabled.
Richard M. Stallman <rms@gnu.org>
parents: 42105
diff changeset
5751 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
5752 inserted, inserted_byte);
23537
28cd5faf93dd (code_convert_region): While preserving the orignal
Kenichi Handa <handa@m17n.org>
parents: 23514
diff changeset
5753 inserted = Z - prev_Z;
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5754
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5755 if (!encodep && coding->cmp_data && coding->cmp_data->used)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5756 coding_restore_composition (coding, Fcurrent_buffer ());
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5757 coding_free_composition_data (coding);
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5758
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5759 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
5760 && ! 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
5761 {
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5762 Lisp_Object val;
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5763
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5764 if (from != PT)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5765 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
5766 prev_Z = Z;
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5767 record_unwind_protect (code_convert_region_unwind, Qnil);
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5768 /* 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
5769 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
5770 inhibit_pre_post_conversion = 1;
21140
179c73d91f70 (code_convert_region): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 21132
diff changeset
5771 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
5772 inhibit_pre_post_conversion = 0;
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5773 /* Discard the unwind protect. */
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
5774 specpdl_ptr--;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
5775 CHECK_NUMBER (val);
23881
20d595402dea (DECODE_DESIGNATION): Jump to label_invalid_code if
Kenichi Handa <handa@m17n.org>
parents: 23564
diff changeset
5776 inserted += Z - prev_Z;
23514
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5777 }
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5778
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5779 if (orig_point >= from)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5780 {
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5781 if (orig_point >= from + orig_len)
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5782 orig_point += inserted - orig_len;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5783 else
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5784 orig_point = from;
7bad909cd6f1 (setup_coding_system): Fix setting up
Kenichi Handa <handa@m17n.org>
parents: 23475
diff changeset
5785 TEMP_SET_PT (orig_point);
21062
839b22ad1e42 (code_convert_region): Handle the case that codes
Kenichi Handa <handa@m17n.org>
parents: 20999
diff changeset
5786 }
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5787
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5788 if (replace)
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5789 {
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5790 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
5791 update_compositions (from, from + inserted, CHECK_BORDER);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
5792 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5793
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5794 {
21321
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5795 coding->consumed = to_byte - from_byte;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5796 coding->consumed_char = to - from;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5797 coding->produced = inserted_byte;
27b08da98abe (code_convert_region): Handle skipped ASCII characters
Kenichi Handa <handa@m17n.org>
parents: 21308
diff changeset
5798 coding->produced_char = inserted;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5799 }
21132
75c6408013e5 (code_convert_region): Fix previous change. Adjusted
Richard M. Stallman <rms@gnu.org>
parents: 21067
diff changeset
5800
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
5801 return 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5802 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5803
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5804 Lisp_Object
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5805 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
5806 Lisp_Object str;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5807 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
5808 int encodep;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5809 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46150
diff changeset
5810 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
5811 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
5812 int multibyte = STRING_MULTIBYTE (str);
44562
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5813 Lisp_Object buffer;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5814 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
5815 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
5816
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5817 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5818 record_unwind_protect (code_convert_region_unwind, Qnil);
47632
551472d77d2a (run_pre_post_conversion_on_str): Save and restore Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 47274
diff changeset
5819 /* 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
5820 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
5821 GCPRO2 (str, old_deactivate_mark);
44562
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5822
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5823 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
5824 buf = XBUFFER (buffer);
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5825
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5826 buf->directory = current_buffer->directory;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5827 buf->read_only = Qnil;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5828 buf->filename = Qnil;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5829 buf->undo_list = Qt;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5830 buf->overlays_before = Qnil;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5831 buf->overlays_after = Qnil;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5832
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5833 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
5834 /* 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
5835 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
5836 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
5837 Ferase_buffer ();
44562
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5838 buf->enable_multibyte_characters = multibyte ? Qt : Qnil;
11442d8a69cc (run_pre_post_conversion_on_str):
Richard M. Stallman <rms@gnu.org>
parents: 43841
diff changeset
5839
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5840 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
5841 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
5842 UNGCPRO;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5843 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
5844 if (encodep)
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5845 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
5846 else
29172
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
5847 {
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
5848 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
5849 call1 (coding->post_read_conversion, make_number (Z - BEG));
46ad5a027334 (run_pre_post_conversion_on_str): Set point to the
Kenichi Handa <handa@m17n.org>
parents: 29093
diff changeset
5850 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5851 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
5852 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
5853 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
5854 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
5855 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5856
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5857 Lisp_Object
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5858 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
5859 Lisp_Object str;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5860 struct coding_system *coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5861 int nocopy;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5862 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5863 int len;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5864 struct conversion_buffer buf;
34988
8cd5e6ad71a2 (detect_coding_iso2022, setup_coding_system): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 34892
diff changeset
5865 int from, to_byte;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
5866 Lisp_Object saved_coding_symbol;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5867 int result;
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5868 int require_decoding;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5869 int shrinked_bytes = 0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5870 Lisp_Object newstr;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
5871 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
5872
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5873 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
5874 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
5875
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
5876 saved_coding_symbol = coding->symbol;
34536
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
5877 coding->src_multibyte = STRING_MULTIBYTE (str);
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
5878 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
5879 if (CODING_REQUIRE_DETECTION (coding))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5880 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5881 /* See the comments in code_convert_region. */
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5882 if (coding->type == coding_type_undecided)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5883 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
5884 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
5885 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
5886 {
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5887 coding->type = coding_type_emacs_mule;
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5888 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
5889 /* 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
5890 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
5891 later. */
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5892 coding->composing = COMPOSITION_NO;
b511edc4a348 (code_convert_region): After detecting a coding, if
Kenichi Handa <handa@m17n.org>
parents: 35587
diff changeset
5893 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5894 }
29725
2bc397e9b09a (setup_coding_system) <4>: Reset member `cr_carryover'.
Kenichi Handa <handa@m17n.org>
parents: 29663
diff changeset
5895 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
5896 && coding->type != coding_type_ccl)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5897 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5898 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
5899 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
5900 if (coding->eol_type == CODING_EOL_UNDECIDED)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5901 coding->eol_type = CODING_EOL_LF;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5902 /* 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
5903 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
5904 coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5905 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5906 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5907
34536
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
5908 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
5909 || coding->type == coding_type_raw_text)
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
5910 coding->dst_multibyte = 0;
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
5911
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5912 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
5913
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5914 if (STRING_MULTIBYTE (str))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5915 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5916 /* 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
5917 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
5918 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
5919 nocopy = 1;
34536
aa667988f2b0 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 34531
diff changeset
5920 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
5921 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5922
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5923 /* 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
5924 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
5925 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
5926 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
5927 0);
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
5928 if (from == to_byte)
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5929 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
5930 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
5931 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
5932
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5933 if (!require_decoding)
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5934 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
5935 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
5936 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
5937 if (coding->dst_multibyte)
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5938 {
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5939 str = Fstring_as_multibyte (str);
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5940 nocopy = 1;
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5941 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
5942 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
5943 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
5944 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
5945 }
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5946
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5947 if (coding->composing != COMPOSITION_DISABLED)
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
5948 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
5949 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
5950 allocate_conversion_buffer (buf, len);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5951
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
5952 consumed = consumed_char = produced = produced_char = 0;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5953 while (1)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
5954 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
5955 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
5956 buf.data + produced, to_byte - from - consumed,
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5957 buf.size - produced);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5958 consumed += coding->consumed;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
5959 consumed_char += coding->consumed_char;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5960 produced += coding->produced;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5961 produced_char += coding->produced_char;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
5962 if (result == CODING_FINISH_NORMAL
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
5963 || (result == CODING_FINISH_INSUFFICIENT_SRC
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
5964 && coding->consumed == 0))
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5965 break;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5966 if (result == CODING_FINISH_INSUFFICIENT_CMP)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5967 coding_allocate_composition_data (coding, from + produced_char);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5968 else if (result == CODING_FINISH_INSUFFICIENT_DST)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5969 extend_conversion_buffer (&buf);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5970 else if (result == CODING_FINISH_INCONSISTENT_EOL)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5971 {
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
5972 Lisp_Object eol_type;
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
5973
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5974 /* Recover the original EOL format. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5975 if (coding->eol_type == CODING_EOL_CR)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5976 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5977 unsigned char *p;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5978 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
5979 if (*p == '\n') *p = '\r';
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5980 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5981 else if (coding->eol_type == CODING_EOL_CRLF)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5982 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5983 int num_eol = 0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5984 unsigned char *p0, *p1;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5985 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
5986 if (*p0 == '\n') num_eol++;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5987 if (produced + num_eol >= buf.size)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5988 extend_conversion_buffer (&buf);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5989 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
5990 {
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5991 *--p1 = *--p0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5992 if (*p0 == '\n') *--p1 = '\r';
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5993 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5994 produced += num_eol;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
5995 produced_char += num_eol;
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
5996 }
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
5997 /* 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
5998 coding->eol_type = CODING_EOL_LF;
35587
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
5999
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6000 /* 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
6001 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
6002 if (VECTORP (eol_type)
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6003 && XVECTOR (eol_type)->size == 3
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6004 && 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
6005 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
6006 else
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6007 coding->symbol = saved_coding_symbol;
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6008
7e767148cfdc (decode_coding): Set a flag for inhibiting
Kenichi Handa <handa@m17n.org>
parents: 35531
diff changeset
6009
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6010 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6011 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6012
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6013 coding->consumed = consumed;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6014 coding->consumed_char = consumed_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6015 coding->produced = produced;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6016 coding->produced_char = produced_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6017
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6018 if (coding->dst_multibyte)
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6019 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
6020 produced + shrinked_bytes);
30581
6c7a9202a815 (coding_restore_composition): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 30578
diff changeset
6021 else
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6022 newstr = make_uninit_string (produced + shrinked_bytes);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6023 if (from > 0)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6024 STRING_COPYIN (newstr, 0, SDATA (str), from);
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6025 STRING_COPYIN (newstr, from, buf.data, produced);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6026 if (shrinked_bytes > from)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6027 STRING_COPYIN (newstr, from + produced,
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6028 SDATA (str) + to_byte,
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6029 shrinked_bytes - from);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6030 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
6031
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6032 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
6033 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
6034 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
6035
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6036 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
6037 && !NILP (Ffboundp (coding->post_read_conversion)))
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6038 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
6039
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6040 return newstr;
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6041 }
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6042
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6043 Lisp_Object
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6044 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
6045 Lisp_Object str;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6046 struct coding_system *coding;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6047 int nocopy;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6048 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6049 int len;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6050 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
6051 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
6052 int result;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6053 int shrinked_bytes = 0;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6054 Lisp_Object newstr;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6055 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
6056
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6057 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
6058 && !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
6059 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
6060
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6061 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
6062 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
6063 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
6064
32445
05513a882886 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 32443
diff changeset
6065 /* 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
6066 by coding->src_multibyte. */
05513a882886 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 32443
diff changeset
6067 coding->src_multibyte = STRING_MULTIBYTE (str);
05513a882886 (decode_coding_string): Set coding->src_multibyte and
Kenichi Handa <handa@m17n.org>
parents: 32443
diff changeset
6068 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
6069 if (! CODING_REQUIRE_ENCODING (coding))
22723
04b653d7f842 (code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents: 22717
diff changeset
6070 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6071 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
6072 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
6073 if (STRING_MULTIBYTE (str))
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6074 {
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6075 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
6076 nocopy = 1;
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6077 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6078 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
6079 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
6080 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
6081 }
04b653d7f842 (code_convert_string): Count characters again if we
Kenichi Handa <handa@m17n.org>
parents: 22717
diff changeset
6082
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6083 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
6084 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
6085
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6086 /* Try to skip the heading and tailing ASCIIs. */
29985
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6087 if (coding->type != coding_type_ccl)
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6088 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6089 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
6090 1);
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6091 if (from == to_byte)
c17e78d8c720 (code_convert_region): Even if the length of text is
Kenichi Handa <handa@m17n.org>
parents: 29932
diff changeset
6092 return (nocopy ? str : Fcopy_sequence (str));
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6093 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
6094 }
29005
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6095
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6096 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
6097 allocate_conversion_buffer (buf, len);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6098
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6099 consumed = consumed_char = produced = produced_char = 0;
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6100 while (1)
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6101 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6102 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
6103 buf.data + produced, to_byte - from - consumed,
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6104 buf.size - produced);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6105 consumed += coding->consumed;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6106 consumed_char += coding->consumed_char;
30951
e6acd4b6a8d5 (encode_coding_string): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 30950
diff changeset
6107 produced += coding->produced;
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6108 produced_char += coding->produced_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6109 if (result == CODING_FINISH_NORMAL
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6110 || (result == CODING_FINISH_INSUFFICIENT_SRC
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6111 && coding->consumed == 0))
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6112 break;
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6113 /* Now result should be CODING_FINISH_INSUFFICIENT_DST. */
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6114 extend_conversion_buffer (&buf);
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6115 }
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6116
30950
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6117 coding->consumed = consumed;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6118 coding->consumed_char = consumed_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6119 coding->produced = produced;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6120 coding->produced_char = produced_char;
5682de5cfdac (decode_coding_string): Set members consumed,
Kenichi Handa <handa@m17n.org>
parents: 30847
diff changeset
6121
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6122 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
6123 if (from > 0)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6124 STRING_COPYIN (newstr, 0, SDATA (str), from);
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6125 STRING_COPYIN (newstr, from, buf.data, produced);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6126 if (shrinked_bytes > from)
46548
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6127 STRING_COPYIN (newstr, from + produced,
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6128 SDATA (str) + to_byte,
cb1914307488 (encode_eol, detect_coding, detect_eol):
Ken Raeburn <raeburn@raeburn.org>
parents: 46462
diff changeset
6129 shrinked_bytes - from);
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6130
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6131 free_conversion_buffer (&buf);
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6132 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
6133
30833
2db6e42a6ba3 (MINIMUM_CONVERSION_BUFFER_SIZE): Macro deleted.
Kenichi Handa <handa@m17n.org>
parents: 30756
diff changeset
6134 return newstr;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6135 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6136
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6137
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6138 #ifdef emacs
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
6139 /*** 8. Emacs Lisp library functions ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6140
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6141 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
6142 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
6143 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
6144 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
6145 (obj)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6146 Lisp_Object obj;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6147 {
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6148 if (NILP (obj))
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6149 return Qt;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6150 if (!SYMBOLP (obj))
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6151 return Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6152 /* Get coding-spec vector for OBJ. */
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6153 obj = Fget (obj, Qcoding_system);
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6154 return ((VECTORP (obj) && XVECTOR (obj)->size == 5)
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6155 ? Qt : Qnil);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6156 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6157
17717
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6158 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
6159 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
6160 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
6161 (prompt)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6162 Lisp_Object prompt;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6163 {
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6164 Lisp_Object val;
17717
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6165 do
4891aaecc5cc (Fread_coding_system, Fread_non_nil_coding_system):
Richard M. Stallman <rms@gnu.org>
parents: 17485
diff changeset
6166 {
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6167 val = Fcompleting_read (prompt, Vcoding_system_alist, Qnil,
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6168 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
6169 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6170 while (SCHARS (val) == 0);
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6171 return (Fintern (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6172 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6173
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
6174 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
6175 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
6176 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
6177 (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
6178 Lisp_Object prompt, default_coding_system;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6179 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
6180 Lisp_Object val;
19758
49a1662b68dd (Fread_coding_system): New optional arg DEFAULT_CODING_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 19750
diff changeset
6181 if (SYMBOLP (default_coding_system))
45396
cab845213388 * coding.c (Fread_coding_system, code_convert_region1)
Ken Raeburn <raeburn@raeburn.org>
parents: 45239
diff changeset
6182 default_coding_system = SYMBOL_NAME (default_coding_system);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
6183 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
6184 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
6185 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
6186 return (SCHARS (val) == 0 ? Qnil : Fintern (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6187 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6188
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6189 DEFUN ("check-coding-system", Fcheck_coding_system, Scheck_coding_system,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6190 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
6191 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
6192 If valid, return CODING-SYSTEM, else signal a `coding-system-error' error.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6193 It is valid if it is a symbol with a non-nil `coding-system' property.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6194 The value of property should be a vector of length 5. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6195 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6196 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6197 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6198 CHECK_SYMBOL (coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6199 if (!NILP (Fcoding_system_p (coding_system)))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6200 return coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6201 while (1)
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
6202 Fsignal (Qcoding_system_error, Fcons (coding_system, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6203 }
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6204
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6205 Lisp_Object
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6206 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
6207 const unsigned char *src;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6208 int src_bytes, highest;
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6209 int multibytep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6210 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6211 int coding_mask, eol_type;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6212 Lisp_Object val, tmp;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6213 int dummy;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6214
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6215 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
6216 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
6217 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
6218 eol_type = CODING_EOL_UNDECIDED;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6219
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6220 if (!coding_mask)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6221 {
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
6222 val = Qundecided;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6223 if (eol_type != CODING_EOL_UNDECIDED)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6224 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
6225 Lisp_Object val2;
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
6226 val2 = Fget (Qundecided, Qeol_type);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6227 if (VECTORP (val2))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6228 val = XVECTOR (val2)->contents[eol_type];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6229 }
22460
7ca919476042 (detect_coding_system): Always return a list of HIGHEST is zero.
Kenichi Handa <handa@m17n.org>
parents: 22341
diff changeset
6230 return (highest ? val : Fcons (val, Qnil));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6231 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6232
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6233 /* 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
6234 val = Qnil;
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6235 for (tmp = Vcoding_category_list; CONSP (tmp); tmp = XCDR (tmp))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6236 {
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6237 Lisp_Object category_val, category_index;
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6238
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6239 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
6240 category_val = Fsymbol_value (XCAR (tmp));
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6241 if (!NILP (category_val)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6242 && NATNUMP (category_index)
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6243 && (coding_mask & (1 << XFASTINT (category_index))))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6244 {
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
6245 val = Fcons (category_val, val);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6246 if (highest)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6247 break;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6248 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6249 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6250 if (!highest)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6251 val = Fnreverse (val);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6252
22254
1deb7d79af00 (detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents: 22226
diff changeset
6253 /* 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
6254 for (tmp = val; CONSP (tmp); tmp = XCDR (tmp))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6255 {
22254
1deb7d79af00 (detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents: 22226
diff changeset
6256 if (eol_type != CODING_EOL_UNDECIDED
1deb7d79af00 (detect_coding_system): Treat CODING_EOL_INCONSISTENT
Richard M. Stallman <rms@gnu.org>
parents: 22226
diff changeset
6257 && eol_type != CODING_EOL_INCONSISTENT)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6258 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6259 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
6260 eol = Fget (XCAR (tmp), Qeol_type);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6261 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
6262 XSETCAR (tmp, XVECTOR (eol)->contents[eol_type]);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6263 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6264 }
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
6265 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
6266 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6267
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6268 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
6269 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
6270 doc: /* Detect coding system of the text in the region between START and END.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6271 Return a list of possible coding systems ordered by priority.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6272
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6273 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
6274 `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
6275 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
6276
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6277 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
6278 highest priority. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6279 (start, end, highest)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6280 Lisp_Object start, end, highest;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6281 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6282 int from, to;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6283 int from_byte, to_byte;
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6284 int include_anchor_byte = 0;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6285
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6286 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
6287 CHECK_NUMBER_COERCE_MARKER (end);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6288
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6289 validate_region (&start, &end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6290 from = XINT (start), to = XINT (end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6291 from_byte = CHAR_TO_BYTE (from);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6292 to_byte = CHAR_TO_BYTE (to);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6293
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6294 if (from < GPT && to >= GPT)
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6295 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
6296 /* 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
6297 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
6298 byte sequence more accurately.
a1859dfb6a1b (Fdetect_coding_region): Fix comments added by the previous change.
Kenichi Handa <handa@m17n.org>
parents: 36649
diff changeset
6299
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47791
diff changeset
6300 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
6301 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
6302 */
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6303 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
6304 include_anchor_byte = 1;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6305 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
6306 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
6307 !NILP (highest),
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6308 !NILP (current_buffer
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6309 ->enable_multibyte_characters));
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6310 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6311
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6312 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
6313 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
6314 doc: /* Detect coding system of the text in STRING.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6315 Return a list of possible coding systems ordered by priority.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6316
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6317 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
6318 `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
6319 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
6320
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6321 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
6322 highest priority. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6323 (string, highest)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6324 Lisp_Object string, highest;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6325 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6326 CHECK_STRING (string);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6327
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6328 return detect_coding_system (SDATA (string),
36647
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6329 /* "+ 1" is to include the anchor byte
0a75ccbe42b2 (detect_coding_sjis): Do more rigid check.
Kenichi Handa <handa@m17n.org>
parents: 36520
diff changeset
6330 `\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
6331 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
6332 accurately. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
6333 SBYTES (string) + 1,
34531
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6334 !NILP (highest),
37f85e931855 (ONE_MORE_BYTE_CHECK_MULTIBYTE): New macro.
Kenichi Handa <handa@m17n.org>
parents: 34197
diff changeset
6335 STRING_MULTIBYTE (string));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6336 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6337
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6338 /* Return an intersection of lists L1 and L2. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6339
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6340 static Lisp_Object
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6341 intersection (l1, l2)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6342 Lisp_Object l1, l2;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6343 {
45237
3bb204606957 (intersection): Keep the elements of the returned list
Andreas Schwab <schwab@suse.de>
parents: 45227
diff changeset
6344 Lisp_Object val = Fcons (Qnil, Qnil), tail;
3bb204606957 (intersection): Keep the elements of the returned list
Andreas Schwab <schwab@suse.de>
parents: 45227
diff changeset
6345
3bb204606957 (intersection): Keep the elements of the returned list
Andreas Schwab <schwab@suse.de>
parents: 45227
diff changeset
6346 for (tail = val; CONSP (l1); l1 = XCDR (l1))
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6347 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6348 if (!NILP (Fmemq (XCAR (l1), l2)))
45237
3bb204606957 (intersection): Keep the elements of the returned list
Andreas Schwab <schwab@suse.de>
parents: 45227
diff changeset
6349 {
3bb204606957 (intersection): Keep the elements of the returned list
Andreas Schwab <schwab@suse.de>
parents: 45227
diff changeset
6350 XSETCDR (tail, Fcons (XCAR (l1), Qnil));
3bb204606957 (intersection): Keep the elements of the returned list
Andreas Schwab <schwab@suse.de>
parents: 45227
diff changeset
6351 tail = XCDR (tail);
3bb204606957 (intersection): Keep the elements of the returned list
Andreas Schwab <schwab@suse.de>
parents: 45227
diff changeset
6352 }
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6353 }
45237
3bb204606957 (intersection): Keep the elements of the returned list
Andreas Schwab <schwab@suse.de>
parents: 45227
diff changeset
6354 return XCDR (val);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6355 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6356
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6357
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6358 /* Subroutine for Fsafe_coding_systems_region_internal.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6359
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6360 Return a list of coding systems that safely encode the multibyte
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6361 text between P and PEND. SAFE_CODINGS, if non-nil, is a list of
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6362 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
6363 yet found any coding systems.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6364
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6365 WORK_TABLE is a copy of the char-table Vchar_coding_system_table. An
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6366 element of WORK_TABLE is set to t once the element is looked up.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6367
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6368 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
6369 *single_byte_char_found to 1. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6370
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6371 static Lisp_Object
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6372 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
6373 unsigned char *p, *pend;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6374 Lisp_Object safe_codings, work_table;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6375 int *single_byte_char_found;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6376 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6377 int c, len, idx;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6378 Lisp_Object val;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6379
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6380 while (p < pend)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6381 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6382 c = STRING_CHAR_AND_LENGTH (p, pend - p, len);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6383 p += len;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6384 if (ASCII_BYTE_P (c))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6385 /* We can ignore ASCII characters here. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6386 continue;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6387 if (SINGLE_BYTE_CHAR_P (c))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6388 *single_byte_char_found = 1;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6389 if (NILP (safe_codings))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6390 continue;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6391 /* Check the safe coding systems for C. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6392 val = char_table_ref_and_index (work_table, c, &idx);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6393 if (EQ (val, Qt))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6394 /* This element was already checked. Ignore it. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6395 continue;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6396 /* Remember that we checked this element. */
30674
9aad40936cfe *coding.c (find_safe_codings): CHAR_TABLE_SET index must be a lisp object.
Ken Raeburn <raeburn@raeburn.org>
parents: 30581
diff changeset
6397 CHAR_TABLE_SET (work_table, make_number (idx), Qt);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6398
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6399 /* If there are some safe coding systems for C and we have
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6400 already found the other set of coding systems for the
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6401 different characters, get the intersection of them. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6402 if (!EQ (safe_codings, Qt) && !NILP (val))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6403 val = intersection (safe_codings, val);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6404 safe_codings = val;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6405 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6406 return safe_codings;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6407 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6408
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6409
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6410 /* Return a list of coding systems that safely encode the text between
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6411 START and END. If the text contains only ASCII or is unibyte,
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6412 return t. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6413
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6414 DEFUN ("find-coding-systems-region-internal",
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6415 Ffind_coding_systems_region_internal,
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6416 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
6417 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
6418 (start, end)
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6419 Lisp_Object start, end;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6420 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6421 Lisp_Object work_table, safe_codings;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6422 int non_ascii_p = 0;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6423 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
6424 const unsigned char *p1, *p1end, *p2, *p2end, *p;
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6425
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6426 if (STRINGP (start))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6427 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6428 if (!STRING_MULTIBYTE (start))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6429 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
6430 p1 = SDATA (start), p1end = p1 + SBYTES (start);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6431 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
6432 if (SCHARS (start) != SBYTES (start))
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6433 non_ascii_p = 1;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6434 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6435 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6436 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6437 int from, to, stop;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6438
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6439 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
6440 CHECK_NUMBER_COERCE_MARKER (end);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6441 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
6442 args_out_of_range (start, end);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6443 if (NILP (current_buffer->enable_multibyte_characters))
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6444 return Qt;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6445 from = CHAR_TO_BYTE (XINT (start));
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6446 to = CHAR_TO_BYTE (XINT (end));
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6447 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
6448 p1 = BYTE_POS_ADDR (from), p1end = p1 + (stop - from);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6449 if (stop == to)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6450 p2 = p2end = p1end;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6451 else
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6452 p2 = BYTE_POS_ADDR (stop), p2end = p2 + (to - stop);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6453 if (XINT (end) - XINT (start) != to - from)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6454 non_ascii_p = 1;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6455 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6456
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6457 if (!non_ascii_p)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6458 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6459 /* 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
6460 Check if it contains eight-bit-graphic. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6461 p = p1;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6462 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
6463 if (p == p1end)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6464 {
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
6465 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
6466 if (p == p2end)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6467 return Qt;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6468 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6469 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6470
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6471 /* The text contains non-ASCII characters. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6472 work_table = Fcopy_sequence (Vchar_coding_system_table);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6473 safe_codings = find_safe_codings (p1, p1end, Qt, work_table,
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6474 &single_byte_char_found);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6475 if (p2 < p2end)
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6476 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
6477 &single_byte_char_found);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6478
38391
6e498054580e (Ffind_coding_systems_region_internal): If safe_codings
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37231
diff changeset
6479 if (EQ (safe_codings, Qt))
6e498054580e (Ffind_coding_systems_region_internal): If safe_codings
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37231
diff changeset
6480 ; /* Nothing to be done. */
6e498054580e (Ffind_coding_systems_region_internal): If safe_codings
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 37231
diff changeset
6481 else if (!single_byte_char_found)
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6482 {
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6483 /* Append generic coding systems. */
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6484 Lisp_Object args[2];
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6485 args[0] = safe_codings;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6486 args[1] = Fchar_table_extra_slot (Vchar_coding_system_table,
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6487 make_number (0));
30674
9aad40936cfe *coding.c (find_safe_codings): CHAR_TABLE_SET index must be a lisp object.
Ken Raeburn <raeburn@raeburn.org>
parents: 30581
diff changeset
6488 safe_codings = Fappend (2, args);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6489 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6490 else
33931
6ed22a848efa (Ffind_coding_systems_region_internal): Be sure to
Kenichi Handa <handa@m17n.org>
parents: 33828
diff changeset
6491 safe_codings = Fcons (Qraw_text,
6ed22a848efa (Ffind_coding_systems_region_internal): Be sure to
Kenichi Handa <handa@m17n.org>
parents: 33828
diff changeset
6492 Fcons (Qemacs_mule,
6ed22a848efa (Ffind_coding_systems_region_internal): Be sure to
Kenichi Handa <handa@m17n.org>
parents: 33828
diff changeset
6493 Fcons (Qno_conversion, safe_codings)));
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6494 return safe_codings;
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6495 }
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6496
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
6497
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6498 /* 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
6499 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
6500 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
6501 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
6502
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6503 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
6504 character is nil.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6505
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6506 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
6507
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6508 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
6509 eight-bit-graphic characters are unencodable. */
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6510
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6511 static Lisp_Object
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6512 unencodable_char_position (safe_chars, pos, p, pend, n)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6513 Lisp_Object safe_chars;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6514 int pos;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6515 unsigned char *p, *pend;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6516 int n;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6517 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6518 Lisp_Object pos_list;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6519
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6520 pos_list = Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6521 while (p < pend)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6522 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6523 int len;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6524 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
6525
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6526 if (c >= 128
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6527 && (CHAR_TABLE_P (safe_chars)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6528 ? NILP (CHAR_TABLE_REF (safe_chars, c))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6529 : (NILP (safe_chars) || c < 256)))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6530 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6531 pos_list = Fcons (make_number (pos), pos_list);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6532 if (--n <= 0)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6533 break;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6534 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6535 pos++;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6536 p += len;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6537 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6538 return Fnreverse (pos_list);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6539 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6540
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6541
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6542 DEFUN ("unencodable-char-position", Funencodable_char_position,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6543 Sunencodable_char_position, 3, 5, 0,
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6544 doc: /*
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6545 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
6546 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
6547 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
6548
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6549 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
6550 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
6551 list of positions.
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6552
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6553 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
6554 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
6555 to the string. */)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6556 (start, end, coding_system, count, string)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6557 Lisp_Object start, end, coding_system, count, string;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6558 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6559 int n;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6560 Lisp_Object safe_chars;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6561 struct coding_system coding;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6562 Lisp_Object positions;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6563 int from, to;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6564 unsigned char *p, *pend;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6565
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6566 if (NILP (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6567 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6568 validate_region (&start, &end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6569 from = XINT (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6570 to = XINT (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6571 if (NILP (current_buffer->enable_multibyte_characters))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6572 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6573 p = CHAR_POS_ADDR (from);
48829
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
6574 if (to == GPT)
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
6575 pend = GPT_ADDR;
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
6576 else
f6c59ca557c7 (Funencodable_char_position): Set pend correctly.
Kenichi Handa <handa@m17n.org>
parents: 48230
diff changeset
6577 pend = CHAR_POS_ADDR (to);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6578 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6579 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6580 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6581 CHECK_STRING (string);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6582 CHECK_NATNUM (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6583 CHECK_NATNUM (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6584 from = XINT (start);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6585 to = XINT (end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6586 if (from > to
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6587 || to > SCHARS (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6588 args_out_of_range_3 (string, start, end);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6589 if (! STRING_MULTIBYTE (string))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6590 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6591 p = SDATA (string) + string_char_to_byte (string, from);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6592 pend = SDATA (string) + string_char_to_byte (string, to);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6593 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6594
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6595 setup_coding_system (Fcheck_coding_system (coding_system), &coding);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6596
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6597 if (NILP (count))
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6598 n = 1;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6599 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6600 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6601 CHECK_NATNUM (count);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6602 n = XINT (count);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6603 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6604
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6605 if (coding.type == coding_type_no_conversion
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6606 || coding.type == coding_type_raw_text)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6607 return Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6608
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6609 if (coding.type == coding_type_undecided)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6610 safe_chars = Qnil;
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6611 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6612 safe_chars = coding_safe_chars (&coding);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6613
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6614 if (STRINGP (string)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6615 || from >= GPT || to <= GPT)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6616 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
6617 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6618 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6619 Lisp_Object args[2];
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6620
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6621 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
6622 n -= XINT (Flength (args[0]));
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6623 if (n <= 0)
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6624 positions = args[0];
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6625 else
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6626 {
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6627 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
6628 pend, n);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6629 positions = Fappend (2, args);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6630 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6631 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6632
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6633 return (NILP (count) ? Fcar (positions) : positions);
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6634 }
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6635
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
6636
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6637 Lisp_Object
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6638 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
6639 Lisp_Object start, end, coding_system;
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6640 int encodep;
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6641 {
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6642 struct coding_system coding;
34988
8cd5e6ad71a2 (detect_coding_iso2022, setup_coding_system): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 34892
diff changeset
6643 int from, to;
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6644
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6645 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
6646 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
6647 CHECK_SYMBOL (coding_system);
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6648
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6649 validate_region (&start, &end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6650 from = XFASTINT (start);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6651 to = XFASTINT (end);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6652
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6653 if (NILP (coding_system))
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6654 return make_number (to - from);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6655
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6656 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
6657 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
6658
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6659 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
6660 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
6661 = !NILP (current_buffer->enable_multibyte_characters);
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6662 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
6663 &coding, encodep, 1);
22020
e144ad749084 (code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents: 22009
diff changeset
6664 Vlast_coding_system_used = coding.symbol;
20931
068eb408c911 (decode_coding_iso2022): Update coding->fake_multibyte.
Kenichi Handa <handa@m17n.org>
parents: 20803
diff changeset
6665 return make_number (coding.produced_char);
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6666 }
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6667
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6668 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
6669 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
6670 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
6671 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
6672 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
6673 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
6674 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
6675 not fully specified.)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6676 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
6677 (start, end, coding_system)
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6678 Lisp_Object start, end, coding_system;
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6679 {
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6680 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
6681 }
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6682
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6683 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
6684 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
6685 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
6686 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
6687 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
6688 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
6689 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
6690 not fully specified.)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6691 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
6692 (start, end, coding_system)
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6693 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
6694 {
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6695 return code_convert_region1 (start, end, coding_system, 1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6696 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6697
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6698 Lisp_Object
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6699 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
6700 Lisp_Object string, coding_system, nocopy;
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6701 int encodep;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6702 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6703 struct coding_system coding;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6704
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6705 CHECK_STRING (string);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6706 CHECK_SYMBOL (coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6707
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6708 if (NILP (coding_system))
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6709 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
6710
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6711 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
6712 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
6713
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
6714 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
6715 string = (encodep
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6716 ? 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
6717 : 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
6718 Vlast_coding_system_used = coding.symbol;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6719
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6720 return string;
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6721 }
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6722
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6723 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
6724 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
6725 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
6726 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
6727 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
6728 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
6729 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
6730 not fully specified.) */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6731 (string, coding_system, nocopy)
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6732 Lisp_Object string, coding_system, nocopy;
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6733 {
22020
e144ad749084 (code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents: 22009
diff changeset
6734 return code_convert_string1 (string, coding_system, nocopy, 0);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6735 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6736
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6737 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
6738 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
6739 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
6740 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
6741 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
6742 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
6743 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
6744 not fully specified.) */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6745 (string, coding_system, nocopy)
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
6746 Lisp_Object string, coding_system, nocopy;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6747 {
22020
e144ad749084 (code_convert_region1): Set Vlast_coding_system_used.
Richard M. Stallman <rms@gnu.org>
parents: 22009
diff changeset
6748 return code_convert_string1 (string, coding_system, nocopy, 1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6749 }
20803
0fa2183c587d (ENCODE_ISO_CHARACTER): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 20794
diff changeset
6750
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6751 /* Encode or decode STRING according to CODING_SYSTEM.
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6752 Do not set Vlast_coding_system_used.
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6753
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6754 This function is called only from macros DECODE_FILE and
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6755 ENCODE_FILE, thus we ignore character composition. */
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6756
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6757 Lisp_Object
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6758 code_convert_string_norecord (string, coding_system, encodep)
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6759 Lisp_Object string, coding_system;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6760 int encodep;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6761 {
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6762 struct coding_system coding;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6763
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6764 CHECK_STRING (string);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6765 CHECK_SYMBOL (coding_system);
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6766
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6767 if (NILP (coding_system))
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6768 return string;
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6769
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6770 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
6771 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
6772
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6773 coding.composing = COMPOSITION_DISABLED;
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6774 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
6775 return (encodep
b396df3a5181 (ONE_MORE_BYTE, TWO_MORE_BYTES): Set coding->resutl to
Kenichi Handa <handa@m17n.org>
parents: 28512
diff changeset
6776 ? 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
6777 : decode_coding_string (string, &coding, 1));
22341
572ba933a4bf (code_convert_string_norecord): New function.
Karl Heuer <kwzh@gnu.org>
parents: 22329
diff changeset
6778 }
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6779
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6780 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
6781 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
6782 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
6783 (code)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6784 Lisp_Object code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6785 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6786 unsigned char c1, c2, s1, s2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6787 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6788
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6789 CHECK_NUMBER (code);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6790 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
6791 if (s1 == 0)
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6792 {
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6793 if (s2 < 0x80)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6794 XSETFASTINT (val, s2);
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6795 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
6796 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
6797 else
24344
8b7ef7fb9e2e (Fdecode_sjis_char): In case of error, use %x for
Kenichi Handa <handa@m17n.org>
parents: 24324
diff changeset
6798 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
6799 }
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6800 else
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6801 {
41899
5c01da9c8604 (setup_coding_system, shrink_encoding_region)
Pavel Janík <Pavel@Janik.cz>
parents: 41678
diff changeset
6802 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
6803 || (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
6804 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
6805 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
6806 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
6807 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6808 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6809 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6810
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6811 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
6812 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
6813 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
6814 (ch)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6815 Lisp_Object ch;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6816 {
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
6817 int charset, c1, c2, s1, s2;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6818 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6819
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6820 CHECK_NUMBER (ch);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6821 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
6822 if (charset == CHARSET_ASCII)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6823 {
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6824 val = ch;
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6825 }
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6826 else if (charset == charset_jisx0208
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6827 && c1 > 0x20 && c1 < 0x7F && c2 > 0x20 && c2 < 0x7F)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6828 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6829 ENCODE_SJIS (c1, c2, s1, s2);
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
6830 XSETFASTINT (val, (s1 << 8) | s2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6831 }
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6832 else if (charset == charset_katakana_jisx0201
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6833 && c1 > 0x20 && c2 < 0xE0)
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6834 {
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6835 XSETFASTINT (val, c1 | 0x80);
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6836 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6837 else
24065
7e291dea6141 (Fdecode_sjis_char): Decode Japanese Katakana character
Kenichi Handa <handa@m17n.org>
parents: 24056
diff changeset
6838 error ("Can't encode to shift_jis: %d", XFASTINT (ch));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6839 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6840 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6841
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6842 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
6843 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
6844 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
6845 (code)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6846 Lisp_Object code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6847 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6848 int charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6849 unsigned char b1, b2, c1, c2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6850 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6851
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6852 CHECK_NUMBER (code);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6853 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
6854 if (b1 == 0)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6855 {
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6856 if (b2 >= 0x80)
24344
8b7ef7fb9e2e (Fdecode_sjis_char): In case of error, use %x for
Kenichi Handa <handa@m17n.org>
parents: 24324
diff changeset
6857 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
6858 val = code;
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6859 }
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6860 else
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6861 {
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6862 if ((b1 < 0xA1 || b1 > 0xFE)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6863 || (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
6864 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
6865 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
6866 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
6867 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6868 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6869 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6870
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6871 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
6872 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
6873 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
6874 (ch)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6875 Lisp_Object ch;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6876 {
17320
9d15bec5f47e (detect_coding_iso2022, detect_coding_mask): Ignore
Kenichi Handa <handa@m17n.org>
parents: 17304
diff changeset
6877 int charset, c1, c2, b1, b2;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6878 Lisp_Object val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6879
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6880 CHECK_NUMBER (ch);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6881 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
6882 if (charset == CHARSET_ASCII)
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6883 {
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6884 val = ch;
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6885 }
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6886 else if ((charset == charset_big5_1
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6887 && (XFASTINT (ch) >= 0x250a1 && XFASTINT (ch) <= 0x271ec))
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6888 || (charset == charset_big5_2
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6889 && XFASTINT (ch) >= 0x290a1 && XFASTINT (ch) <= 0x2bdb2))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6890 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6891 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
6892 XSETFASTINT (val, (b1 << 8) | b2);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6893 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6894 else
24324
2eec590faf26 (Fdecode_sjis_char, Fencode_sjis_char): Hanlde
Kenichi Handa <handa@m17n.org>
parents: 24316
diff changeset
6895 error ("Can't encode to Big5: %d", XFASTINT (ch));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6896 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6897 }
20680
dd46027e8412 (code_convert_region): Always count chars inserted
Richard M. Stallman <rms@gnu.org>
parents: 20668
diff changeset
6898
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
6899 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
6900 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
6901 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
6902 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6903 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6904 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6905 CHECK_SYMBOL (coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6906 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
6907 /* We had better not send unsafe characters to terminal. */
19285
af3d00fde172 (Fset_terminal_coding_system_internal): Set
Kenichi Handa <handa@m17n.org>
parents: 19280
diff changeset
6908 terminal_coding.flags |= CODING_FLAG_ISO_SAFE;
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
6909 /* Character composition should be disabled. */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6910 terminal_coding.composing = COMPOSITION_DISABLED;
35531
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
6911 /* Error notification should be suppressed. */
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
6912 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
6913 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
6914 terminal_coding.dst_multibyte = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6915 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6916 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6917
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
6918 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
6919 Sset_safe_terminal_coding_system_internal, 1, 1, 0,
41006
fd83ec62a495 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 40842
diff changeset
6920 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
6921 (coding_system)
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
6922 Lisp_Object coding_system;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
6923 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6924 CHECK_SYMBOL (coding_system);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
6925 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
6926 &safe_terminal_coding);
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
6927 /* Character composition should be disabled. */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6928 safe_terminal_coding.composing = COMPOSITION_DISABLED;
35531
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
6929 /* Error notification should be suppressed. */
36de5bf9969c (ccl_coding_driver): Setup ccl->suppress_error.
Kenichi Handa <handa@m17n.org>
parents: 35053
diff changeset
6930 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
6931 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
6932 safe_terminal_coding.dst_multibyte = 0;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
6933 return Qnil;
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
6934 }
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
6935
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
6936 DEFUN ("terminal-coding-system", Fterminal_coding_system,
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
6937 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
6938 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
6939 ()
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6940 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6941 return terminal_coding.symbol;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6942 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6943
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
6944 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
6945 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
6946 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
6947 (coding_system)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6948 Lisp_Object coding_system;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6949 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40461
diff changeset
6950 CHECK_SYMBOL (coding_system);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6951 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
6952 /* Character composition should be disabled. */
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
6953 keyboard_coding.composing = COMPOSITION_DISABLED;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6954 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6955 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6956
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
6957 DEFUN ("keyboard-coding-system", Fkeyboard_coding_system,
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
6958 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
6959 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
6960 ()
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6961 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6962 return keyboard_coding.symbol;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6963 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6964
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6965
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
6966 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
6967 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
6968 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
6969 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
6970 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
6971 \(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
6972 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
6973
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6974 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
6975 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
6976 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
6977 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
6978
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6979 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
6980 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
6981 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
6982 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
6983
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6984 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
6985 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
6986 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
6987 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
6988
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6989 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
6990 `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
6991 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
6992 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
6993 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
6994 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
6995 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
6996
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
6997 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
6998 (nargs, args)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6999 int nargs;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7000 Lisp_Object *args;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7001 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7002 Lisp_Object operation, target_idx, target, val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7003 register Lisp_Object chain;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7004
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7005 if (nargs < 2)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7006 error ("Too few arguments");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7007 operation = args[0];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7008 if (!SYMBOLP (operation)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7009 || !INTEGERP (target_idx = Fget (operation, Qtarget_idx)))
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
7010 error ("Invalid first argument");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7011 if (nargs < 1 + XINT (target_idx))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7012 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
7013 SDATA (SYMBOL_NAME (operation)));
46838
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7014 /* 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
7015 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
7016 target file name. */
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7017 if (EQ (operation, Qwrite_region)
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7018 && nargs > 5
395572099269 (Ffind_operation_coding_system): For write-region, if
Kenichi Handa <handa@m17n.org>
parents: 46702
diff changeset
7019 && STRINGP (args[5]))
46839
4acadb428f41 (Ffind_operation_coding_system): Fix Lisp_Object/int mixup.
Ken Raeburn <raeburn@raeburn.org>
parents: 46838
diff changeset
7020 target_idx = make_number (4);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7021 target = args[XINT (target_idx) + 1];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7022 if (!(STRINGP (target)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7023 || (EQ (operation, Qopen_network_stream) && INTEGERP (target))))
36087
05ef3feab39b Doc and message fixes.
Dave Love <fx@gnu.org>
parents: 35995
diff changeset
7024 error ("Invalid argument %d", XINT (target_idx) + 1);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7025
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18536
diff changeset
7026 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
7027 || EQ (operation, Qwrite_region))
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7028 ? 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
7029 : (EQ (operation, Qopen_network_stream)
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7030 ? Vnetwork_coding_system_alist
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7031 : Vprocess_coding_system_alist));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7032 if (NILP (chain))
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7033 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7034
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7035 for (; CONSP (chain); chain = XCDR (chain))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7036 {
19747
bed06df9cbc5 (setup_coding_system, Ffind_operation_coding_system)
Richard M. Stallman <rms@gnu.org>
parents: 19743
diff changeset
7037 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
7038 elt = XCAR (chain);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7039
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7040 if (CONSP (elt)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7041 && ((STRINGP (target)
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7042 && STRINGP (XCAR (elt))
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7043 && 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
7044 || (INTEGERP (target) && EQ (target, XCAR (elt)))))
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7045 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7046 val = XCDR (elt);
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7047 /* 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
7048 function symbol, we return VAL as a coding system. */
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7049 if (CONSP (val))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7050 return val;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7051 if (! SYMBOLP (val))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7052 return Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7053 if (! NILP (Fcoding_system_p (val)))
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7054 return Fcons (val, val);
19763
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7055 if (! NILP (Ffboundp (val)))
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7056 {
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7057 val = call1 (val, Flist (nargs, args));
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7058 if (CONSP (val))
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7059 return val;
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7060 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
7061 return Fcons (val, val);
ab2fd2c85986 (Ffind_operation_coding_system): If a function in
Kenichi Handa <handa@m17n.org>
parents: 19758
diff changeset
7062 }
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7063 return Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7064 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7065 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7066 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7067 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7068
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7069 DEFUN ("update-coding-systems-internal", Fupdate_coding_systems_internal,
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7070 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
7071 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
7072 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
7073 call this function. */)
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7074 ()
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7075 {
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7076 int i;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7077
28022
6c41f3276340 Add comments on coding-category-utf-8,
Kenichi Handa <handa@m17n.org>
parents: 27943
diff changeset
7078 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
7079 {
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7080 Lisp_Object val;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7081
39581
6d9fa06012a6 Use SYMBOL_VALUE/SET_SYMBOL_VALUE macros instead of accessing
Gerd Moellmann <gerd@gnu.org>
parents: 38518
diff changeset
7082 val = SYMBOL_VALUE (XVECTOR (Vcoding_category_table)->contents[i]);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7083 if (!NILP (val))
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7084 {
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7085 if (! coding_system_table[i])
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7086 coding_system_table[i] = ((struct coding_system *)
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7087 xmalloc (sizeof (struct coding_system)));
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7088 setup_coding_system (val, coding_system_table[i]);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7089 }
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7090 else if (coding_system_table[i])
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7091 {
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7092 xfree (coding_system_table[i]);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7093 coding_system_table[i] = NULL;
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7094 }
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7095 }
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7096
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7097 return Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7098 }
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7099
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7100 DEFUN ("set-coding-priority-internal", Fset_coding_priority_internal,
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7101 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
7102 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
7103 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
7104 ()
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7105 {
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7106 int i = 0, idx;
22954
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
7107 Lisp_Object val;
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
7108
928b337d953b Avoid using initializers for Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents: 22874
diff changeset
7109 val = Vcoding_category_list;
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7110
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7111 while (CONSP (val) && i < CODING_CATEGORY_IDX_MAX)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7112 {
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7113 if (! SYMBOLP (XCAR (val)))
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7114 break;
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25370
diff changeset
7115 idx = XFASTINT (Fget (XCAR (val), Qcoding_category_index));
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7116 if (idx >= CODING_CATEGORY_IDX_MAX)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7117 break;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7118 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
7119 val = XCDR (val);
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7120 }
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7121 /* 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
7122 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
7123 the following code saves Emacs from crashing. */
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7124 while (i < CODING_CATEGORY_IDX_MAX)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7125 coding_priorities[i++] = CODING_CATEGORY_MASK_RAW_TEXT;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7126
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7127 return Qnil;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7128 }
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7129
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7130 #endif /* emacs */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7131
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7132
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7133 /*** 9. Post-amble ***/
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7134
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21505
diff changeset
7135 void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7136 init_coding_once ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7137 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7138 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7139
42104
d69c2368e549 (DECODE_COMPOSITION_END): Fixed a typo in the last
Sam Steingold <sds@gnu.org>
parents: 42103
diff changeset
7140 /* Emacs' internal format specific initialize routine. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7141 for (i = 0; i <= 0x20; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7142 emacs_code_class[i] = EMACS_control_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7143 emacs_code_class[0x0A] = EMACS_linefeed_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7144 emacs_code_class[0x0D] = EMACS_carriage_return_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7145 for (i = 0x21 ; i < 0x7F; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7146 emacs_code_class[i] = EMACS_ascii_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7147 emacs_code_class[0x7F] = EMACS_control_code;
26847
2f17ea330dae Include composite.h.
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
7148 for (i = 0x80; i < 0xFF; i++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7149 emacs_code_class[i] = EMACS_invalid_code;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7150 emacs_code_class[LEADING_CODE_PRIVATE_11] = EMACS_leading_code_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7151 emacs_code_class[LEADING_CODE_PRIVATE_12] = EMACS_leading_code_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7152 emacs_code_class[LEADING_CODE_PRIVATE_21] = EMACS_leading_code_4;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7153 emacs_code_class[LEADING_CODE_PRIVATE_22] = EMACS_leading_code_4;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7154
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7155 /* ISO2022 specific initialize routine. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7156 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
7157 iso_code_class[i] = ISO_control_0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7158 for (i = 0x21; i < 0x7F; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7159 iso_code_class[i] = ISO_graphic_plane_0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7160 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
7161 iso_code_class[i] = ISO_control_1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7162 for (i = 0xA1; i < 0xFF; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7163 iso_code_class[i] = ISO_graphic_plane_1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7164 iso_code_class[0x20] = iso_code_class[0x7F] = ISO_0x20_or_0x7F;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7165 iso_code_class[0xA0] = iso_code_class[0xFF] = ISO_0xA0_or_0xFF;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7166 iso_code_class[ISO_CODE_CR] = ISO_carriage_return;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7167 iso_code_class[ISO_CODE_SO] = ISO_shift_out;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7168 iso_code_class[ISO_CODE_SI] = ISO_shift_in;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7169 iso_code_class[ISO_CODE_SS2_7] = ISO_single_shift_2_7;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7170 iso_code_class[ISO_CODE_ESC] = ISO_escape;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7171 iso_code_class[ISO_CODE_SS2] = ISO_single_shift_2;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7172 iso_code_class[ISO_CODE_SS3] = ISO_single_shift_3;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7173 iso_code_class[ISO_CODE_CSI] = ISO_control_sequence_introducer;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7174
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7175 setup_coding_system (Qnil, &keyboard_coding);
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7176 setup_coding_system (Qnil, &terminal_coding);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7177 setup_coding_system (Qnil, &safe_terminal_coding);
22979
ceb8e4a89a32 (default_buffer_file_coding): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22964
diff changeset
7178 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
7179
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7180 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
7181
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7182 bzero (ascii_skip_code, sizeof ascii_skip_code);
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7183 for (i = 0; i < 128; i++)
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7184 ascii_skip_code[i] = 1;
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7185
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7186 #if defined (MSDOS) || defined (WINDOWSNT)
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7187 system_eol_type = CODING_EOL_CRLF;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7188 #else
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7189 system_eol_type = CODING_EOL_LF;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7190 #endif
26067
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
7191
f54ca66e2571 (code_convert_string): Add record_unwind_protect to
Kenichi Handa <handa@m17n.org>
parents: 25860
diff changeset
7192 inhibit_pre_post_conversion = 0;
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7193 }
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7194
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7195 #ifdef emacs
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7196
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21505
diff changeset
7197 void
17119
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7198 syms_of_coding ()
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7199 {
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7200 Qtarget_idx = intern ("target-idx");
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7201 staticpro (&Qtarget_idx);
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7202
19750
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
7203 Qcoding_system_history = intern ("coding-system-history");
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
7204 staticpro (&Qcoding_system_history);
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
7205 Fset (Qcoding_system_history, Qnil);
95e4e1cba6ac (Qcoding_system_history): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 19747
diff changeset
7206
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7207 /* 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
7208 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
7209 /* 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
7210 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
7211
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7212 Qcall_process = intern ("call-process");
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7213 staticpro (&Qcall_process);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7214 /* 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
7215 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
7216
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7217 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
7218 staticpro (&Qcall_process_region);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7219 /* 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
7220 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
7221
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7222 Qstart_process = intern ("start-process");
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7223 staticpro (&Qstart_process);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7224 /* 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
7225 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
7226
2cfb31c15ced (create_process, Fopen_network_stream): Typo in indexes
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
7227 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
7228 staticpro (&Qopen_network_stream);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7229 /* 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
7230 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
7231
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7232 Qcoding_system = intern ("coding-system");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7233 staticpro (&Qcoding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7234
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7235 Qeol_type = intern ("eol-type");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7236 staticpro (&Qeol_type);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7237
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7238 Qbuffer_file_coding_system = intern ("buffer-file-coding-system");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7239 staticpro (&Qbuffer_file_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7240
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7241 Qpost_read_conversion = intern ("post-read-conversion");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7242 staticpro (&Qpost_read_conversion);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7243
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7244 Qpre_write_conversion = intern ("pre-write-conversion");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7245 staticpro (&Qpre_write_conversion);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7246
19612
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7247 Qno_conversion = intern ("no-conversion");
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7248 staticpro (&Qno_conversion);
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7249
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7250 Qundecided = intern ("undecided");
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7251 staticpro (&Qundecided);
783efd6c7c1e (Qno_conversion, Qundecided): New variables.
Kenichi Handa <handa@m17n.org>
parents: 19546
diff changeset
7252
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7253 Qcoding_system_p = intern ("coding-system-p");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7254 staticpro (&Qcoding_system_p);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7255
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7256 Qcoding_system_error = intern ("coding-system-error");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7257 staticpro (&Qcoding_system_error);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7258
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7259 Fput (Qcoding_system_error, Qerror_conditions,
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7260 Fcons (Qcoding_system_error, Fcons (Qerror, Qnil)));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7261 Fput (Qcoding_system_error, Qerror_message,
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7262 build_string ("Invalid coding system"));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7263
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7264 Qcoding_category = intern ("coding-category");
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7265 staticpro (&Qcoding_category);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7266 Qcoding_category_index = intern ("coding-category-index");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7267 staticpro (&Qcoding_category_index);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7268
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7269 Vcoding_category_table
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7270 = 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
7271 staticpro (&Vcoding_category_table);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7272 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7273 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7274 for (i = 0; i < CODING_CATEGORY_IDX_MAX; i++)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7275 {
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7276 XVECTOR (Vcoding_category_table)->contents[i]
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7277 = intern (coding_category_name[i]);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7278 Fput (XVECTOR (Vcoding_category_table)->contents[i],
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7279 Qcoding_category_index, make_number (i));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7280 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7281 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7282
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7283 Qtranslation_table = intern ("translation-table");
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7284 staticpro (&Qtranslation_table);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7285 Fput (Qtranslation_table, Qchar_table_extra_slots, make_number (1));
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7286
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7287 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
7288 staticpro (&Qtranslation_table_id);
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7289
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7290 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
7291 staticpro (&Qtranslation_table_for_decode);
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7292
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7293 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
7294 staticpro (&Qtranslation_table_for_encode);
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
7295
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7296 Qsafe_chars = intern ("safe-chars");
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7297 staticpro (&Qsafe_chars);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7298
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7299 Qchar_coding_system = intern ("char-coding-system");
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7300 staticpro (&Qchar_coding_system);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7301
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7302 /* 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
7303 Setting this variable twice is harmless.
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7304 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
7305 Qchar_table_extra_slots = intern ("char-table-extra-slots");
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7306 Fput (Qsafe_chars, Qchar_table_extra_slots, make_number (0));
41678
5aa97e545399 (syms_of_coding) <Qchar_coding_system>: Give it an
Dave Love <fx@gnu.org>
parents: 41624
diff changeset
7307 Fput (Qchar_coding_system, Qchar_table_extra_slots, make_number (2));
20150
402b6e5f4b58 (encode_designation_at_bol): Fix bug of finding graphic
Kenichi Handa <handa@m17n.org>
parents: 20105
diff changeset
7308
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7309 Qvalid_codes = intern ("valid-codes");
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7310 staticpro (&Qvalid_codes);
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7311
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7312 Qemacs_mule = intern ("emacs-mule");
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7313 staticpro (&Qemacs_mule);
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7314
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7315 Qraw_text = intern ("raw-text");
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7316 staticpro (&Qraw_text);
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7317
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7318 defsubr (&Scoding_system_p);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7319 defsubr (&Sread_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7320 defsubr (&Sread_non_nil_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7321 defsubr (&Scheck_coding_system);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7322 defsubr (&Sdetect_coding_region);
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7323 defsubr (&Sdetect_coding_string);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7324 defsubr (&Sfind_coding_systems_region_internal);
46859
a26dd8891732 (unencodable_char_position): New function.
Kenichi Handa <handa@m17n.org>
parents: 46839
diff changeset
7325 defsubr (&Sunencodable_char_position);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7326 defsubr (&Sdecode_coding_region);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7327 defsubr (&Sencode_coding_region);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7328 defsubr (&Sdecode_coding_string);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7329 defsubr (&Sencode_coding_string);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7330 defsubr (&Sdecode_sjis_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7331 defsubr (&Sencode_sjis_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7332 defsubr (&Sdecode_big5_char);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7333 defsubr (&Sencode_big5_char);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
7334 defsubr (&Sset_terminal_coding_system_internal);
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7335 defsubr (&Sset_safe_terminal_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7336 defsubr (&Sterminal_coding_system);
18002
a14261786239 (encode_invocation_designation): Use macro
Kenichi Handa <handa@m17n.org>
parents: 17835
diff changeset
7337 defsubr (&Sset_keyboard_coding_system_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7338 defsubr (&Skeyboard_coding_system);
18536
69c0e220b626 (Vstandard_character_unification_table_for_decode):
Kenichi Handa <handa@m17n.org>
parents: 18523
diff changeset
7339 defsubr (&Sfind_operation_coding_system);
22874
b133f07a76db (Qvalid_codes): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22812
diff changeset
7340 defsubr (&Supdate_coding_systems_internal);
22226
557fac086b1b (ascii_skip_code): New variable.
Kenichi Handa <handa@m17n.org>
parents: 22186
diff changeset
7341 defsubr (&Sset_coding_priority_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7342
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7343 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
7344 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
7345
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7346 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
7347 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
7348 `define-coding-system-alias'. */);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7349 Vcoding_system_list = Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7350
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7351 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
7352 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
7353 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
7354 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
7355
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7356 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
7357 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
7358 `define-coding-system-alias'. */);
20105
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7359 Vcoding_system_alist = Qnil;
c017642863c2 (Qcoding_system_spec): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 19824
diff changeset
7360
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7361 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
7362 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
7363
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7364 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
7365 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
7366 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
7367 system bound to the corresponding coding-category is selected. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7368 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7369 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7370
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7371 Vcoding_category_list = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7372 for (i = CODING_CATEGORY_IDX_MAX - 1; i >= 0; i--)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7373 Vcoding_category_list
20718
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7374 = Fcons (XVECTOR (Vcoding_category_table)->contents[i],
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7375 Vcoding_category_list);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7376 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7377
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7378 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
7379 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
7380 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
7381 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
7382 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
7383 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
7384 `process-coding-system-alist', and `network-coding-system-alist'. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7385 Vcoding_system_for_read = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7386
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7387 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
7388 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
7389 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
7390 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
7391 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
7392
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7393 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
7394 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
7395 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
7396 `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
7397 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
7398 the value of `buffer-file-coding-system' is used. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7399 Vcoding_system_for_write = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7400
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7401 DEFVAR_LISP ("last-coding-system-used", &Vlast_coding_system_used,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7402 doc: /* Coding system used in the latest file or process I/O. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7403 Vlast_coding_system_used = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7404
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7405 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
7406 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
7407 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
7408 such conversion. */);
18650
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7409 inhibit_eol_conversion = 0;
aa3f2820e2ac (Qemacs_mule, inhibit_eol_conversion): New variables.
Kenichi Handa <handa@m17n.org>
parents: 18613
diff changeset
7410
21574
30394e3ae7f8 (syms_of_coding): Declare and define inherit-process-coding-system.
Eli Zaretskii <eliz@gnu.org>
parents: 21520
diff changeset
7411 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
7412 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
7413 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
7414 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
7415 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
7416
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7417 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
7418 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
7419 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
7420 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
7421 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
7422 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
7423 the file contents.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7424 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
7425 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
7426 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
7427 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
7428 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
7429
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7430 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
7431 and the variable `auto-coding-alist'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7432 Vfile_coding_system_alist = Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7433
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7434 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
7435 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
7436 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
7437 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
7438 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
7439 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
7440 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
7441 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
7442 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
7443 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
7444 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
7445
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7446 See also the function `find-operation-coding-system'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7447 Vprocess_coding_system_alist = Qnil;
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7448
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7449 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
7450 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
7451 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
7452 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
7453 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
7454 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
7455 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
7456 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
7457 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
7458 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
7459 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
7460 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
7461
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7462 See also the function `find-operation-coding-system'. */);
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7463 Vnetwork_coding_system_alist = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7464
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7465 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
7466 doc: /* Coding system to use with system messages.
6f20449b7e12 (syms_of_coding): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 41006
diff changeset
7467 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
7468 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
7469
29182
1d1c27067af4 (encode_eol): Add null statement after label.
Dave Love <fx@gnu.org>
parents: 29172
diff changeset
7470 /* 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
7471 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
7472 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
7473 eol_mnemonic_unix = build_string (":");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7474
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7475 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
7476 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
7477 eol_mnemonic_dos = build_string ("\\");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7478
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7479 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
7480 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
7481 eol_mnemonic_mac = build_string ("/");
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7482
b9d9fccad516 (syms_of_coding): eol-mnemonic-* variables are now
Eli Zaretskii <eliz@gnu.org>
parents: 24178
diff changeset
7483 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
7484 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
7485 eol_mnemonic_undecided = build_string (":");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7486
22119
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
7487 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
7488 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
7489 Venable_character_translation = Qt;
592bb8b9bcfd Change terms unify/unification to
Kenichi Handa <handa@m17n.org>
parents: 22020
diff changeset
7490
22186
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7491 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
7492 &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
7493 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
7494 Vstandard_translation_table_for_decode = Qnil;
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7495
fc4aaf1b1772 Change term "character translation table" to "translation table".
Kenichi Handa <handa@m17n.org>
parents: 22166
diff changeset
7496 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
7497 &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
7498 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
7499 Vstandard_translation_table_for_encode = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7500
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7501 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
7502 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
7503 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
7504 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
7505 Vcharset_revision_alist = Qnil;
18180
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7506
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7507 DEFVAR_LISP ("default-process-coding-system",
5f4c4da24e75 (Vcoding_system_alist): Deleted.
Kenichi Handa <handa@m17n.org>
parents: 18002
diff changeset
7508 &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
7509 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
7510 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
7511 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
7512 Vdefault_process_coding_system = Qnil;
19280
e755044718ee (ENCODE_ISO_CHARACTER_DIMENSION1): Pay attention to
Kenichi Handa <handa@m17n.org>
parents: 19193
diff changeset
7513
19365
d9374f5ebd3a (CODING_FLAG_ISO_LATIN_EXTRA): New macro.
Kenichi Handa <handa@m17n.org>
parents: 19285
diff changeset
7514 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
7515 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
7516 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
7517 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
7518 \(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
7519 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
7520 `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
7521 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
7522 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
7523 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
7524
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7525 DEFVAR_LISP ("select-safe-coding-system-function",
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7526 &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
7527 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
7528
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7529 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
7530 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
7531 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
7532
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7533 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
7534 Vselect_safe_coding_system_function = Qnil;
c600dea3b06b Vselect_safe_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents: 20708
diff changeset
7535
48874
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7536 DEFVAR_BOOL ("coding-system-require-warning",
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7537 &coding_system_require_warning,
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7538 doc: /* Internal use only.
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7539 If non-nil, on writing a file, select-safe-coding-system-function is
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7540 called even if coding-system-for-write is non-nil. The command
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7541 universal-coding-system-argument binds this variable to t temporarily. */);
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7542 coding_system_require_warning = 0;
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7543
3002a87cc629 (coding_system_require_warning): New variable.
Kenichi Handa <handa@m17n.org>
parents: 48829
diff changeset
7544
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7545 DEFVAR_LISP ("char-coding-system-table", &Vchar_coding_system_table,
40713
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7546 doc: /* Char-table containing safe coding systems of each characters.
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7547 Each element doesn't include such generic coding systems that can
47274
ff3c709c7ef1 (syms_of_coding): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46875
diff changeset
7548 encode any characters. They are in the first extra slot. */);
30487
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7549 Vchar_coding_system_table = Fmake_char_table (Qchar_coding_system, Qnil);
6165da9c89c6 (Qsafe_charsets): This variable deleted.
Kenichi Handa <handa@m17n.org>
parents: 30384
diff changeset
7550
30292
14a9937df1f5 (syms_of_coding): Fix typo in spelling of variable
Gerd Moellmann <gerd@gnu.org>
parents: 30263
diff changeset
7551 DEFVAR_BOOL ("inhibit-iso-escape-detection",
30204
35aec8514228 (inhibit_iso_escape_detection): New variable.
Kenichi Handa <handa@m17n.org>
parents: 29985
diff changeset
7552 &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
7553 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
7554
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7555 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
7556 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
7557 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
7558 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
7559 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
7560
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7561 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
7562 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
7563 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
7564 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
7565 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
7566
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7567 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
7568 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
7569 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
7570 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
7571 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
7572
42351475da08 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40656
diff changeset
7573 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
7574 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
7575 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
7576 inhibit_iso_escape_detection = 0;
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7577
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7578 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
7579 doc: /* Char table for translating self-inserting characters.
c2ce8280fb97 (Vtranslation_table_for_input): New.
Dave Love <fx@gnu.org>
parents: 48182
diff changeset
7580 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
7581 `keyboard-translate-table'. */);
48182
9474e269efd1 Reformat some DEFUNs so that etags works.
Dave Love <fx@gnu.org>
parents: 48125
diff changeset
7582 Vtranslation_table_for_input = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7583 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7584
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7585 char *
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7586 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
7587 int error_number;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7588 {
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7589 char *str;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7590
26526
b7438760079b * callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents: 26240
diff changeset
7591 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
7592 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
7593
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7594 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
7595 {
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7596 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
7597 Vlocale_coding_system,
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7598 0);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7599 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
7600 }
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7601
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7602 return str;
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7603 }
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26067
diff changeset
7604
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7605 #endif /* emacs */
29184
446621f88d68 Fix junk from last checkin.
Dave Love <fx@gnu.org>
parents: 29182
diff changeset
7606