X-Git-Url: http://git.chise.org/gitweb/?p=elisp%2Fegg.git;a=blobdiff_plain;f=egg-cnv.el;fp=egg-cnv.el;h=f9df95d90c504ddcce9b233788e97c5686d8d293;hp=b85cd045a19ff193138615a8a3653696d056b9c5;hb=0db6050c7bc8d536788b1d424357695375d768e2;hpb=d0114d80c7a6a1a573bb3adc0fd4a3b25fa1e27e diff --git a/egg-cnv.el b/egg-cnv.el index b85cd04..f9df95d 100644 --- a/egg-cnv.el +++ b/egg-cnv.el @@ -88,7 +88,7 @@ (if (= len (length s)) (list s) (list (substring s 0 len) (substring s len))))) -(defun egg-end-conversion-other-languages (bunsetsu-info-list) +(defun egg-end-conversion-other-languages (bunsetsu-info-list abort) nil) (defun egg-fini-other-languages (language) nil) @@ -129,8 +129,8 @@ (funcall (aref egg-conversion-backend 8) bunsetsu-info candidate-pos)) (defun egg-change-bunsetsu-length (b0 b1 b2 len) (funcall (aref egg-conversion-backend 9) b0 b1 b2 len)) -(defun egg-end-conversion (bunsetsu-info-list) - (funcall (aref egg-conversion-backend 10) bunsetsu-info-list)) +(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) @@ -215,7 +215,7 @@ (egg-start-conversion (buffer-substring-no-properties s e) egg-current-language)) - (error + (error ; XXX: catching all error is BADBADBAD (setq egg-conversion-backend egg-conversion-backend-other-languages bunsetsu-info-list (egg-start-conversion-other-languages (buffer-substring-no-properties s e) @@ -556,6 +556,7 @@ (interactive "p") (egg-reconvert-bunsetsu-internal n 'egg-start-conversion)) +;; XXX: not working. Should change protocol to backend? (defun egg-decide-before-point () (interactive) (let ((inhibit-read-only t) @@ -600,21 +601,62 @@ (delete-region (point) (+ (point) (length egg-conversion-close))) (its-restart source t)))) +(defun egg-decide-bunsetsu (&optional end-marker) + (let ((in-loop t) + p bunsetsu-info-list bl) + (setq p (point)) + (while in-loop + (let ((bl1 (cons (egg-get-bunsetsu-info p) nil))) + (if bl + (setq bl (setcdr bl bl1)) + (setq bunsetsu-info-list (setq bl bl1)))) + (forward-char) + (remove-text-properties p (point) '(face nil + intangible nil + local-map nil + read-only nil + egg-bunsetsu-last nil)) + (setq p (point)) + (if (or (and end-marker (= p end-marker)) + (get-text-property p 'egg-end)) + (setq in-loop nil) + (setq p (1- p)) + (delete-region p (1+ p)))) ; Delete bunsetsu separator + bunsetsu-info-list)) + (defun egg-exit-conversion () (interactive) - (goto-char (next-single-property-change (point) 'egg-end)) - (egg-decide-before-point)) + (let ((inhibit-read-only t) + start bunsetsu-list) + (if (get-text-property (1- (point)) 'egg-start) + (setq start (1- (point))) + (setq start (1- (previous-single-property-change (point) 'egg-start)))) + (goto-char start) + ;; Delete open marker + (delete-region start (+ start (length egg-conversion-open))) + (setq bunsetsu-list (egg-decide-bunsetsu)) + ;; Delete close marker + (delete-region (point) (+ (point) (length egg-conversion-close))) + (egg-end-conversion bunsetsu-list nil) + (egg-do-auto-fill) + (run-hooks 'input-method-after-insert-chunk-hook))) (defun egg-abort-conversion () (interactive) - (let ((inhibit-read-only t) source) - (goto-char (- (if (get-text-property (1- (point)) 'egg-start) - (point) - (previous-single-property-change (point) 'egg-start)) - (length egg-conversion-open))) + (let ((inhibit-read-only t) + start bunsetsu-list source) + (if (get-text-property (1- (point)) 'egg-start) + (setq start (1- (point))) + (setq start (1- (previous-single-property-change (point) 'egg-start)))) + (goto-char start) (setq source (get-text-property (point) 'egg-source)) - (delete-region (point) (+ (next-single-property-change (point) 'egg-end) - (length egg-conversion-close))) + ;; Delete open marker + (delete-region start (+ start (length egg-conversion-open))) + (setq bunsetsu-list (egg-decide-bunsetsu)) + ;; Delete close marker + (delete-region (point) (+ (point) (length egg-conversion-close))) + (egg-end-conversion bunsetsu-list t) + (delete-region start (point)) (its-restart source))) (defun egg-select-candidate ()