Mercurial > emacs
comparison lisp/term/internal.el @ 98416:a0f0ccc831a1
Remove coding: cookie and no-byte-compile flag.
(IT-character-translations, cjk-codepages-alist): Remove variables.
(IT-display-table-setup, dos-cpNNN-setup): Remove functions.
(IT-unicode-translations): Remove charset and base elements. Add translations
for Latin-1 characters.
(IT-setup-unicode-display): Accept a CODING argument. Don't use base and
chset elements of IT-unicode-translations. Don't wrap translation in "{...}".
Set up translations only for characters for which unencodable-char-position
returns non-nil.
(dos-codepage-setup): Don't use special-case codepages in cjk-codepages-alist.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Tue, 30 Sep 2008 16:17:08 +0000 |
parents | ed4b9c6c72c8 |
children | 194896c4ead7 |
comparison
equal
deleted
inserted
replaced
98415:c3d8410a0701 | 98416:a0f0ccc831a1 |
---|---|
1 ;;; internal.el --- support for PC internal terminal -*- coding: raw-text; no-byte-compile: t -*- | 1 ;;; internal.el --- support for PC internal terminal |
2 | 2 |
3 ;; Copyright (C) 1993, 1994, 1998, 1999, 2001, 2002, 2003, 2004, | 3 ;; Copyright (C) 1993, 1994, 1998, 1999, 2001, 2002, 2003, 2004, |
4 ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. | 4 ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
5 | 5 |
6 ;; Author: Morten Welinder <terra@diku.dk> | 6 ;; Author: Morten Welinder <terra@diku.dk> |
80 ;; boots; usually, this codepage cannot be changed without | 80 ;; boots; usually, this codepage cannot be changed without |
81 ;; rebooting. | 81 ;; rebooting. |
82 ;; | 82 ;; |
83 ;; Since each codepage can usually display character of a single | 83 ;; Since each codepage can usually display character of a single |
84 ;; MULE charset, Emacs can display a single MULE charset with the | 84 ;; MULE charset, Emacs can display a single MULE charset with the |
85 ;; glyphs of the current codepage. The mapping from DOS codepages | 85 ;; glyphs of the current codepage. When Emacs starts on DOS, it |
86 ;; to MULE charsets is established by the charset property of the | 86 ;; automatically sets its default coding systems for file I/O and |
87 ;; cpNNN-decode-table variables in codepage.el, which also | 87 ;; terminal output according to the currend DOS codepage, given by |
88 ;; defines translation tables for each such pair, and a bunch of | 88 ;; the `dos-codepage' variable. |
89 ;; functions to generate coding systems that use those translation | |
90 ;; tables to convert codepage-encoded text to the appropriate MULE | |
91 ;; charset and back. When Emacs starts on DOS, it automatically | |
92 ;; sets its default coding systems for file I/O and terminal output | |
93 ;; according to the currend DOS codepage, given by the | |
94 ;; `dos-codepage' variable. | |
95 ;; | 89 ;; |
96 ;; This leaves us with the problem of displaying character sets | 90 ;; This leaves us with the problem of displaying character sets |
97 ;; other than the one which maps directly into the current codepage. | 91 ;; other than the one which maps directly into the current codepage. |
98 ;; The following functions and variables handle this nuisance by | 92 ;; The following functions and variables handle this nuisance by |
99 ;; defining a display table where each character that doesn't have a | 93 ;; defining a display table where each character that doesn't have a |
100 ;; glyph in some codepage is mapped to a string which represents it. | 94 ;; glyph in some codepage is mapped to a string which represents it. |
101 ;; For example, a small c with cedilla is mapped to the string | 95 ;; For example, a small c with cedilla is mapped to the string |
102 ;; "{,c}" (the braces serve as a sign that this is a single | 96 ;; ",c". A nice feature of the display tables is that Emacs |
103 ;; character). A nice feature of the display tables is that Emacs | |
104 ;; knows that the string represents a single character, and thus | 97 ;; knows that the string represents a single character, and thus |
105 ;; cursor motion works as you'd expect: a single `C-f' moves past | 98 ;; cursor motion works as you'd expect: a single `C-f' moves past |
106 ;; the entire string which represents a single character. | 99 ;; the entire string which represents a single character. |
107 ;; ---------------------------------------------------------------------- | 100 ;; ---------------------------------------------------------------------- |
108 | 101 |
109 (defvar IT-character-translations | |
110 '( | |
111 (latin-iso8859-1 | |
112 . [255 "!I" "|c" "Pd" "$$" "Ye" "|" "SE" "\"" "(c)" | |
113 "_a" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" | |
114 "'" "u" ".P" "^." "'," "^1" "_o" ">>" "1/4" "1/2" | |
115 "3/4" "?I" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" | |
116 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "-D" "~N" | |
117 "`O" "O'" "O^" "~O" "\"O" "*x" "/O" "`U" "U'" "U^" | |
118 "\"U" "Y'" "-P" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" | |
119 "ae" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" | |
120 "-d" "~n" "`o" "o'" "o^" "~o" "\"o" "-:" "/o" "`u" | |
121 "u'" "u^" "\"u" "y'" "-p" "\"y"] | |
122 ) | |
123 (latin-iso8859-2 | |
124 . [255 "A;" "'(" "/L" "$$" "L<" "S'" "SE" "\"" "S<" | |
125 ",S" "T<" "Z'" "--" "Z<" "Z^." "^o" "a;" "';" "/l" | |
126 "'" "l<" "s'" "'<" "'," "s<" ",s" "t<" "z'" "'" | |
127 "z<" "z^." "R'" "A'" "A^" "A(" "\"A" "L'" "C'" ",C" | |
128 "C<" "E'" "E;" "E:" "E<" "I'" "I^" "D<" "/D" "N'" | |
129 "N<" "O'" "O^" "O''" "\"O" "*x" "R<" "U^0" "U'" "U''" | |
130 "\"U" "Y'" ",T" "ss" "r'" "a'" "a^" "a(" "\"a" "l'" | |
131 "c'" ",c" "c<" "e'" "e;" "\"e" "e<" "i'" "i^" "d<" | |
132 "/d" "n'" "n<" "o'" "o^" "o''" "\"o" "-:" "r<" "u^0" | |
133 "u'" "u''" "\"u" "y'" ",t" "'."] | |
134 ) | |
135 (latin-iso8859-3 | |
136 . [255 "/H" "'(" "Pd" "$$" " " "H^" "SE" "\"" "I^." | |
137 ",S" "G(" "J^" "--" " " "Z^." "^o" "/h" "^2" "^3" | |
138 "'" "u" "h^" "." "'," "i^." ",s" "g(" "j^" "1/2" | |
139 " " "z^." "`A" "A'" "A^" " " "\"A" "C^." "C^" ",C" | |
140 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" " " "~N" | |
141 "`O" "O'" "O^" "G^." "\"O" "*x" "G^" "`U" "U'" "U^" | |
142 "\"U" "U(" "S^" "ss" "`a" "a'" "a^" " " "\"a" "c^." | |
143 "c^" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" | |
144 " " "~n" "`o" "o'" "o^" "g^." "\"o" "-:" "g^" "`u" | |
145 "u'" "u^" "\"u" "u(" "s^" "^."] | |
146 ) | |
147 (latin-iso8859-4 | |
148 . [255 "A;" "kk" ",R" "$$" "?I" ",L" "SE" "\"" "S<" | |
149 "E-" ",G" "/T" "--" "Z<" "'-" "^o" "a;" "';" ",r" | |
150 "'" "~i" ",l" "'<" "'," "s<" "e-" ",g" "/t" "NG" | |
151 "z<" "ng" "A-" "A'" "A^" "~A" "\"A" "Ao" "AE" "I;" | |
152 "C<" "E'" "E;" "\"E" "E^." "I'" "I^" "I-" "/D" ",N" | |
153 "O-" ",K" "O^" "~O" "\"O" "*x" "/O" "U;" "U'" "U^" | |
154 "\"U" "~U" "U-" "ss" "a-" "a'" "a^" "~a" "\"a" "ao" | |
155 "ae" "i;" "c<" "e'" "e;" "\"e" "e^." "i'" "i^" "i-" | |
156 "/d" ",n" "o-" ",k" "o^" "~o" "\"o" "-:" "/o" "u;" | |
157 "u'" "u^" "\"u" "~u" "u-" "^."] | |
158 ) | |
159 (cyrillic-iso8859-5 | |
160 . [255 "\"E" "Dj" "Gj" "IE" "Dz" "Ii" "Ji" "JE" "Lj" | |
161 "Nj" "Ts" "Kj" 240 "V%" "Dzh" 65 "B=" 66 226 | |
162 68 69 "Z%" 51 85 "J=" 75 "L=" 77 72 | |
163 79 "P=" 80 67 84 89 232 88 "C=" "C%" | |
164 "S%" "Sc" "=\"" "Y=" "%\"" "Ee" "Yu" "Ya" 97 98 | |
165 "v=" "g=" 103 101 "z%" "z=" 117 "j=" 107 "l=" | |
166 "m=" "n=" 111 110 112 99 "t=" 121 "f=" 120 | |
167 "c=" "c%" "s%" "sc" "='" "y=" "%'" "ee" "yu" "ya" | |
168 "N0" "\"e" "dj" "gj" "ie" "dz" "ii" "ji" "je" "lj" | |
169 "nj" "ts" "kj" 21 "v%" "dzh"] | |
170 ) | |
171 (arabic-iso8859-6 | |
172 . [255 nil nil nil "$$" nil nil nil nil nil | |
173 nil nil ",+" "--" nil nil nil nil nil nil | |
174 nil nil nil nil nil nil nil ";+" nil nil | |
175 nil "?+" nil "H'" "aM" "aH" "wH" "ah" "yH" | |
176 "a+" "b+" "tm" "t+" "tk" "g+" "hk" "x+" "d+" "dk" | |
177 "r+" "z+" "s+" "sn" "c+" "dd" "tj" "zH" "e+" "i+" | |
178 nil nil nil nil nil "++" "f+" "q+" "k+" "l+" | |
179 "m+" "n+" "h+" "w+" "j+" "y+" ":+" "\"+" "=+" "/+" | |
180 "'+" "1+" "3+" "0+" nil nil nil nil nil nil | |
181 nil nil nil nil nil nil nil] | |
182 ) | |
183 (greek-iso8859-7 | |
184 . [255 "9'" "'9" "Pd" nil nil "|" "SE" "\"" "(c)" | |
185 nil "<<" "~" "--" nil "-M" "^o" "+-" "^2" "^3" | |
186 "'" "'%" "'A" "^." "'E" "'H" "'I" ">>" "'O" "1/2" | |
187 "'Y" "W%" "i3" 65 66 "G*" "D*" 69 90 72 | |
188 "TH" 73 74 "L*" 77 78 "C*" 79 "P*" 80 | |
189 nil "S*" 84 89 "F*" 88 "Q*" "W*" "\"I" "\"Y" | |
190 "a%" "e%" "y%" "i%" "u3" "a*" "b*" "g*" "d*" "e*" | |
191 "z*" "y*" "h*" "i*" 107 "l*" "m*" "n*" "c*" 111 | |
192 "p*" "r*" "*s" "s*" "t*" 117 "f*" "x*" "q*" "w*" | |
193 "\"i" "\"u" "'o" "'u" "'w" nil] | |
194 ) | |
195 ;; Note: some of the characters undefined according to ISO 8859-8 | |
196 ;; in the ranges 190..220 and 250..255 are replaced with SI 1311-1 | |
197 ;; points (Niqud) and bidi formatting characters | |
198 (hebrew-iso8859-8 | |
199 . [255 nil "|c" "Pd" "$$" "Ye" "|" "SE" "\"" "(c)" | |
200 "*x" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" | |
201 "'" "u" ".P" "^." "'," "^1" "-:" ">>" "1/4" "1/2" | |
202 "3/4" nil ":'" "v:" "-:" "-':" ".'" ".." "v'" "-'" | |
203 "-," "`." nil "\\." "(.)" "|'" "`-" "`=" "||" nil | |
204 nil "::" nil nil nil nil nil nil nil "LRO" | |
205 "RLO" "PDF" nil "=2" "A+" "B+" "G+" "D+" "H+" "W+" | |
206 "Z+" "X+" "Tj" "J+" "K%" "K+" "L+" "M%" "M+" "N%" | |
207 "N+" "S+" "E+" "P%" "P+" "Zj" "ZJ" "Q+" "R+" "Sh" | |
208 "T+" "LRE" "RLE" "LRM" "RLM" nil] | |
209 ) | |
210 (latin-iso8859-9 | |
211 . [255 "!I" "|c" "Pd" "$$" "Ye" "|" "SE" "\"" "(c)" | |
212 "_a" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" | |
213 "'" "u" ".P" "^." "'," "^1" "_o" ">>" "1/4" "1/2" | |
214 "3/4" "?I" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" | |
215 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "G(" "~N" | |
216 "`O" "O'" "O^" "~O" "\"O" "*x" "/O" "`U" "U'" "U^" | |
217 "\"U" "I^." ",S" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" | |
218 "ae" ",c" "`e" "e'" "e<" "\"e" "e^." "i'" "i^" "i-" | |
219 "g(" "~n" "`o" "o'" "o^" "~o" "\"o" "-:" "/o" "`u" | |
220 "u'" "u^" "\"u" "i." ",s" "\"y"] | |
221 ) | |
222 (latin-iso8859-14 | |
223 . [255 "B`" "b`" "Pd" "C`" "c`" "D`" "SE" "`W" "(c)" | |
224 "W'" "d`" "`Y" "--" "(R)" "\"Y" "F`" "f`" "G`" "g`" | |
225 "M`" "m`" ".P" "P`" "`w" "p`" "w'" "S`" "`y" "\"W" | |
226 "\"w" "s`" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" | |
227 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "W^" "~N" | |
228 "`O" "O'" "O^" "~O" "\"O" "T`" "/O" "`U" "U'" "U^" | |
229 "\"U" "Y'" "Y^" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" | |
230 "ae" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" | |
231 "w^" "~n" "`o" "o'" "o^" "~o" "\"o" "t`" "/o" "`u" | |
232 "u'" "u^" "\"u" "y'" "y^" "\"y"] | |
233 ) | |
234 (latin-iso8859-15 | |
235 . [255 "!I" "|c" "Pd" "E=" "Ye" "S<" "SE" "s<" "(c)" | |
236 "_a" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" | |
237 "Z<" "u" ".P" "^." "z<" "^1" "_o" ">>" "OE" "oe" | |
238 "\"Y" "?I" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" | |
239 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "-D" "~N" | |
240 "`O" "O'" "O^" "~O" "\"O" "*x" "/O" "`U" "U'" "U^" | |
241 "\"U" "Y'" "|P" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" | |
242 "ae" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" | |
243 "-d" "~n" "`o" "o'" "o^" "~o" "\"o" "-:" "/o" "`u" | |
244 "u'" "u^" "\"u" "y'" "|p" "\"y"] | |
245 ) | |
246 ) | |
247 "An alist of MULE ISO-8859 character sets and the strings that | |
248 should be used to represent the characters from each set on a DOS | |
249 terminal which does not have corresponding glyphs built into the | |
250 installed codepage.") | |
251 | |
252 (defun IT-display-table-setup (codepage &optional table) | |
253 "Set up display table TABLE for a DOS terminal which supports | |
254 glyphs built into the codepage CODEPAGE. | |
255 | |
256 If TABLE is nil or omitted, `standard-display-table' is used." | |
257 (let* ((surrogates IT-character-translations) | |
258 (disp-tab (or table standard-display-table)) | |
259 (built-in-set (cp-charset-for-codepage codepage)) | |
260 (offset (cp-offset-for-codepage codepage)) | |
261 (cp-decoder | |
262 (symbol-value (intern-soft (format "%s-decode-table" codepage)))) | |
263 (cp-decoder-len (length cp-decoder)) | |
264 (c offset) | |
265 association chset) | |
266 ;; Undo the effects of previous call (where they may have used | |
267 ;; a different codepage) by reverting the display table for the | |
268 ;; built-in charset to its pristine shape. | |
269 (while (< c 256) | |
270 (aset disp-tab (make-char built-in-set c) nil) | |
271 (setq c (1+ c))) | |
272 (while surrogates | |
273 (setq association (car surrogates)) | |
274 (setq chset (car association)) | |
275 (let* ((vector (cdr association)) | |
276 (veclen (length vector)) | |
277 (i 0) | |
278 glyph) | |
279 (while (< i veclen) | |
280 (setq glyph (aref vector i)) | |
281 (or glyph (setq glyph dos-unsupported-char-glyph)) | |
282 (if (or (not (equal chset built-in-set)) | |
283 (>= i cp-decoder-len) | |
284 (null (aref cp-decoder i))) | |
285 (aset disp-tab (make-char chset (+ i (logand offset 127))) | |
286 (vconcat | |
287 (if (numberp glyph) | |
288 (char-to-string glyph) | |
289 (if (> (length glyph) 1) (concat "{" glyph "}") | |
290 glyph))))) | |
291 (setq i (1+ i)))) | |
292 (setq surrogates (cdr surrogates))))) | |
293 | |
294 (defvar IT-unicode-translations | 102 (defvar IT-unicode-translations |
295 '( | 103 '( |
296 (mule-unicode-0100-24ff ; charset | 104 (160 563 ; first, last |
297 256 ; base | 105 [ 255 "!I" "|c" "Pd" "$$" "Ye" "|" "SE" "\"" "(c)" ; Latin-1 |
298 256 563 ; first, last | 106 "_a" "<<" "~" "--" "(R)" "'-" "^o" "+-" "^2" "^3" |
299 [ "A-" "a-" "A(" "a(" "A;" "a;" "C'" "c'" "C>" "c>" ; Latin Extended-A | 107 "'" "u" ".P" "^." "'," "^1" "_o" ">>" "1/4" "1/2" |
108 "3/4" "?I" "`A" "A'" "A^" "~A" "\"A" "Ao" "AE" ",C" | |
109 "`E" "E'" "E^" "\"E" "`I" "I'" "I^" "\"I" "-D" "~N" | |
110 "`O" "O'" "O^" "~O" "\"O" "*x" "/O" "`U" "U'" "U^" | |
111 "\"U" "Y'" "-P" "ss" "`a" "a'" "a^" "~a" "\"a" "ao" | |
112 "ae" ",c" "`e" "e'" "e^" "\"e" "`i" "i'" "i^" "\"i" | |
113 "-d" "~n" "`o" "o'" "o^" "~o" "\"o" "-:" "/o" "`u" | |
114 "u'" "u^" "\"u" "y'" "-p" "\"y" ; 255 | |
115 "A-" "a-" "A(" "a(" "A;" "a;" "C'" "c'" "C>" "c>" ; Latin Extended-A | |
300 "C." "c." "C<" "c<" "D<" "d<" "D/" "d/" "E-" "e-" | 116 "C." "c." "C<" "c<" "D<" "d<" "D/" "d/" "E-" "e-" |
301 "E(" "e(" "E." "e." "E;" "e;" "E<" "e<" "G>" "g>" | 117 "E(" "e(" "E." "e." "E;" "e;" "E<" "e<" "G>" "g>" |
302 "G(" "g(" "G." "g." "G," "g," "H>" "h>" "H/" "h/" | 118 "G(" "g(" "G." "g." "G," "g," "H>" "h>" "H/" "h/" |
303 "I~" "i~" "I-" "i-" "I(" "i(" "I;" "i;" "I." "i." | 119 "I~" "i~" "I-" "i-" "I(" "i(" "I;" "i;" "I." "i." |
304 "IJ" "ij" "J>" "j>" "K," "k," "kk" "L'" "l'" "L," | 120 "IJ" "ij" "J>" "j>" "K," "k," "kk" "L'" "l'" "L," |
328 nil nil "8" "8_" "Z2" "z2" "A." "a." "E," "e," | 144 nil nil "8" "8_" "Z2" "z2" "A." "a." "E," "e," |
329 "O:-" "o:-" "O~-" "o~-" "O." "o." "O.-" "o.-" "Y-" "y-"] ; 0x233 | 145 "O:-" "o:-" "O~-" "o~-" "O." "o." "O.-" "o.-" "Y-" "y-"] ; 0x233 |
330 | 146 |
331 ) | 147 ) |
332 | 148 |
333 (mule-unicode-0100-24ff ; charset | 149 (884 1123 ; first, last |
334 256 ; base | |
335 884 1123 ; first, last | |
336 [ "'" "," nil nil nil nil "j3" nil nil nil ; Greek | 150 [ "'" "," nil nil nil nil "j3" nil nil nil ; Greek |
337 "?;" nil nil nil nil nil "'*" "'%" "A%" ".*" | 151 "?;" nil nil nil nil nil "'*" "'%" "A%" ".*" |
338 "E%" "Y%" "I%" nil "O%" nil "U%" "W%" "i3" "A*" | 152 "E%" "Y%" "I%" nil "O%" nil "U%" "W%" "i3" "A*" |
339 "B*" "G*" "D*" "E*" "Z*" "H*" "Th*" "I*" "K*" "L*" | 153 "B*" "G*" "D*" "E*" "Z*" "H*" "Th*" "I*" "K*" "L*" |
340 "M*" "N*" "C*" "O*" "P*" "R*" nil "S*" "T*" "U*" | 154 "M*" "N*" "C*" "O*" "P*" "R*" nil "S*" "T*" "U*" |
357 "c=" "c%" "s%" "sc" "='" "y=" "%'" "ee" "ju" "ja" | 171 "c=" "c%" "s%" "sc" "='" "y=" "%'" "ee" "ju" "ja" |
358 "ie'" "e:" "d%" "g%" "ie" "ds" "ii" "yi" "j%" "lj" | 172 "ie'" "e:" "d%" "g%" "ie" "ds" "ii" "yi" "j%" "lj" |
359 "nj" "ts" "kj" "v%" "`i=" "dz" "OM=" "om=" "Y3" "y3"] ; 0x463 | 173 "nj" "ts" "kj" "v%" "`i=" "dz" "OM=" "om=" "Y3" "y3"] ; 0x463 |
360 ) | 174 ) |
361 | 175 |
362 (mule-unicode-0100-24ff ; charset | 176 (1454 1645 ; first, last |
363 256 ; base | |
364 1454 1645 ; first, last | |
365 [ nil nil ":'" "v:" "-:" "-':" ".'" ".." "v'" "-'" | 177 [ nil nil ":'" "v:" "-:" "-':" ".'" ".." "v'" "-'" |
366 "-," "`." nil "\\." "(.)" "|'" "`-" nil "||" nil | 178 "-," "`." nil "\\." "(.)" "|'" "`-" nil "||" nil |
367 nil "::" nil nil nil nil nil nil nil nil | 179 nil "::" nil nil nil nil nil nil nil nil |
368 nil nil nil nil | 180 nil nil nil nil |
369 "A+" "B+" "G+" "D+" "H+" "W+" "Z+" "X+" "Tj" "J+" ; Hebrew | 181 "A+" "B+" "G+" "D+" "H+" "W+" "Z+" "X+" "Tj" "J+" ; Hebrew |
382 "0+" nil nil nil nil nil nil nil nil nil | 194 "0+" nil nil nil nil nil nil nil nil nil |
383 nil nil nil nil "0a" "1a" "2a" "3a" "4a" "5a" | 195 nil nil nil nil "0a" "1a" "2a" "3a" "4a" "5a" |
384 "6a" "7a" "8a" "9a" "a%" "a." "a," "a*" ] | 196 "6a" "7a" "8a" "9a" "a%" "a." "a," "a*" ] |
385 ) | 197 ) |
386 | 198 |
387 (mule-unicode-0100-24ff ; charset | 199 (7680 9450 ; first, last |
388 256 ; base | |
389 7680 9450 ; first, last | |
390 [ "A-0" "a-0" "B." "b." "B-." "b-." "B_" "b_" "C,'" "c,'" ; Lat Ext Add | 200 [ "A-0" "a-0" "B." "b." "B-." "b-." "B_" "b_" "C,'" "c,'" ; Lat Ext Add |
391 "D." "d." "D-." "d-." "D_" "d_" "D," "d," "D->" "d->" | 201 "D." "d." "D-." "d-." "D_" "d_" "D," "d," "D->" "d->" |
392 "E-!" "e-!" "E-'" "e-'" "E->" "e->" "E-?" "e-?" "E,(" "e,(" | 202 "E-!" "e-!" "E-'" "e-'" "E->" "e->" "E-?" "e-?" "E,(" "e,(" |
393 "F." "f." "G-" "g-" "H." "h." "H-." "h-." "H:" "h:" | 203 "F." "f." "G-" "g-" "H." "h." "H-." "h-." "H:" "h:" |
394 "H," "h," "H-(" "h-(" "I-?" "i-?" "I:'" "i:'" "K'" "k'" | 204 "H," "h," "H-(" "h-(" "I-?" "i-?" "I:'" "i:'" "K'" "k'" |
566 "q-o" "r-o" "s-o" "t-o" "u-o" "v-o" "w-o" "x-o" "y-o" "z-o" | 376 "q-o" "r-o" "s-o" "t-o" "u-o" "v-o" "w-o" "x-o" "y-o" "z-o" |
567 "0-o" ] | 377 "0-o" ] |
568 ) | 378 ) |
569 ) | 379 ) |
570 | 380 |
571 "A list of mule-unicode-* character sets and the strings that | 381 "A list of strings that should be used to represent Unicode |
572 should be used to represent the characters from each set on a DOS | 382 characters on a DOS terminal which does not have corresponding |
573 terminal which does not have corresponding glyphs built into the | 383 glyphs built into the installed codepage.") |
574 installed codepage.") | 384 |
575 | 385 (defun IT-setup-unicode-display (coding &optional table) |
576 (defun IT-setup-unicode-display (&optional table) | |
577 "Set up display table TABLE for displaying mule-unicode-* characters | 386 "Set up display table TABLE for displaying mule-unicode-* characters |
578 on a DOS terminal. If TABLE is nil or omitted, `standard-display-table' | 387 on a DOS terminal whose codepage provides the coding-system CODING. |
579 is used." | 388 If TABLE is nil or omitted, `standard-display-table' is used." |
580 (interactive) | 389 (interactive "zCode page: ") |
581 (let ((disp-tab (or table standard-display-table)) | 390 (let ((disp-tab (or table standard-display-table)) |
582 (tail IT-unicode-translations) | 391 (tail IT-unicode-translations) |
583 translation) | 392 translation) |
584 (while tail | 393 (while tail |
585 (setq translation (car tail) tail (cdr tail)) | 394 (setq translation (car tail) tail (cdr tail)) |
586 (let* ((chset (car translation)) | 395 (let* ((first (car translation)) |
587 (base (nth 1 translation)) | 396 (last (nth 1 translation)) |
588 (first (nth 2 translation)) | 397 (table (nth 2 translation)) |
589 (last (nth 3 translation)) | |
590 (table (nth 4 translation)) | |
591 (i 0) | 398 (i 0) |
592 (this (- first base)) | 399 (this first) |
593 glyph) | 400 glyph) |
594 (while (<= i (- last first)) | 401 (while (<= i (- last first)) |
595 (setq glyph (aref table i)) | 402 (setq glyph (aref table i)) |
596 (or glyph (setq glyph dos-unsupported-char-glyph)) | 403 (when (and glyph |
597 (aset disp-tab (make-char chset | 404 (unencodable-char-position 0 1 coding nil (string this))) |
598 (+ (/ this 96) 32) | 405 (aset disp-tab this |
599 (+ (% this 96) 32)) | 406 (vconcat (if (numberp glyph) |
600 (vconcat | 407 (string glyph) |
601 (if (numberp glyph) | 408 glyph)))) |
602 (char-to-string glyph) | |
603 (if (> (length glyph) 1) (concat "{" glyph "}") | |
604 glyph)))) | |
605 (setq i (1+ i) this (1+ this))))))) | 409 (setq i (1+ i) this (1+ this))))))) |
606 | 410 |
607 (defun dos-cpNNN-setup (codepage) | 411 (defvar dos-codepage) |
608 "Set up the MULE environment using the DOS codepage CODEPAGE. | 412 |
609 | 413 (defun dos-codepage-setup () |
610 This function creates the coding system cpNNN (where NNN is the value | 414 "Set up multilingual environment for the installed DOS codepage. |
611 of the argument CODEPAGE), and then uses this coding system to set up | 415 |
612 display tables, and the language environment options as appropriate." | 416 This function sets coding systems, display tables, and the language |
613 (let* ((cp (format "cp%s" codepage)) | 417 environment options as appropriate for the current value of `dos-codepage'. |
614 (charset (cp-charset-for-codepage cp)) | 418 |
615 (offset (cp-offset-for-codepage cp))) | 419 This function is automatically run at startup via the `after-init-hook' |
616 (cp-make-coding-systems-for-codepage cp charset offset) | 420 list. You can (and should) also run it whenever the value of |
617 ;; This is done by set-language-environment. | 421 `dos-codepage' changes." |
618 ;;(setq nonascii-translation-table | 422 (interactive) |
619 ;; (symbol-value (intern (concat cp "-nonascii-translation-table")))) | 423 (let* ((coding (format "cp%s" dos-codepage)) |
620 (set-language-environment (cp-language-for-codepage cp)) | 424 coding-dos coding-unix) |
621 (set-default-coding-systems (intern (concat cp "-dos"))) | 425 (setq coding-dos (intern (format "%s-dos" coding)) |
622 (set-selection-coding-system (intern (concat cp "-dos"))) | 426 coding-unix (intern (format "%s-unix" coding))) |
427 ;(set-language-environment lang) FIXME | |
428 (set-default-coding-systems coding-dos) | |
429 (set-selection-coding-system coding-dos) | |
430 (setq file-name-coding-system coding-unix) | |
623 (set-terminal-coding-system | 431 (set-terminal-coding-system |
624 (setq default-terminal-coding-system (intern (concat cp | 432 (setq default-terminal-coding-system coding-unix)) |
625 "-unix")))) | 433 (IT-setup-unicode-display coding-unix) |
626 (IT-display-table-setup cp) | 434 (prefer-coding-system coding-dos) |
627 ;; It's time: too many input methods in leim/quail produce | 435 (and default-enable-multibyte-characters |
628 ;; Unicode characters. Let the user see them. | 436 (setq unibyte-display-via-language-environment t)) |
629 (IT-setup-unicode-display) | |
630 (prefer-coding-system (intern (concat cp "-dos"))) | |
631 (if default-enable-multibyte-characters | |
632 ;; We want this in multibyte version only, since unibyte version | |
633 ;; should not convert non-ASCII characters at all. | |
634 (setq unibyte-display-via-language-environment t) | |
635 ;; Let the unibyte version behave as Emacs 19 did. In particular, | |
636 ;; let it use and display native codepage-specific glyphs for | |
637 ;; non-ASCII characters. For this to work correctly, we need to | |
638 ;; establish the correspondence between lower-case letters and their | |
639 ;; upper-case brethren, as appropriate for the codepage in use. The | |
640 ;; code below makes this happen. | |
641 ;; (In the multibyte mode, the appropriate tables are prepared | |
642 ;; elsewhere, since multibyte Emacs uses normal MULE character sets, | |
643 ;; which are supported on all platforms.) | |
644 (let* ((i 128) | |
645 (modify (function | |
646 (lambda (ch sy) | |
647 (modify-syntax-entry ch sy text-mode-syntax-table) | |
648 (if (boundp 'tex-mode-syntax-table) | |
649 (modify-syntax-entry ch sy tex-mode-syntax-table)) | |
650 (modify-syntax-entry ch sy (standard-syntax-table)) | |
651 ))) | |
652 (table (standard-case-table)) | |
653 ;; The following are strings of letters, first lower then | |
654 ;; upper case. This will look funny on terminals which | |
655 ;; display other code pages. In particular, what is | |
656 ;; displayed as blanks or triangles are not what they | |
657 ;; look like at all! (Use `C-x =' to see what they | |
658 ;; really are.) | |
659 (chars | |
660 (cond | |
661 ((= codepage 850) | |
662 "ķ ·ÆĮ ĩŌÓÔØŨÞĄÖâãĒāęĢéëYėíĄIĢéĪĨÐŅįč") | |
663 ((= codepage 865) | |
664 "A AEEEIIIOOUĢUY AĄIĒOĢUĪĨ") | |
665 ;; default is 437 | |
666 (t "A AEEEIIIOOUĢUY AĄIĒOĢUĪĨ")))) | |
667 | |
668 (while (< i 256) | |
669 (funcall modify i "_") | |
670 (setq i (1+ i))) | |
671 | |
672 (setq i 0) | |
673 (while (< i (length chars)) | |
674 (let ((ch1 (aref chars i)) | |
675 (ch2 (aref chars (1+ i)))) | |
676 (if (> ch2 127) | |
677 (set-case-syntax-pair ch2 ch1 table)) | |
678 (setq i (+ i 2)))) | |
679 (save-excursion | |
680 (mapcar (lambda (b) (set-buffer b) (set-case-table table)) | |
681 (buffer-list))) | |
682 (set-standard-case-table table))) | |
683 ;; Some codepages have sporadic support for Latin-1, Greek, and | 437 ;; Some codepages have sporadic support for Latin-1, Greek, and |
684 ;; symbol glyphs, which don't belong to their native character | 438 ;; symbol glyphs, which don't belong to their native character |
685 ;; set. It's a nuisance to have all those glyphs here, for all | 439 ;; set. It's a nuisance to have all those glyphs here, for all |
686 ;; the codepages (for starters, I don't even have references for | 440 ;; the codepages (for starters, I don't even have references for |
687 ;; all the codepages). So I provide a hook for those who want to | 441 ;; all the codepages). So provide a hook for those who want to |
688 ;; squeeze every bit of support out of their terminal/font. | 442 ;; squeeze every bit of support out of their terminal/font. |
689 (run-hooks 'dos-codepage-setup-hook) | 443 (run-hooks 'dos-codepage-setup-hook) |
690 )) | 444 )) |
691 | 445 |
692 (defvar cjk-codepages-alist | |
693 '((932 "Japanese" japanese-shift-jis) | |
694 (950 "Chinese-BIG5" cn-big5) | |
695 (936 "Chinese-GB" cn-gb-2312) | |
696 (949 "Korean" euc-kr)) | |
697 "An alist of Far-Eastern codepages and the names of the associated | |
698 language and supported coding system.") | |
699 | |
700 (defun dos-codepage-setup () | |
701 "Set up the MULE environment as appropriate for the installed DOS codepage. | |
702 | |
703 This function sets coding systems, display tables, and the language | |
704 environment options as appropriate for the current value of `dos-codepage'. | |
705 | |
706 This function is automatically run at startup via the `term-setup-hook' | |
707 list. You can (and should) also run it whenever the value of | |
708 `dos-codepage' changes." | |
709 (interactive) | |
710 (let* ((desc (cdr (assq dos-codepage cjk-codepages-alist))) | |
711 (lang (car desc)) | |
712 (coding (car (cdr desc))) | |
713 coding-dos coding-unix) | |
714 (if (null desc) | |
715 (ignore) ; (dos-cpNNN-setup dos-codepage)) FIXME | |
716 ;; We've got one of the Far-Eastern codepages which support | |
717 ;; MULE native coding systems directly. | |
718 (setq coding-dos (intern (format "%s-dos" coding)) | |
719 coding-unix (intern (format "%s-unix" coding))) | |
720 (set-language-environment lang) | |
721 (set-selection-coding-system coding-dos) | |
722 (setq file-name-coding-system coding-unix) | |
723 (set-terminal-coding-system | |
724 (setq default-terminal-coding-system coding-unix)) | |
725 ;; Assume they support non-ASCII Latin characters like the IBM | |
726 ;; codepage 437 does. | |
727 ;(IT-display-table-setup "cp437") | |
728 ;; It's time: too many input methods in leim/quail produce | |
729 ;; Unicode characters. Let the user see them. | |
730 ;(IT-setup-unicode-display) | |
731 (prefer-coding-system coding-dos) | |
732 (if default-enable-multibyte-characters | |
733 (setq unibyte-display-via-language-environment t)) | |
734 ))) | |
735 | |
736 ;; arch-tag: eea04c06-7311-4b5a-b531-3c1be1b070af | 446 ;; arch-tag: eea04c06-7311-4b5a-b531-3c1be1b070af |
737 ;;; internal.el ends here | 447 ;;; internal.el ends here |