Revision: 7424
Author:   deton.kih
Date:     Mon Jan 23 02:43:00 2012
Log:      * Support binding procedure to key sequence.
* scm/tutcode.scm
  - (tutcode-stroke-help-update-alist-with-rule):
    Add label for procedure.
  - (tutcode-proc-state-on,
     tutcode-proc-state-yomi,
     tutcode-proc-state-bushu,
     tutcode-proc-state-interactive-bushu):
    Call procedure bound to key sequence.
  - (tutcode-selection-filter): New function.

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

Modified:
 /trunk/scm/tutcode.scm

=======================================
--- /trunk/scm/tutcode.scm      Wed Jan 11 00:17:24 2012
+++ /trunk/scm/tutcode.scm      Mon Jan 23 02:43:00 2012
@@ -1963,75 +1963,81 @@
                  (cadr candlist))
             (car candlist)))
          (candstr
-          (case cand
-            ((tutcode-mazegaki-start) "¡þ")
-            ((tutcode-latin-conv-start) "/")
-            ((tutcode-kanji-code-input-start) "¢¢")
-            ((tutcode-history-start) "¡ý")
-            ((tutcode-bushu-start) "¢¡")
-            ((tutcode-interactive-bushu-start) "¢§")
-            ((tutcode-postfix-bushu-start) "¢¥")
-            ((tutcode-selection-mazegaki-start) "¢¤s")
-            ((tutcode-selection-mazegaki-inflection-start) "¡½s")
-            ((tutcode-postfix-mazegaki-start) "¢¤")
-            ((tutcode-postfix-mazegaki-1-start) "¢¤1")
-            ((tutcode-postfix-mazegaki-2-start) "¢¤2")
-            ((tutcode-postfix-mazegaki-3-start) "¢¤3")
-            ((tutcode-postfix-mazegaki-4-start) "¢¤4")
-            ((tutcode-postfix-mazegaki-5-start) "¢¤5")
-            ((tutcode-postfix-mazegaki-6-start) "¢¤6")
-            ((tutcode-postfix-mazegaki-7-start) "¢¤7")
-            ((tutcode-postfix-mazegaki-8-start) "¢¤8")
-            ((tutcode-postfix-mazegaki-9-start) "¢¤9")
-            ((tutcode-postfix-mazegaki-inflection-start) "¡½")
-            ((tutcode-postfix-mazegaki-inflection-1-start) "¡½1")
-            ((tutcode-postfix-mazegaki-inflection-2-start) "¡½2")
-            ((tutcode-postfix-mazegaki-inflection-3-start) "¡½3")
-            ((tutcode-postfix-mazegaki-inflection-4-start) "¡½4")
-            ((tutcode-postfix-mazegaki-inflection-5-start) "¡½5")
-            ((tutcode-postfix-mazegaki-inflection-6-start) "¡½6")
-            ((tutcode-postfix-mazegaki-inflection-7-start) "¡½7")
-            ((tutcode-postfix-mazegaki-inflection-8-start) "¡½8")
-            ((tutcode-postfix-mazegaki-inflection-9-start) "¡½9")
-            ((tutcode-selection-katakana-start) "¥«s")
-            ((tutcode-postfix-katakana-start) "¥«")
-            ((tutcode-postfix-katakana-1-start) "¥«1")
-            ((tutcode-postfix-katakana-2-start) "¥«2")
-            ((tutcode-postfix-katakana-3-start) "¥«3")
-            ((tutcode-postfix-katakana-4-start) "¥«4")
-            ((tutcode-postfix-katakana-5-start) "¥«5")
-            ((tutcode-postfix-katakana-6-start) "¥«6")
-            ((tutcode-postfix-katakana-7-start) "¥«7")
-            ((tutcode-postfix-katakana-8-start) "¥«8")
-            ((tutcode-postfix-katakana-9-start) "¥«9")
-            ((tutcode-selection-kanji2seq-start) "/s")
-            ((tutcode-postfix-kanji2seq-start) "/@")
-            ((tutcode-postfix-kanji2seq-1-start) "/1")
-            ((tutcode-postfix-kanji2seq-2-start) "/2")
-            ((tutcode-postfix-kanji2seq-3-start) "/3")
-            ((tutcode-postfix-kanji2seq-4-start) "/4")
-            ((tutcode-postfix-kanji2seq-5-start) "/5")
-            ((tutcode-postfix-kanji2seq-6-start) "/6")
-            ((tutcode-postfix-kanji2seq-7-start) "/7")
-            ((tutcode-postfix-kanji2seq-8-start) "/8")
-            ((tutcode-postfix-kanji2seq-9-start) "/9")
-            ((tutcode-selection-seq2kanji-start) "´Ás")
-            ((tutcode-clipboard-seq2kanji-start) "´Ác")
-            ((tutcode-postfix-seq2kanji-start) "´Á@")
-            ((tutcode-postfix-seq2kanji-1-start) "´Á1")
-            ((tutcode-postfix-seq2kanji-2-start) "´Á2")
-            ((tutcode-postfix-seq2kanji-3-start) "´Á3")
-            ((tutcode-postfix-seq2kanji-4-start) "´Á4")
-            ((tutcode-postfix-seq2kanji-5-start) "´Á5")
-            ((tutcode-postfix-seq2kanji-6-start) "´Á6")
-            ((tutcode-postfix-seq2kanji-7-start) "´Á7")
-            ((tutcode-postfix-seq2kanji-8-start) "´Á8")
-            ((tutcode-postfix-seq2kanji-9-start) "´Á9")
-            ((tutcode-auto-help-redisplay) "¢ã")
-            ((tutcode-help) "¡©")
-            ((tutcode-help-clipboard) "?c")
-            ((tutcode-undo) "¢Î")
-            (else cand)))
+          (cond
+            ((string? cand)
+              cand)
+            ((symbol? cand)
+              (case cand
+                ((tutcode-mazegaki-start) "¡þ")
+                ((tutcode-latin-conv-start) "/")
+                ((tutcode-kanji-code-input-start) "¢¢")
+                ((tutcode-history-start) "¡ý")
+                ((tutcode-bushu-start) "¢¡")
+                ((tutcode-interactive-bushu-start) "¢§")
+                ((tutcode-postfix-bushu-start) "¢¥")
+                ((tutcode-selection-mazegaki-start) "¢¤s")
+                ((tutcode-selection-mazegaki-inflection-start) "¡½s")
+                ((tutcode-postfix-mazegaki-start) "¢¤")
+                ((tutcode-postfix-mazegaki-1-start) "¢¤1")
+                ((tutcode-postfix-mazegaki-2-start) "¢¤2")
+                ((tutcode-postfix-mazegaki-3-start) "¢¤3")
+                ((tutcode-postfix-mazegaki-4-start) "¢¤4")
+                ((tutcode-postfix-mazegaki-5-start) "¢¤5")
+                ((tutcode-postfix-mazegaki-6-start) "¢¤6")
+                ((tutcode-postfix-mazegaki-7-start) "¢¤7")
+                ((tutcode-postfix-mazegaki-8-start) "¢¤8")
+                ((tutcode-postfix-mazegaki-9-start) "¢¤9")
+                ((tutcode-postfix-mazegaki-inflection-start) "¡½")
+                ((tutcode-postfix-mazegaki-inflection-1-start) "¡½1")
+                ((tutcode-postfix-mazegaki-inflection-2-start) "¡½2")
+                ((tutcode-postfix-mazegaki-inflection-3-start) "¡½3")
+                ((tutcode-postfix-mazegaki-inflection-4-start) "¡½4")
+                ((tutcode-postfix-mazegaki-inflection-5-start) "¡½5")
+                ((tutcode-postfix-mazegaki-inflection-6-start) "¡½6")
+                ((tutcode-postfix-mazegaki-inflection-7-start) "¡½7")
+                ((tutcode-postfix-mazegaki-inflection-8-start) "¡½8")
+                ((tutcode-postfix-mazegaki-inflection-9-start) "¡½9")
+                ((tutcode-selection-katakana-start) "¥«s")
+                ((tutcode-postfix-katakana-start) "¥«")
+                ((tutcode-postfix-katakana-1-start) "¥«1")
+                ((tutcode-postfix-katakana-2-start) "¥«2")
+                ((tutcode-postfix-katakana-3-start) "¥«3")
+                ((tutcode-postfix-katakana-4-start) "¥«4")
+                ((tutcode-postfix-katakana-5-start) "¥«5")
+                ((tutcode-postfix-katakana-6-start) "¥«6")
+                ((tutcode-postfix-katakana-7-start) "¥«7")
+                ((tutcode-postfix-katakana-8-start) "¥«8")
+                ((tutcode-postfix-katakana-9-start) "¥«9")
+                ((tutcode-selection-kanji2seq-start) "/s")
+                ((tutcode-postfix-kanji2seq-start) "/@")
+                ((tutcode-postfix-kanji2seq-1-start) "/1")
+                ((tutcode-postfix-kanji2seq-2-start) "/2")
+                ((tutcode-postfix-kanji2seq-3-start) "/3")
+                ((tutcode-postfix-kanji2seq-4-start) "/4")
+                ((tutcode-postfix-kanji2seq-5-start) "/5")
+                ((tutcode-postfix-kanji2seq-6-start) "/6")
+                ((tutcode-postfix-kanji2seq-7-start) "/7")
+                ((tutcode-postfix-kanji2seq-8-start) "/8")
+                ((tutcode-postfix-kanji2seq-9-start) "/9")
+                ((tutcode-selection-seq2kanji-start) "´Ás")
+                ((tutcode-clipboard-seq2kanji-start) "´Ác")
+                ((tutcode-postfix-seq2kanji-start) "´Á@")
+                ((tutcode-postfix-seq2kanji-1-start) "´Á1")
+                ((tutcode-postfix-seq2kanji-2-start) "´Á2")
+                ((tutcode-postfix-seq2kanji-3-start) "´Á3")
+                ((tutcode-postfix-seq2kanji-4-start) "´Á4")
+                ((tutcode-postfix-seq2kanji-5-start) "´Á5")
+                ((tutcode-postfix-seq2kanji-6-start) "´Á6")
+                ((tutcode-postfix-seq2kanji-7-start) "´Á7")
+                ((tutcode-postfix-seq2kanji-8-start) "´Á8")
+                ((tutcode-postfix-seq2kanji-9-start) "´Á9")
+                ((tutcode-auto-help-redisplay) "¢ã")
+                ((tutcode-help) "¡©")
+                ((tutcode-help-clipboard) "?c")
+                ((tutcode-undo) "¢Î")
+                (else cand)))
+            ((procedure? cand)
+              "¦Ë")))
          (cand-hint
           (or
             ;; ¥·¡¼¥±¥ó¥¹ÅÓÃæ¤Î¾ì¹ç¤Ïhint-mark(*)ÉÕ¤­
@@ -2997,157 +3003,161 @@
                 (if (and tutcode-use-completion?
                          (> tutcode-completion-chars-min 0))
                   (tutcode-check-completion pc #f 0)))
-              ((eq? res 'tutcode-mazegaki-start)
-                (tutcode-context-set-latin-conv! pc #f)
-                (tutcode-context-set-postfix-yomi-len! pc 0)
-                (tutcode-context-set-state! pc 'tutcode-state-yomi))
-              ((eq? res 'tutcode-latin-conv-start)
-                (tutcode-context-set-latin-conv! pc #t)
-                (tutcode-context-set-postfix-yomi-len! pc 0)
-                (tutcode-context-set-state! pc 'tutcode-state-yomi))
-              ((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)
-                (tutcode-context-set-prediction-nr! pc 0)
-                (tutcode-context-set-state! pc
-                  'tutcode-state-interactive-bushu))
-              ((eq? res 'tutcode-history-start)
-                (tutcode-begin-history pc))
-              ((eq? res 'tutcode-undo)
-                (tutcode-undo pc))
-              ((eq? res 'tutcode-help)
-                (tutcode-help pc))
-              ((eq? res 'tutcode-help-clipboard)
-                (tutcode-help-clipboard pc))
-              ((eq? res 'tutcode-auto-help-redisplay)
-                (tutcode-auto-help-redisplay pc))
-              ((eq? res 'tutcode-postfix-bushu-start)
-                (tutcode-begin-postfix-bushu-conversion pc))
-              ((eq? res 'tutcode-postfix-mazegaki-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc #f #f #f))
-              ((eq? res 'tutcode-postfix-mazegaki-1-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 1 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-2-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 2 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-3-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 3 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-4-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 4 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-5-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 5 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-6-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 6 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-7-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 7 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-8-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 8 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-9-start)
-                (tutcode-begin-postfix-mazegaki-conversion pc 9 #t
-                  tutcode-use-recursive-learning?))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc #f))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-1-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 1))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-2-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 2))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-3-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 3))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-4-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 4))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-5-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 5))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-6-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 6))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-7-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 7))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-8-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 8))
-              ((eq? res 'tutcode-postfix-mazegaki-inflection-9-start)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc 9))
-              ((eq? res 'tutcode-postfix-katakana-start)
-                (tutcode-begin-postfix-katakana-conversion pc #f))
-              ((eq? res 'tutcode-postfix-katakana-1-start)
-                (tutcode-begin-postfix-katakana-conversion pc 1))
-              ((eq? res 'tutcode-postfix-katakana-2-start)
-                (tutcode-begin-postfix-katakana-conversion pc 2))
-              ((eq? res 'tutcode-postfix-katakana-3-start)
-                (tutcode-begin-postfix-katakana-conversion pc 3))
-              ((eq? res 'tutcode-postfix-katakana-4-start)
-                (tutcode-begin-postfix-katakana-conversion pc 4))
-              ((eq? res 'tutcode-postfix-katakana-5-start)
-                (tutcode-begin-postfix-katakana-conversion pc 5))
-              ((eq? res 'tutcode-postfix-katakana-6-start)
-                (tutcode-begin-postfix-katakana-conversion pc 6))
-              ((eq? res 'tutcode-postfix-katakana-7-start)
-                (tutcode-begin-postfix-katakana-conversion pc 7))
-              ((eq? res 'tutcode-postfix-katakana-8-start)
-                (tutcode-begin-postfix-katakana-conversion pc 8))
-              ((eq? res 'tutcode-postfix-katakana-9-start)
-                (tutcode-begin-postfix-katakana-conversion pc 9))
-              ((eq? res 'tutcode-postfix-kanji2seq-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc #f))
-              ((eq? res 'tutcode-postfix-kanji2seq-1-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 1))
-              ((eq? res 'tutcode-postfix-kanji2seq-2-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 2))
-              ((eq? res 'tutcode-postfix-kanji2seq-3-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 3))
-              ((eq? res 'tutcode-postfix-kanji2seq-4-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 4))
-              ((eq? res 'tutcode-postfix-kanji2seq-5-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 5))
-              ((eq? res 'tutcode-postfix-kanji2seq-6-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 6))
-              ((eq? res 'tutcode-postfix-kanji2seq-7-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 7))
-              ((eq? res 'tutcode-postfix-kanji2seq-8-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 8))
-              ((eq? res 'tutcode-postfix-kanji2seq-9-start)
-                (tutcode-begin-postfix-kanji2seq-conversion pc 9))
-              ((eq? res 'tutcode-postfix-seq2kanji-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc #f))
-              ((eq? res 'tutcode-postfix-seq2kanji-1-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 1))
-              ((eq? res 'tutcode-postfix-seq2kanji-2-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 2))
-              ((eq? res 'tutcode-postfix-seq2kanji-3-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 3))
-              ((eq? res 'tutcode-postfix-seq2kanji-4-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 4))
-              ((eq? res 'tutcode-postfix-seq2kanji-5-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 5))
-              ((eq? res 'tutcode-postfix-seq2kanji-6-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 6))
-              ((eq? res 'tutcode-postfix-seq2kanji-7-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 7))
-              ((eq? res 'tutcode-postfix-seq2kanji-8-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 8))
-              ((eq? res 'tutcode-postfix-seq2kanji-9-start)
-                (tutcode-begin-postfix-seq2kanji-conversion pc 9))
-              ((eq? res 'tutcode-selection-mazegaki-start)
-                (tutcode-begin-selection-mazegaki-conversion pc))
-              ((eq? res 'tutcode-selection-mazegaki-inflection-start)
- (tutcode-begin-selection-mazegaki-inflection-conversion pc))
-              ((eq? res 'tutcode-selection-katakana-start)
-                (tutcode-begin-selection-katakana-conversion pc))
-              ((eq? res 'tutcode-selection-kanji2seq-start)
-                (tutcode-begin-selection-kanji2seq-conversion pc))
-              ((eq? res 'tutcode-selection-seq2kanji-start)
-                (tutcode-begin-selection-seq2kanji-conversion pc))
-              ((eq? res 'tutcode-clipboard-seq2kanji-start)
-                (tutcode-begin-clipboard-seq2kanji-conversion pc))))))))))
+              ((symbol? res)
+                (case res
+                  ((tutcode-mazegaki-start)
+                    (tutcode-context-set-latin-conv! pc #f)
+                    (tutcode-context-set-postfix-yomi-len! pc 0)
+                    (tutcode-context-set-state! pc 'tutcode-state-yomi))
+                  ((tutcode-latin-conv-start)
+                    (tutcode-context-set-latin-conv! pc #t)
+                    (tutcode-context-set-postfix-yomi-len! pc 0)
+                    (tutcode-context-set-state! pc 'tutcode-state-yomi))
+                  ((tutcode-kanji-code-input-start)
+                    (tutcode-context-set-state! pc 'tutcode-state-code))
+                  ((tutcode-bushu-start)
+ (tutcode-context-set-undo! pc ());ºÆµ¢ÅªÉô¼ó¹çÀ®ÊÑ´¹¤ÎundoÍÑ
+                    (tutcode-context-set-state! pc 'tutcode-state-bushu)
+                    (tutcode-append-string pc "¢¥"))
+                  ((tutcode-interactive-bushu-start)
+                    (tutcode-context-set-prediction-nr! pc 0)
+                    (tutcode-context-set-state! pc
+                      'tutcode-state-interactive-bushu))
+                  ((tutcode-history-start)
+                    (tutcode-begin-history pc))
+                  ((tutcode-undo)
+                    (tutcode-undo pc))
+                  ((tutcode-help)
+                    (tutcode-help pc))
+                  ((tutcode-help-clipboard)
+                    (tutcode-help-clipboard pc))
+                  ((tutcode-auto-help-redisplay)
+                    (tutcode-auto-help-redisplay pc))
+                  ((tutcode-postfix-bushu-start)
+                    (tutcode-begin-postfix-bushu-conversion pc))
+                  ((tutcode-postfix-mazegaki-start)
+ (tutcode-begin-postfix-mazegaki-conversion pc #f #f #f))
+                  ((tutcode-postfix-mazegaki-1-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 1 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-2-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 2 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-3-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 3 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-4-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 4 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-5-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 5 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-6-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 6 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-7-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 7 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-8-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 8 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-9-start)
+                    (tutcode-begin-postfix-mazegaki-conversion pc 9 #t
+                      tutcode-use-recursive-learning?))
+                  ((tutcode-postfix-mazegaki-inflection-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc #f))
+                  ((tutcode-postfix-mazegaki-inflection-1-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 1))
+                  ((tutcode-postfix-mazegaki-inflection-2-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 2))
+                  ((tutcode-postfix-mazegaki-inflection-3-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 3))
+                  ((tutcode-postfix-mazegaki-inflection-4-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 4))
+                  ((tutcode-postfix-mazegaki-inflection-5-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 5))
+                  ((tutcode-postfix-mazegaki-inflection-6-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 6))
+                  ((tutcode-postfix-mazegaki-inflection-7-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 7))
+                  ((tutcode-postfix-mazegaki-inflection-8-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 8))
+                  ((tutcode-postfix-mazegaki-inflection-9-start)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc 9))
+                  ((tutcode-postfix-katakana-start)
+                    (tutcode-begin-postfix-katakana-conversion pc #f))
+                  ((tutcode-postfix-katakana-1-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 1))
+                  ((tutcode-postfix-katakana-2-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 2))
+                  ((tutcode-postfix-katakana-3-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 3))
+                  ((tutcode-postfix-katakana-4-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 4))
+                  ((tutcode-postfix-katakana-5-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 5))
+                  ((tutcode-postfix-katakana-6-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 6))
+                  ((tutcode-postfix-katakana-7-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 7))
+                  ((tutcode-postfix-katakana-8-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 8))
+                  ((tutcode-postfix-katakana-9-start)
+                    (tutcode-begin-postfix-katakana-conversion pc 9))
+                  ((tutcode-postfix-kanji2seq-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc #f))
+                  ((tutcode-postfix-kanji2seq-1-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 1))
+                  ((tutcode-postfix-kanji2seq-2-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 2))
+                  ((tutcode-postfix-kanji2seq-3-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 3))
+                  ((tutcode-postfix-kanji2seq-4-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 4))
+                  ((tutcode-postfix-kanji2seq-5-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 5))
+                  ((tutcode-postfix-kanji2seq-6-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 6))
+                  ((tutcode-postfix-kanji2seq-7-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 7))
+                  ((tutcode-postfix-kanji2seq-8-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 8))
+                  ((tutcode-postfix-kanji2seq-9-start)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc 9))
+                  ((tutcode-postfix-seq2kanji-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc #f))
+                  ((tutcode-postfix-seq2kanji-1-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 1))
+                  ((tutcode-postfix-seq2kanji-2-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 2))
+                  ((tutcode-postfix-seq2kanji-3-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 3))
+                  ((tutcode-postfix-seq2kanji-4-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 4))
+                  ((tutcode-postfix-seq2kanji-5-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 5))
+                  ((tutcode-postfix-seq2kanji-6-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 6))
+                  ((tutcode-postfix-seq2kanji-7-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 7))
+                  ((tutcode-postfix-seq2kanji-8-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 8))
+                  ((tutcode-postfix-seq2kanji-9-start)
+                    (tutcode-begin-postfix-seq2kanji-conversion pc 9))
+                  ((tutcode-selection-mazegaki-start)
+                    (tutcode-begin-selection-mazegaki-conversion pc))
+                  ((tutcode-selection-mazegaki-inflection-start)
+ (tutcode-begin-selection-mazegaki-inflection-conversion pc))
+                  ((tutcode-selection-katakana-start)
+                    (tutcode-begin-selection-katakana-conversion pc))
+                  ((tutcode-selection-kanji2seq-start)
+                    (tutcode-begin-selection-kanji2seq-conversion pc))
+                  ((tutcode-selection-seq2kanji-start)
+                    (tutcode-begin-selection-seq2kanji-conversion pc))
+                  ((tutcode-clipboard-seq2kanji-start)
+                    (tutcode-begin-clipboard-seq2kanji-conversion pc))))
+              ((procedure? res)
+                (res 'tutcode-state-on pc))))))))))

 ;;; ¸åÃÖ·¿Éô¼ó¹çÀ®ÊÑ´¹¤ò¹Ô¤¦
 (define (tutcode-begin-postfix-bushu-conversion pc)
@@ -4260,65 +4270,62 @@
                (set! res (charcode->string key)))))
           (else
            (set! res (tutcode-push-key! pc (charcode->string key)))
-           (cond
-            ((eq? res 'tutcode-auto-help-redisplay)
-              (tutcode-auto-help-redisplay pc)
-              (set! res #f))
-            ((eq? res 'tutcode-postfix-bushu-start)
+           (if (eq? res 'tutcode-postfix-bushu-start)
+            (begin
               (set! res
                 (and (>= (length head) 2)
                      (tutcode-bushu-convert (cadr head) (car head))))
               (if res
                 (begin
                   (tutcode-context-set-head! pc (cddr head))
- (tutcode-check-auto-help-window-begin pc (list res) ()))))
-            ;; ³èÍѤ·¤Ê¤¤¸ì¤È¤·¤ÆÊÑ´¹³«»Ï¡£¸õÊ䤬1¤Ä¤Î¾ì¹ç¤Ï¼«Æ°³ÎÄê
-            ((eq? res 'tutcode-postfix-mazegaki-start)
-              (set! res #f)
-              (if (not (null? head))
-                (tutcode-begin-conversion-with-inflection pc #f)
-                (begin
-                  (tutcode-flush pc)
- (tutcode-begin-postfix-mazegaki-conversion pc #f #f #f))))
-            ;; ³èÍѤ¹¤ë¸ì¤È¤·¤ÆÊÑ´¹³«»Ï(postfixÍÑ¥­¡¼¥·¡¼¥±¥ó¥¹¤òήÍÑ)
-            ((eq? res 'tutcode-postfix-mazegaki-inflection-start)
-              (set! res #f)
-              (if (not (null? head))
-                (tutcode-begin-mazegaki-inflection-conversion pc)
-                (begin
-                  (tutcode-flush pc)
- (tutcode-begin-postfix-mazegaki-inflection-conversion pc #f))))
-            ((eq? res 'tutcode-postfix-katakana-start)
-              (set! res #f)
-              (if (not (null? head))
-                (katakana-commit)
-                (begin
-                  (tutcode-flush pc)
-                  (tutcode-begin-postfix-katakana-conversion pc #f))))
-            ;; ´Á»ú¢ªÆþÎÏ¥·¡¼¥±¥ó¥¹ÊÑ´¹¡£¼ç¤Ëclipboard¤«¤é¤Îpaste»þÍÑ
-            ((eq? res 'tutcode-postfix-kanji2seq-start)
-              (set! res #f)
-              (if (not (null? head))
-                (let ((str
-                        (string-list-concat
-                          (tutcode-kanji-list->sequence pc head))))
-                  (tutcode-commit pc str)
-                  (tutcode-flush pc)
-                  (tutcode-undo-prepare pc 'tutcode-state-yomi str head))
-                (begin
-                  (tutcode-flush pc)
-                  (tutcode-begin-postfix-kanji2seq-conversion pc #f))))
-            ((symbol? res)
-              (set! res #f)))))
-        (if res
-          (begin
+ (tutcode-check-auto-help-window-begin pc (list res) ())))))))
+        (cond
+          ((string? res)
             (tutcode-append-string pc res)
             (if (and tutcode-use-prediction?
                      (> tutcode-prediction-start-char-count 0)
;; ¸åÃÖ·¿Éô¼ó¹çÀ®ÊÑ´¹¤Ë¤è¤ëauto-helpɽ¼¨ºÑ»þ¤Ï²¿¤â¤·¤Ê¤¤
                      (eq? (tutcode-context-candidate-window pc)
                           'tutcode-candidate-window-off))
-              (tutcode-check-prediction pc #f))))))))
+              (tutcode-check-prediction pc #f)))
+          ((symbol? res)
+            (case res
+              ((tutcode-auto-help-redisplay)
+                (tutcode-auto-help-redisplay pc))
+              ;; ³èÍѤ·¤Ê¤¤¸ì¤È¤·¤ÆÊÑ´¹³«»Ï¡£¸õÊ䤬1¤Ä¤Î¾ì¹ç¤Ï¼«Æ°³ÎÄê
+              ((tutcode-postfix-mazegaki-start)
+                (if (not (null? head))
+                  (tutcode-begin-conversion-with-inflection pc #f)
+                  (begin
+                    (tutcode-flush pc)
+ (tutcode-begin-postfix-mazegaki-conversion pc #f #f #f))))
+              ;; ³èÍѤ¹¤ë¸ì¤È¤·¤ÆÊÑ´¹³«»Ï(postfixÍÑ¥­¡¼¥·¡¼¥±¥ó¥¹¤òήÍÑ)
+              ((tutcode-postfix-mazegaki-inflection-start)
+                (if (not (null? head))
+                  (tutcode-begin-mazegaki-inflection-conversion pc)
+                  (begin
+                    (tutcode-flush pc)
+ (tutcode-begin-postfix-mazegaki-inflection-conversion pc #f))))
+              ((tutcode-postfix-katakana-start)
+                (if (not (null? head))
+                  (katakana-commit)
+                  (begin
+                    (tutcode-flush pc)
+                    (tutcode-begin-postfix-katakana-conversion pc #f))))
+              ;; ´Á»ú¢ªÆþÎÏ¥·¡¼¥±¥ó¥¹ÊÑ´¹¡£¼ç¤Ëclipboard¤«¤é¤Îpaste»þÍÑ
+              ((tutcode-postfix-kanji2seq-start)
+                (if (not (null? head))
+                  (let ((str
+                          (string-list-concat
+                            (tutcode-kanji-list->sequence pc head))))
+                    (tutcode-commit pc str)
+                    (tutcode-flush pc)
+                    (tutcode-undo-prepare pc 'tutcode-state-yomi str head))
+                  (begin
+                    (tutcode-flush pc)
+                    (tutcode-begin-postfix-kanji2seq-conversion pc #f))))))
+          ((procedure? res)
+            (res 'tutcode-state-yomi pc)))))))

 ;;; ´Á»ú¥³¡¼¥ÉÆþÎϾõÂ֤ΤȤ­¤Î¥­¡¼ÆþÎϤò½èÍý¤¹¤ë¡£
 ;;; @param key ÆþÎϤµ¤ì¤¿¥­¡¼
@@ -4486,26 +4493,26 @@
          (set! res (charcode->string key))))
       (else
        (set! res (tutcode-push-key! pc (charcode->string key)))
-       (cond
-        ((eq? res 'tutcode-bushu-start) ; ºÆµ¢Åª¤ÊÉô¼ó¹çÀ®ÊÑ´¹
-          (tutcode-append-string pc "¢¥")
-          (set! res #f))
-        ((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
-      (begin
+    (cond
+      ((string? res)
         ;; ºÆµ¢Åª¤ËÉô¼ó¹çÀ®¤µ¤ì¤ë¾ì¹ç¤¬¤¢¤ë¤Î¤Ç¡¢headÁ´ÂΤòundoÍѤËÊÝ»ý
(tutcode-undo-prepare pc 'tutcode-state-bushu " " ; " ":³ÎÄê¸å¤Ï1ʸ»ú
           (tutcode-context-head pc))
-        (tutcode-begin-bushu-conversion pc res)))))
+        (tutcode-begin-bushu-conversion pc res))
+      ((symbol? res)
+       (case res
+        ((tutcode-bushu-start) ; ºÆµ¢Åª¤ÊÉô¼ó¹çÀ®ÊÑ´¹
+          (tutcode-append-string pc "¢¥"))
+        ((tutcode-auto-help-redisplay)
+          (tutcode-auto-help-redisplay pc))
+        ((tutcode-undo) ; ºÆµ¢Åª¤ÊÉô¼ó¹çÀ®ÊÑ´¹¤òundo¤¹¤ë
+          (let ((undo (tutcode-context-undo pc)))
+            (if (pair? undo)
+              (tutcode-context-set-head! pc (list-ref undo 2)))))
+        ;;XXX Éô¼ó¹çÀ®ÊÑ´¹Ãæ¤Ï¸ò¤¼½ñ¤­ÊÑ´¹Åù¤Ï̵¸ú¤Ë¤¹¤ë
+        ))
+      ((procedure? res)
+       (res 'tutcode-state-bushu pc)))))))

 ;;; Éô¼ó¹çÀ®ÊÑ´¹³«»Ï
 ;;; @param char ¿·¤¿¤ËÆþÎϤµ¤ì¤¿Ê¸»ú(2ÈÖÌܤÎÉô¼ó)
@@ -4667,16 +4674,18 @@
              (set! res (charcode->string key))))
           (else
            (set! res (tutcode-push-key! pc (charcode->string key)))
-           (cond
-            ((eq? res 'tutcode-auto-help-redisplay)
-              (tutcode-auto-help-redisplay pc)
-              (set! res #f))
-            ((symbol? res) ;XXX Éô¼ó¹çÀ®ÊÑ´¹Ãæ¤Ï¸ò¤¼½ñ¤­ÊÑ´¹Åù¤Ï̵¸ú¤Ë¤¹¤ë
-              (set! res #f)))))
-        (if res
-          (begin
+        (cond
+          ((string? res)
             (tutcode-append-string pc res)
-            (tutcode-begin-interactive-bushu-conversion pc)))))))
+            (tutcode-begin-interactive-bushu-conversion pc))
+          ((symbol? res)
+           (case res
+            ((tutcode-auto-help-redisplay)
+              (tutcode-auto-help-redisplay pc))
+            ;;XXX Éô¼ó¹çÀ®ÊÑ´¹Ãæ¤Ï¸ò¤¼½ñ¤­ÊÑ´¹Åù¤Ï̵¸ú¤Ë¤¹¤ë
+            ))
+          ((procedure? res)
+           (res 'tutcode-state-interactive-bushu pc)))))))))

 ;;; ÂÐÏÃŪÉô¼ó¹çÀ®ÊÑ´¹³«»Ï
 (define (tutcode-begin-interactive-bushu-conversion pc)
@@ -6358,3 +6367,39 @@
     ;; ¿·µ¬Äɲå·¡¼¥±¥ó¥¹
     (if (not (null? newseqs))
       (set! tutcode-rule (append tutcode-rule newseqs)))))
+
+;;; selection¤ËÂФ·¤Æ»ØÄꤵ¤ì¤¿½èÍý¤òŬÍѤ·¤¿·ë²Ì¤ËÃÖ´¹¤¹¤ë¡£
+;;; ~/.uim¤Ç¤Î»ÈÍÑÎã:
+;;; (require "external-filter.scm")
+;;; (define (tutcode-filter-fmt-quote state pc)
+;;;   (tutcode-selection-filter pc
+;;;     (lambda (str)
+;;; ;; ʸ½ñÀ°·Á¸å¡¢°úÍÑ¥Þ¡¼¥¯¤ò¹ÔƬ¤ËÉÕ¤±¤ë (nkf -e: uim-tutcode¤ÏEUC-JP) +;;; (external-filter-launch-command "nkf -e -f | sed -e 's/^/> /'" str))))
+;;; (require "fmt-ja.scm")
+;;; (define (tutcode-filter-fmt-ja state pc)
+;;;   (tutcode-selection-filter pc
+;;;     (lambda (str)
+;;;       (apply string-append (fmt-ja-str str)))))
+;;; (require "japan-util.scm")
+;;; (define (tutcode-filter-ascii-fullkana state pc)
+;;;   (tutcode-selection-filter pc
+;;;     (lambda (str)
+;;;       (string-list-concat
+;;;         (japan-util-ascii-convert
+;;;           (japan-util-halfkana-to-fullkana-convert
+;;;             (string-to-list str)))))))
+;;; (tutcode-rule-set-sequences!
+;;;   `(((("a" "v" "q")) (,tutcode-filter-fmt-quote))
+;;;     ((("a" "v" "f")) (,tutcode-filter-fmt-ja))
+;;;     ((("a" "v" "a")) (,tutcode-filter-ascii-fullkana))))
+;;; @param fn ¥Õ¥£¥ë¥¿½èÍý´Ø¿ô¡£Ê¸»úÎó¤òÆþÎϤ˼è¤ê¡¢·ë²Ì¤òʸ»úÎó¤ÇÊÖ¤¹¡£
+(define (tutcode-selection-filter pc fn)
+  (let ((sel (tutcode-selection-acquire-text pc)))
+    (if (pair? sel)
+      (let* ((str (string-list-concat sel))
+             (res (fn str)))
+        (if (and (string? res)
+ ;; Êѹ¹Ìµ¤·¤Ê¤écommit¤·¤Ê¤¤(¥»¥ì¥¯¥·¥ç¥ó¤¬²ò½ü¤µ¤ì¤Ê¤¤¤è¤¦¤Ë)
+                 (not (string=? res str)))
+          (tutcode-selection-commit pc res sel))))))

Reply via email to