1 ;;; ideo-trans.el --- Translation utility for Ideographic Strings
3 ;; Copyright (C) 2003,2004 MORIOKA Tomohiko
5 ;; Author: MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
6 ;; Keywords: Ideographs, Character Database, Chaon, CHISE
8 ;; This file is a part of tomoyo-tools.
10 ;; This program is free software; you can redistribute it and/or
11 ;; modify it under the terms of the GNU General Public License as
12 ;; published by the Free Software Foundation; either version 2, or (at
13 ;; your option) any later version.
15 ;; This program is distributed in the hope that it will be useful, but
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 ;; General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with this program; see the file COPYING. If not, write to
22 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
27 (defun char-cns11643-p (char &optional defined-only)
30 (intern (format "=cns11643-%d" n))
34 (defun char-ks-x1001-p (char &optional defined-only)
35 (encode-char char 'korean-ksc5601 defined-only))
37 (defun find-char-variant (char predicate)
38 (if (funcall predicate char)
40 (let ((ucs (char-ucs char))
44 (char-variants (decode-char 'ucs ucs))))
46 (setq char (car variants))
47 (not (funcall predicate char)))
48 (setq variants (cdr variants))))
52 (defun char-representative-of-ucs (char)
53 "Convert CHAR into representative character of UCS."
55 (if (setq ret (char-ucs char))
56 (decode-char '=ucs ret)
60 (defun char-representative-of-domain (char domain)
61 "Convert CHAR into representative character of DOMAIN."
63 (cond ((eq domain 'daikanwa)
64 (char-representative-of-daikanwa char))
66 (char-representative-of-ucs char))
68 (if (setq ret (char-feature char '=>ucs@cns))
69 (decode-char '=ucs@cns ret)
70 (find-char-variant char 'char-cns11643-p)))
72 (if (setq ret (char-feature char '=>ucs@ks))
73 (decode-char '=ucs@ks ret)
74 (find-char-variant char 'char-ks-x1001-p)))
76 (or (char-feature char
77 (intern (format "=>ucs@%s" domain)))
79 (decode-char (intern (format "=ucs@%s" domain)) ret))
83 (defun ideo-translate-string-into-ucs (string)
84 "Convert characters in STRING into UCS-representative characters."
85 (mapconcat (lambda (char)
86 (char-to-string (char-representative-of-ucs char)))
90 (defun chinese-simplify-string (string)
91 "Simplify Chinese traditional characters in STRING."
96 (cond ((setq ret (char-feature chr '=>ucs@gb))
97 (setq chr (decode-char '=ucs@gb ret)))
98 ((setq ret (char-ucs chr))
99 (setq chr (decode-char '=ucs@gb ret))
100 (if (setq ret (get-char-attribute chr '=>ucs*))
101 (decode-char '=ucs@gb ret)
105 (if (setq ret (encode-char uchr 'chinese-gb12345))
106 (decode-char 'chinese-gb2312 ret)
111 (define-obsolete-function-alias
112 'ideo-translate-string-into-simplified-chinese
113 'chinese-simplify-string)
116 (define-obsolete-function-alias 'ideo-trans-simplify-chinese-string
117 'chinese-simplify-string)
120 (defun japanese-simplify-string (string)
121 "Simplify traditional Kanji characters in STRING."
125 (setq ret (or (char-feature chr '->simplified@JP/Jouyou)
126 (char-feature chr '->simplified@JP)
127 (char-feature chr '->simplified)))
130 ((setq ret (char-feature chr '=>ucs@jis))
131 (decode-char '=ucs@jis ret))
132 ((setq ret (char-ucs chr))
133 (decode-char '=ucs@jp ret))
138 (define-obsolete-function-alias
139 'ideo-translate-string-into-simplified-japanese
140 'japanese-simplify-string)
143 (defun ideo-trans-select-char (chars &optional prefix)
149 (mapconcat (lambda (cell)
151 (format "%d. %c" i cell))
154 (while (and (setq ret (string-to-int (read-string prompt)))
156 (<= ret (length chars))))))
157 (nth (1- ret) chars)))
160 (defun chinese-traditionalize-string (string)
161 "Convert simplified Chinese characters in STRING to traditional characters."
166 (cond ((car (char-feature chr '<-simplified))
168 (ideo-trans-select-char ret (format "%c => " chr))
172 (cond ((setq ret (char-feature chr '=>ucs@gb))
173 (decode-char '=ucs@gb ret))
174 ((setq ret (char-ucs chr))
175 (decode-char '=ucs@gb ret))
177 (if (setq ret (encode-char ret 'chinese-gb2312))
178 (setq ret (decode-char 'chinese-gb12345 ret))))
184 (define-obsolete-function-alias
185 'ideo-translate-chinese-string-into-traditional
186 'chinese-traditionalize-string)
189 (defun japanese-traditionalize-string (string)
190 "Convert simplified Kanji in STRING into traditional characters."
195 (cond ((setq ret (char-feature chr '<-simplified))
197 (ideo-trans-select-char ret (format "%c => " chr))
201 (cond ((setq ret (char-feature chr '=>ucs@jis))
202 (decode-char '=ucs@jis ret))
203 ((setq ret (char-ucs chr))
204 (decode-char '=ucs@jp ret))
206 (setq ret (or (char-feature ret '<-simplified@JP/Jouyou)
207 (char-feature ret '<-simplified@JP))))
209 (ideo-trans-select-char ret (format "%c => " chr))
211 ((setq ret (char-feature chr '=>ucs@jis))
212 (decode-char '=ucs@jis ret))
213 ((setq ret (char-ucs chr))
214 (decode-char '=ucs@jp ret))
219 (define-obsolete-function-alias
220 'ideo-translate-japanese-string-into-traditional
221 'japanese-traditionalize-string)
224 (defun japanese-traditionalize-region (start end)
228 (narrow-to-region start end)
231 (while (and (skip-chars-forward "\x00-\xFF")
233 (setq chr (char-after))
234 (if (setq ret (or (get-char-attribute chr '<-simplified@JP/Jouyou)
235 (get-char-attribute chr '<-simplified@jp-jouyou)
236 (get-char-attribute chr '<-simplified@JP)
237 (get-char-attribute chr '<-simplified@jp)
238 (get-char-attribute chr '<-jp-simplified)
239 (get-char-attribute chr '<-simplified)))
243 (setq rret (ideo-trans-select-char ret))
249 (forward-char))))))))
252 (defun japanese-simplify-region (start end)
256 (narrow-to-region start end)
259 (while (and (skip-chars-forward "\x00-\xFF")
261 (setq chr (char-after))
262 (if (setq ret (or (get-char-attribute chr '->simplified@JP/Jouyou)
263 (get-char-attribute chr '->simplified@jp-jouyou)
264 (get-char-attribute chr '->simplified@JP)
265 (get-char-attribute chr '->simplified@jp)
266 (get-char-attribute chr '->jp-simplified)
267 (get-char-attribute chr '->simplified)))
271 (setq rret (ideo-trans-select-char ret))
277 (forward-char))))))))
280 (define-obsolete-function-alias
281 'ideo-translate-japanese-region-into-traditional
282 'japanese-traditionalize-region)
285 (define-obsolete-function-alias
286 'ideo-translate-region-into-traditional
287 'japanese-traditionalize-region)
293 (provide 'ideo-trans)
295 ;;; ideo-trans.el ends here