aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorKenichi Handa1998-06-23 00:30:05 +0000
committerKenichi Handa1998-06-23 00:30:05 +0000
commit33366a82fa5e22dea3b23fa8ab929fb4b93a35be (patch)
tree4ccb774e08cad4dd73644de2e390168144a7604b /lisp
parent7c19e8e146415398590e763422cfc663e3b643e1 (diff)
downloademacs-33366a82fa5e22dea3b23fa8ab929fb4b93a35be.tar.gz
emacs-33366a82fa5e22dea3b23fa8ab929fb4b93a35be.zip
Introduce new character code property
`composition'. Add property `jisx0208' to Japanese hankaku characters. (japanese-kana-table): Add more data. (japanese-symbol-table): Change the order of elements. (japanese-katakana-region): Adjusted for the above changes. Check character code properties directly here. (japanese-hiragana-region): Likewise. (japanese-hankaku-region): Likewise. (japanese-zenkaku-region): Likewise.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/language/japan-util.el91
1 files changed, 61 insertions, 30 deletions
diff --git a/lisp/language/japan-util.el b/lisp/language/japan-util.el
index 275084fbf45..16790ed7da8 100644
--- a/lisp/language/japan-util.el
+++ b/lisp/language/japan-util.el
@@ -52,7 +52,7 @@
52 (?$B$^(B ?$B%^(B ?(IO(B) (?$B$_(B ?$B%_(B ?(IP(B) (?$B$`(B ?$B%`(B ?(IQ(B) (?$B$a(B ?$B%a(B ?(IR(B) (?$B$b(B ?$B%b(B ?(IS(B) 52 (?$B$^(B ?$B%^(B ?(IO(B) (?$B$_(B ?$B%_(B ?(IP(B) (?$B$`(B ?$B%`(B ?(IQ(B) (?$B$a(B ?$B%a(B ?(IR(B) (?$B$b(B ?$B%b(B ?(IS(B)
53 (?$B$d(B ?$B%d(B ?(IT(B) (?$B$f(B ?$B%f(B ?(IU(B) (?$B$h(B ?$B%h(B ?(IV(B) 53 (?$B$d(B ?$B%d(B ?(IT(B) (?$B$f(B ?$B%f(B ?(IU(B) (?$B$h(B ?$B%h(B ?(IV(B)
54 (?$B$i(B ?$B%i(B ?(IW(B) (?$B$j(B ?$B%j(B ?(IX(B) (?$B$k(B ?$B%k(B ?(IY(B) (?$B$l(B ?$B%l(B ?(IZ(B) (?$B$m(B ?$B%m(B ?(I[(B) 54 (?$B$i(B ?$B%i(B ?(IW(B) (?$B$j(B ?$B%j(B ?(IX(B) (?$B$k(B ?$B%k(B ?(IY(B) (?$B$l(B ?$B%l(B ?(IZ(B) (?$B$m(B ?$B%m(B ?(I[(B)
55 (?$B$o(B ?$B%o(B ?(I\(B) (?$B$p(B ?$B%p(B nil) (?$B$q(B ?$B%q(B nil) (?$B$r(B ?$B%r(B ?(I&(B) 55 (?$B$o(B ?$B%o(B ?(I\(B) (?$B$p(B ?$B%p(B "(I2(B") (?$B$q(B ?$B%q(B "(I4(B") (?$B$r(B ?$B%r(B ?(I&(B)
56 (?$B$s(B ?$B%s(B ?(I](B) 56 (?$B$s(B ?$B%s(B ?(I](B)
57 (?$B$,(B ?$B%,(B "(I6^(B") (?$B$.(B ?$B%.(B "(I7^(B") (?$B$0(B ?$B%0(B "(I8^(B") (?$B$2(B ?$B%2(B "(I9^(B") (?$B$4(B ?$B%4(B "(I:^(B") 57 (?$B$,(B ?$B%,(B "(I6^(B") (?$B$.(B ?$B%.(B "(I7^(B") (?$B$0(B ?$B%0(B "(I8^(B") (?$B$2(B ?$B%2(B "(I9^(B") (?$B$4(B ?$B%4(B "(I:^(B")
58 (?$B$6(B ?$B%6(B "(I;^(B") (?$B$8(B ?$B%8(B "(I<^(B") (?$B$:(B ?$B%:(B "(I=^(B") (?$B$<(B ?$B%<(B "(I>^(B") (?$B$>(B ?$B%>(B "(I?^(B") 58 (?$B$6(B ?$B%6(B "(I;^(B") (?$B$8(B ?$B%8(B "(I<^(B") (?$B$:(B ?$B%:(B "(I=^(B") (?$B$<(B ?$B%<(B "(I>^(B") (?$B$>(B ?$B%>(B "(I?^(B")
@@ -62,8 +62,8 @@
62 (?$B$!(B ?$B%!(B ?(I'(B) (?$B$#(B ?$B%#(B ?(I((B) (?$B$%(B ?$B%%(B ?(I)(B) (?$B$'(B ?$B%'(B ?(I*(B) (?$B$)(B ?$B%)(B ?(I+(B) 62 (?$B$!(B ?$B%!(B ?(I'(B) (?$B$#(B ?$B%#(B ?(I((B) (?$B$%(B ?$B%%(B ?(I)(B) (?$B$'(B ?$B%'(B ?(I*(B) (?$B$)(B ?$B%)(B ?(I+(B)
63 (?$B$C(B ?$B%C(B ?(I/(B) 63 (?$B$C(B ?$B%C(B ?(I/(B)
64 (?$B$c(B ?$B%c(B ?(I,(B) (?$B$e(B ?$B%e(B ?(I-(B) (?$B$g(B ?$B%g(B ?(I.(B) 64 (?$B$c(B ?$B%c(B ?(I,(B) (?$B$e(B ?$B%e(B ?(I-(B) (?$B$g(B ?$B%g(B ?(I.(B)
65 (?$B$n(B ?$B%n(B nil) 65 (?$B$n(B ?$B%n(B "(I\(B")
66 (nil ?$B%t(B "(I3^(B") (nil ?$B%u(B nil) (nil ?$B%v(B nil)) 66 ("$B$&!+(B" ?$B%t(B "(I3^(B") (nil ?$B%u(B "(I6(B") (nil ?$B%v(B "(I9(B"))
67 "Japanese JISX0208 Kana character table. 67 "Japanese JISX0208 Kana character table.
68Each element is of the form (HIRAGANA KATAKANA HANKAKU-KATAKANA), where 68Each element is of the form (HIRAGANA KATAKANA HANKAKU-KATAKANA), where
69HIRAGANA and KATAKANA belong to `japanese-jisx0208', 69HIRAGANA and KATAKANA belong to `japanese-jisx0208',
@@ -78,22 +78,32 @@ HANKAKU-KATAKANA belongs to `japanese-jisx0201-kana'.")
78 hiragana (car slot) katakana (nth 1 slot) jisx0201 (nth 2 slot) 78 hiragana (car slot) katakana (nth 1 slot) jisx0201 (nth 2 slot)
79 l (cdr l)) 79 l (cdr l))
80 (if hiragana 80 (if hiragana
81 (progn 81 (if (stringp hiragana)
82 (if (> (length hiragana) 1)
83 (let ((hira (aref hiragana 0)))
84 (put-char-code-property
85 hira 'composition
86 (cons (cons (aref hiragana 1) katakana)
87 (get-char-code-property hira 'composition)))))
82 (put-char-code-property hiragana 'katakana katakana) 88 (put-char-code-property hiragana 'katakana katakana)
83 (put-char-code-property katakana 'hiragana hiragana) 89 (put-char-code-property hiragana 'jisx0201 jisx0201)))
84 (if jisx0201 90 (when (integerp katakana)
85 (progn 91 (put-char-code-property katakana 'hiragana hiragana)
86 (put-char-code-property hiragana 'jisx0201 jisx0201) 92 (put-char-code-property katakana 'jisx0201 jisx0201))
87 (if (integerp jisx0201)
88 (put-char-code-property jisx0201 'hiragana hiragana))))))
89 (if jisx0201 93 (if jisx0201
90 (progn 94 (if (stringp jisx0201)
91 (put-char-code-property katakana 'jisx0201 jisx0201) 95 (if (> (length jisx0201) 1)
92 (if (integerp jisx0201) 96 (let ((kana (aref jisx0201 0)))
93 (put-char-code-property jisx0201 'katakana katakana)))))) 97 (put-char-code-property
98 kana 'composition
99 (cons (cons (aref jisx0201 1) katakana)
100 (get-char-code-property kana 'composition)))))
101 (put-char-code-property jisx0201 'hiragana hiragana)
102 (put-char-code-property jisx0201 'katakana katakana)
103 (put-char-code-property jisx0201 'jisx0208 katakana)))))
94 104
95(defconst japanese-symbol-table 105(defconst japanese-symbol-table
96 '((?\$B!!(B ?\ ) (?$B!"(B ?, ?(I$(B) (?$B!#(B ?. ?(I!(B) (?$B!$(B ?, ?(I$(B) (?$B!%(B ?. ?(I!(B) (?$B!&(B nil ?(I%(B) 106 '((?\$B!!(B ?\ ) (?$B!$(B ?, ?(I$(B) (?$B!%(B ?. ?(I!(B) (?$B!"(B ?, ?(I$(B) (?$B!#(B ?. ?(I!(B) (?$B!&(B nil ?(I%(B)
97 (?$B!'(B ?:) (?$B!((B ?\;) (?$B!)(B ??) (?$B!*(B ?!) (?$B!+(B nil ?(I^(B) (?$B!,(B nil ?(I_(B) 107 (?$B!'(B ?:) (?$B!((B ?\;) (?$B!)(B ??) (?$B!*(B ?!) (?$B!+(B nil ?(I^(B) (?$B!,(B nil ?(I_(B)
98 (?$B!-(B ?') (?$B!.(B ?`) (?$B!0(B ?^) (?$B!2(B ?_) (?$B!<(B ?-) (?$B!=(B ?-) (?$B!>(B ?-) 108 (?$B!-(B ?') (?$B!.(B ?`) (?$B!0(B ?^) (?$B!2(B ?_) (?$B!<(B ?-) (?$B!=(B ?-) (?$B!>(B ?-)
99 (?$B!?(B ?/) (?$B!@(B ?\\) (?$B!A(B ?~) (?$B!C(B ?|) (?$B!F(B ?`) (?$B!G(B ?') (?$B!H(B ?\") (?$B!I(B ?\") 109 (?$B!?(B ?/) (?$B!@(B ?\\) (?$B!A(B ?~) (?$B!C(B ?|) (?$B!F(B ?`) (?$B!G(B ?') (?$B!H(B ?\") (?$B!I(B ?\")
@@ -218,27 +228,40 @@ of which charset is `japanese-jisx0201-kana'."
218 (narrow-to-region from to) 228 (narrow-to-region from to)
219 (goto-char (point-min)) 229 (goto-char (point-min))
220 (while (re-search-forward "\\cH\\|\\cK" nil t) 230 (while (re-search-forward "\\cH\\|\\cK" nil t)
221 (let* ((hira (preceding-char)) 231 (let* ((kana (preceding-char))
222 (kata (japanese-katakana hira hankaku))) 232 (composition (get-char-code-property kana 'composition))
223 (if kata 233 next slot)
234 (if (and composition (setq slot (assq (following-char) composition)))
224 (progn 235 (progn
225 (delete-region (match-beginning 0) (match-end 0)) 236 (delete-region (match-beginning 0) (1+ (point)))
226 (insert kata))))))) 237 (insert (cdr slot)))
238 (let ((kata (get-char-code-property
239 kana (if hankaku 'jisx0201 'katakana))))
240 (if kata
241 (progn
242 (delete-region (match-beginning 0) (match-end 0))
243 (insert kata)))))))))
227 244
228;;;###autoload 245;;;###autoload
229(defun japanese-hiragana-region (from to) 246(defun japanese-hiragana-region (from to)
230 "Convert Japanese `katakana' chars in the region to `hiragana' chars." 247 "Convert Japanese `katakana' chars in the region to `hiragana' chars."
231 (interactive "r") 248 (interactive "r")
232 (save-restriction 249 (save-restriction
233 (narrow-to-region from to) 250 (narrow-to-region from to)
234 (goto-char (point-min)) 251 (goto-char (point-min))
235 (while (re-search-forward "\\cK\\|\\ck" nil t) 252 (while (re-search-forward "\\cK\\|\\ck" nil t)
236 (let* ((kata (preceding-char)) 253 (let* ((kata (preceding-char))
237 (hira (japanese-hiragana kata))) 254 (composition (get-char-code-property kata 'composition))
238 (if hira 255 next slot)
256 (if (and composition (setq slot (assq (following-char) composition)))
239 (progn 257 (progn
240 (delete-region (match-beginning 0) (match-end 0)) 258 (delete-region (match-beginning 0) (1+ (point)))
241 (insert hira))))))) 259 (insert (get-char-code-property (cdr slot) 'hiragana)))
260 (let ((hira (get-char-code-property kata 'hiragana)))
261 (if hira
262 (progn
263 (delete-region (match-beginning 0) (match-end 0))
264 (insert hira)))))))))
242 265
243;;;###autoload 266;;;###autoload
244(defun japanese-hankaku-region (from to &optional ascii-only) 267(defun japanese-hankaku-region (from to &optional ascii-only)
@@ -252,7 +275,9 @@ Optional argument ASCII-ONLY non-nil means to convert only to ASCII char."
252 (goto-char (point-min)) 275 (goto-char (point-min))
253 (while (re-search-forward "\\cj" nil t) 276 (while (re-search-forward "\\cj" nil t)
254 (let* ((zenkaku (preceding-char)) 277 (let* ((zenkaku (preceding-char))
255 (hankaku (japanese-hankaku zenkaku ascii-only))) 278 (hankaku (or (get-char-code-property zenkaku 'ascii)
279 (and (not ascii-only)
280 (get-char-code-property zenkaku 'jisx0201)))))
256 (if hankaku 281 (if hankaku
257 (progn 282 (progn
258 (delete-region (match-beginning 0) (match-end 0)) 283 (delete-region (match-beginning 0) (match-end 0))
@@ -269,11 +294,17 @@ Optional argument ASCII-ONLY non-nil means to convert only to ASCII char."
269 (goto-char (point-min)) 294 (goto-char (point-min))
270 (while (re-search-forward "\\ca\\|\\ck" nil t) 295 (while (re-search-forward "\\ca\\|\\ck" nil t)
271 (let* ((hankaku (preceding-char)) 296 (let* ((hankaku (preceding-char))
272 (zenkaku (japanese-zenkaku hankaku))) 297 (composition (get-char-code-property hankaku 'composition))
273 (if zenkaku 298 next slot)
299 (if (and composition (setq slot (assq (following-char) composition)))
274 (progn 300 (progn
275 (delete-region (match-beginning 0) (match-end 0)) 301 (delete-region (match-beginning 0) (1+ (point)))
276 (insert zenkaku))))))) 302 (insert (cdr slot)))
303 (let ((zenkaku (japanese-zenkaku hankaku)))
304 (if zenkaku
305 (progn
306 (delete-region (match-beginning 0) (match-end 0))
307 (insert zenkaku)))))))))
277 308
278;;;###autoload 309;;;###autoload
279(defun read-hiragana-string (prompt &optional initial-input) 310(defun read-hiragana-string (prompt &optional initial-input)