OSDN Git Service

fix typo in ChangeLog (2015-02-03) (2015-02-02)
[tamago-tsunagi/tamago-tsunagi.git] / egg-sim.el
1 ;;; -*- coding: iso-2022-7bit -*-
2 ;;; egg-sim.el --- EGG Simple Input Method
3
4 ;; Copyright (C) 2000 Electrotechnical Laboratory, JAPAN.
5 ;; Licensed to the Free Software Foundation.
6 ;; Copyright (C) 2000 TOMURA Satoru <tomura@etl.go.jp>
7 ;;               2015 Mitsutoshi NAKANO <bkbin005@rinku.zaq.ne.jp>
8 ;;               2015 ARAI Shun-ichi <hermes@ceres.dti.ne.jp>
9 ;; Author: TOMURA Satoru <tomura@etl.go.jp>
10
11 ;; Keywords: mule, multilingual, input method
12
13 ;; This file is part of EGG.
14
15 ;; EGG is free software; you can redistribute it and/or modify
16 ;; it under the terms of the GNU General Public License as published by
17 ;; the Free Software Foundation; either version 2, or (at your option)
18 ;; any later version.
19
20 ;; EGG is distributed in the hope that it will be useful,
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 ;; GNU General Public License for more details.
24
25 ;; You should have received a copy of the GNU General Public License
26 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
27 ;; Free Software Foundation, Inc.,
28 ;; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
29
30 ;;; Commentary:
31
32 ;;; Code:
33
34 ;;; This code is based on egg-jsymbol.el of Egg V3.
35
36 ;;; 92.10.18 modified for Mule Ver.0.9.6 by K.Handa <handa@etl.go.jp>
37 ;;;     Moved from egg.el
38 ;;; 92.12.26 modified for Mule Ver.0.9.7 by T.Shingu <shingu@cpr.canon.co.jp>
39 ;;;     JIS Hojo Kanji support.
40
41 (require 'menudiag)
42
43 (provide 'egg-sim)
44
45 ;;;; modified 2015.01.28 Mitsutoshi NAKANO <bkbin005@rinku.zaq.ne.jp>
46 ;;; ignore-errors in make-char
47 ;;; Please see:
48 ;;; http://sourceforge.jp/projects/tamago-tsunagi/lists/archive/misc/2015-January/000029.html
49 ;;; http://www.gnu.org/software/emacs/manual/html_node/elisp/Handling-Errors.html
50 ;;;; modified 2015.01.29 Mitsutoshi NAKANO <bkbin005@rinku.zaq.ne.jp>
51 ;;; ARAI Shun-ichi <hermes@ceres.dti.ne.jp> wrote better fix.
52 ;;; https://sourceforge.jp/projects/tamago-tsunagi/lists/archive/misc/2015-January/000036.html
53 ;;; So Mitsutoshi rewrote.
54 (defun make-char-list (charset &optional from to)
55   (let ((result nil)
56         (chars (charset-chars charset))
57         min max)
58     (setq min (if (= chars 96) 32 33)
59           max (if (= chars 96) 127 126))
60     (setq from (if from (+ min (1- from)) min)
61           to   (if to (+ min (1- to)) max))
62     (and (<= min from)
63          (<= to max)
64          (cond ((= (charset-dimension charset) 1)
65                 (while (<= from to)
66                   (ignore-errors
67                     (setq result (cons (char-to-string (make-char charset to))
68                                        result)))
69                   (setq to (1- to)))
70                 result)
71                ((= (charset-dimension charset) 2)
72                 (while (<= from to)
73                   (let ((code max))
74                     (while (<= min code)
75                       (ignore-errors
76                         (setq result (cons (char-to-string
77                                             (make-char charset to code))
78                                            result)))
79                       (setq code (1- code))))
80                   (setq to (1- to)))
81                 result)))))
82
83 (defvar egg-sim-ascii-menu
84   `(menu "ASCII:" ,(make-char-list 'ascii)))
85
86 (defvar egg-sim-latin-1-menu
87   `(menu "ISO 8859-1:" ,(make-char-list 'latin-iso8859-1)))
88
89 (defvar egg-sim-latin-2-menu
90   `(menu "ISO 8859-2:" ,(make-char-list 'latin-iso8859-2)))
91
92 (defvar egg-sim-latin-3-menu
93   `(menu "ISO 8859-3:" ,(make-char-list 'latin-iso8859-3)))
94
95 (defvar egg-sim-latin-4-menu
96   `(menu "ISO 8859-4:" ,(make-char-list 'latin-iso8859-4)))
97
98 (defvar egg-sim-latin-5-menu
99   `(menu "ISO 8859-9:" ,(make-char-list 'latin-iso8859-9)))
100
101 (defvar egg-sim-cyrillic-menu
102   `(menu "ISO 8859-5:" ,(make-char-list 'cyrillic-iso8859-5)))
103
104 (defvar egg-sim-arabic-menu
105   `(menu "ISO 8859-6:" ,(make-char-list 'arabic-iso8859-6)))
106
107 (defvar egg-sim-greek-menu
108   `(menu "ISO 8859-7:" ,(make-char-list 'greek-iso8859-7)))
109
110 (defvar egg-sim-hebrew-menu
111   `(menu "ISO 8859-8:" ,(make-char-list 'hebrew-iso8859-8)))
112
113 (defvar egg-sim-thai-menu
114   `(menu "TIS620.2529:" ,(make-char-list 'thai-tis620)))
115
116 (defvar egg-sim-lao-menu
117   `(menu "lao:"         ,(make-char-list 'lao)))
118
119 (defvar egg-sim-vietnamese-menu
120   `(menu "Vietnamese:"
121          (("VISCII" .
122            (menu "VISCII:"
123                  (
124                   "a" "\e,1`\e(B" "\e,1d\e(B" "\e,1c\e(B" "\e,1a\e(B" "\e,1U\e(B"
125                   "\e,1e\e(B" "\e,1"\e(B" "\e,1F\e(B" "\e,1G\e(B" "\e,1!\e(B" "\e,1#\e(B"
126                   "\e,1b\e(B" "\e,1%\e(B" "\e,1&\e(B" "\e,1g\e(B" "\e,1$\e(B" "\e,1'\e(B"
127                   "e" "\e,1i\e(B" "\e,1k\e(B" "\e,1(\e(B" "\e,1h\e(B" "\e,1)\e(B"
128                   "\e,1j\e(B" "\e,1*\e(B" "\e,1,\e(B" "\e,1-\e(B" "\e,1+\e(B" "\e,1.\e(B" 
129                   "i" "\e,1m\e(B" "\e,1o\e(B" "\e,1n\e(B" "\e,1l\e(B" "\e,18\e(B"
130                   "o" "\e,1s\e(B" "\e,1v\e(B" "\e,1u\e(B" "\e,1r\e(B" "\e,1w\e(B"
131                   "\e,1t\e(B" "\e,1/\e(B" "\e,11\e(B" "\e,12\e(B" "\e,10\e(B" "\e,15\e(B"
132                   "\e,1=\e(B" "\e,1>\e(B" "\e,17\e(B" "\e,1^\e(B" "\e,16\e(B" "\e,1~\e(B"
133                   "u" "\e,1z\e(B" "\e,1|\e(B" "\e,1{\e(B" "\e,1y\e(B" "\e,1x\e(B"
134                   "\e,1_\e(B" "\e,1Q\e(B" "\e,1X\e(B" "\e,1f\e(B" "\e,1W\e(B" "\e,1q\e(B"
135                   "y" "\e,1}\e(B" "\e,1V\e(B" "\e,1[\e(B" "\e,1O\e(B" "\e,1\\e(B"
136
137                   "A" "\e,2`\e(B" "\e,2d\e(B" "\e,2c\e(B" "\e,2a\e(B" "\e,2U\e(B"
138                   "\e,2e\e(B" "\e,2"\e(B" "\e,2F\e(B" "\e,2G\e(B" "\e,2!\e(B" "\e,2#\e(B" 
139                   "\e,2b\e(B" "\e,2%\e(B" "\e,2&\e(B" "\e,2g\e(B" "\e,2$\e(B" "\e,2'\e(B" 
140                   "E" "\e,2h\e(B" "\e,2k\e(B" "\e,2(\e(B" "\e,2i\e(B" "\e,2)\e(B" 
141                   "\e,2j\e(B" "\e,2+\e(B" "\e,2,\e(B" "\e,2-\e(B" "\e,2*\e(B" "\e,2.\e(B" 
142                   "I" "\e,2l\e(B" "\e,2o\e(B" "\e,2n\e(B" "\e,2m\e(B" "\e,28\e(B"
143                   "O" "\e,2r\e(B" "\e,2v\e(B" "\e,2u\e(B" "\e,2s\e(B" "\e,2w\e(B"
144                   "\e,2t\e(B" "\e,20\e(B" "\e,21\e(B" "\e,22\e(B" "\e,2/\e(B" "\e,25\e(B"
145                   "\e,2=\e(B" "\e,26\e(B" "\e,27\e(B" "\e,2^\e(B" "\e,2>\e(B" "\e,2~\e(B" 
146                   "U" "\e,2y\e(B" "\e,2|\e(B" "\e,2{\e(B" "\e,2z\e(B" "\e,2x\e(B" 
147                   "\e,2_\e(B" "\e,2W\e(B" "\e,2X\e(B" "\e,2f\e(B" "\e,2Q\e(B" "\e,2q\e(B"
148                   "Y" "\e,2O\e(B" "\e,2V\e(B" "\e,2[\e(B" "\e,2}\e(B" "\e,2\\e(B" 
149
150                   "\e,2p\e(B" "\e,1p\e(B"
151                   )))
152
153           ("VISCII1.1(lower-case)" .
154            (menu "VISCII1.1 lower-case:" 
155                  ,(make-char-list 'vietnamese-viscii-lower)))
156           ("VISCII1.1(upper-case)" . 
157            (menu "VISCII1.1 upper-case:"
158                  ,(make-char-list 'vietnamese-viscii-upper))))))
159
160 (defvar egg-sim-chinese-big5-menu
161   `(menu "Big5:"
162          (("Level1" .
163            (menu "Big 5 Level1:" , (make-char-list 'chinese-big5-1)))
164           ("Level2" .
165            (menu "Big 5 Level2:" , (make-char-list 'chinese-big5-2))))))
166
167 (defvar egg-sim-chinese-cns-menu
168   `(menu "CNS 11643:"
169          (("Plane-1" .
170            (menu "CNS 11643-1:" ,(make-char-list 'chinese-cns11643-1)))
171           ("Plane- 2" .
172            (menu "CNS 11643-2:" ,(make-char-list 'chinese-cns11643-2)))
173           ("Plane-3" .
174            (menu "CNS 11643-3:" ,(make-char-list 'chinese-cns11643-3)))
175           ("Plane-4" .
176            (menu "CNS 11643-4:" ,(make-char-list 'chinese-cns11643-4)))
177           ("Plane-5" .
178            (menu "CNS 11643-5:" ,(make-char-list 'chinese-cns11643-5)))
179           ("Plane-6" .
180            (menu "CNS 11643-6:" ,(make-char-list 'chinese-cns11643-6)))
181           ("Plane-7" .
182            (menu "CNS 11643-7:" ,(make-char-list 'chinese-cns11643-7))))))
183
184 (defvar egg-sim-chinese-gb-menu
185   `(menu "GB 2312:" 
186          (("All" . 
187            (menu "GB 2312:" ,(make-char-list 'chinese-gb2312)))
188           ("Symbols" . 
189            (menu "GB2312/1:" ,(make-char-list 'chinese-gb2312 1 1)))
190           ("Numbers" . 
191            (menu "GB2312/2:" ,(make-char-list 'chinese-gb2312 2 2)))
192           ("Fullwidth ASCII" . 
193            (menu "GB2312/3:" ,(make-char-list 'chinese-gb2312 3 3)))
194           ("Hiragana" .
195            (menu "GB2312/4:" ,(make-char-list 'chinese-gb2312 4 4)))
196           ("Katanaka" . 
197            (menu "GB2312/5:" ,(make-char-list 'chinese-gb2312 5 5)))
198           ("Greek" . 
199            (menu "GB2312/6:" ,(make-char-list 'chinese-gb2312 6 6)))
200           ("Cyrillic" . 
201            (menu "GB2312/7:" ,(make-char-list 'chinese-gb2312 7 7)))
202           ("Pinyin/Bopomofo" . 
203            (menu "GB2312/8:" ,(make-char-list 'chinese-gb2312 8 8)))
204           ("Box Drawings" . 
205            (menu "GB2312/9:" ,(make-char-list 'chinese-gb2312 9 9)))
206           )))
207
208 (defvar egg-sim-chinese-menu
209   `(menu "Chinese:"
210          (("GB2312"  . , egg-sim-chinese-gb-menu)
211           ("CNS11643" . , egg-sim-chinese-cns-menu)
212           ("Big5" . , egg-sim-chinese-big5-menu))))
213
214 (defvar egg-sim-korean-menu
215   `(menu "Korean:"
216          (("KSC5601"  .
217            (menu "KSC 5601:" ,(make-char-list 'korean-ksc5601)))
218           ("Symbol" .
219            (menu "KSC 5601/1-2:" ,(make-char-list 'korean-ksc5601 1 2)))
220           ("Fullwidth ASCII" .
221            (menu "KSC 5601/3:" , (make-char-list 'korean-ksc5601 3 3)))
222           ("Jamo" .
223            (menu "KSC 5601/4:" , (make-char-list 'korean-ksc5601 4 4)))
224           ("Roman Number/Greek" .
225            (menu "KSC 5601/5:" , (make-char-list 'korean-ksc5601 5 5)))
226           ("Box Drawings" .
227            (menu "KSC 5601/6:" , (make-char-list 'korean-ksc5601 6 6)))
228           ("Unit" .
229            (menu "KSC 5601/7:" , (make-char-list 'korean-ksc5601 7 7)))
230           ("Misc." .
231            (menu "KSC 5601/8-9:" , (make-char-list 'korean-ksc5601 8 9)))
232           ("Hiragana" .
233            (menu "KSC 5601/10:" , (make-char-list 'korean-ksc5601 10 10)))
234           ("Katakana" .
235            (menu "KSC 5601/11:" , (make-char-list 'korean-ksc5601 11 11)))
236           ("Cyrillic" .
237            (menu "KSC 5601/12:" , (make-char-list 'korean-ksc5601 12 12)))
238           ("Hangul" .
239            (menu "KSC 5601/16-40:" , (make-char-list 'korean-ksc5601 16 40)))
240           ("Hanja" .
241            (menu "KSC 5601/42-93:" , (make-char-list 'korean-ksc5601 42 93))))))
242
243 (defvar egg-sim-japanese-menu 
244   `(menu "Japanese:"
245          (("JISX0201" .
246            (menu "JIS X 0201:" 
247            ,(append (make-char-list 'latin-jisx0201)
248                     (make-char-list 'katakana-jisx0201))))
249           ("JISX0208" .
250            (menu "JIS X 0208:" ,(make-char-list 'japanese-jisx0208)))
251           ("JISX0212" .
252            (menu "JIS X 0212:" ,(make-char-list 'japanese-jisx0212)))
253           ("JISX0208/0212" .
254            (menu "\e$B5-9fF~NO\e(B:"
255                  (("JIS\e$BF~NO\e(B" . japanese-jisx0208)
256                   ("\e$B5-9f\e(B"     . 
257                    (menu "\e$B5-9f\e(B:"     , (make-char-list 'japanese-jisx0208 1 2)))
258                   ("\e$B1Q?t;z\e(B"   . 
259                    (menu "\e$B1Q?t;z\e(B:"   , (make-char-list 'japanese-jisx0208 3 3)))
260                   ("\e$B$R$i$,$J\e(B" . 
261                    (menu "\e$B$R$i$,$J\e(B:" , (make-char-list 'japanese-jisx0208 4 4)))
262                   ("\e$B%+%?%+%J\e(B" . 
263                    (menu "\e$B%+%?%+%J\e(B:" , (make-char-list 'japanese-jisx0208 5 5)))
264                   ("\e$B%.%j%7%cJ8;z\e(B" . 
265                    (menu "\e$B%.%j%7%cJ8;z\e(B:" , (make-char-list 'japanese-jisx0208 6 6)))
266                   ("\e$B%-%j%kJ8;z\e(B" . 
267                    (menu "\e$B%-%j%kJ8;z\e(B:" , (make-char-list 'japanese-jisx0208 7 7)))
268                   ("\e$B7S@~\e(B" . 
269                    (menu "\e$B7S@~\e(B:" , (make-char-list 'japanese-jisx0208 8 8)))
270                           ;;;"\e$BIt<sF~NO\e(B"  (bushyu-input)
271                           ;;; "\e$B2h?tF~NO\e(B" (kakusuu-input)
272                   ("\e$BBh0l?e=`\e(B" . 
273                    (menu "\e$BBh0l?e=`\e(B:" , (make-char-list 'japanese-jisx0208 16 47)))
274                   ("\e$BBhFs?e=`\e(B" . 
275                    (menu "\e$BBhFs?e=`\e(B:" , (make-char-list 'japanese-jisx0208 48 84)))
276                   ("\e$BJd=u4A;z\e(B" . 
277                    (menu "\e$BJd=u4A;z\e(B:" , (make-char-list 'japanese-jisx0212 2 77)))))))))
278
279 (defvar egg-sim-ipa-menu
280   `(menu "IPA:" ,(make-char-list 'ipa)))
281
282 (defvar egg-sisheng-menu
283   `(menu "SiSheng characters" ,(make-char-list 'chinese-sisheng)))
284
285 (defvar egg-sim-code-input-menu
286   `(menu "Charset:"
287          (("JISX0208" . japanese-jisx0208)
288           ("JISX0212" . japanese-jisx0212)
289           ("CNS11643-1" . chinese-cns11634-1)
290           ("CNS11643-2" . chinese-cns11634-2)
291           ("CNS11643-3" . chinese-cns11634-3)
292           ("CNS11643-4" . chinese-cns11634-4)
293           ("CNS11643-5" . chinese-cns11634-5)
294           ("CNS11643-6" . chinese-cns11634-6)
295           ("CNS11643-7" . chinese-cns11634-7)
296           ("Big5-1" . chinese-big5-1)
297           ("Big5-2" . chinese-big5-2)
298           ("GB2312" . chinese-gb2312)
299           ("KSC5601" . korean-ksc5601))))
300
301 (defvar egg-simple-input-method-menu-item-list
302   `(("Code Input" . ,egg-sim-code-input-menu)
303     ("Arabic"   . , egg-sim-arabic-menu)
304     ("ASCII"    . , egg-sim-ascii-menu)
305     ("Chinese"  . , egg-sim-chinese-menu)
306     ("Cyrillic" . , egg-sim-cyrillic-menu)
307     ("Greek"    . , egg-sim-greek-menu)
308     ("Hebrew"   . , egg-sim-hebrew-menu)
309     ("Japanese" . , egg-sim-japanese-menu)
310     ("Korean"   . , egg-sim-korean-menu)
311     ("Latin" . 
312      (menu "Latin:"
313            (("Latin-1" . , egg-sim-latin-1-menu)
314             ("Latin-2" . , egg-sim-latin-2-menu)
315             ("Latin-3" . , egg-sim-latin-3-menu)
316             ("Latin-4" . , egg-sim-latin-4-menu)
317             ("Latin-5" . , egg-sim-latin-5-menu))))
318     ("Thai/Lao" . 
319      (menu "Thai/Lao:"
320            (("Thai" . , egg-sim-thai-menu)
321             ("Lao"  . , egg-sim-lao-menu))))
322     ("Vietnamese" . , egg-sim-vietnamese-menu)
323     ("Phonetic code" . 
324      (menu "Phonetic code:"
325            (("SISHENG" . , egg-sisheng-menu)
326             ("IPA" .  , egg-sim-ipa-menu))))
327     ))
328
329 (defvar egg-language-environment-alist 
330   `(("ASCII"         . , egg-sim-ascii-menu)
331     ("Chinese-BIG5"  . , egg-sim-chinese-big5-menu)
332     ("Chinese-CNS"   . , egg-sim-chinese-cns-menu)
333     ("Chinese-GB"    . , egg-sim-chinese-gb-menu)
334     ("Cyrillic-ISO"  . , egg-sim-cyrillic-menu)
335     ("Cyrillic-KOI8" . , egg-sim-cyrillic-menu)
336     ("Cyrillic-ALT"  . , egg-sim-cyrillic-menu)
337     ("Czech"         . , egg-sim-latin-2-menu)
338     ("Devanagari")
339     ("English"       . , egg-sim-ascii-menu)
340     ("Ethiopic")
341     ("German"        . , egg-sim-latin-1-menu)
342     ("Greek"         . , egg-sim-greek-menu)
343     ("Hebrew"        . , egg-sim-hebrew-menu)
344     ("Hindi")
345     ("IPA"           . , egg-sim-ipa-menu)
346     ("Japanese"      . , egg-sim-japanese-menu)
347     ("Korean"        . , egg-sim-korean-menu)
348     ("Lao"           . , egg-sim-lao-menu)
349     ("Latin-1"       . , egg-sim-latin-1-menu)
350     ("Latin-2"       . , egg-sim-latin-2-menu)
351     ("Latin-3"       . , egg-sim-latin-3-menu)
352     ("Latin-4"       . , egg-sim-latin-4-menu)
353     ("Latin-5"       . , egg-sim-latin-5-menu)
354     ("Romaian"       . , egg-sim-latin-2-menu)
355     ("Slovenian"     . , egg-sim-latin-2-menu)
356     ("Slovak"        . , egg-sim-latin-2-menu)
357     ("Thai"          . , egg-sim-thai-menu)
358     ("Tibetan")
359     ("Turkish"       . , egg-sim-latin-5-menu)
360     ("Vietnamese"    . , egg-sim-vietnamese-menu)))
361
362 (defvar egg-simple-input-method-menu
363   `(menu "Character set:" , egg-simple-input-method-menu-item-list))
364
365 ;;;;###autoload
366 (defun egg-simple-input-method ()
367   (interactive)
368   (let ((result (egg-simple-input-menu)))
369     (cond((stringp result)
370           (insert result))
371          ((symbolp result)
372           (egg-character-code-input result
373                                     (format "%s/Character Code in Hexadecimal:"
374                                             (charset-description result)))))))
375
376 (defun egg-simple-input-menu ()
377   (let ((menu (cdr-safe (assoc current-language-environment 
378                                egg-language-environment-alist))))
379     (if menu
380         (menudiag-select
381          `(menu "Character set:" ,(cons (cons current-language-environment
382                                               menu)
383                                         egg-simple-input-method-menu-item-list)))
384       (menudiag-select egg-simple-input-method-menu))))
385
386 (defun egg-character-code-input (charset prompt)
387   (egg-insert-character-code-from-minibuffer charset prompt))
388
389 (defun egg-insert-character-code-from-minibuffer (charset prompt)
390   (let ((str (read-from-minibuffer prompt)) val)
391     (while (null (setq val (egg-read-character-code-from-string str charset)))
392       (beep)
393       (setq str (read-from-minibuffer prompt str)))
394     (insert (make-char charset (car val) (cdr val)))))
395
396 (defun egg-hexadigit-value (ch)
397   (cond((and (<= ?0 ch) (<= ch ?9))
398         (- ch ?0))
399        ((and (<= ?a ch) (<= ch ?f))
400         (+ (- ch ?a) 10))
401        ((and (<= ?A ch) (<= ch ?F))
402         (+ (- ch ?A) 10))))
403
404 (defun egg-read-character-code-from-string (str charset)
405   (if (and (= (length str) 4)
406            (<= 2 (egg-hexadigit-value (aref str 0)))
407            (egg-hexadigit-value (aref str 1))
408            (<= 2 (egg-hexadigit-value (aref str 2)))
409            (egg-hexadigit-value (aref str 3)))
410       (let ((code1 (+ (* 16 (egg-hexadigit-value (aref str 0)))
411                       (egg-hexadigit-value (aref str 1))))
412             (code2 (+ (* 16 (egg-hexadigit-value (aref str 2)))
413                       (egg-hexadigit-value (aref str 3))))
414             (min (if (= (charset-chars charset) 94)
415                      33 32))
416             (max (if (= (charset-chars charset) 94)
417                      126 127)))
418         (and (<= min code1)
419              (<= code1 max)
420              (<= min code2)
421              (<= code2 max)
422              (cons code1 code2)))))
423
424 ;;;
425 ;;;
426 ;;;
427
428 (defun make-non-iso2022-code-table-file (name)
429   (with-temp-file name
430     (set-buffer-multibyte nil)
431     (insert ";;; -*- coding: -*-\n\n")
432     (insert " |")
433
434     (let ((i 0))
435       (while (< i 16)
436         (insert (format "  %X " i))
437         (setq i (1+ i))))
438     (insert "\n")
439
440     (insert "-+")
441     (let ((i 0))
442       (while (< i 16)
443         (insert (format "----"))
444         (setq i (1+ i))))
445     (insert "\n")
446
447     (let ((i 0))
448       (while (< i 16)
449         (insert (format "%X|" i))
450         (let ((j 0) (c i))
451           (while (< j 16)
452             (insert (format " \"%c\"" c))
453             (setq j (1+ j)
454                   c (+ c 16)))
455           (insert (format "\n")))
456         (setq i (1+ i))))))
457
458 (defun make-iso2022-94char-code-table-file (name)
459   (with-temp-file name
460     (set-buffer-multibyte nil)
461     (insert ";;; -*- coding: -*-\n\n")
462     (insert " |")
463     (let ((i 0))
464       (while (< i 16)
465         (insert (format "  %X " i))
466         (setq i (1+ i))))
467     (insert "\n")
468
469     (insert "-+")
470     (let ((i 0))
471       (while (< i 16)
472         (insert (format "----"))
473         (setq i (1+ i))))
474     (insert "\n")
475
476     (let ((i 0))
477       (while (< i 16)
478         (insert (format "%X|" i))
479         (let ((j 0) (c i))
480           (while (< j 16)
481             (if (or (<= c 31)
482                     (= c 127)
483                     (and (<= 128 c)
484                          (<= c 160))
485                     (= c 255))
486                 (insert "    ")
487               (insert (format " \"%c\"" c)))
488             (setq j (1+ j)
489                   c (+ c 16)))
490           (insert (format "\n")))
491         (setq i (1+ i))))))
492   
493 (defun make-iso2022-96char-code-table-file (name)
494   (with-temp-file name
495     (set-buffer-multibyte nil)
496     (insert ";;; -*- coding: -*-\n\n")
497     (insert " |")
498     (let ((i 0))
499       (while (< i 16)
500         (insert (format "  %X " i))
501         (setq i (1+ i))))
502     (insert "\n")
503
504     (insert "-+")
505     (let ((i 0))
506       (while (< i 16)
507         (insert (format "----"))
508         (setq i (1+ i))))
509     (insert "\n")
510
511     (let ((i 0))
512       (while (< i 16)
513         (insert (format "%X|" i))
514         (let ((j 0) (c i))
515           (while (< j 16)
516             (if (or (<= c 31)
517                     (= c 127)
518                     (and (<= 128 c)
519                          (< c 160)))
520                 (insert "    ")
521               (insert (format " \"%c\"" c)))
522             (setq j (1+ j)
523                   c (+ c 16)))
524           (insert (format "\n")))
525         (setq i (1+ i))))))
526
527 (defun make-euc-code-table-file (name)
528   (with-temp-file name
529     (set-buffer-multibyte nil)
530     (insert ";;; -*- coding: -*-\n\n")
531     (insert "  |")
532     (let ((i 1))
533       (while (<= i 94)
534         ;;                "XX"
535         (insert (format "  %02d " i))
536         (setq i (1+ i))))
537     (insert "\n")
538
539     (insert "-+")
540     (let ((i 1))
541       (while (<= i 94)
542         (insert (format "-----"))
543         (setq i (1+ i))))
544     (insert "\n")
545
546     (let ((i 1))
547       (while (<= i 94)
548         (insert (format "%02d|" i))
549         (let ((j 1))
550           (while (<= j 94)
551             (insert (format " \"%c%c\""
552                             (+ i 32 128)
553                             (+ j 32 128)))
554             (setq j (1+ j)))
555           (insert (format "\n")))
556         (setq i (1+ i))))))