mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-14 09:39:42 +00:00
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.
This commit is contained in:
parent
7c19e8e146
commit
33366a82fa
@ -52,7 +52,7 @@
|
||||
(?$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)
|
||||
(?$B$d(B ?$B%d(B ?(IT(B) (?$B$f(B ?$B%f(B ?(IU(B) (?$B$h(B ?$B%h(B ?(IV(B)
|
||||
(?$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)
|
||||
(?$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)
|
||||
(?$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)
|
||||
(?$B$s(B ?$B%s(B ?(I](B)
|
||||
(?$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")
|
||||
(?$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 @@
|
||||
(?$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)
|
||||
(?$B$C(B ?$B%C(B ?(I/(B)
|
||||
(?$B$c(B ?$B%c(B ?(I,(B) (?$B$e(B ?$B%e(B ?(I-(B) (?$B$g(B ?$B%g(B ?(I.(B)
|
||||
(?$B$n(B ?$B%n(B nil)
|
||||
(nil ?$B%t(B "(I3^(B") (nil ?$B%u(B nil) (nil ?$B%v(B nil))
|
||||
(?$B$n(B ?$B%n(B "(I\(B")
|
||||
("$B$&!+(B" ?$B%t(B "(I3^(B") (nil ?$B%u(B "(I6(B") (nil ?$B%v(B "(I9(B"))
|
||||
"Japanese JISX0208 Kana character table.
|
||||
Each element is of the form (HIRAGANA KATAKANA HANKAKU-KATAKANA), where
|
||||
HIRAGANA and KATAKANA belong to `japanese-jisx0208',
|
||||
@ -78,22 +78,32 @@ HANKAKU-KATAKANA belongs to `japanese-jisx0201-kana'.")
|
||||
hiragana (car slot) katakana (nth 1 slot) jisx0201 (nth 2 slot)
|
||||
l (cdr l))
|
||||
(if hiragana
|
||||
(progn
|
||||
(if (stringp hiragana)
|
||||
(if (> (length hiragana) 1)
|
||||
(let ((hira (aref hiragana 0)))
|
||||
(put-char-code-property
|
||||
hira 'composition
|
||||
(cons (cons (aref hiragana 1) katakana)
|
||||
(get-char-code-property hira 'composition)))))
|
||||
(put-char-code-property hiragana 'katakana katakana)
|
||||
(put-char-code-property katakana 'hiragana hiragana)
|
||||
(if jisx0201
|
||||
(progn
|
||||
(put-char-code-property hiragana 'jisx0201 jisx0201)
|
||||
(if (integerp jisx0201)
|
||||
(put-char-code-property jisx0201 'hiragana hiragana))))))
|
||||
(put-char-code-property hiragana 'jisx0201 jisx0201)))
|
||||
(when (integerp katakana)
|
||||
(put-char-code-property katakana 'hiragana hiragana)
|
||||
(put-char-code-property katakana 'jisx0201 jisx0201))
|
||||
(if jisx0201
|
||||
(progn
|
||||
(put-char-code-property katakana 'jisx0201 jisx0201)
|
||||
(if (integerp jisx0201)
|
||||
(put-char-code-property jisx0201 'katakana katakana))))))
|
||||
(if (stringp jisx0201)
|
||||
(if (> (length jisx0201) 1)
|
||||
(let ((kana (aref jisx0201 0)))
|
||||
(put-char-code-property
|
||||
kana 'composition
|
||||
(cons (cons (aref jisx0201 1) katakana)
|
||||
(get-char-code-property kana 'composition)))))
|
||||
(put-char-code-property jisx0201 'hiragana hiragana)
|
||||
(put-char-code-property jisx0201 'katakana katakana)
|
||||
(put-char-code-property jisx0201 'jisx0208 katakana)))))
|
||||
|
||||
(defconst japanese-symbol-table
|
||||
'((?\$B!!(B ?\ ) (?$B!"(B ?, ?(I$(B) (?$B!#(B ?. ?(I!(B) (?$B!$(B ?, ?(I$(B) (?$B!%(B ?. ?(I!(B) (?$B!&(B nil ?(I%(B)
|
||||
'((?\$B!!(B ?\ ) (?$B!$(B ?, ?(I$(B) (?$B!%(B ?. ?(I!(B) (?$B!"(B ?, ?(I$(B) (?$B!#(B ?. ?(I!(B) (?$B!&(B nil ?(I%(B)
|
||||
(?$B!'(B ?:) (?$B!((B ?\;) (?$B!)(B ??) (?$B!*(B ?!) (?$B!+(B nil ?(I^(B) (?$B!,(B nil ?(I_(B)
|
||||
(?$B!-(B ?') (?$B!.(B ?`) (?$B!0(B ?^) (?$B!2(B ?_) (?$B!<(B ?-) (?$B!=(B ?-) (?$B!>(B ?-)
|
||||
(?$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'."
|
||||
(narrow-to-region from to)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\cH\\|\\cK" nil t)
|
||||
(let* ((hira (preceding-char))
|
||||
(kata (japanese-katakana hira hankaku)))
|
||||
(if kata
|
||||
(let* ((kana (preceding-char))
|
||||
(composition (get-char-code-property kana 'composition))
|
||||
next slot)
|
||||
(if (and composition (setq slot (assq (following-char) composition)))
|
||||
(progn
|
||||
(delete-region (match-beginning 0) (match-end 0))
|
||||
(insert kata)))))))
|
||||
(delete-region (match-beginning 0) (1+ (point)))
|
||||
(insert (cdr slot)))
|
||||
(let ((kata (get-char-code-property
|
||||
kana (if hankaku 'jisx0201 'katakana))))
|
||||
(if kata
|
||||
(progn
|
||||
(delete-region (match-beginning 0) (match-end 0))
|
||||
(insert kata)))))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun japanese-hiragana-region (from to)
|
||||
"Convert Japanese `katakana' chars in the region to `hiragana' chars."
|
||||
"Convert Japanese `katakana' chars in the region to `hiragana' chars."
|
||||
(interactive "r")
|
||||
(save-restriction
|
||||
(narrow-to-region from to)
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\cK\\|\\ck" nil t)
|
||||
(let* ((kata (preceding-char))
|
||||
(hira (japanese-hiragana kata)))
|
||||
(if hira
|
||||
(composition (get-char-code-property kata 'composition))
|
||||
next slot)
|
||||
(if (and composition (setq slot (assq (following-char) composition)))
|
||||
(progn
|
||||
(delete-region (match-beginning 0) (match-end 0))
|
||||
(insert hira)))))))
|
||||
(delete-region (match-beginning 0) (1+ (point)))
|
||||
(insert (get-char-code-property (cdr slot) 'hiragana)))
|
||||
(let ((hira (get-char-code-property kata 'hiragana)))
|
||||
(if hira
|
||||
(progn
|
||||
(delete-region (match-beginning 0) (match-end 0))
|
||||
(insert hira)))))))))
|
||||
|
||||
;;;###autoload
|
||||
(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."
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\cj" nil t)
|
||||
(let* ((zenkaku (preceding-char))
|
||||
(hankaku (japanese-hankaku zenkaku ascii-only)))
|
||||
(hankaku (or (get-char-code-property zenkaku 'ascii)
|
||||
(and (not ascii-only)
|
||||
(get-char-code-property zenkaku 'jisx0201)))))
|
||||
(if hankaku
|
||||
(progn
|
||||
(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."
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "\\ca\\|\\ck" nil t)
|
||||
(let* ((hankaku (preceding-char))
|
||||
(zenkaku (japanese-zenkaku hankaku)))
|
||||
(if zenkaku
|
||||
(composition (get-char-code-property hankaku 'composition))
|
||||
next slot)
|
||||
(if (and composition (setq slot (assq (following-char) composition)))
|
||||
(progn
|
||||
(delete-region (match-beginning 0) (match-end 0))
|
||||
(insert zenkaku)))))))
|
||||
(delete-region (match-beginning 0) (1+ (point)))
|
||||
(insert (cdr slot)))
|
||||
(let ((zenkaku (japanese-zenkaku hankaku)))
|
||||
(if zenkaku
|
||||
(progn
|
||||
(delete-region (match-beginning 0) (match-end 0))
|
||||
(insert zenkaku)))))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun read-hiragana-string (prompt &optional initial-input)
|
||||
|
Loading…
Reference in New Issue
Block a user