X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=egg.el;h=caec25566d2c31e0da2c3dd6b2e347db830a57c9;hb=cfd2771a57243d763ff08dfd2e78cb2ddbc3b546;hp=c386176b0976bb6900378bc65c8e0d50ecaf9163;hpb=ed251433bb11d5790aa07002880de16b8fedf59c;p=elisp%2Fegg.git diff --git a/egg.el b/egg.el index c386176..caec255 100644 --- a/egg.el +++ b/egg.el @@ -1,21 +1,22 @@ ;;; egg.el --- EGG Input Method Architecture -;; Copyright (C) 1997 Mule Project, Powered by Electrotechnical +;; Copyright (C) 1997, 1998 Mule Project, Powered by Electrotechnical ;; Laboratory, JAPAN. ;; Project Leader: Satoru Tomura ;; Author: NIIBE Yutaka +;; KATAYAMA Yoshio ;; Maintainer: NIIBE Yutaka ;; Keywords: mule, multilingual, input method -;; This file will be part of GNU Emacs (in future). +;; This file is part of EGG. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; EGG is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. -;; GNU Emacs is distributed in the hope that it will be useful, +;; EGG is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. @@ -31,8 +32,12 @@ (defvar egg-mode-preference t "Non-nil if modefull.") +(defvar egg-default-language "Japanese") +(defvar egg-last-method-name) +(make-variable-buffer-local 'egg-last-method-name) + ;;;###autoload -(defun egg-mode (&optional arg) +(defun egg-mode (&rest arg) "Toggle EGG mode. \\[describe-bindings] " @@ -40,19 +45,28 @@ (if (null arg) ;; Turn off (progn + (cond + ((its-in-fence-p) + (its-exit-mode)) + ((egg-get-bunsetsu-info (point)) + (egg-exit-conversion))) (setq describe-current-input-method-function nil) (setq current-input-method nil) - (let ((orig-local-map (keymap-parent (current-local-map)))) - (use-local-map orig-local-map)) - (run-hooks 'input-method-inactivate-hook)) + (use-local-map (keymap-parent (current-local-map))) + (force-mode-line-update)) ;; Turn on + (if (null (string= (car arg) egg-last-method-name)) + (let ((backend egg-conversion-backend)) + (funcall (nth 1 arg)) + (egg-set-conversion-backend backend (list its-current-language) t) + (setq egg-default-language its-current-language))) + (setq egg-last-method-name (car arg)) (use-local-map (if egg-mode-preference (egg-modefull-map) (egg-modeless-map))) (setq inactivate-current-input-method-function 'egg-mode) (setq describe-current-input-method-function 'egg-help) - (run-hooks 'input-method-activate-hook)) - (force-mode-line-update)) + (add-hook 'input-method-activate-hook 'its-set-mode-line-title))) (defun egg-modefull-map () "Generate modefull keymap for EGG mode." @@ -62,6 +76,7 @@ (while (< i 127) (define-key map (vector i) 'egg-self-insert-char) (setq i (1+ i))) + (its-define-select-keys map) (set-keymap-parent map (current-local-map)) map)) @@ -77,6 +92,85 @@ (interactive) (its-start last-command-char)) +(defvar egg-mark-list nil) +(defvar egg-suppress-marking nil) + +(defun egg-set-face (beg eng face) + (add-text-properties beg eng + (list 'face face + 'egg-face face + 'modification-hooks '(egg-mark-modification)))) + +(defun egg-mark-modification (beg end) + (if (and (null egg-suppress-marking) + (or (get-text-property beg 'egg-face) + (setq beg (next-single-property-change beg 'egg-face))) + (or (get-text-property (1- end) 'egg-face) + (setq end (previous-single-property-change end 'egg-face))) + (< beg end)) + (let ((list egg-mark-list) + (found 0) + pair mb me b e) + (add-hook 'post-command-hook 'egg-redraw-face t) + (setq list egg-mark-list) + (while (and list (< found 2)) + (setq pair (car list) + list (cdr list) + mb (car pair) + me (cdr pair) + b (marker-position mb) + e (marker-position me)) + (cond + ;; no overwrapping -- SKIP + ((or (null (eq (marker-buffer mb) (current-buffer))) + (or (> beg e) (< end b)))) + ;; completely included + ((and (>= beg b) (<= end e)) + (setq found 3)) + ;; partially overwrapping + (t + (set-marker mb nil) + (set-marker me nil) + (setq egg-mark-list (delete pair egg-mark-list) + beg (min beg b) + end (max end e) + found (1+ found))))) + (if (< found 3) + (progn + (setq b (make-marker) + e (make-marker) + egg-mark-list (cons (cons b e) egg-mark-list)) + (set-marker b beg) + (set-marker e end)))))) + +(defun egg-redraw-face () + (let ((inhibit-read-only t) + (egg-suppress-marking t) + (list egg-mark-list) + mb me b e p) + (setq egg-mark-list nil) + (remove-hook 'post-command-hook 'egg-redraw-face) + (save-excursion + (while list + (setq mb (car (car list)) + me (cdr (car list)) + list (cdr list)) + (when (marker-buffer mb) + (set-buffer (marker-buffer mb)) + (let ((before-change-functions nil) (after-change-functions nil)) + (save-restriction + (widen) + (setq b (max mb (point-min)) + e (min me (point-max))) + (set-marker mb nil) + (set-marker me nil) + (while (< b e) + (if (null (get-text-property b 'egg-face)) + (setq b (next-single-property-change b 'egg-face nil e))) + (setq p (next-single-property-change b 'egg-face nil e)) + (put-text-property b p 'face (get-text-property b 'egg-face)) + (setq b p))))))))) + (defun egg-hinshi-select () (menudiag-select ; Should generate at initialization time '(menu "品詞名:" @@ -103,7 +197,7 @@ ;; XXX: Should use backend interface (defun egg-toroku-region (start end) (interactive "r") - (let* ((env (wnn-get-environment)) ; XXX + (let* ((env (wnn-get-environment wnn-dictionary-specification)) ; XXX (kanji (buffer-substring start end)) (yomi (read-multilingual-string (format "辞書登録『%s』 読み:" kanji))) @@ -138,30 +232,32 @@ (setq ocolumn (current-column)) (funcall auto-fill-function))))) -(setq its-hira-period "。") ; ". " "." "。" -(setq its-hira-comma ", ") ; ", " "," "、" - (require 'its) (require 'menudiag) (require 'egg-mlh) (require 'egg-cnv) (require 'egg-com) +(require 'custom) -(load-library "its/hira") -(setq-default its-current-map its-hira-map) +(defgroup egg nil + "Tamagotchy --- EGG Versio 4.0") -(load-library "egg/wnn") -(load-library "egg/wnnrpc") -(setq egg-conversion-backend wnn-conversion-backend) +(defvar egg-support-languages nil) -;;(load-library "egg/sj3rpc") -;;(load-library "egg/sj3") -;;(setq egg-conversion-backend sj3-conversion-backend) +(defun egg-set-support-languages (langs) + (while langs + (if (null (member (car langs) egg-support-languages)) + (setq egg-support-languages (cons (car langs) egg-support-languages))) + (setq langs (cdr langs)))) (add-hook 'kill-emacs-hook 'egg-kill-emacs-function) (defun egg-kill-emacs-function () (egg-finalize-backend)) +(if (not (fboundp 'set-buffer-multibyte)) +(defun set-buffer-multibyte (flag) + (setq enable-multibyte-characters flag))) + (provide 'egg) ;;; egg.el ends here