X-Git-Url: http://git.chise.org/gitweb/?p=elisp%2Fegg.git;a=blobdiff_plain;f=egg-cnv.el;h=515fb9140de78f57ae25e3d6239fe3d161973511;hp=a996838cbbb5aeb084c958830446ce97e77f66d3;hb=HEAD;hpb=a11e28d9cdf108d34265730dcbfd406ae85971b9 diff --git a/egg-cnv.el b/egg-cnv.el index a996838..515fb91 100644 --- a/egg-cnv.el +++ b/egg-cnv.el @@ -1,4 +1,4 @@ -pn;;; egg-cnv.el --- Conversion Backend in Egg Input Method Architecture +;;; egg-cnv.el --- Conversion Backend in Egg Input Method Architecture ;; Copyright (C) 1997, 1998 Mule Project, ;; Powered by Electrotechnical Laboratory, JAPAN. @@ -47,74 +47,60 @@ pn;;; egg-cnv.el --- Conversion Backend in Egg Input Method Architecture bunsetsu-info)) ;; -(defconst egg-conversion-backend-other-languages - [ egg-init-other-languages - - egg-start-conversion-other-languages - egg-get-bunsetsu-converted-other-languages - egg-get-bunsetsu-source-other-languages - egg-list-candidates-other-languages - egg-get-number-of-candidates-other-languages - egg-get-current-candidate-number-other-languages - egg-get-all-candidates-other-languages - egg-decide-candidate-other-languages - egg-change-bunsetsu-length-other-languages - egg-end-conversion-other-languages +(defconst egg-conversion-backend-null + [ egg-init-null + + egg-start-conversion-null + egg-get-bunsetsu-converted-null + egg-get-bunsetsu-source-null + egg-list-candidates-null + egg-get-number-of-candidates-null + egg-get-current-candidate-number-null + egg-get-all-candidates-null + egg-decide-candidate-null + egg-change-bunsetsu-length-null + egg-end-conversion-null nil - egg-fini-other-languages + egg-fini-null ]) -(defun egg-init-other-languages () - ) +(defun egg-init-null () + ) -(defun egg-start-conversion-other-languages (yomi-string language) - (setq egg-conversion-backend egg-conversion-backend-other-languages) +(defun egg-start-conversion-null (yomi-string language) (list yomi-string)) -(defun egg-get-bunsetsu-converted-other-languages (bunsetsu-info) +(defun egg-get-bunsetsu-converted-null (bunsetsu-info) bunsetsu-info) -(defun egg-get-bunsetsu-source-other-languages (bunsetsu-info) +(defun egg-get-bunsetsu-source-null (bunsetsu-info) bunsetsu-info) -(defun egg-list-candidates-other-languages (bunsetsu-info prev-bunsetsu-info) +(defun egg-list-candidates-null (bunsetsu-info prev-bunsetsu-info) 1) -(defun egg-get-number-of-candidates-other-languages (bunsetsu-info) +(defun egg-get-number-of-candidates-null (bunsetsu-info) 1) -(defun egg-get-current-candidate-number-other-languages (bunsetsu-info) +(defun egg-get-current-candidate-number-null (bunsetsu-info) 0) -(defun egg-get-all-candidates-other-languages (bunsetsu-info) +(defun egg-get-all-candidates-null (bunsetsu-info) (list bunsetsu-info)) -(defun egg-decide-candidate-other-languages (bunsetsu-info candidate-pos) +(defun egg-decide-candidate-null (bunsetsu-info candidate-pos) bunsetsu-info) -(defun egg-change-bunsetsu-length-other-languages (b0 b1 b2 len) +(defun egg-change-bunsetsu-length-null (b0 b1 b2 len) (let ((s (concat b1 b2))) (set-text-properties 0 (length s) nil s) (if (= len (length s)) (list s) (list (substring s 0 len) (substring s len))))) -(defun egg-end-conversion-other-languages (bunsetsu-info-list abort) +(defun egg-end-conversion-null (bunsetsu-info-list abort) nil) -(defun egg-fini-other-languages (language) +(defun egg-fini-null (language) nil) -(defvar egg-conversion-backend-alist nil) -(make-variable-buffer-local 'egg-conversion-backend-alist) (defvar egg-conversion-backend nil) -(make-variable-buffer-local 'egg-conversion-backend) - -(defvar egg-finalize-backend-alist nil) - -(defun egg-set-current-backend (language) - (setq egg-conversion-backend - (cdr (assq language egg-conversion-backend-alist))) - (if (null egg-conversion-backend) - (setq egg-conversion-backend egg-conversion-backend-other-languages))) (defun egg-initialize-backend (language) - (egg-set-current-backend language) (funcall (aref egg-conversion-backend 0))) (defun egg-start-conversion (yomi-string language) - (egg-set-current-backend language) (funcall (aref egg-conversion-backend 1) yomi-string language)) (defun egg-get-bunsetsu-converted (bunsetsu-info) (funcall (aref egg-conversion-backend 2) bunsetsu-info)) @@ -135,35 +121,12 @@ pn;;; egg-cnv.el --- Conversion Backend in Egg Input Method Architecture (defun egg-end-conversion (bunsetsu-info-list abort) (funcall (aref egg-conversion-backend 10) bunsetsu-info-list abort)) (defun egg-start-reverse-conversion (yomi-string language) - (egg-set-current-backend language) (if (aref egg-conversion-backend 11) (funcall (aref egg-conversion-backend 11) yomi-string language) (beep))) (defun egg-finalize-backend () - (let ((alist egg-finalize-backend-alist)) - (while alist - (funcall (car (car (car alist))) (cdr (car (car alist)))) - (setq alist (cdr alist))))) - -(defun egg-set-conversion-backend (backend langs &optional force) - (let (pair) - (if backend - (setq egg-conversion-backend backend) - (setq backend egg-conversion-backend)) - (while langs - (setq pair (assoc (car langs) egg-conversion-backend-alist)) - (cond - ((null pair) - (setq egg-conversion-backend-alist - (cons (cons (car langs) backend) egg-conversion-backend-alist))) - (force - (setcdr pair backend))) - (setq pair (cons (aref backend (1- (length backend))) (car langs))) - (if (null (assoc pair egg-finalize-backend-alist)) - (setq egg-finalize-backend-alist - (cons (list pair) egg-finalize-backend-alist))) - (setq langs (cdr langs))))) + (aref egg-conversion-backend 12)) (defvar egg-conversion-open "|" "*フェンスの始点を示す文字列 (1 文字以上)") (defvar egg-conversion-close "|" "*フェンスの終点を示す文字列 (1 文字以上)") @@ -177,12 +140,20 @@ pn;;; egg-cnv.el --- Conversion Backend in Egg Input Method Architecture (assq t egg-conversion-face))))) (if face (cdr face) egg-conversion-face))) +(defvar egg-start-conversion-failure-hook + '(egg-start-conversion-failure-fallback) + "Hook which runs on failure of conversion.") + +;; SAIGO no shudan +(defun egg-start-conversion-failure-fallback (language) + (setq egg-conversion-backend egg-conversion-backend-null)) + ;; (defun egg-convert-region (start end) (interactive "r") (let ((source (buffer-substring start end)) (no-prop-source (buffer-substring-no-properties start end)) - bunsetsu-info-list len result i j s) + len result i j s) (if (>= start end) ;; nothing to do nil @@ -190,11 +161,6 @@ pn;;; egg-cnv.el --- Conversion Backend in Egg Input Method Architecture (let ((inhibit-read-only t)) (its-define-select-keys egg-conversion-map) (goto-char start) - ;; XXX: Why make OPEN&CLOSE string every time when - ;; this function is invoked? Any Reason? - ;; For me it's matter of user costomization - ;; of setting egg-conversion-open/egg-conversion-close - ;; it can be string of properties at the beginning, isn't it? (setq s (copy-sequence egg-conversion-open) len (length s)) (set-text-properties 0 len @@ -222,18 +188,29 @@ pn;;; egg-cnv.el --- Conversion Backend in Egg Input Method Architecture (while (< i len) (setq egg-current-language (get-text-property i 'egg-lang source) j (egg-next-single-property-change i 'egg-lang source len)) - (condition-case result - (setq bunsetsu-info-list (egg-start-conversion - (substring no-prop-source i j) - egg-current-language)) - (error ; XXX: catching all error is BADBADBAD - (setq bunsetsu-info-list (egg-start-conversion-other-languages - (substring no-prop-source i j) - egg-current-language)) - (message "egg %s backend: %s" - egg-current-language (nth 1 result)))) - (egg-insert-bunsetsu-list bunsetsu-info-list - (if (< j len) 'contine t)) + (let (bunsetsu-info-list) + (while (null bunsetsu-info-list) + (condition-case err + (setq bunsetsu-info-list (egg-start-conversion + (substring no-prop-source i j) + egg-current-language)) + ;; Don't catch programming error + (lang-not-supported + (message "Language not supported: %s" egg-current-language) + (ding) + (setq bunsetsu-info-list + (egg-start-conversion-null + (substring no-prop-source i j) + egg-current-language))) + (file-error + (message "Error on %s backend: %s" + egg-current-language (nth 1 err)) + (ding) + (sit-for 1) + (run-hook-with-args-until-success + 'egg-start-conversion-failure-hook egg-current-language)))) + (egg-insert-bunsetsu-list bunsetsu-info-list + (if (< j len) 'contine t))) (setq i j)) (goto-char start))))) @@ -369,6 +346,7 @@ pn;;; egg-cnv.el --- Conversion Backend in Egg Input Method Architecture (define-key map [right] 'egg-forward-bunsetsu) (define-key map [left] 'egg-backward-bunsetsu) (define-key map " " 'egg-next-candidate) + (define-key map "/" 'egg-exit-conversion) map) "Keymap for EGG Conversion mode.")