X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=ideo-trans.el;h=63755eb82d1b79f94a59b8f0b3ba7c4c6e2de02c;hb=44ab9cc3e48bee15631fea0f741ba89e626a5e4c;hp=3e9689ae3a97d6ed362441edf33a190acb9fad9c;hpb=0bd078a73eec3dc3ba5035664a769101ee6528d3;p=chise%2Ftomoyo-tools.git diff --git a/ideo-trans.el b/ideo-trans.el index 3e9689a..63755eb 100644 --- a/ideo-trans.el +++ b/ideo-trans.el @@ -1,6 +1,6 @@ ;;; ideo-trans.el --- Translation utility for Ideographic Strings -;; Copyright (C) 2003,2004,2005,2008 MORIOKA Tomohiko +;; Copyright (C) 2003, 2004, 2005, 2008, 2012, 2013 MORIOKA Tomohiko ;; Author: MORIOKA Tomohiko ;; Keywords: Ideographs, Character Database, Chaon, CHISE @@ -117,9 +117,47 @@ 'chinese-simplify-string) ;;;###autoload +(defvar japanese-simplified-relation-features + '(->simplified@JP/Jouyou + ->simplified@jp-jouyou + ;; ->simplified@JP/extra + ;; ->simplified@JP/extra/design + ;; ->simplified@JP/jis + ;; ->simplified@JP/jis/2004 + ;; ->simplified@JP/jis/1978 + ;; ->simplified@JP/misc + ;; ->simplified@JP + ;; ->simplified@jp + ;; ->jp-simplified + ;; ->simplified + ;; ->simplified@JP/old + ;; ->simplified@JP/buddhism + ) + "List of relation features to map traditional Kanji to simplified Kanji used in Japanese.") + +;;;###autoload +(defvar japanese-traditional-relation-features + '(<-simplified@JP/Jouyou + <-simplified@jp-jouyou + <-simplified@JP/extra + <-simplified@JP/extra/design + <-simplified@JP/jis + <-simplified@JP/jis/2004 + <-simplified@JP/jis/1978 + <-simplified@JP/misc + <-simplified@JP + <-simplified@jp + <-jp-simplified + <-simplified + ;; <-simplified@JP/old + ;; <-simplified@JP/buddhism + ) + "List of relation features to map simplified Kanji to traditional Kanji used in Japanese.") + +;;;###autoload (defun japanese-simplify-string (string) "Simplify traditional Kanji characters in STRING." - (let (ret) + (let (ret rest) (mapconcat (lambda (chr) (setq uchr @@ -131,9 +169,10 @@ (setq chr (decode-char '=ucs@jis ret)) chr)) (t chr))) - (setq ret (or (char-feature chr '->simplified@JP/Jouyou) - (char-feature chr '->simplified@JP) - (char-feature chr '->simplified))) + (setq rest japanese-simplified-relation-features) + (while (and rest + (null (setq ret (char-feature chr (car rest))))) + (setq rest (cdr rest))) (char-to-string (cond ((car ret)) ((setq ret (char-feature chr '=>ucs@jis)) @@ -176,7 +215,7 @@ (mapconcat (lambda (chr) (char-to-string - (cond ((car (char-feature chr '<-simplified)) + (cond ((car (setq ret (char-feature chr '<-simplified@CN))) (if (cdr ret) (funcall selector ret) (car ret))) @@ -205,13 +244,15 @@ (setq selector (lambda (chars) (ideo-trans-select-char chars (format "%c => " chr))))) - (let (ret) + (let (ret rest) (mapconcat (lambda (chr) + (setq rest japanese-traditional-relation-features) + (while (and rest + (null (setq ret (char-feature chr (car rest))))) + (setq rest (cdr rest))) (char-to-string - (cond ((setq ret (or (char-feature chr '<-simplified@JP/Jouyou) - (char-feature chr '<-simplified@JP) - (char-feature chr '<-simplified))) + (cond (ret (if (cdr ret) (funcall selector ret) (car ret))) @@ -225,7 +266,7 @@ (setq ret (or (char-feature ret '<-simplified@JP/Jouyou) (char-feature ret '<-simplified@JP)))) (if (cdr ret) - (ideo-trans-select-char ret (format "%c => " chr)) + (funcall selector ret) (car ret))) ((setq ret (char-feature chr '=>ucs@jis)) (decode-char '=ucs@jis ret)) @@ -240,26 +281,30 @@ 'japanese-traditionalize-string) ;;;###autoload -(defun japanese-traditionalize-region (start end) +(defun japanese-traditionalize-region (start end &optional selector) + "Convert Japanese simplified Kanji in the region into traditional characters." (interactive "r") + (unless selector + (setq selector + (lambda (chars) + (ideo-trans-select-char chars (format "%c => " chr))))) (save-excursion (save-restriction (narrow-to-region start end) (goto-char start) - (let (chr ret rret) + (let (chr ret rret rest) (while (and (skip-chars-forward "\x00-\xFF") (not (eobp))) (setq chr (char-after)) - (if (setq ret (or (char-feature chr '<-simplified@JP/Jouyou) - (char-feature chr '<-simplified@jp-jouyou) - (char-feature chr '<-simplified@JP) - (char-feature chr '<-simplified@jp) - (char-feature chr '<-jp-simplified) - (char-feature chr '<-simplified))) + (setq rest japanese-traditional-relation-features) + (while (and rest + (null (setq ret (char-feature chr (car rest))))) + (setq rest (cdr rest))) + (if ret (progn (if (cdr ret) (progn - (setq rret (ideo-trans-select-char ret)) + (setq rret (funcall selector ret)) (delete-char) (insert rret)) (delete-char) @@ -274,16 +319,15 @@ (save-restriction (narrow-to-region start end) (goto-char start) - (let (chr ret rret) + (let (chr ret rret rest) (while (and (skip-chars-forward "\x00-\xFF") (not (eobp))) (setq chr (char-after)) - (if (setq ret (or (char-feature chr '->simplified@JP/Jouyou) - (char-feature chr '->simplified@jp-jouyou) - (char-feature chr '->simplified@JP) - (char-feature chr '->simplified@jp) - (char-feature chr '->jp-simplified) - (char-feature chr '->simplified))) + (setq rest japanese-simplified-relation-features) + (while (and rest + (null (setq ret (char-feature chr (car rest))))) + (setq rest (cdr rest))) + (if ret (progn (if (cdr ret) (progn