X-Git-Url: http://git.chise.org/gitweb/?p=elisp%2Fegg.git;a=blobdiff_plain;f=egg.el;h=caec25566d2c31e0da2c3dd6b2e347db830a57c9;hp=a88bcf22926d16611964f1968daff08eb6df7197;hb=cfd2771a57243d763ff08dfd2e78cb2ddbc3b546;hpb=0db6050c7bc8d536788b1d424357695375d768e2 diff --git a/egg.el b/egg.el index a88bcf2..caec255 100644 --- a/egg.el +++ b/egg.el @@ -9,7 +9,7 @@ ;; Maintainer: NIIBE Yutaka ;; Keywords: mule, multilingual, input method -;; This file will be part of GNU Emacs (in future). +;; This file is part of EGG. ;; EGG is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -56,9 +56,9 @@ (force-mode-line-update)) ;; Turn on (if (null (string= (car arg) egg-last-method-name)) - (progn + (let ((backend egg-conversion-backend)) (funcall (nth 1 arg)) - (egg-set-conversion-backend nil (list its-current-language) t) + (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 @@ -92,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 "品詞名:" @@ -163,17 +242,6 @@ (defgroup egg nil "Tamagotchy --- EGG Versio 4.0") -;;(load-library "its/hira") -;;(setq-default its-current-map its-hira-map) - -;;(load-library "egg/wnn") -;;(load-library "egg/wnnrpc") -;;(setq egg-conversion-backend wnn-conversion-backend) - -;;(load-library "egg/sj3rpc") -;;(load-library "egg/sj3") -;;(setq egg-conversion-backend sj3-conversion-backend) - (defvar egg-support-languages nil) (defun egg-set-support-languages (langs) @@ -186,6 +254,10 @@ (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