X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=egg%2Fwnn.el;h=4ada308e90a3a8b0ba6ba236c1bd541b6ca18dbc;hb=63c6f361251f5127e780b51c39e2df3e1fd98ac1;hp=a07977e26e12b242bcc6f14ec3031492f0b1336b;hpb=8c41d08c959b32cb938e67e2b6d92127c6caf954;p=elisp%2Fegg.git diff --git a/egg/wnn.el b/egg/wnn.el index a07977e..4ada308 100644 --- a/egg/wnn.el +++ b/egg/wnn.el @@ -10,7 +10,7 @@ ;; ;; Maintainer: NIIBE Yutaka -;; This file will be part of EGG (in future). +;; This file is part of EGG. ;; EGG is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -60,6 +60,7 @@ wnn-decide-candidate wnn-change-bunsetsu-length wnn-end-conversion + wnn-start-reverse-conversion wnn-fini ]) @@ -153,18 +154,23 @@ (defvar wnn-environments nil "Environment for WNN kana-kanji conversion") -(defcustom wnn-jserver "localhost" "jserver host" :group 'wnn :type 'string) -(defcustom wnn-cserver "localhost" "cserver host" :group 'wnn :type 'string) -(defcustom wnn-tserver "localhost" "tserver host" :group 'wnn :type 'string) -(defcustom wnn-kserver "localhost" "kserver host" :group 'wnn :type 'string) +(defcustom wnn-jserver nil "jserver host list" :group 'wnn :type 'string) +(defcustom wnn-cserver nil "cserver host list" :group 'wnn :type 'string) +(defcustom wnn-tserver nil "tserver host list" :group 'wnn :type 'string) +(defcustom wnn-kserver nil "kserver host list" :group 'wnn :type 'string) + +(defcustom wnn-jport 22273 "jserver port number" :group 'wnn :type 'integer) +(defcustom wnn-cport 22289 "cserver port number" :group 'wnn :type 'integer) +(defcustom wnn-tport 22321 "tserver port number" :group 'wnn :type 'integer) +(defcustom wnn-kport 22305 "kserver port number" :group 'wnn :type 'integer) ;; The port number should be initialized from $WNNLIB/serverdefs by wnn-init (defconst wnn-server-info-list - ;; language locale server port stream coding-system hostname - '(("Japanese" "ja_JP" jserver 22273 "Wnn" fixed-euc-jp wnn-jserver) - ("Chinese-GB" "zh_CN" cserver 22289 "cWnn" fixed-euc-cn wnn-cserver) - ("Chinese-CNS" "zh_TW" tserver 22321 "tWnn" fixed-euc-tw wnn-tserver) - ("Korean" "ko_KR" kserver 22305 "kWnn" fixed-euc-kr wnn-kserver))) + ;; language locale server port stream coding-system hostname + '(("Japanese" "ja_JP" jserver wnn-jport "Wnn" fixed-euc-jp wnn-jserver) + ("Chinese-GB" "zh_CN" cserver wnn-cport "cWnn" fixed-euc-cn wnn-cserver) + ("Chinese-CNS" "zh_TW" tserver wnn-tport "tWnn" fixed-euc-tw wnn-tserver) + ("Korean" "ko_KR" kserver wnn-kport "kWnn" fixed-euc-kr wnn-kserver))) (defun wnn-get-server-info (lang) (let (info) @@ -180,7 +186,7 @@ (nth 2 info)) (defsubst wnn-server-port (info) - (nth 3 info)) + (symbol-value (nth 3 info))) (defsubst wnn-server-stream-name (info) (nth 4 info)) @@ -207,6 +213,9 @@ Return the list of bunsetsu." (wnnenv-set-daibunsetsu-info env (car result)) (cdr result))) +(defun wnn-start-reverse-conversion (yomi &optional language dic-set) + (wnn-start-conversion yomi language dic-set t)) + (defun wnn-get-bunsetsu-converted (bunsetsu) (concat (wnn-bunsetsu-get-converted bunsetsu) (wnn-bunsetsu-get-fuzokugo bunsetsu))) @@ -339,10 +348,12 @@ Return the list of bunsetsu." (concat (wnn-bunsetsu-get-yomi bunsetsu) (wnn-bunsetsu-get-fuzokugo bunsetsu))) -(defun wnn-end-conversion (bunsetsu-info-list) - (let ((env (wnn-bunsetsu-get-env (car bunsetsu-info-list)))) - (wnn-update-frequency env bunsetsu-info-list) - (wnnenv-set-daibunsetsu-info env nil))) +(defun wnn-end-conversion (bunsetsu-info-list abort) + (if abort + () + (let ((env (wnn-bunsetsu-get-env (car bunsetsu-info-list)))) + (wnn-update-frequency env bunsetsu-info-list) + (wnnenv-set-daibunsetsu-info env nil)))) (defvar wnn-sticky-environment-flag nil "*Flag which specifies sticky environment.") @@ -390,43 +401,65 @@ Return the list of bunsetsu." l (cdr l)))))) ;; +(defvar wnn-open-message) + (defun wnn-open (server-info) "Establish the connection to WNN server. Return process object." ;; Open the session to WNN server, (let ((buf (generate-new-buffer (wnn-server-buffer-name server-info))) - (hostname (wnn-server-hostname server-info)) - proc result) - (condition-case result - (setq proc (open-network-stream (wnn-server-stream-name server-info) - buf - hostname - (wnn-server-port server-info))) - (error (progn - (kill-buffer buf) - (signal (car result) (cdr result))))) - (process-kill-without-query proc) - (set-process-coding-system proc 'no-conversion 'no-conversion) - (set-process-sentinel proc 'wnn-comm-sentinel) - (set-marker-insertion-type (process-mark proc) t) + (server-type (wnn-server-type server-info)) + (hostname-list (wnn-server-hostname server-info)) + (msg-form "WNN: connecting to %S at %s...") + hostname proc result msg) (save-excursion (set-buffer buf) (erase-buffer) (buffer-disable-undo) - (setq enable-multibyte-characters nil - egg-fixed-euc (wnn-server-coding-system server-info))) - (setq result (wnnrpc-open proc - (if (equal hostname "localhost") - "unix" - (system-name)) - (user-login-name))) - (if (< result 0) - (let ((msg (wnnrpc-get-error-message (- result)))) - (delete-process proc) - (kill-buffer buf) - (error "Can't open WNN session (%s %S): %s" - hostname - (wnn-server-type server-info) msg)) - proc))) + (setq egg-fixed-euc (wnn-server-coding-system server-info)) + (set-buffer-multibyte nil)) + (cond + ((null hostname-list) + (setq hostname-list '("localhost"))) + ((null (listp hostname-list)) + (setq hostname-list (list hostname-list)))) + (while (and hostname-list (null proc)) + (setq hostname (car hostname-list) + hostname-list (cdr hostname-list)) + (message msg-form server-type hostname) + (sit-for 0) + (condition-case result + (setq proc (open-network-stream (wnn-server-stream-name server-info) + buf + hostname + (wnn-server-port server-info))) + (error nil)) + (if proc + (progn + (process-kill-without-query proc) + (set-process-coding-system proc 'no-conversion 'no-conversion) + (set-process-sentinel proc 'wnn-comm-sentinel) + (set-marker-insertion-type (process-mark proc) t) + (setq result (wnnrpc-open proc + (if (equal hostname "localhost") + "unix" + (system-name)) + (user-login-name))) + (if (< result 0) + (progn + (delete-process proc) + (setq proc nil + msg (format "Can't open WNN session (%s %S): %s" + hostname + (wnn-server-type server-info) + msg))))))) + (if proc + (progn + (setq wnn-open-message (format (concat msg-form "done") + server-type + hostname)) + proc) + (kill-buffer buf) + (error "%s" (or msg (format "no %S available" server-type)))))) (defvar wnn-dictionary-specification-list '((jserver @@ -722,6 +755,12 @@ REVERSE specifies reverse conversion, if non nil." (eq (wnn-dic-spec-reverse s) reverse)) (setq env e)) (setq spec (cdr spec))) + (if (null env) + (error "WNN: environment for %S%s (%s) not found" + server-type + (if dic-set (format "(%S)" dic-set) "") + (if reverse 'reverse 'normal))) + (message "%s" wnn-open-message) env))) (defun wnn-create-environment (proc server-type spec) @@ -884,7 +923,6 @@ REVERSE specifies reverse conversion, if non nil." "Activate Wnn backend of Tamagotchy." (egg-set-support-languages wnn-support-languages) (egg-set-conversion-backend wnn-conversion-backend - (list (nth 2 arg)) wnn-support-languages) (apply 'egg-mode arg))