diff options
| author | Kenichi Handa | 1998-06-23 00:30:05 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1998-06-23 00:30:05 +0000 |
| commit | 33366a82fa5e22dea3b23fa8ab929fb4b93a35be (patch) | |
| tree | 4ccb774e08cad4dd73644de2e390168144a7604b | |
| parent | 7c19e8e146415398590e763422cfc663e3b643e1 (diff) | |
| download | emacs-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.
| -rw-r--r-- | lisp/language/japan-util.el | 91 |
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. |
| 68 | Each element is of the form (HIRAGANA KATAKANA HANKAKU-KATAKANA), where | 68 | Each element is of the form (HIRAGANA KATAKANA HANKAKU-KATAKANA), where |
| 69 | HIRAGANA and KATAKANA belong to `japanese-jisx0208', | 69 | HIRAGANA 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) |