3 (dolist (file '("J90-to-UCS.txt" "JSP-to-UCS.txt"
4 "JX1-to-UCS.txt" "JX2-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"
11 "B-to-UCS.txt" "JC3-to-UCS.txt"))
12 (mapping-table-read-file (expand-file-name file "../etc/char-data/")))
14 (ucs-compat-read-file "../etc/char-data/UCS-compat.txt")
16 (jp-jouyou-read-file "../etc/char-data/jp-jouyou.txt")
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))))
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
102 (unless (memq v gt-pj-1-and-jis-x0208-1990-different-code-points)
103 (put-char-attribute (decode-char '=jis-x0208@1990 v)
111 (when (setq chr (decode-char '=gt i))
112 (put-char-attribute chr '=gt i))
115 (let ((default-coded-charset-priority-list
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)))
140 ;; (dolist (ccs '(=gt-pj-1
151 ;; (map-char-attribute
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))
162 ;; (dolist (feature (char-attribute-list))
163 ;; (when (string-match "\\*sources\\($\\|@[^\\*]+$\\)"
164 ;; (symbol-name feature))
165 ;; (setq dest (cons feature dest))))
167 ;; (map-char-attribute
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))
176 ;; (map-char-attribute
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)
189 ;; (dolist (feature (char-attribute-list))
190 ;; (when (string-match "\\*sources\\($\\|@[^\\*]+$\\)"
191 ;; (symbol-name feature))
192 ;; (setq dest (cons feature dest))))
194 ;; (map-char-attribute
196 ;; (cond ((setq ret (memq 'shinjigen@1ed v))
197 ;; (when (memq 'shinjigen@rev ret)
198 ;; (setcar ret 'shinjigen)
199 ;; (delq 'shinjigen@rev ret)
201 ;; ((setq ret (memq 'shinjigen@rev v))
202 ;; (when (memq 'shinjigen@1ed ret)
203 ;; (setcar ret 'shinjigen)
204 ;; (delq 'shinjigen@1ed ret)
209 (dolist (ccs '(=jis-x0208 =jis-x0208@1990))
212 (unless (eq (encode-char c '=jis-x0213-1@2000) v)
213 (put-char-attribute c '=jis-x0213-1 v))
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))
230 ((or (eq char 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)))
242 (unless (or (and (= ku 47)(= ten 64))
243 (and (= ku 67)(= ten 14)))
244 (put-char-attribute rep-char '==jis-x0213-1@2000 code)
245 (remove-char-attribute rep-char '==jis-x0213-1)
246 (remove-char-attribute rep-char '==jis-x0213-1@2004)
247 (setq ucs (or (encode-char rep-char '==ucs@jis/2000)
249 (remove-char-attribute rep-char '==ucs@jis)
250 (remove-char-attribute rep-char '==ucs@jis/2004))
251 (when (setq rep-char (decode-char '==jis-x0213-1@2004 code))
252 (unless (eq (encode-char rep-char '==ucs@jis/2004) ucs)
253 (put-char-attribute rep-char '==ucs@jis/2004 ucs)))
255 (unless (eq code #x332A)
256 (when (setq char (decode-char '=>jis-x0208@1997 code 'defined-only))
257 (unless (eq (encode-char char '=>>jis-x0208) code)
258 (unless (eq (encode-char char '=+>jis-x0208) code)
259 (put-char-attribute char '=>jis-x0208 code)
260 (remove-char-attribute char '=>jis-x0208@1997)))))
265 (unless (eq (encode-char c '=>jis-x0213-1) v)
266 (put-char-attribute c '=>jis-x0213-1 v))
273 (when (setq dg-chr (decode-char '===jis-x0212 v))
274 (unless (eq c dg-chr)
275 (put-char-attribute dg-chr '===hanyo-denshi/jb v)))
280 (when (setq dg-chr (decode-char '===jis-x0213-1@2000 v))
281 (unless (eq c dg-chr)
282 (put-char-attribute dg-chr '===hanyo-denshi/jc v)))
287 (when (setq dg-chr (decode-char '===jis-x0213-2 v))
288 (unless (eq c dg-chr)
289 (put-char-attribute dg-chr '===hanyo-denshi/jd v)))
297 (if (and (setq j-chr (decode-char '=ucs@JP v))
299 (null (encode-char c '=ucs))
300 (not (eq (encode-char c '=ucs@jis)
301 (encode-char c '=ucs@JP/hanazono))))
302 (put-char-attribute c '=ucs@JP/hanazono nil))
307 (or (and (setq ucs-jv (encode-char c '==ucs@JP/hanazono))
309 (if (and (setq j-chr (decode-char '==ucs@JP v))
311 (not (or (eq ucs-jv (encode-char c '==ucs@jis))
312 (eq ucs-jv (encode-char c '==ucs@unicode))
313 (eq ucs-jv (encode-char c '==ucs@cns))
315 (put-char-attribute c '==ucs@JP/hanazono nil)))
320 (defun glyph-form-feature-to-glyph-image-char-spec (dg-fn
325 (setq rep-gi-fn (intern (format "=%s" dg-fn))))
327 (setq dg-char (decode-char dg-fn code-point)))
329 (when (find-charset rep-gi-fn)
330 (cons (cons rep-gi-fn code-point)
333 (if (setq code (encode-char dg-char '==gt-k))
334 (list (cons '===gt-k code)))
336 ((eq dg-fn '==hanyo-denshi/jc)
337 (cond ((encode-char dg-char '==jis-x0213-1)
338 (list (cons '===jis-x0213-1 code-point))
340 ((encode-char dg-char '==jis-x0213-1@2000)
341 (list (cons '===jis-x0213-1@2000 code-point))
344 ((eq dg-fn '==hanyo-denshi/jd)
345 (list (cons '===jis-x0213-2 code-point))
347 ((eq dg-fn '==jis-x0208)
348 (cond ((encode-char dg-char '==jis-x0213-1)
349 (list (cons '===jis-x0213-1 code-point))
351 ((encode-char dg-char '==jis-x0213-1@2000)
352 (list (cons '===jis-x0213-1@2000 code-point))
355 ((eq dg-fn '==ks-x1001)
356 (if (setq code (encode-char dg-char '==ucs@ks))
357 (list (cons '===ucs@ks code)))
360 (let (dest rep-gi-fn rep-gi spec target-dg-fns)
361 (dolist (fn (char-attribute-list))
362 (when (and (find-charset fn)
363 (string-match "^==[^*=>]+$" (symbol-name fn)))
364 (setq dest (cons fn dest))))
365 (setq dest (sort dest
367 (cond ((eq a '==daikanwa)
369 ((eq a '==daikanwa/+p)
371 ((eq a '==daikanwa/ho)
374 (cond ((memq b '(==daikanwa
375 ==daikanwa/+p ==daikanwa/ho))
378 ((eq a '==jis-x0208@1978)
379 (cond ((memq b '(==daikanwa
380 ==daikanwa/+p ==daikanwa/ho
384 ((eq a '==jis-x0208@1983)
385 (cond ((memq b '(==daikanwa
386 ==daikanwa/+p ==daikanwa/ho
391 ((eq a '==jis-x0208@1990)
392 (cond ((memq b '(==daikanwa
393 ==daikanwa/+p ==daikanwa/ho
400 (cond ((memq b '(==daikanwa
401 ==daikanwa/+p ==daikanwa/ho
404 ==jis-x0208@1983 ==jis-x0208@1990))
407 ((eq a '==jis-x0213-1)
408 (cond ((memq b '(==daikanwa
409 ==daikanwa/+p ==daikanwa/ho
412 ==jis-x0208@1983 ==jis-x0208@1990
416 ((eq a '==jis-x0213-2)
417 (cond ((memq b '(==daikanwa
418 ==daikanwa/+p ==daikanwa/ho
421 ==jis-x0208@1983 ==jis-x0208@1990
422 ==jis-x0212 ==jis-x0213-1))
426 (cond ((memq b '(==daikanwa
427 ==daikanwa/+p ==daikanwa/ho
430 ==jis-x0208@1983 ==jis-x0208@1990
432 ==jis-x0213-1 ==jis-x0213-2))
435 (string< (symbol-name a)(symbol-name b)))))))))
437 (setq rep-gi-fn (intern (format "=%s" dg-fn)))
438 (when (find-charset rep-gi-fn)
441 (setq rep-gi (decode-char rep-gi-fn v))
442 (unless (or (and (eq dg-fn '==jis-x0208)
443 (eq (get-char-attribute
444 (decode-char '===jis-x0208@1990 v)
447 (and (eq dg-fn '==jis-x0213-1)
448 (eq (get-char-attribute
449 (decode-char '===jis-x0213-1@2000 v)
450 '===jis-x0213-1@2000)
453 (not (eq c rep-gi))))
454 (if (get-char-attribute c '->subsumptive)
457 (glyph-form-feature-to-glyph-image-char-spec
459 ;; (list (cons rep-gi-fn v))
461 (put-char-attribute rep-gi '<-subsumptive (list c)))
462 (setq spec (char-attribute-alist c))
463 (setq target-dg-fns nil)
465 (unless (memq (car fp)
468 ==hanyo-denshi/jc ==hanyo-denshi/jd
470 (when (find-charset (intern (format "=%s" (car fp))))
471 (setq target-dg-fns (cons (car fp) target-dg-fns)))))
472 (when (cdr target-dg-fns)
475 (glyph-form-feature-to-glyph-image-char-spec
476 dg-fn v rep-gi-fn c)))
478 (put-char-attribute rep-gi '<-subsumptive (list c))))))
485 (when (and (setq chr (decode-char '=ks-x1001 v))
486 (setq ucs (encode-char chr '=ucs@ks)))
487 (put-char-attribute c '===ucs@ks ucs))