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 ())