update.
[chise/xemacs-chise.git] / lisp / utf-2000 / maps-conf.el
1 (require 'read-maps)
2
3 (dolist (file '("J90-to-UCS.txt" "JSP-to-UCS.txt"
4                 "JX1-to-UCS.txt" "JX2-to-UCS.txt"
5                 "K0-to-UCS.txt"
6                 "G0-to-UCS.txt"
7                 "C1-to-UCS.txt" "C2-to-UCS.txt"
8                 "C3-to-UCS.txt" "C4-to-UCS.txt"
9                 "C5-to-UCS.txt" "C6-to-UCS.txt"
10                 "C7-to-UCS.txt"
11                 "B-to-UCS.txt" "JC3-to-UCS.txt"))
12   (mapping-table-read-file (expand-file-name file "../etc/char-data/")))
13
14 (ucs-compat-read-file "../etc/char-data/UCS-compat.txt")
15
16 (jp-jouyou-read-file "../etc/char-data/jp-jouyou.txt")
17
18 (let ((ucs #xE000)
19       big5 chr)
20   (while (<= ucs #xF848)
21     (setq chr (decode-char 'ucs ucs))
22     (when (setq big5 (get-char-attribute chr '=big5-pua))
23       (when (setq chr (decode-char '=big5-cdp big5))
24         (unless (get-char-attribute chr '=big5-cdp)
25           (put-char-attribute chr '=big5-cdp big5))))
26     (setq ucs (1+ ucs))))
27
28
29 (defconst gt-pj-1-and-jis-x0208-1990-different-code-points
30       '(#x5C37 #x5C52 #x3521 #x5D62 #x5F4A
31         #x5F5B #x6062 #x4849 #x6173 #x306B
32         #x6328 #x6352 #x6362 #x6471 #x6524
33         #x6530 #x6549 #x6628 #x4356 #x665C
34         #x665D #x6661 #x6660 #x6663 #x4F38
35         #x666B #x4C2E #x6724 #x3D58 #x682B
36         #x427B #x4978 #x694A #x303A #x6A44
37         #x6B43 #x6B78 #x6C2E #x6C57 #x6D36
38         #x6D3A #x3D34 #x4A56 #x3063 #x3D3F
39         #x6E60 #x6F52 #x6F5C #x3458 #x4262
40         #x4E59 #x6F58 #x7051 #x7056 #x375B
41         #x7123 #x712A #x3142 #x3B41 #x7149
42         #x7165 #x7227 #x7233 #x733B #x4E6F
43         #x7366 #x7367 #x7368 #x736C #x5423
44         #x342A #x3476 #x5877 #x592D #x5A61
45         #x3522 #x334C #x657D #x657E #x6621
46         #x335C #x6D7D #x507C #x417C #x5371
47         #x3766 #x3E7D #x555D #x5739 #x5831
48         #x3F78 #x5973 #x5A33 #x5970 #x5A49
49         #x3F22 #x6026 #x4D32 #x612E #x4D63
50         #x4E57 #x316A #x4A43 #x723C #x6A64
51         #x6B36 #x6E43 #x3D36 #x6E44 #x3C60
52         #x6E45 #x6E46 #x6E48 #x6E4B #x6E4A
53         #x6E4F #x6E52 #x6E51 #x4830 #x6E54
54         #x6E55 #x395A #x724D #x737D #x3973
55         #x5379 #x5879 #x3D5D #x3C21 #x4C60
56         #x5267 #x722F #x3C39 #x3848 #x5578
57         #x4742 #x6950 #x697C #x6A24 #x5350
58         #x3326 #x5575 #x5A4B #x3647 #x343F
59         #x4337 #x492D #x3F6C #x6E4D #x4F3F
60         #x353D #x4324 #x475B #x6E47 #x4371
61         #x3F5D #x6E49 #x4D6F #x3C72 #x3D37
62         #x6E4C #x3B44 #x734E #x5567 #x545A
63         #x3071 #x332A #x516A #x476D #x3675
64         #x5734 #x552D #x565A #x564B #x5B79
65         #x5C74 #x5C27 #x5B5E #x3564 #x3823
66         #x6131 #x4A4D #x632E #x635E #x3729
67         #x3951 #x6967 #x704B #x3C38 #x6B26
68         #x4749 #x4428 #x3A47 #x6E4E #x4269
69         #x4043 #x6E56 #x6132 #x5C54 #x3557
70         #x5827 #x4C68 #x505B #x514A #x5D27
71         #x5563 #x5D7A #x4575 #x5F7C #x3B38
72         #x3237 #x3B51 #x596E #x5B5B #x6640
73         #x6D75 #x4D2C #x737B #x7379 #x5E7A
74         #x3E7A #x3865 #x557B #x436B #x413B
75         #x562D #x4C28 #x562F #x5631 #x5632
76         #x5633 #x5635 #x463D #x362E #x3265
77         #x563B #x4A76 #x5638 #x5637 #x3A6A
78         #x5642 #x563D #x5647 #x5641 #x5644
79         #x5648 #x564A #x3A37 #x564F #x4568
80         #x5653 #x5652 #x5654 #x5655 #x5659
81         #x565C #x3474 #x562E #x5630 #x5639
82         #x3D54 #x5645 #x564E #x5651 #x564C
83         #x3460 #x565B #x5628 #x5726 #x5759
84         #x583E #x5833 #x5843 #x584E #x5860
85         #x585D #x4463 #x4C31 #x5351 #x6243
86         #x587A #x5921 #x4879 #x4530 #x4863
87         #x5932 #x3E35 #x4D5E #x5A2D #x4471
88         #x5939 #x3348 #x3969 #x594D #x3044
89         #x594B #x3027 #x3F36 #x405C #x5964
90         #x5962 #x5953 #x5977 #x3B35 #x4531
91         #x5A26 #x5A2B #x5A2F #x5A36 #x5A37
92         #x5A3B #x5A2C #x5A2A #x5A40 #x5A3F
93         #x5A41 #x327E #x384E #x5A43 #x5A47
94         #x5A45 #x4754 #x343A #x3B36 #x4658
95         #x3749 #x3F74 #x4528 #x4030 #x5A4C
96         #x507B #x507E #x5353 #x5A44 #x6E2B
97         #x5B30 #x4C40 #x376E #x6067 #x4E28
98         #x6425))
99
100 (map-char-attribute
101  (lambda (c v)
102    (unless (memq v gt-pj-1-and-jis-x0208-1990-different-code-points)
103      (put-char-attribute (decode-char '=jis-x0208@1990 v)
104                          '=gt-pj-1 v))
105    nil)
106  '=gt-pj-1)
107
108 (let ((i 1)
109       chr)
110   (while (<= i 67547)
111     (when (setq chr (decode-char '=gt i))
112       (put-char-attribute chr '=gt i))
113     (setq i (1+ i))))
114
115 (let ((default-coded-charset-priority-list
116         '(=gt-pj-1
117           =gt-pj-2
118           =gt-pj-3
119           =gt-pj-4
120           =gt-pj-5
121           =gt-pj-6
122           =gt-pj-7
123           =gt-pj-8
124           =gt-pj-9
125           =gt-pj-10
126           =gt-pj-11
127           =gt-pj-k1
128           =gt-pj-k2))
129       (i 1)
130       chr ret)
131   (while (<= i 12000)
132     (when (and (setq ret (decode-char '=gt-k i))
133                (setq ret (split-char ret))
134                (memq (car ret) default-coded-charset-priority-list))
135       (when (setq chr (apply (function make-char) ret))
136         (put-char-attribute chr '=gt-k i)))
137     (setq i (1+ i))))
138
139 ;; (let (gt ret)
140 ;;   (dolist (ccs '(=gt-pj-1
141 ;;                  =gt-pj-2
142 ;;                  =gt-pj-3
143 ;;                  =gt-pj-4
144 ;;                  =gt-pj-5
145 ;;                  =gt-pj-6
146 ;;                  =gt-pj-7
147 ;;                  =gt-pj-8
148 ;;                  =gt-pj-9
149 ;;                  =gt-pj-10
150 ;;                  =gt-pj-11))
151 ;;     (map-char-attribute
152 ;;      (lambda (c v)
153 ;;        (when (setq gt (encode-char c '=gt))
154 ;;          (put-char-attribute c '=gt gt)
155 ;;          (put-char-attribute (decode-char ccs v) '=gt gt))
156 ;;        nil)
157 ;;      ccs)))
158
159 ;; (let (ret)
160 ;;   (dolist (feature
161 ;;            (let (dest)
162 ;;              (dolist (feature (char-attribute-list))
163 ;;                (when (string-match "\\*sources\\($\\|@[^\\*]+$\\)"
164 ;;                                    (symbol-name feature))
165 ;;                  (setq dest (cons feature dest))))
166 ;;              dest))
167 ;;     (map-char-attribute
168 ;;      (lambda (c v)
169 ;;        (when (setq ret (memq 'shinjigen-1 v))
170 ;;          (setcar ret 'shinjigen@1ed))
171 ;;        (when (setq ret (memq 'shinjigen-2 v))
172 ;;          (setcar ret 'shinjigen@rev))
173 ;;        nil)
174 ;;      feature)))
175
176 ;; (map-char-attribute
177 ;;  (lambda (c v)
178 ;;    (when (eq (encode-char c '=shinjigen@rev) v)
179 ;;      (put-char-attribute c '=shinjigen v)
180 ;;      (remove-char-attribute c '=shinjigen@1ed)
181 ;;      (remove-char-attribute c '=shinjigen@rev)
182 ;;      )
183 ;;    nil)
184 ;;  '=shinjigen@1ed)
185
186 ;; (let (ret)
187 ;;   (dolist (feature
188 ;;            (let (dest)
189 ;;              (dolist (feature (char-attribute-list))
190 ;;                (when (string-match "\\*sources\\($\\|@[^\\*]+$\\)"
191 ;;                                    (symbol-name feature))
192 ;;                  (setq dest (cons feature dest))))
193 ;;              dest))
194 ;;     (map-char-attribute
195 ;;      (lambda (c v)
196 ;;        (cond ((setq ret (memq 'shinjigen@1ed v))
197 ;;               (when (memq 'shinjigen@rev ret)
198 ;;                 (setcar ret 'shinjigen)
199 ;;                 (delq 'shinjigen@rev ret)
200 ;;                 ))
201 ;;              ((setq ret (memq 'shinjigen@rev v))
202 ;;               (when (memq 'shinjigen@1ed ret)
203 ;;                 (setcar ret 'shinjigen)
204 ;;                 (delq 'shinjigen@1ed ret)
205 ;;                 )))
206 ;;        nil)
207 ;;      feature)))
208
209 (dolist (ccs '(=jis-x0208 =jis-x0208@1990))
210   (map-char-attribute
211    (lambda (c v)
212      (unless (eq (encode-char c '=jis-x0213-1@2000) v)
213        (put-char-attribute c '=jis-x0213-1 v))
214      nil)
215    ccs))
216
217 (with-temp-buffer
218   (buffer-disable-undo)
219   (insert-file-contents "../etc/char-data/JX3-JX1-rep-diff.txt")
220   (goto-char (point-min))
221   (let (ku ten char code ucs rep-char)
222     (while (re-search-forward "^1-\\([0-9]+\\)-\\([0-9]+\\)[ \t]+" nil t)
223       (setq ku (string-to-number (match-string 1))
224             ten (string-to-number (match-string 2)))
225       (setq char (make-char '=jis-x0213-1@2000 (+ ku 32)(+ ten 32)))
226       (setq code (encode-char char '=jis-x0213-1@2000))
227       (setq ucs (encode-char char '=ucs@jis/2000))
228       (setq rep-char (decode-char '==jis-x0213-1@2000 code))
229       (cond
230        ((or (eq char rep-char)
231             (null rep-char))
232         (put-char-attribute char '=jis-x0213-1@2000 code)
233         (remove-char-attribute char '=jis-x0213-1)
234         (remove-char-attribute char '=jis-x0213-1@2004)
235         (remove-char-attribute char '=ucs@jis)
236         (remove-char-attribute char '=ucs@jis/2004)
237         (when (setq char (decode-char '=jis-x0213-1@2004 code))
238           (unless (eq (encode-char char '=ucs@jis/2004) ucs)
239             (put-char-attribute char '=ucs@jis/2004 ucs)))
240         )
241        (rep-char
242         (unless (and (= ku 47)(= ten 64))
243           (put-char-attribute rep-char '==jis-x0213-1@2000 code)
244           (remove-char-attribute rep-char '==jis-x0213-1)
245           (remove-char-attribute rep-char '==jis-x0213-1@2004)
246           (setq ucs (or (encode-char rep-char '==ucs@jis/2000)
247                         ucs))
248           (remove-char-attribute rep-char '==ucs@jis)
249           (remove-char-attribute rep-char '==ucs@jis/2004))
250         (when (setq rep-char (decode-char '==jis-x0213-1@2004 code))
251           (unless (eq (encode-char rep-char '==ucs@jis/2004) ucs)
252             (put-char-attribute rep-char '==ucs@jis/2004 ucs)))
253         ))
254       (unless (eq code #x332A)
255         (when (setq char (decode-char '=>jis-x0208@1997 code 'defined-only))
256           (unless (eq (encode-char char '=>>jis-x0208) code)
257             (unless (eq (encode-char char '=+>jis-x0208) code)
258               (put-char-attribute char '=>jis-x0208 code)
259               (remove-char-attribute char '=>jis-x0208@1997)))))
260       )))
261
262 (map-char-attribute
263  (lambda (c v)
264    (unless (eq (encode-char c '=>jis-x0213-1) v)
265      (put-char-attribute c '=>jis-x0213-1 v))
266    nil)
267  '=>jis-x0208)
268
269 (let (dg-chr)
270   (map-char-attribute
271    (lambda (c v)
272      (when (setq dg-chr (decode-char '===jis-x0212 v))
273        (unless (eq c dg-chr)
274          (put-char-attribute dg-chr '===hanyo-denshi/jb v)))
275      nil)
276    '==hanyo-denshi/jb)
277   (map-char-attribute
278    (lambda (c v)
279      (when (setq dg-chr (decode-char '===jis-x0213-1@2000 v))
280        (unless (eq c dg-chr)
281          (put-char-attribute dg-chr '===hanyo-denshi/jc v)))
282      nil)
283    '==hanyo-denshi/jc)
284   (map-char-attribute
285    (lambda (c v)
286      (when (setq dg-chr (decode-char '===jis-x0213-2 v))
287        (unless (eq c dg-chr)
288          (put-char-attribute dg-chr '===hanyo-denshi/jd v)))
289      nil)
290    '==hanyo-denshi/jd)
291   )
292
293 (let (j-chr)
294   (map-char-attribute
295    (lambda (c v)
296      (if (and (setq j-chr (decode-char '=ucs@JP v))
297               (not (eq j-chr c))
298               (null (encode-char c '=ucs)))
299          (put-char-attribute c '=ucs@JP/hanazono nil))
300      nil)
301    '=ucs@unicode)
302   (map-char-attribute
303    (lambda (c v)
304      (if (and (setq j-chr (decode-char '==ucs@JP v))
305               (not (eq j-chr c)))
306          (put-char-attribute c '==ucs@JP/hanazono nil))
307      nil)
308    '==ucs@unicode)
309   )
310
311 (defun glyph-form-feature-to-glyph-image-char-spec (dg-fn
312                                                     code-point
313                                                     &optional
314                                                     rep-gi-fn dg-char)
315   (unless rep-gi-fn
316     (setq rep-gi-fn (intern (format "=%s" dg-fn))))
317   (unless dg-char
318     (setq dg-char (decode-char dg-fn code-point)))
319   (let (code)
320     (when (find-charset rep-gi-fn)
321       (cons (cons rep-gi-fn code-point)
322             (cond
323              ((eq dg-fn '==gt)
324               (if (setq code (encode-char dg-char '==gt-k))
325                   (list (cons '===gt-k code)))
326               )
327              ((eq dg-fn '==hanyo-denshi/jc)
328               (cond ((encode-char dg-char '==jis-x0213-1)
329                      (list (cons '===jis-x0213-1 code-point))
330                      )
331                     ((encode-char dg-char '==jis-x0213-1@2000)
332                      (list (cons '===jis-x0213-1@2000 code-point))
333                      ))
334               )
335              ((eq dg-fn '==hanyo-denshi/jd)
336               (list (cons '===jis-x0213-2 code-point))
337               )
338              ((eq dg-fn '==jis-x0208)
339               (cond ((encode-char dg-char '==jis-x0213-1)
340                      (list (cons '===jis-x0213-1 code-point))
341                      )
342                     ((encode-char dg-char '==jis-x0213-1@2000)
343                      (list (cons '===jis-x0213-1@2000 code-point))
344                      ))
345               )
346              ((eq dg-fn '==ks-x1001)
347               (if (setq code (encode-char dg-char '==ucs@ks))
348                   (list (cons '===ucs@ks code)))
349               ))))))
350
351 (let (dest rep-gi-fn rep-gi spec target-dg-fns)
352   (dolist (fn (char-attribute-list))
353     (when (and (find-charset fn)
354                (string-match "^==[^*=>]+$" (symbol-name fn)))
355       (setq dest (cons fn dest))))
356   (setq dest (sort dest
357                    (lambda (a b)
358                      (cond ((eq a '==daikanwa)
359                             t)
360                            ((eq a '==daikanwa/+p)
361                             t)
362                            ((eq a '==daikanwa/ho)
363                             t)
364                            ((eq a '==jis-x0208)
365                             (cond ((memq b '(==daikanwa
366                                              ==daikanwa/+p ==daikanwa/ho))
367                                    nil)
368                                   (t)))
369                            ((eq a '==jis-x0208@1978)
370                             (cond ((memq b '(==daikanwa
371                                              ==daikanwa/+p ==daikanwa/ho
372                                              ==jis-x0208))
373                                    nil)
374                                   (t)))
375                            ((eq a '==jis-x0208@1983)
376                             (cond ((memq b '(==daikanwa
377                                              ==daikanwa/+p ==daikanwa/ho
378                                              ==jis-x0208
379                                              ==jis-x0208@1978))
380                                    nil)
381                                   (t)))
382                            ((eq a '==jis-x0208@1990)
383                             (cond ((memq b '(==daikanwa
384                                              ==daikanwa/+p ==daikanwa/ho
385                                              ==jis-x0208
386                                              ==jis-x0208@1978
387                                              ==jis-x0208@1983))
388                                    nil)
389                                   (t)))
390                            ((eq a '==jis-x0212)
391                             (cond ((memq b '(==daikanwa
392                                              ==daikanwa/+p ==daikanwa/ho
393                                              ==jis-x0208
394                                              ==jis-x0208@1978
395                                              ==jis-x0208@1983 ==jis-x0208@1990))
396                                    nil)
397                                   (t)))
398                            ((eq a '==jis-x0213-1)
399                             (cond ((memq b '(==daikanwa
400                                              ==daikanwa/+p ==daikanwa/ho
401                                              ==jis-x0208
402                                              ==jis-x0208@1978
403                                              ==jis-x0208@1983 ==jis-x0208@1990
404                                              ==jis-x0212))
405                                    nil)
406                                   (t)))
407                            ((eq a '==jis-x0213-2)
408                             (cond ((memq b '(==daikanwa
409                                              ==daikanwa/+p ==daikanwa/ho
410                                              ==jis-x0208
411                                              ==jis-x0208@1978
412                                              ==jis-x0208@1983 ==jis-x0208@1990
413                                              ==jis-x0212 ==jis-x0213-1))
414                                    nil)
415                                   (t)))
416                            (t
417                             (cond ((memq b '(==daikanwa
418                                              ==daikanwa/+p ==daikanwa/ho
419                                              ==jis-x0208
420                                              ==jis-x0208@1978
421                                              ==jis-x0208@1983 ==jis-x0208@1990
422                                              ==jis-x0212
423                                              ==jis-x0213-1 ==jis-x0213-2))
424                                    nil)
425                                   (t
426                                    (string< (symbol-name a)(symbol-name b)))))))))
427   (dolist (dg-fn dest)
428     (setq rep-gi-fn (intern (format "=%s" dg-fn)))
429     (when (find-charset rep-gi-fn)
430       (map-char-attribute
431        (lambda (c v)
432          (setq rep-gi (decode-char rep-gi-fn v))
433          (unless (or (and (eq dg-fn '==jis-x0208)
434                           (eq (get-char-attribute
435                                (decode-char '===jis-x0208@1990 v)
436                                '===jis-x0208@1990)
437                               v))
438                      (and (eq dg-fn '==jis-x0213-1)
439                           (eq (get-char-attribute
440                                (decode-char '===jis-x0213-1@2000 v)
441                                '===jis-x0213-1@2000)
442                              v))
443                      (and rep-gi
444                           (not (eq c rep-gi))))
445            (if (get-char-attribute c '->subsumptive)
446                (if (setq rep-gi
447                          (define-char
448                            (glyph-form-feature-to-glyph-image-char-spec
449                             dg-fn v rep-gi-fn c)
450                            ;; (list (cons rep-gi-fn v))
451                            ))
452                    (put-char-attribute rep-gi '<-subsumptive (list c)))
453              (setq spec (char-attribute-alist c))
454              (setq target-dg-fns nil)
455              (dolist (fp spec)
456                (unless (memq (car fp)
457                              '(==ks-x1001
458                                ==hanyo-denshi/jb
459                                ==hanyo-denshi/jc ==hanyo-denshi/jd
460                                ==gt-k))
461                  (when (find-charset (intern (format "=%s" (car fp))))
462                    (setq target-dg-fns (cons (car fp) target-dg-fns)))))
463              (when (cdr target-dg-fns)
464                (setq rep-gi
465                      (define-char
466                        (glyph-form-feature-to-glyph-image-char-spec
467                         dg-fn v rep-gi-fn c)))
468                (if rep-gi
469                    (put-char-attribute rep-gi '<-subsumptive (list c))))))
470          nil)
471        dg-fn))))
472
473 (let (chr ucs)
474   (map-char-attribute
475    (lambda (c v)
476      (when (and (setq chr (decode-char '=ks-x1001 v))
477                 (setq ucs (encode-char chr '=ucs@ks)))
478        (put-char-attribute c '===ucs@ks ucs))
479      nil)
480    '===ks-x1001))