;;; 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 <tomura@etl.go.jp>
;; Author: NIIBE Yutaka <gniibe@mri.co.jp>
+;; KATAYAMA Yoshio <kate@pfu.co.jp>
;; Maintainer: NIIBE Yutaka <gniibe@mri.co.jp>
;; 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.
(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]
"
(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."
(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))
(interactive)
(its-start last-command-char))
\f
+(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)))))))))
+\f
(defun egg-hinshi-select ()
(menudiag-select ; Should generate at initialization time
'(menu "\e$BIJ;lL>\e(B:"
;; 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 "\e$B<-=qEPO?!X\e(B%s\e$B!Y\e(B \e$BFI$_\e(B:" kanji)))
(setq ocolumn (current-column))
(funcall auto-fill-function)))))
-(setq its-hira-period "\e$B!#\e(B") ; ". " "\e$B!%\e(B" "\e$B!#\e(B"
-(setq its-hira-comma ", ") ; ", " "\e$B!$\e(B" "\e$B!"\e(B"
-
(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