(require 'egg-edep)
(defgroup wnn nil
- "Wnn interface for Tamagotchy"
+ "Wnn interface for Tamago 4."
:group 'egg)
(defcustom wnn-auto-save-dictionaries 0
egg-major-bunsetsu-continue-p wnn-major-bunsetsu-continue-p
egg-list-candidates wnn-list-candidates
egg-decide-candidate wnn-decide-candidate
+ egg-special-candidate wnn-special-candidate
egg-change-bunsetsu-length wnn-change-bunsetsu-length
egg-bunsetsu-combinable-p wnn-bunsetsu-combinable-p
egg-end-conversion wnn-end-conversion
;; <wnn-bunsetsu> ::= [ <env>
;; <jirilen> <dic-no> <entry> <freq> <right-now> <hinshi>
-;; <status> <status-backward> <kangovect> <evaluation>
-;; <converted> <yomi> <fuzokugo>
-;; <dai-evaluation> <dai-continue> <change-top>
-;; <zenkouho-info> <freq-down> <fi-rel> <context> ]
+;; <status> <status-backward> <kangovect> <evaluation>
+;; <converted> <yomi> <fuzokugo>
+;; <dai-evaluation> <dai-continue> <change-top>
+;; <zenkouho-info> <freq-down> <fi-rel> <context> ]
;;
;; <zenkouho-info> ::= [ <pos> <list> <converted> <dai> <prev-b> <nxet-b> ]
-;;
(defsubst wnn-bunsetsu-create (env jirilen dic-no entry freq right-now hinshi
status status-backward kangovect evaluation)
(copy-sequence (egg-bunsetsu-get-info b))))
bunsetsu))
\f
-(defconst wnn-server-info-list
+(defvar wnn-server-info-list
;; language server port hostname proc coding-system
'((Japanese jserver wnn-jport wnn-jserver "Wnn" (fixed-euc-jp fixed-euc-jp))
(Chinese-GB cserver wnn-cport wnn-cserver "cWnn" (fixed-euc-py-cn fixed-euc-zy-cn))
(defun wnn-major-bunsetsu-continue-p (bunsetsu)
(wnn-bunsetsu-get-dai-continue bunsetsu))
+(defmacro wnn-uniq-hash-string (uniq-level)
+ `(mapconcat
+ (lambda (b)
+ (concat ,@(cond ((eq uniq-level 'wnn-uniq)
+ '((number-to-string (wnn-bunsetsu-get-hinshi b))))
+ ((eq uniq-level 'wnn-uniq-entry)
+ '((number-to-string (wnn-bunsetsu-get-dic-no b))
+ "+"
+ (number-to-string (wnn-bunsetsu-get-entry b)))))
+ "\0"
+ (wnn-bunsetsu-get-converted b)
+ "\0"
+ (wnn-bunsetsu-get-fuzokugo b)))
+ bunsetsu "\0"))
+
(defun wnn-uniq-hash (bunsetsu hash-table)
- (intern (mapconcat (lambda (b)
- (concat (cond
- ((eq wnn-uniq-level 'wnn-uniq)
- (wnn-bunsetsu-get-hinshi b))
- ((eq wnn-uniq-level 'wnn-uniq-entry)
- (concat (wnn-bunsetsu-get-dic-no b)
- "+"
- (wnn-bunsetsu-get-entry b))))
- (concat "\0"
- (wnn-bunsetsu-get-converted b)
- "\0"
- (wnn-bunsetsu-get-fuzokugo b))))
- bunsetsu "\0")
+ (intern (cond ((eq wnn-uniq-level 'wnn-uniq)
+ (wnn-uniq-hash-string wnn-uniq))
+ ((eq wnn-uniq-level 'wnn-uniq-entry)
+ (wnn-uniq-hash-string wnn-uniq-entry))
+ (t
+ (wnn-uniq-hash-string nil)))
hash-table))
(defun wnn-uniq-candidates (candidates)
(setq next-b (list (car next-b))))
(list cand prev-b next-b)))
+(defun wnn-special-candidate (bunsetsu prev-b next-b major type)
+ (let* ((backend (egg-bunsetsu-get-backend (car bunsetsu)))
+ (lang (get backend 'language))
+ pos cand)
+ (when (and (eq lang (get backend 'source-language))
+ (eq lang (get backend 'converted-language)))
+ (setq pos (and (eq lang (get backend 'source-language))
+ (eq lang (get backend 'converted-language))
+ (cond ((eq lang 'Japanese)
+ (cond ((eq type 'egg-hiragana) -1)
+ ((eq type 'egg-katakana) -2)))
+ ((or (eq lang 'Chinese-GB) (eq lang 'Chinese-CNS))
+ (cond ((eq type 'egg-pinyin) -1)
+ ((eq type 'egg-zhuyin) -1)))
+ ((eq lang 'Korean)
+ (cond ((eq type 'egg-hangul) -1))))))
+ (when pos
+ (setq cand (cdr (wnn-list-candidates bunsetsu prev-b next-b major))
+ pos (+ pos (length cand)))
+ (when (and (or (eq lang 'Chinese-GB) (eq lang 'Chinese-CNS)))
+ (let ((converted (nth pos cand)))
+ (cond ((egg-pinyin-syllable converted)
+ (cond ((eq type 'egg-pinyin)) ; OK
+ ((eq type 'egg-zhuyin)
+ (wnn-pinyin-zhuyin-bunsetsu bunsetsu pos lang type))
+ (t (setq pos nil))))
+ ((egg-zhuyin-syllable converted)
+ (cond ((eq type 'egg-pinyin)
+ (wnn-pinyin-zhuyin-bunsetsu bunsetsu pos lang type))
+ ((eq type 'egg-zhuyin)) ; OK
+ (t (setq pos nil))))
+ (t (setq pos nil))))))
+ (when pos
+ (wnn-decide-candidate bunsetsu pos prev-b next-b)))))
+
+(defun wnn-pinyin-zhuyin-bunsetsu (bunsetsu pos lang type)
+ (let ((b (nth pos (wnn-bunsetsu-get-zenkouho-list (car bunsetsu))))
+ (encoding (if (eq lang 'Chinese-GB)
+ (if (eq type 'egg-pinyin)
+ 'fixed-euc-py-cn 'fixed-euc-zy-cn)
+ (if (eq type 'egg-pinyin)
+ 'fixed-euc-py-tw 'fixed-euc-zy-tw)))
+ (converted (wnn-bunsetsu-get-zenkouho-converted (car bunsetsu)))
+ str)
+ (setcar (nthcdr pos converted)
+ (wnn-pinyin-zhuyin-string (nth pos converted) encoding))
+ (while b
+ (setq str (wnn-bunsetsu-get-converted (car b)))
+ (when str
+ (wnn-bunsetsu-set-converted
+ (car b)
+ (wnn-pinyin-zhuyin-string str encoding)))
+ (setq str (wnn-bunsetsu-get-fuzokugo (car b)))
+ (when str
+ (wnn-bunsetsu-set-fuzokugo
+ (car b)
+ (wnn-pinyin-zhuyin-string str encoding)))
+ (setq b (cdr b)))))
+
+(defun wnn-pinyin-zhuyin-string (str encoding)
+ (decode-coding-string (encode-coding-string str encoding) encoding))
+
(defun wnn-change-bunsetsu-length (bunsetsu prev-b next-b len major)
(let ((backend (egg-bunsetsu-get-backend (car bunsetsu)))
(env (wnn-bunsetsu-get-env (car bunsetsu)))
(wnn-bunsetsu-get-right-now b)
(wnn-bunsetsu-get-freq b))
context))
- (wnnrpc-set-frequency env dic-no entry
+ (wnnrpc-set-frequency env dic-no entry
(WNN-const IMA_ON) (WNN-const HINDO_INC)))
(list (car context) (nth 1 context))))
(proc-name (wnn-server-proc-name server-info))
(msg-form "Wnn: connecting to %S at %s...")
(user-name (user-login-name))
- buf hostname myname port-off proc result msg)
+ buf hostname myname port-off proc result msg)
(unwind-protect
(progn
(setq buf (generate-new-buffer (wnn-server-buffer-name server-info)))
((error quit))))
(when proc
(process-kill-without-query proc)
- (set-process-coding-system proc 'no-conversion 'no-conversion)
+ (set-process-coding-system proc 'binary 'binary)
(set-process-sentinel proc 'wnn-comm-sentinel)
(set-marker-insertion-type (process-mark proc) t)
(setq result (wnnrpc-open proc myname user-name))
(setq env-name (if reverse (concat env-name "R") env-name)
wnn-current-envspec (wnn-envspec-create env-name tankan stickey)
wnn-current-envspec-reverse reverse
- wnn-envspec-list (nconc wnn-envspec-list
+ wnn-envspec-list (nconc wnn-envspec-list
(list wnn-current-envspec))))
(defun wnn-set-fuzokugo (filename)
dict freq nil dict-rw freq-rw
dict-passwd freq-passwd nil))
-(defun wnn-add-notrans-dict (dict priority dict-rw
+(defun wnn-add-notrans-dict (dict priority dict-rw
&optional dict-passwd &rest reverse)
(wnn-wnn6-env-func wnn-add-notrans-dict)
(wnn-add-dict-param-check wnn-add-notrans-dict
(wnn-create-frequency env fi did fname "" fpass))
(message (egg-get-message 'wnn-re-create-freq) fname)
(and (>= (setq fid (wnn-open-file env fname)) 0)
- (>= (wnnrpc-set-dictionary env
+ (>= (wnnrpc-set-dictionary env
did fid prior drw frw
dpass fpass rev)
0))))))))
;;;###autoload
(defun egg-activate-wnn (&rest arg)
- "Activate Wnn backend of Tamagotchy."
+ "Activate Wnn backend of Tamago 4."
(apply 'egg-mode (append arg wnn-backend-alist)))
;;; egg/wnn.el ends here.