Revision: 7375
Author:   deton.kih
Date:     Thu Nov 24 02:52:55 2011
Log:      * scm/tutcode.scm
  - (tutcode-proc-state-bushu):
    Change to support pasting bushu conversion sequence.
  - (tutcode-bushu-convert-on-list): New function.
  - (tutcode-proc-state-interactive-bushu):
    Change to support pasting some characters.
  - (tutcode-begin-interactive-bushu-conversion):
    Change to retry bushu conversion trimming pasted characters.

http://code.google.com/p/uim/source/detail?r=7375

Modified:
 /trunk/scm/tutcode.scm

=======================================
--- /trunk/scm/tutcode.scm      Thu Nov 24 02:51:02 2011
+++ /trunk/scm/tutcode.scm      Thu Nov 24 02:52:55 2011
@@ -311,8 +311,8 @@
 ;;;  * ¥¯¥ê¥Ã¥×¥Ü¡¼¥ÉÆâ¤Îʸ»úÎó¤ò°Ê²¼¤Îpreedit¤ËޤêÉÕ¤±(tutcode-paste-key)
 ;;;   + ¼­½ñÅÐÏ¿»þ
 ;;;   + ¸ò¤¼½ñ¤­ÊÑ´¹¤ÎÆÉ¤ßÆþÎÏ»þ
-;;;   + Éô¼ó¹çÀ®ÊÑ´¹»þ(¥¯¥ê¥Ã¥×¥Ü¡¼¥ÉÆâ¤Îʸ»úÎó¤ÎÀèÆ¬1ʸ»ú¤Î¤ß)
-;;;   + ÂÐÏÃŪ¤ÊÉô¼ó¹çÀ®ÊÑ´¹»þ(¥¯¥ê¥Ã¥×¥Ü¡¼¥ÉÆâ¤Îʸ»úÎó¤ÎÀèÆ¬1ʸ»ú¤Î¤ß)
+;;;   + Éô¼ó¹çÀ®ÊÑ´¹»þ("¸À¢¥¢¥À¾°ìÁá"¤Î¤è¤¦¤ÊÉô¼ó¹çÀ®¥·¡¼¥±¥ó¥¹¤Ë¤âÂбþ)
+;;;   + ÂÐÏÃŪ¤ÊÉô¼ó¹çÀ®ÊÑ´¹»þ
 ;;;   + ´Á»ú¥³¡¼¥ÉÆþÎÏ»þ
 ;;;
 ;;; ¡ÚÀßÄêÎã¡Û
@@ -4411,10 +4411,24 @@
       ((and predicting? (tutcode-prev-page-key? key key-state))
        (tutcode-change-bushu-prediction-page pc #f))
       ((tutcode-paste-key? key key-state)
-        ;; XXX:1ʸ»ú¤Î¤ß¼èÆÀ¡£¢¥¤ò´Þ¤àʸ»úÎó¤ò¥Ú¡¼¥¹¥È¤Ç¤­¤ë¤È¤¦¤ì¤·¤¤¤«¤â
-        (let ((latter-seq (tutcode-clipboard-acquire-text pc 1)))
+        (let ((latter-seq (tutcode-clipboard-acquire-text pc 'full)))
           (if (pair? latter-seq)
-            (set! res (car latter-seq)))))
+            (let* ((head (tutcode-context-head pc))
+                   (paste-res
+                    (tutcode-bushu-convert-on-list
+                      (reverse (append latter-seq head)) ())))
+              (if (string? paste-res)
+                (begin
+                  (tutcode-commit pc paste-res)
+                  (tutcode-flush pc)
+ (tutcode-undo-prepare pc 'tutcode-state-bushu paste-res head) + (tutcode-check-auto-help-window-begin pc (list paste-res) ()))
+                (begin
+                  (tutcode-context-set-head! pc paste-res)
+                  (if (and tutcode-use-bushu-prediction?
+                           (pair? paste-res)
+                           (not (string=? (car paste-res) "¢¥")))
+ (tutcode-check-bushu-prediction pc (car paste-res)))))))))
       ((or
         (symbol? key)
         (and
@@ -4492,6 +4506,31 @@
     ;; (¹çÀ®¤·¤¿Ê¸»ú¤¬2ʸ»úÌܤʤé¤Ð¡¢Ï¢Â³¤·¤ÆÉô¼ó¹çÀ®ÊÑ´¹)
     (tutcode-begin-bushu-conversion pc convchar)))

+;;; Éô¼ó¹çÀ®ÊÑ´¹¤ò¥ê¥¹¥È¤ËÂФ·¤ÆÅ¬ÍѤ¹¤ë
+;;; @param bushu-list Éô¼ó¹çÀ®¥·¡¼¥±¥ó¥¹¤Î¥ê¥¹¥È¡£
+;;;  Îã:("¢¥" "¢¥" "ÌÚ" "¢¥" "¿Í" "¿Í" "¾ò" "É×")
+;;; @param conv-list ÊÑ´¹Ãæ¤Î¥ê¥¹¥È(µÕ½ç)
+;;; @return ¹çÀ®´°Î»»þ¤ÏÊÑ´¹¸åʸ»úÎó¡£¹çÀ®ÅÓÃæ¤Î¾ì¹ç¤ÏÊÑ´¹Ãæ¥ê¥¹¥È(µÕ½ç)¡£
+;;;  Îã:"óÏ"
+(define (tutcode-bushu-convert-on-list bushu-list conv-list)
+  (if (null? bushu-list)
+    conv-list
+    (let ((bushu (car bushu-list))
+          (prevchar (safe-car conv-list)))
+ (if (or (not prevchar) (string=? prevchar "¢¥") (string=? bushu "¢¥"))
+        ;; 1ʸ»úÌÜ or ºÆµ¢³«»Ï
+ (tutcode-bushu-convert-on-list (cdr bushu-list) (cons bushu conv-list))
+        ;; ľÁ°¤Îʸ»ú¤¬Éô¼ó¹çÀ®¥Þ¡¼¥«¤Ç¤Ê¤¤¢ª2ʸ»úÌÜ¢ªÊÑ´¹³«»Ï
+        (let ((convchar (tutcode-bushu-convert prevchar bushu)))
+          (if (string? convchar) ; ¹çÀ®À®¸ù?
+            (if (or (null? (cdr conv-list)) (null? (cddr conv-list)))
+              convchar ; ¹çÀ®½ªÎ»(bushu-list¤Î»Ä¤ê¤Ï̵»ë)
+              (tutcode-bushu-convert-on-list
+                (cons convchar (cdr bushu-list))
+                (cddr conv-list))) ; ºÆµ¢Åª¤Ë¹çÀ®
+            ;; ¹çÀ®¼ºÇÔ»þ¤Ï¼¡¤ÎÉô¼ó¤Ç»î¤¹
+ (tutcode-bushu-convert-on-list (cdr bushu-list) conv-list)))))))
+
 ;;; ÂÐÏÃŪÉô¼ó¹çÀ®ÊÑ´¹¤Î¤È¤­¤Î¥­¡¼ÆþÎϤò½èÍý¤¹¤ë¡£
 ;;; @param c ¥³¥ó¥Æ¥­¥¹¥È¥ê¥¹¥È
 ;;; @param key ÆþÎϤµ¤ì¤¿¥­¡¼
@@ -4566,10 +4605,11 @@
           ((tutcode-stroke-help-toggle-key? key key-state)
            (tutcode-toggle-stroke-help pc))
           ((tutcode-paste-key? key key-state)
- ;; XXX:1ʸ»ú¤Î¤ß¼èÆÀ¡£Ê£¿ô¤ÎÉô¼ó¤ò°ìÅÙ¤Ëpaste¤Ç¤­¤ë¤È¤¦¤ì¤·¤¤¤«¤â
-            (let ((latter-seq (tutcode-clipboard-acquire-text pc 1)))
+            (let ((latter-seq (tutcode-clipboard-acquire-text pc 'full)))
               (if (pair? latter-seq)
-                (set! res (car latter-seq)))))
+                (begin
+                  (tutcode-context-set-head! pc (append latter-seq head))
+                  (tutcode-begin-interactive-bushu-conversion pc)))))
           ((or
             (symbol? key)
             (and
@@ -4623,7 +4663,9 @@
               (tutcode-context-prediction-nr-all pc)
               (tutcode-context-prediction-page-limit pc))
             (tutcode-select-candidate pc
-              (tutcode-context-prediction-index pc)))))
+              (tutcode-context-prediction-index pc)))
+          ;; paste¤µ¤ì¤¿Ê£¿ô¤ÎÉô¼ó¤òÁ´¤Æ»È¤¦¤È¹çÀ®ÉÔǽ¢ª1Éô¼ó¤òºï¤Ã¤ÆºÆ¸¡º÷
+          (tutcode-begin-interactive-bushu-conversion pc)))
       (else
         (let ((nr (length res)))
           (tutcode-context-set-prediction-word! pc ())

Reply via email to