Require disp-table.
[bpt/emacs.git] / lisp / international / latin1-disp.el
1 ;;; latin1-disp.el --- display tables for other ISO 8859 on Latin-1 terminals -*- coding: emacs-mule -*-
2
3 ;; Copyright (C) 2000 Free Software Foundation, Inc.
4
5 ;; Author: Dave Love <fx@gnu.org>
6 ;; Keywords: i18n
7
8 ;; This file is part of GNU Emacs.
9
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Commentary:
26
27 ;; This package sets up display of ISO 8859-n for n>1 by substituting
28 ;; Latin-1 characters and sequences of them for characters which can't
29 ;; be displayed, either beacuse we're on a tty or beacuse we don't
30 ;; have the relevant window system fonts available. For instance,
31 ;; Latin-9 is very similar to Latin-1, so we can display most Latin-9
32 ;; characters using the Latin-1 characters at the same code point and
33 ;; fall back on more-or-less mnemonic ASCII sequences for the rest.
34
35 ;; For the Latin charsets the ASCII sequences are mostly consistent
36 ;; with the Quail prefix input sequences. Latin-4 uses the Quail
37 ;; postfix sequences as a prefix method isn't defined for Latin-4.
38
39 ;; A different approach is taken in the DOS display tables in
40 ;; term/internal.el, and the relevant ASCII sequences from there are
41 ;; available as an alternative; see `latin1-display-mnemonic'. Only
42 ;; these sequences are used for Cyrillic, Greek and Hebrew.
43
44 ;; If you don't even have Latin-1, see iso-ascii.el and use the
45 ;; complete tables from internal.el. The ASCII sequences used here
46 ;; are mostly in the same style as iso-ascii.
47
48 ;;; Code:
49
50 ;; Ensure `standard-display-table' is set up:
51 (require 'disp-table)
52
53 (defconst latin1-display-sets '(latin-2 latin-3 latin-4 latin-5 latin-8
54 latin-9 cyrillic greek hebrew)
55 "The ISO8859 character sets with defined Latin-1 display sequences.
56 These are the nicknames for the sets and correspond to Emacs language
57 environments.")
58
59 (defgroup latin1-display ()
60 "Set up display tables for ISO8859 characters using Latin-1."
61 :version "21.1"
62 :group 'i18n)
63
64 (defcustom latin1-display-format "{%s}"
65 "A format string used to display the ASCII sequences.
66 The default encloses the sequence in braces, but you could just use
67 \"%s\" to avoid the braces."
68 :group 'latin1-display
69 :type 'string)
70
71 ;;;###autoload
72 (defcustom latin1-display nil
73 "Set up Latin-1/ASCII display for ISO8859 character sets.
74 This is done for each character set in the list `latin1-display-sets',
75 if no font is available to display it. Characters are displayed using
76 the corresponding Latin-1 characters where they match. Otherwise
77 ASCII sequences are used, mostly following the Latin prefix input
78 methods. Some different ASCII sequences are used if
79 `latin1-display-mnemonic' is non-nil.
80
81 Setting this variable directly does not take effect;
82 use either M-x customize of the function `latin1-display'."
83 :group 'latin1-display
84 :type 'boolean
85 :require 'latin1-disp
86 :initialize 'custom-initialize-default
87 :set (lambda (symbol value)
88 (set-default symbol value)
89 (mapc (if value
90 #'latin1-display-setup
91 #'latin1-display-reset)
92 latin1-display-sets)
93 (redraw-display)))
94
95 ;;;###autoload
96 (defun latin1-display (&rest sets)
97 "Set up Latin-1/ASCII display for the arguments character SETS.
98 See option `latin1-display' for the method. The members of the list
99 must be in `latin1-display-sets'. With no arguments, reset the
100 display for all of `latin1-display-sets'. See also `latin1-display-setup'."
101 (if sets
102 (mapc #'latin1-display-setup sets)
103 (mapc #'latin1-display-reset latin1-display-sets)))
104
105 (defcustom latin1-display-mnemonic nil
106 "Non-nil means to display potentially more mnemonic sequences.
107 These are taken from the tables in `internal.el' rather than the Quail
108 input sequences."
109 :type 'boolean
110 :group 'latin1-display)
111
112 (defun latin1-display-char (char display &optional alt-display)
113 "Make an entry in `standard-display-table' for CHAR using string DISPLAY.
114 If ALT-DISPLAY is provided, use that instead if
115 `latin1-display-mnemonic' is non-nil. The actual string displayed is
116 formatted using `latin1-display-format'."
117 (if (and (stringp alt-display)
118 latin1-display-mnemonic)
119 (setq display alt-display))
120 (if (stringp display)
121 (standard-display-ascii char (format latin1-display-format display))
122 (aset standard-display-table char display)))
123
124 (defun latin1-display-identities (charset)
125 "Display each character in CHARSET as the corresponding Latin-1 character.
126 CHARSET is a symbol naming a language environment using an ISO8859
127 character set."
128 (if (eq charset 'cyrillic)
129 (setq charset 'cyrillic-iso))
130 (let ((i 32)
131 (set (car (remq 'ascii (get-language-info charset 'charset)))))
132 (while (<= i 127)
133 (aset standard-display-table
134 (make-char set i)
135 (vector (make-char 'latin-iso8859-1 i)))
136 (setq i (1+ i)))))
137
138 (defun latin1-display-reset (language)
139 "Set up the default display for each character of LANGUAGE's charset.
140 CHARSET is a symbol naming a language environment using an ISO8859
141 character set."
142 (if (eq language 'cyrillic)
143 (setq language 'cyrillic-iso))
144 (let ((charset (car (remq 'ascii (get-language-info language
145 'charset)))))
146 (standard-display-default (make-char charset 32)
147 (make-char charset 127)))
148 (sit-for 0))
149
150 (defun latin1-display-check-font (language)
151 "Return non-nil if we have a font with an encoding for LANGUAGE.
152 LANGUAGE is a symbol naming a language environment using an ISO8859
153 character set: `latin-2', `hebrew' etc."
154 (if (eq language 'cyrillic)
155 (setq language 'cyrillic-iso))
156 (let* ((info (get-language-info language 'charset))
157 (char (make-char (car (remq 'ascii info)) ?\ )))
158 (latin1-char-displayable-p char)))
159
160 ;; This should be moved into mule-utils or somewhere after 21.1.
161 (defun latin1-char-displayable-p (char)
162 (cond ((< char 256)
163 ;; Single byte characters are always displayable.
164 t)
165 ((display-multi-font-p)
166 ;; On a window system, a character is displayable if we have
167 ;; a font for that character in the default face of the
168 ;; currently selected frame.
169 (let ((fontset (frame-parameter (selected-frame) 'font))
170 font-pattern)
171 (if (query-fontset fontset)
172 (setq font-pattern (fontset-font fontset char)))
173 (or font-pattern
174 (setq font-pattern (fontset-font "fontset-default" char)))
175 (if font-pattern
176 (progn
177 ;; Now FONT-PATTERN is a string or a cons of family
178 ;; field pattern and registry field pattern.
179 (or (stringp font-pattern)
180 (setq font-pattern (concat (or (car font-pattern) "*")
181 "-*-"
182 (cdr font-pattern))))
183 (x-list-fonts font-pattern 'default (selected-frame) 1)))))
184 (t
185 (let ((coding (terminal-coding-system)))
186 (if coding
187 (let ((safe-chars (coding-system-get coding 'safe-chars))
188 (safe-charsets (coding-system-get coding 'safe-charsets)))
189 (or (and safe-chars
190 (aref safe-chars char))
191 (and safe-charsets
192 (memq (char-charset char) safe-charsets)))))))))
193
194 (defun latin1-display-setup (set &optional force)
195 "Set up Latin-1 display for characters in the given SET.
196 SET must be a member of `latin1-display-sets'. Normally, check
197 whether a font for SET is available and don't set the display if it
198 is. If FORCE is non-nil, set up the display regardless."
199 (cond
200 ((eq set 'latin-2)
201 (when (or force
202 (not (latin1-display-check-font set)))
203 (latin1-display-identities set)
204 (mapc
205 (lambda (l)
206 (apply 'latin1-display-char l))
207 '((?\82Æ "'C" "C'")
208 (?\82Ð "'D" "/D")
209 (?\82¦ "'S" "S'")
210 (?\82æ "'c" "c'")
211 (?\82ð "'d" "/d")
212 (?\82Å "'L" "L'")
213 (?\82ñ "'n" "n'")
214 (?\82Ñ "'N" "N'")
215 (?\82à "'r" "r'")
216 (?\82À "'R" "R'")
217 (?\82"'s" "s'")
218 (?\82¼ "'z" "z'")
219 (?\82¬ "'Z" "Z'")
220 (?\82¡ "`A" "A;")
221 (?\82Ê "`E" "E;")
222 (?\82£ "`L" "/L")
223 (?\82ª "`S" ",S")
224 (?\82Þ "`T" ",T")
225 (?\82¯ "`Z" "Z^.")
226 (?\82± "`a" "a;")
227 (?\82³ "`l" "/l")
228 (?\82ê "`e" "e;")
229 (?\82º "`s" ",s")
230 (?\82þ "`t" ",t")
231 (?\82¿ "`z" "z^.")
232 (?\82ÿ "`." "'.")
233 (?\82Ã "~A" "A(")
234 (?\82È "~C" "C<")
235 (?\82Ï "~D" "D<")
236 (?\82Ì "~E" "E<")
237 (?\82ì "~e" "e<")
238 (?\82¥ "~L" "L<")
239 (?\82Ò "~N" "N<")
240 (?\82Õ "~O" "O''")
241 (?\82Ø "~R" "R<")
242 (?\82© "~S" "S<")
243 (?\82« "~T" "T<")
244 (?\82Û "~U" "U''")
245 (?\82® "~Z" "Z<")
246 (?\82ã "~a" "a(}")
247 (?\82è "~c" "c<")
248 (?\82ï "~d" "d<")
249 (?\82µ "~l" "l<")
250 (?\82ò "~n" "n<")
251 (?\82õ "~o" "o''")
252 (?\82ø "~r" "r<")
253 (?\82¹ "~s" "s<")
254 (?\82» "~t" "t<")
255 (?\82û "~u" "u''")
256 (?\82¾ "~z" "z<")
257 (?\82· "~v" "'<") ; ?\82¢ in latin-pre
258 (?\82¢ "~~" "'(")
259 (?\82ù "uu" "u^0")
260 (?\82Ù "UU" "U^0")
261 (?\82Ä "\"A")
262 (?\82ä "\"a")
263 (?\82Ë "\"E" "E:")
264 (?\82ë "\"e")
265 (?\82½ "''" "'")
266 (?\82· "'<") ; Lynx's rendering of caron
267 ))))
268
269 ((eq set 'latin-3)
270 (when (or force
271 (not (latin1-display-check-font set)))
272 (latin1-display-identities set)
273 (mapc
274 (lambda (l)
275 (apply 'latin1-display-char l))
276 '((?\83¡ "/H")
277 (?\83¢ "~`" "'(")
278 (?\83¦ "^H" "H^")
279 (?\83"^h" "h^")
280 (?\83© ".I" "I^.")
281 (?\83ª ",S")
282 (?\83« "~G" "G(")
283 (?\83¬ "^J" "J^")
284 (?\83¯ ".Z" "Z^.")
285 (?\83± "/h")
286 (?\83¹ ".i" "i^.")
287 (?\83º ",s")
288 (?\83» "~g" "g(")
289 (?\83¼ "^j" "j^")
290 (?\83¿ ".Z" "z^.")
291 (?\83Å ".c" "C^.")
292 (?\83Æ "^C" "C^")
293 (?\83Õ ".G" "G^.")
294 (?\83Ø "^G" "G^")
295 (?\83Ý "~U" "U(")
296 (?\83Þ "^S" "S^")
297 (?\83å ".C" "c^.")
298 (?\83æ "^c" "c^")
299 (?\83õ ".g" "g^.")
300 (?\83ø "^g" "g^")
301 (?\83ý "~u" "u(")
302 (?\83þ "^s" "s^")
303 (?\83ÿ "/." "^.")))))
304
305 ((eq set 'latin-4)
306 (when (or force
307 (not (latin1-display-check-font set)))
308 (latin1-display-identities set)
309 (mapc
310 (lambda (l)
311 (apply 'latin1-display-char l))
312 '((?\84¡ "A," "A;")
313 (?\84¢ "k/" "kk")
314 (?\84£ "R," ",R")
315 (?\84¥ "I~" "?I")
316 (?\84¦ "L," ",L")
317 (?\84© "S~" "S<")
318 (?\84ª "E-")
319 (?\84« "G," ",G")
320 (?\84¬ "T/" "/T")
321 (?\84® "Z~" "Z<")
322 (?\84± "a," "a;")
323 (?\84² "';")
324 (?\84³ "r," ",r")
325 (?\84µ "i~" "~i")
326 (?\84"l," ",l")
327 (?\84· "'<")
328 (?\84¹ "s~" "s<")
329 (?\84º "e-")
330 (?\84» "g," ",g")
331 (?\84¼ "t/" "/t")
332 (?\84½ "N/" "NG")
333 (?\84¾ "z~" "z<")
334 (?\84¿ "n/" "ng")
335 (?\84À "A-")
336 (?\84Ç "I," "I;")
337 (?\84È "C~" "C<")
338 (?\84Ê "E," "E;")
339 (?\84Ì "E." "E^.")
340 (?\84Ï "I-")
341 (?\84Ñ "N," ",N")
342 (?\84Ò "O-")
343 (?\84Ó "K," ",K")
344 (?\84Ù "U," "U;")
345 (?\84Ý "U~" "~U")
346 (?\84Þ "U-")
347 (?\84à "a-")
348 (?\84ç "i," "i;")
349 (?\84è "c~" "c<")
350 (?\84ê "e," "e;")
351 (?\84ì "e." "e^.")
352 (?\84ï "i-")
353 (?\84ð "d/" "/d")
354 (?\84ñ "n," ",n")
355 (?\84ò "o-")
356 (?\84ó "k," ",k")
357 (?\84ù "u," "u;")
358 (?\84ý "u~" "~u")
359 (?\84þ "u-")
360 (?\84ÿ "^.")))))
361
362 ((eq set 'latin-5)
363 (when (or force
364 (not (latin1-display-check-font set)))
365 (latin1-display-identities set)
366 (mapc
367 (lambda (l)
368 (apply 'latin1-display-char l))
369 '((?\8dð "~g" "g(")
370 (?\8dÐ "~G" "G(")
371 (?\8dÝ ".I" "I^.")
372 (?\8dþ ",s")
373 (?\8dÞ ",S")
374 (?\8dê "^e" "e<") ; from latin-post
375 (?\8dì ".e" "e^.")
376 (?\8dï "\"i" "i-") ; from latin-post
377 (?\8dý ".i" "i.")))))
378
379 ((eq set 'latin-8)
380 (when (or force
381 (not (latin1-display-check-font set)))
382 (latin1-display-identities set)
383 (mapc
384 (lambda (l)
385 (apply 'latin1-display-char l))
386 '((?\8f¡ ".B" "B`")
387 (?\8f¢ ".b" "b`")
388 (?\8f¥ ".c" "c`")
389 (?\8f¤ ".C" "C`")
390 (?\8f¦ ".D" "D`")
391 (?\8f« ".d" "d`")
392 (?\8f¸ "`w")
393 (?\8f¨ "`W")
394 (?\8fº "'w" "w'")
395 (?\8fª "'W" "W'")
396 (?\8f¼ "`y")
397 (?\8f¬ "`Y")
398 (?\8f± ".f" "f`")
399 (?\8f° ".F" "F`")
400 (?\8f³ ".g" "g`")
401 (?\8f² ".G" "G`")
402 (?\8fµ ".m" "m`")
403 (?\8f´ ".M" "M`")
404 (?\8f¹ ".p" "p`")
405 (?\8f· ".P" "P`")
406 (?\8f¿ ".s" "s`")
407 (?\8f» ".S" "S`")
408 (?\8f¾ "\"w")
409 (?\8f½ "\"W")
410 (?\8fð "^w" "w^")
411 (?\8fÐ "^W" "W^")
412 (?\8f÷ ".t" "t`")
413 (?\8f× ".T" "T`")
414 (?\8fþ "^y" "y^")
415 (?\8fÞ "^Y" "Y^")
416 (?\8f¯ "\"Y")))))
417
418 ((eq set 'latin-9)
419 (when (or force
420 (not (latin1-display-check-font set)))
421 (latin1-display-identities set)
422 (mapc
423 (lambda (l)
424 (apply 'latin1-display-char l))
425 '((?\8e¨ "~s" "s<")
426 (?\8e¦ "~S" "S<")
427 (?\8e¤ "Euro" "E=")
428 (?\8e¸ "~z" "z<")
429 (?\8e´ "~Z" "Z<")
430 (?\8e¾ "\"Y")
431 (?\8e½ "oe")
432 (?\8e¼ "OE")))))
433
434 ((eq set 'greek)
435 (when (or force
436 (not (latin1-display-check-font set)))
437 (mapc
438 (lambda (l)
439 (apply 'latin1-display-char l))
440 '((?\86¡ "9'")
441 (?\86¢ "'9")
442 (?\86¯ "-M")
443 (?\86µ "'%")
444 (?\86"'A")
445 (?\86¸ "'E")
446 (?\86¹ "'H")
447 (?\86º "'I")
448 (?\86¼ "'O")
449 (?\86¾ "'Y")
450 (?\86¿ "W%")
451 (?\86À "i3")
452 (?\86Ã "G*")
453 (?\86Ä "D*")
454 (?\86È "TH")
455 (?\86Ë "L*")
456 (?\86Î "C*")
457 (?\86Ð "P*")
458 (?\86Ó "S*")
459 (?\86Ö "F*")
460 (?\86Ø "Q*")
461 (?\86Ù "W*")
462 (?\86Ú "\"I")
463 (?\86Û "\"Y")
464 (?\86Ü "a%")
465 (?\86Ý "e%")
466 (?\86Þ "y%")
467 (?\86ß "i%")
468 (?\86à "u3")
469 (?\86á "a*")
470 (?\86â "b*")
471 (?\86ã "g*")
472 (?\86ä "d*")
473 (?\86å "e*")
474 (?\86æ "z*")
475 (?\86ç "y*")
476 (?\86è "h*")
477 (?\86é "i*")
478 (?\86ê "k")
479 (?\86ë "l*")
480 (?\86ì "m*")
481 (?\86í "n*")
482 (?\86î "c*")
483 (?\86ð "p*")
484 (?\86ñ "r*")
485 (?\86ò "*s")
486 (?\86ó "s*")
487 (?\86ô "t*")
488 (?\86õ "u")
489 (?\86ö "f*")
490 (?\86÷ "x*")
491 (?\86ø "q*")
492 (?\86ù "w*")
493 (?\86ú "\"i")
494 (?\86û "\"u")
495 (?\86ü "'o")
496 (?\86ý "'u")
497 (?\86þ "'w")))
498 (mapc
499 (lambda (l)
500 (aset standard-display-table (car l) (string-to-vector (cadr l))))
501 '((?\86Á "A")
502 (?\86Â "B")
503 (?\86Å "E")
504 (?\86Æ "Z")
505 (?\86Ç "H")
506 (?\86É "I")
507 (?\86Ê "J")
508 (?\86Ì "M")
509 (?\86Í "N")
510 (?\86Ï "O")
511 (?\86Ñ "P")
512 (?\86Ô "T")
513 (?\86Õ "Y")
514 (?\86× "X")
515 (?\86ï "o")))))
516
517 ((eq set 'hebrew)
518 (when (or force
519 (not (latin1-display-check-font set)))
520 ;; Don't start with identities, since we don't have definitions
521 ;; for a lot of Hebrew in internal.el. (Intlfonts is also
522 ;; missing some glyphs.)
523 (let ((i 34))
524 (while (<= i 62)
525 (aset standard-display-table
526 (make-char 'hebrew-iso8859-8 i)
527 (vector (make-char 'latin-iso8859-1 i)))
528 (setq i (1+ i))))
529 (mapc
530 (lambda (l)
531 (aset standard-display-table (car l) (string-to-vector (cadr l))))
532 '((?\88ß "=2")
533 (?\88à "A+")
534 (?\88á "B+")
535 (?\88â "G+")
536 (?\88ã "D+")
537 (?\88ä "H+")
538 (?\88å "W+")
539 (?\88æ "Z+")
540 (?\88ç "X+")
541 (?\88è "Tj")
542 (?\88é "J+")
543 (?\88ê "K%")
544 (?\88ë "K+")
545 (?\88ì "L+")
546 (?\88í "M%")
547 (?\88î "M+")
548 (?\88ï "N%")
549 (?\88ð "N+")
550 (?\88ñ "S+")
551 (?\88ò "E+")
552 (?\88ó "P%")
553 (?\88ô "P+")
554 (?\88õ "Zj")
555 (?\88ö "ZJ")
556 (?\88÷ "Q+")
557 (?\88ø "R+")
558 (?\88ù "Sh")
559 (?\88ú "T+")))))
560
561 ((eq set 'cyrillic)
562 (setq set 'cyrillic-iso)
563 (when (or force
564 (not (latin1-display-check-font set)))
565 (mapc
566 (lambda (l)
567 (apply 'latin1-display-char l))
568 '((?\8c¢ "Dj")
569 (?\8c£ "Gj")
570 (?\8c¤ "IE")
571 (?\8c© "Lj")
572 (?\8cª "Nj")
573 (?\8c« "Ts")
574 (?\8c¬ "Kj")
575 (?\8c® "V%")
576 (?\8c¯ "Dzh")
577 (?\8c± "B=")
578 (?\8c³ "â")
579 (?\8c´ "D")
580 (?\8c"Z%")
581 (?\8c· "3")
582 (?\8c¸ "U")
583 (?\8c¹ "J=")
584 (?\8c» "L=")
585 (?\8c¿ "P=")
586 (?\8cà "Y")
587 (?\8cÄ "è")
588 (?\8cÆ "C=")
589 (?\8cÇ "C%")
590 (?\8cÈ "S%")
591 (?\8cÉ "Sc")
592 (?\8cÊ "=\"")
593 (?\8cË "Y=")
594 (?\8cÌ "%\"")
595 (?\8cÍ "Ee")
596 (?\8cÎ "Yu")
597 (?\8cÏ "Ya")
598 (?\8cÑ "b")
599 (?\8cÒ "v=")
600 (?\8cÓ "g=")
601 (?\8cÔ "g")
602 (?\8cÖ "z%")
603 (?\8c× "z=")
604 (?\8cØ "u")
605 (?\8cÙ "j=")
606 (?\8cÚ "k")
607 (?\8cÛ "l=")
608 (?\8cÜ "m=")
609 (?\8cÝ "n=")
610 (?\8cß "n")
611 (?\8cà "p")
612 (?\8câ "t=")
613 (?\8cä "f=")
614 (?\8cæ "c=")
615 (?\8cç "c%")
616 (?\8cè "s%")
617 (?\8cé "sc")
618 (?\8cê "='")
619 (?\8cë "y=")
620 (?\8cì "%'")
621 (?\8cí "ee")
622 (?\8cî "yu")
623 (?\8cï "ya")
624 (?\8cð "N0")
625 (?\8cò "dj")
626 (?\8có "gj")
627 (?\8cô "ie")
628 (?\8cù "lj")
629 (?\8cú "nj")
630 (?\8cû "ts")
631 (?\8cü "kj")
632 (?\8cþ "v%")
633 (?\8cÿ "dzh")))
634 (mapc
635 (lambda (l)
636 (aset standard-display-table (car l) (string-to-vector (cadr l))))
637 '((?\8c¡ "\81Ë")
638 (?\8c¥ "S")
639 (?\8c¦ "I")
640 (?\8c§ "\81Ï")
641 (?\8c¨ "J")
642 (?\8cñ "\81ë")
643 (?\8cý "\81§")
644 (?\8c­ "-")
645 (?\8c° "A")
646 (?\8c² "B")
647 (?\8cµ "E")
648 (?\8cº "K")
649 (?\8c¼ "M")
650 (?\8c½ "H")
651 (?\8c¾ "O")
652 (?\8cÀ "P")
653 (?\8cÁ "C")
654 (?\8c "T")
655 (?\8cÅ "X")
656 (?\8cÐ "a")
657 (?\8cÕ "e")
658 (?\8cÞ "o")
659 (?\8cá "c")
660 (?\8cã "y")
661 (?\8cå "x")
662 (?\8cõ "s")
663 (?\8cö "i")
664 (?\8c÷ "\81ï")
665 (?\8cø "j")))))
666
667 (t (error "Unsupported character set: %S" set)))
668
669 (sit-for 0))
670
671 (provide 'latin1-disp)
672
673 ;;; latin1-disp.el ends here