Revision: 7355
Author: deton.kih
Date: Mon Oct 31 04:14:47 2011
Log: * scm/tutcode.scm
- (tutcode-commit-with-auto-help):
Add call of tutcode-undo-prepare to undo commit
of prefix mazegaki conversion.
- (tutcode-begin-kanji-code-input):
Add call of tutcode-undo-prepare.
- (tutcode-commit-editor-context,
tutcode-begin-postfix-bushu-conversion,
tutcode-proc-state-converting):
Follow the rename of tutcode-undo-prepare-postfix.
- (tutcode-proc-state-on):
Add reset of undo data before starting bushu conversion.
- (tutcode-undo): Change to support prefix conversion.
- (tutcode-undo-prepare):
Add state argument to distinguish type of prefix conversion.
- (tutcode-undo-prepare-postfix):
New function rename from tutcode-undo-prepare.
- (tutcode-proc-state-bushu): Change to support undo.
- (tutcode-bushu-commit): Ditto.
http://code.google.com/p/uim/source/detail?r=7355
Modified:
/trunk/scm/tutcode.scm
=======================================
--- /trunk/scm/tutcode.scm Mon Oct 31 04:10:32 2011
+++ /trunk/scm/tutcode.scm Mon Oct 31 04:14:47 2011
@@ -243,6 +243,16 @@
;;; ´Á»ú¥³¡¼¥ÉÆþÎϤdzÎÄꤷ¤¿Ê¸»úÎó¤òºÆÆþÎϤ¹¤ë¥â¡¼¥É¡£
;;; tutcode-history-size¤ò1°Ê¾å¤ËÀßÄꤹ¤ë¤È͸ú¤Ë¤Ê¤ê¤Þ¤¹¡£
;;;
+;;; ¡Ú¥¢¥ó¥É¥¥¡Û
+;;; °Ê²¼¤ÎÊÑ´¹¤Ç¤Ï¡¢ÊÑ´¹¸å¤Ë³ÎÄꤵ¤ì¤ëʸ»úÎó¤ò³Îǧ¤¹¤ëµ¡²ñ̵¤·¤Ë
+;;; ³ÎÄê¤ò¹Ô¤¦¤Î¤Ç¡¢°Õ¿Þ¤·¤Ê¤¤´Á»ú¤Ë³ÎÄꤵ¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
+;;; ¤½¤Î¤è¤¦¤Ê¾ì¹ç¤Ç¤â¡¢ºÇ½é¤«¤éÆþÎϤ·Ä¾¤µ¤Ê¤¯¤Æ¤¹¤à¤è¤¦¤Ë¡¢
+;;; ¥¢¥ó¥É¥¥µ¡Ç½¤òÄɲä·¤Þ¤·¤¿¡£
+;;; (³ÎÄêºÑʸ»úÎó¤òºï½ü¤¹¤ë¤¿¤á¡¢uim¤Îsurrounding text API¤ò»È¤¤¤Þ¤¹)
+;;; + Éô¼ó¹çÀ®ÊÑ´¹:
2ʸ»úÌܤÎÉô¼óÆþÎϤˤè¤êÊÑ´¹¡¦³ÎÄ곫»Ï(ÆÃ¤ËºÆµ¢Åª¤Ê¾ì¹ç)
+;;; + ´Á»ú¥³¡¼¥ÉÆþÎÏ
+;;; + ¸ò¤¼½ñ¤ÊÑ´¹: ¸õÊä¿ô¤¬1¸Ä¤Î»þ¤Î¼«Æ°³ÎÄê
+;;;
;;; ¡ÚÀßÄêÎã¡Û
;;; *
¥³¡¼¥Éɽ¤Î°ìÉô¤òÊѹ¹¤·¤¿¤¤¾ì¹ç¤Ï¡¢Î㤨¤Ð~/.uim¤Ç°Ê²¼¤Î¤è¤¦¤Ëµ½Ò¤¹¤ë¡£
;;; (require "tutcode.scm")
@@ -1304,13 +1314,21 @@
(yomi (and (> yomi-len 0)
(take (tutcode-context-mazegaki-yomi-all pc)
yomi-len)))
(suffix (tutcode-context-mazegaki-suffix pc))
+ (state (tutcode-context-state pc))
+ ;;
¸õÊä1¸Ä¤Ç¼«Æ°³ÎÄꤵ¤ì¤¿´Á»ú¤¬°Õ¿Þ¤·¤¿¤â¤Î¤Ç¤Ê¤«¤Ã¤¿¾ì¹ç¤Îundo¤òÁÛÄê
+ ;;
(ÆÉ¤ßÆþÎϾõÂÖ¤òºÆ¸½¡£¸õÊäÁªÂò¾õÂ֤ǤϤʤ¯¡£ÁªÂòÃæ¤Î¸õÊäÈÖ¹æ¤ÏÉÔÍ×)
+ (undo-data (and (eq? state 'tutcode-state-converting)
+ (list head (tutcode-context-latin-conv pc))))
(res (tutcode-prepare-commit-string pc))) ;
flush¤Ë¤è¤êheadÅù¤¬¥¯¥ê¥¢
(if (> yomi-len 0)
(begin
(tutcode-postfix-delete-text pc yomi-len)
(tutcode-commit pc res)
- (tutcode-undo-prepare pc res yomi))
- (tutcode-commit pc res))
+ (tutcode-undo-prepare-postfix pc res yomi))
+ (begin
+ (tutcode-commit pc res)
+ (if undo-data
+ (tutcode-undo-prepare pc state res undo-data))))
(tutcode-check-auto-help-window-begin pc
(drop (string-to-list res) (length suffix))
(append suffix head))))
@@ -1595,6 +1613,7 @@
(begin
(tutcode-commit pc kanji)
(tutcode-flush pc)
+ (tutcode-undo-prepare pc 'tutcode-state-code kanji str-list)
(tutcode-check-auto-help-window-begin pc (list kanji) ())))))
;;; »Ò¥³¥ó¥Æ¥¥¹¥È¤òºîÀ®¤¹¤ë¡£
@@ -2343,7 +2362,7 @@
(tutcode-postfix-delete-text pc yomi-len)
(tutcode-flush pc)
(tutcode-commit pc commit-str)
- (tutcode-undo-prepare pc commit-str yomi))
+ (tutcode-undo-prepare-postfix pc commit-str yomi))
(begin
(tutcode-flush pc)
(tutcode-commit pc commit-str)))
@@ -2774,6 +2793,7 @@
((eq? res 'tutcode-kanji-code-input-start)
(tutcode-context-set-state! pc 'tutcode-state-code))
((eq? res 'tutcode-bushu-start)
+ (tutcode-context-set-undo! pc ()) ;
ºÆµ¢ÅªÉô¼ó¹çÀ®ÊÑ´¹¤ÎundoÍÑ
(tutcode-context-set-state! pc 'tutcode-state-bushu)
(tutcode-append-string pc "¢¥"))
((eq? res 'tutcode-interactive-bushu-start)
@@ -2848,24 +2868,46 @@
(tutcode-bushu-convert (cadr former-seq) (car
former-seq)))))
(tutcode-postfix-delete-text pc 2)
(tutcode-commit pc res)
- (tutcode-undo-prepare pc res former-seq)
+ (tutcode-undo-prepare-postfix pc res former-seq)
(tutcode-check-auto-help-window-begin pc (list res) ())))
-;;; ¸åÃÖ·¿ÊÑ´¹¤Î³ÎÄê¤òundo¤¹¤ë
+;;; ¸åÃÖ·¿/Á°ÃÖ·¿ÊÑ´¹¤Î³ÎÄê¤òundo¤¹¤ë
(define (tutcode-undo pc)
- (and-let*
- ((undo (tutcode-context-undo pc))
- (len (and (pair? undo) (car undo)))
- (strs (cdr undo)))
- (tutcode-postfix-delete-text pc len)
- (tutcode-commit pc (string-list-concat strs) #t #t)))
+ (let ((undo (tutcode-context-undo pc)))
+ (if (pair? undo)
+ (let ((state (list-ref undo 0))
+ (commit-len (list-ref undo 1))
+ (data (list-ref undo 2)))
+ (tutcode-postfix-delete-text pc commit-len)
+ (case state
+ ((tutcode-state-off) ; ¸åÃÖ·¿ÊÑ´¹
+ (tutcode-commit pc (string-list-concat data) #t #t))
+ ((tutcode-state-converting)
+ (tutcode-context-set-head! pc (list-ref data 0))
+ (tutcode-context-set-latin-conv! pc (list-ref data 1))
+ (tutcode-context-set-state! pc 'tutcode-state-yomi))
+ ((tutcode-state-bushu)
+ (tutcode-context-set-head! pc data)
+ (tutcode-context-set-state! pc 'tutcode-state-bushu))
+ ((tutcode-state-code)
+ (tutcode-context-set-head! pc data)
+ (tutcode-context-set-state! pc 'tutcode-state-code))
+ )))))
+
+;;; ¸åÃÖ·¿/Á°ÃÖ·¿ÊÑ´¹¤Î³ÎÄê¤òundo¤¹¤ë¤¿¤á¤Î½àÈ÷
+;;; @param state ÊÑ´¹¤Î¼ïÎà('tutcode-state-converting)
+;;; @param commit-str ³ÎÄêʸ»úÎó
+;;; @param data ³ÎÄêÁ°¤Î¾õÂÖ¤òºÆ¸½¤¹¤ë¤Î¤ËɬÍפʾðÊó
+(define (tutcode-undo-prepare pc state commit-str data)
+ (let ((commit-len (length (string-to-list commit-str))))
+ ;; XXX: ¿ÃÊundo¤Ï̤Âбþ
+ (tutcode-context-set-undo! pc (list state commit-len data))))
;;; ¸åÃÖ·¿ÊÑ´¹¤Î³ÎÄê¤òundo¤¹¤ë¤¿¤á¤Î½àÈ÷
;;; @param commit-str ³ÎÄêʸ»úÎó
;;; @param yomi-str ÊÑ´¹¸µ¤Îʸ»úÎó(ÆÉ¤ß/Éô¼ó)¤Î¥ê¥¹¥È(µÕ½ç)
-(define (tutcode-undo-prepare pc commit-str yomi-list)
- (let ((commit-len (length (string-to-list commit-str))))
- (tutcode-context-set-undo! pc (cons commit-len yomi-list))))
+(define (tutcode-undo-prepare-postfix pc commit-str yomi-list)
+ (tutcode-undo-prepare pc 'tutcode-state-off commit-str yomi-list))
;;; ¸åÃÖ·¿¸ò¤¼½ñ¤ÊÑ´¹¤ò³«»Ï¤¹¤ë
;;; @param yomi-len »ØÄꤵ¤ì¤¿ÆÉ¤ß¤Îʸ»ú¿ô¡£»ØÄꤵ¤ì¤Æ¤Ê¤¤¾ì¹ç¤Ï#f¡£
@@ -3633,10 +3675,19 @@
((eq? res 'tutcode-auto-help-redisplay)
(tutcode-auto-help-redisplay pc)
(set! res #f))
+ ((eq? res 'tutcode-undo) ; ºÆµ¢Åª¤ÊÉô¼ó¹çÀ®ÊÑ´¹¤òundo¤¹¤ë
+ (let ((undo (tutcode-context-undo pc)))
+ (if (pair? undo)
+ (tutcode-context-set-head! pc (list-ref undo 2))))
+ (set! res #f))
((symbol? res) ;XXX Éô¼ó¹çÀ®ÊÑ´¹Ãæ¤Ï¸ò¤¼½ñ¤ÊÑ´¹Åù¤Ï̵¸ú¤Ë¤¹¤ë
(set! res #f)))))
(if res
- (tutcode-begin-bushu-conversion pc res))))
+ (begin
+ ;; ºÆµ¢Åª¤ËÉô¼ó¹çÀ®¤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ë¤Î¤Ç¡¢headÁ´ÂΤòundoÍѤËÊÝ»ý
+ (tutcode-undo-prepare
pc 'tutcode-state-bushu " " ; " ":³ÎÄê¸å¤Ï1ʸ»ú
+ (tutcode-context-head pc))
+ (tutcode-begin-bushu-conversion pc res)))))
;;; Éô¼ó¹çÀ®ÊÑ´¹³«»Ï
;;; @param char ¿·¤¿¤ËÆþÎϤµ¤ì¤¿Ê¸»ú(2ÈÖÌܤÎÉô¼ó)
@@ -3667,9 +3718,10 @@
(tutcode-context-set-head! pc (cddr (tutcode-context-head pc)))
(if (null? (tutcode-context-head pc))
;; ÊÑ´¹ÂÔ¤Á¤ÎÉô¼ó¤¬»Ä¤Ã¤Æ¤Ê¤±¤ì¤Ð¡¢³ÎÄꤷ¤Æ½ªÎ»
- (begin
+ (let ((undo-data (tutcode-context-undo pc))) ; commit¤¹¤ë¤È¥¯¥ê¥¢¤µ¤ì¤ë
(tutcode-commit pc convchar)
(tutcode-flush pc)
+ (tutcode-context-set-undo! pc undo-data)
(tutcode-check-auto-help-window-begin pc (list convchar) ()))
;; Éô¼ó¤¬¤Þ¤À»Ä¤Ã¤Æ¤ì¤Ð¡¢ºÆ³Îǧ¡£
;; (¹çÀ®¤·¤¿Ê¸»ú¤¬2ʸ»úÌܤʤé¤Ð¡¢Ï¢Â³¤·¤ÆÉô¼ó¹çÀ®ÊÑ´¹)
@@ -3982,7 +4034,7 @@
(begin
(tutcode-postfix-delete-text pc postfix-yomi-len)
(tutcode-commit pc commit-str)
- (tutcode-undo-prepare pc commit-str yomi))
+ (tutcode-undo-prepare-postfix pc commit-str yomi))
(tutcode-commit pc commit-str)))
(tutcode-proc-state-on pc key key-state)))))