egg-980712.
[elisp/egg.git] / egg / sj3.el
index 865f42b..0827c33 100644 (file)
@@ -31,8 +31,6 @@
 
 (require 'egg-edep)
 
-(defconst sj3-support-languages '(Japanese))
-
 (eval-when-compile
   (defmacro SJ3-const (c)
     (cond ((eq c 'FileNotExist) 35)
@@ -57,7 +55,7 @@
  ])
 
 (defvar sj3-server-port 3000 "Port number of SJ3 server")
-(defvar sj3-stdy-size 0 "STDYSIZE of SJ3 server")
+(defvar sj3-stdy-size 0 "STDYSIZE of SJ3 server (will be set on connection)")
 (defvar sj3-hostname "localhost"
   "Hostname of SJ3 server")
 
 
 (defun sj3-open (hostname)
   "Establish the connection to SJ3 server.  Return process object."
-  (let* ((buf (generate-new-buffer " *SJ3*"))
-        (proc (open-network-stream "SJ3" buf hostname sj3-server-port))
-        result)
+  (let ((buf (generate-new-buffer " *SJ3*"))
+       proc result)
+    (condition-case err
+       (setq proc (open-network-stream "SJ3" buf hostname sj3-server-port))
+      (error
+       (kill-buffer buf)
+       (signal 'file-error (cdr err))))        ; Re-raise the signal with file-error
     (process-kill-without-query proc)
     (set-process-coding-system proc 'no-conversion 'no-conversion)
     (set-marker-insertion-type (process-mark proc) t)
       (erase-buffer)
       (buffer-disable-undo)
       (set-buffer-multibyte nil))
-    ;; Initialize dictionaries
-    (setq sj3-sys-dict-list nil)
-    (setq sj3-user-dict-list nil)
     (setq result (sj3rpc-open proc (system-name) (user-login-name)))
     (if (< result 0)
        (let ((msg (sj3rpc-get-error-message (- result))))
          (delete-process proc)
          (kill-buffer buf)
-         (error "Can't open SJ3 session (%s): %s" hostname msg)))
-    (setq result (sj3rpc-get-stdy-size proc))
-    (if (< result 0)
-       (let ((msg (sj3rpc-get-error-message (- result))))
-         (delete-process proc)
-         (kill-buffer buf)
-         (error "Can't get SJ3 STDYSIZE: %s"msg)))
-    (setq sj3-stdy-size result)
-    proc))
-
-;; (defun sj3-open (hostname-list)
-;;   "Establish the connection to SJ3 server.  Return process object."
-;;   (let* ((buf (generate-new-buffer " *SJ3*"))
-;;      (msg-form "SJ3: connecting to sj3serv at %s...")
-;;      hostname proc result msg)
-;;     (save-excursion
-;;       (set-buffer buf)
-;;       (erase-buffer)
-;;       (buffer-disable-undo)
-;;       (setq enable-multibyte-characters 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 hostname)
-;;       (sit-for 0)
-;;       (condition-case result
-;;       (setq proc (open-network-stream "SJ3" buf hostname sj3-server-port))
-;;     (error nil))
-;;       (if proc
-;;       (progn
-;;         (process-kill-without-query proc)
-;;         (set-process-coding-system proc 'no-conversion 'no-conversion)
-;;         (set-marker-insertion-type (process-mark proc) t)
-;;         ;; Initialize dictionaries
-;;         (setq sj3-sys-dict-list nil)
-;;         (setq sj3-user-dict-list nil)
-;;         (setq result (sj3rpc-open proc (system-name) (user-login-name)))
-;;         (if (< result 0)
-;;             (progn
-;;               (delete-process proc)
-;;               (setq proc nil
-;;                     msg (format "Can't open SJ3 session (%s): %s"
-;;                                 hostname msg)))
-;;           (setq result (sj3rpc-get-stdy-size proc))
-;;           (if (< result 0)
-;;               (progn
-;;                 (delete-process proc)
-;;                 (setq proc nil
-;;                       msg (format "Can't get SJ3 STDYSIZE: %s"
-;;                                   (sj3rpc-get-error-message (- result)))))
-;;             (setq sj3-stdy-size result))))))
-;;     (if proc
-;;     (progn
-;;       (setq sj3-open-message (format (concat msg-form "done") hostname))
-;;       proc)
-;;       (kill-buffer buf)
-;;       (error "%s" (or msg "no sj3serv available")))))
+         (signal 'file-error
+              (list (format "Can't open SJ3 session (%s): %s" hostname msg))))
+      (setq result (sj3rpc-get-stdy-size proc))
+      (if (< result 0)
+         (let ((msg (sj3rpc-get-error-message (- result))))
+           (delete-process proc)
+           (kill-buffer buf)
+           (signal 'file-error
+                   (list (format "Can't get SJ3 STDYSIZE: %s" msg)))))
+      (setq sj3-stdy-size result)
+      proc)))
 
 ;; <env> ::= [ <proc> <dictionary-list> ]
 (defvar sj3-environment nil
 (defun sj3-start-conversion (yomi &optional lang)
   "Convert YOMI string to kanji, and enter conversion mode.
 Return the list of bunsetsu."
-  (let ((env (sj3-get-environment)))
-    (sj3rpc-begin env yomi)))
+  (if (eq lang 'Japanese)
+      (let ((env (sj3-get-environment)))
+       (sj3rpc-begin env yomi))
+    (signal 'lang-not-supported)))
 
 (defun sj3-end-conversion (bunsetsu-list abort)
   (if abort
@@ -354,7 +304,7 @@ Return the list of bunsetsu."
        (list bunsetsu1 bunsetsu2)
       (list bunsetsu1))))
 
-(defun sj3-fini (lang)
+(defun sj3-fini ()
   (let ((proc (sj3env-get-proc sj3-environment))
        (dict-list (sj3env-get-dictionary-list sj3-environment))
        dict)
@@ -367,16 +317,14 @@ Return the list of bunsetsu."
   (setq sj3-environment nil))
 
 ;;; setup
-
 (require 'egg)
-(load "egg/sj3rpc")
 
 ;;;###autoload
 (defun egg-activate-sj3 (&rest arg)
   "Activate SJ3 backend of Tamagotchy."
-  (egg-set-support-languages sj3-support-languages)
-  (egg-set-conversion-backend sj3-conversion-backend 
-                             sj3-support-languages)
+  (setq egg-conversion-backend sj3-conversion-backend)
+  (if (not (fboundp 'sj3rpc-open))
+      (load-library "egg/sj3rpc"))
   (apply 'egg-mode arg))
 
 ;;; egg/sj3.el ends here.