(require 'egg-edep)
-(defconst sj3-support-languages '(Japanese))
-
(eval-when-compile
(defmacro SJ3-const (c)
(cond ((eq c 'FileNotExist) 35)
])
(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
(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)
(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.