Revision: 7252
Author:   deton.kih
Date:     Tue Aug  2 23:51:30 2011
Log:      * Change to be able to select bushu conversion algorithm.
* scm/tutcode-custom.scm
  - (tutcode-bushu-conversion-algorithm): New custom.
  - (tutcode-bushu-index2-filename,
     tutcode-bushu-expand-filename):
    Change to depend on tutcode-bushu-conversion-algorithm.
* scm/tutcode.scm
  - (tutcode-check-bushu-prediction):
    Change to be wrapper for some bushu conversion algorithms.
  - (tutcode-check-bushu-prediction-tc21):
    Rename from tutcode-check-bushu-prediction.
  - (tutcode-check-bushu-prediction-tc23): New.
  - (tutcode-bushu-convert):
    Change to be wrapper for some bushu conversion algorithms.
  - (tutcode-bushu-convert-tc21): Rename from tutcode-bushu-convert.
  - (tutcode-auto-help-bushu-decompose):
    Change to be wrapper for some bushu conversion algorithms.
  - (tutcode-auto-help-bushu-decompose-tc21):
    Rename from tutcode-auto-help-bushu-decompose.
    Follow the rename.
  - (tutcode-get-candidate-handler):
    Support empty word for tc-2.3.1-22.6 bushu conversion algorithm.
* scm/tutcode-bushu.scm
  - (tutcode-bushu-compose-tc23):
    Rename from tutcode-bushu-compose-interactively.
    Add argument to specify whether to return when one candidate is found
    for performance on non-interactive bushu conversion.
  - (tutcode-bushu-compose-interactively):
    Change to call tutcode-bushu-compose-tc23.
  - (tutcode-bushu-convert-tc23): New.
  - (tutcode-bushu-decompose-to-two-char,
     tutcode-bushu-composed,
     tutcode-auto-help-bushu-decompose-tc23): New.

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

Modified:
 /trunk/scm/tutcode-bushu.scm
 /trunk/scm/tutcode-custom.scm
 /trunk/scm/tutcode.scm

=======================================
--- /trunk/scm/tutcode-bushu.scm        Sun Jul 31 16:32:11 2011
+++ /trunk/scm/tutcode-bushu.scm        Tue Aug  2 23:51:30 2011
@@ -33,7 +33,7 @@
 ;;; tc-2.3.1¤Îtc-bushu.el¤ò°Ü¿¢(sort¤Ç¤ÎÂǤÁ¤ä¤¹¤µ¤Î¹Íθ¤Ï̤Âбþ)¡£
 ;;; (»²¹Í:Éô¼ó¹çÀ®¥¢¥ë¥´¥ê¥º¥à¤Ï[tcode-ml:1942]¤¢¤¿¤ê)

-(require-extension (srfi 1 8 95))
+(require-extension (srfi 1 2 8 95))
 (require "fileio.scm")
 (require-dynlib "look")

@@ -633,29 +633,267 @@
 ;;; ÂÐÏÃŪ¤ÊÉô¼ó¹çÀ®ÊÑ´¹ÍѤˡ¢»ØÄꤵ¤ì¤¿Éô¼ó¤Î¥ê¥¹¥È¤«¤éÉô¼ó¹çÀ®²Äǽ¤Ê
 ;;; ´Á»ú¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
 ;;; @param char-list ÆþÎϤµ¤ì¤¿Éô¼ó¤Î¥ê¥¹¥È
+;;; @param exit-on-found? ´Á»ú¤¬1ʸ»ú¤Ç¤â¹çÀ®¤Ç¤­¤¿¤é¤½¤ì°Ê¾å¤Î¹çÀ®¤ÏÃæ»ß¤¹¤ë
 ;;; @return ¹çÀ®²Äǽ¤Ê´Á»ú¤Î¥ê¥¹¥È
-(define (tutcode-bushu-compose-interactively char-list)
+(define (tutcode-bushu-compose-tc23 char-list exit-on-found?)
   (let*
     ((bushu-list (append-map! tutcode-bushu-for-char char-list))
-     (explicit (tutcode-bushu-compose-explicitly char-list))
-     (complete-compose-set
-      (tutcode-bushu-complete-compose-set char-list bushu-list))
-     (complete-diff-set (tutcode-bushu-complete-diff-set char-list))
-     (strong-compose-set
-      (tutcode-bushu-strong-compose-set char-list bushu-list))
-     (strong-diff-set (tutcode-bushu-strong-diff-set char-list))
- (weak-diff-set (tutcode-bushu-weak-diff-set char-list strong-diff-set))
-     (weak-compose-set (tutcode-bushu-weak-compose-set char-list bushu-list
-                        strong-compose-set)))
-  (delete-duplicates!
-    (filter!
-      (lambda (elem)
-        (not (member elem tutcode-bushu-inhibited-output-chars)))
-      (append!
-        explicit
-        complete-compose-set
-        complete-diff-set
-        strong-compose-set
-        strong-diff-set
-        weak-diff-set
-        weak-compose-set)))))
+     (update-res!
+      (lambda (res lst)
+        (append! res
+          (filter!
+            (lambda (elem)
+              (not (member elem tutcode-bushu-inhibited-output-chars)))
+            lst))))
+     (resall
+      (let
+ ((r0 (update-res! () (tutcode-bushu-compose-explicitly char-list))))
+        (if (and exit-on-found? (pair? r0))
+          r0
+          (let
+            ((r1 (update-res! r0
+ (tutcode-bushu-complete-compose-set char-list bushu-list))))
+            (if (and exit-on-found? (pair? r1))
+              r1
+              (let
+                ((r2 (update-res! r1
+                      (tutcode-bushu-complete-diff-set char-list))))
+                (if (and exit-on-found? (pair? r2))
+                  r2
+                  (let*
+                    ((strong-compose-set
+ (tutcode-bushu-strong-compose-set char-list bushu-list))
+                     (r3 (update-res! r2 strong-compose-set)))
+                    (if (and exit-on-found? (pair? r3))
+                      r3
+                      (let*
+                        ((strong-diff-set
+                          (tutcode-bushu-strong-diff-set char-list))
+                         (r4 (update-res! r3 strong-diff-set)))
+                        (if (and exit-on-found? (pair? r4))
+                          r4
+                          (let
+                            ((r5 (update-res! r4
+                                  (tutcode-bushu-weak-diff-set char-list
+                                    strong-diff-set))))
+                            (if (and exit-on-found? (pair? r5))
+                              r5
+                              (let
+                                ((r6 (update-res! r5
+ (tutcode-bushu-weak-compose-set char-list
+                                        bushu-list strong-compose-set))))
+                                r6)))))))))))))))
+    (delete-duplicates! resall)))
+
+;;; ÂÐÏÃŪ¤ÊÉô¼ó¹çÀ®ÊÑ´¹ÍѤˡ¢»ØÄꤵ¤ì¤¿Éô¼ó¤Î¥ê¥¹¥È¤«¤éÉô¼ó¹çÀ®²Äǽ¤Ê
+;;; ´Á»ú¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
+;;; @param char-list ÆþÎϤµ¤ì¤¿Éô¼ó¤Î¥ê¥¹¥È
+;;; @return ¹çÀ®²Äǽ¤Ê´Á»ú¤Î¥ê¥¹¥È
+(define (tutcode-bushu-compose-interactively char-list)
+  (tutcode-bushu-compose-tc23 char-list #f))
+
+;;; Éô¼ó¹çÀ®ÊÑ´¹¤ò¹Ô¤¦¡£
+;;; tc-2.3.1-22.6¤ÎÉô¼ó¹çÀ®¥¢¥ë¥´¥ê¥º¥à¤ò»ÈÍÑ¡£
+;;; @param c1 1ÈÖÌܤÎÉô¼ó
+;;; @param c2 2ÈÖÌܤÎÉô¼ó
+;;; @return ¹çÀ®¸å¤Îʸ»ú¡£¹çÀ®¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­¤Ï#f
+(define (tutcode-bushu-convert-tc23 c1 c2)
+  (let ((res (tutcode-bushu-compose-tc23 (list c1 c2) #t)))
+    (if (null? res)
+      #f
+      (car res))))
+
+;; tc-2.3.1¤Îtc-help.el¤«¤é¤Î°Ü¿¢
+(define (tutcode-bushu-decompose-to-two-char char)
+  (let ((b1 (tutcode-bushu-for-char char)))
+    (let loop
+      ((b1 (cdr b1))
+       (b2 (list (car b1))))
+      (if (null? b1)
+        #f
+        (let*
+          ((cl1t (tutcode-bushu-char-list-for-bushu b2))
+           (cl1
+            (if (pair? cl1t)
+              cl1t
+              (if (= (length b2) 1)
+                b2
+                ())))
+           (cl2t (tutcode-bushu-char-list-for-bushu b1))
+           (cl2
+            (if (pair? cl2t)
+              cl2t
+              (if (= (length b1) 1)
+                b1
+                ()))))
+          (let c1loop
+            ((cl1 cl1))
+            (if (null? cl1)
+              (loop (cdr b1) (append b2 (list (car b1))))
+              (let c2loop
+                ((cl2 cl2))
+                (if (null? cl2)
+                  (c1loop (cdr cl1))
+                  (if
+                    (equal?
+                      (tutcode-bushu-convert-tc23 (car cl1) (car cl2))
+                      char)
+                    (cons (car cl1) (car cl2))
+                    (c2loop (cdr cl2))))))))))))
+
+;;; CHAR¤¬Ä¾ÀÜÆþÎϲÄǽ¤ÊBUSHU1¤ÈBUSHU2¤Ç¹çÀ®¤Ç¤­¤ë¾ì¹ç¡¢
+;;; BUSHU1¤ÈBUSHU2¤Î¥¹¥È¥í¡¼¥¯¤ò´Þ¤à¥ê¥¹¥È¤òÊÖ¤¹¡£
+;;; Îã: "·Ò" => (((("," "o"))("·â")) ((("f" "q"))("»å")))
+;;; @param char ¹çÀ®¸å¤Îʸ»ú
+;;; @param bushu1 Éô¼ó1
+;;; @param bushu2 Éô¼ó2
+;;; @param rule tutcode-rule
+;;; @return ÂоÝʸ»ú¤ÎÉô¼ó¹çÀ®¤ËɬÍפÊ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
+;;;  ¹çÀ®¤Ç¤­¤Ê¤¤¾ì¹ç¤Ï#f
+(define (tutcode-bushu-composed char bushu1 bushu2 rule)
+  (and-let*
+    ((seq1 (tutcode-auto-help-get-stroke bushu1 rule))
+     (seq2 (tutcode-auto-help-get-stroke bushu2 rule))
+     (composed (tutcode-bushu-convert-tc23 bushu1 bushu2)))
+    (and
+      (string=? composed char)
+      (list seq1 seq2))))
+
+;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤òÉô¼ó¹çÀ®¤¹¤ë¤Î¤ËɬÍפȤʤ롢
+;;; ³°»ú¤Ç¤Ê¤¤2¤Ä¤Îʸ»ú¤Î¥ê¥¹¥È¤òÊÖ¤¹
+;;; Îã: "·Ò" => (((("," "o"))("·â")) ((("f" "q"))("»å")))
+;;; @param kanji ÂоÝʸ»ú
+;;; @param rule tutcode-rule
+;;; @param stime ³«»ÏÆü»þ
+;;; @return ÂоÝʸ»ú¤ÎÉô¼ó¹çÀ®¤ËɬÍפÊ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
+;;;  ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
+(define (tutcode-auto-help-bushu-decompose-tc23 kanji rule stime)
+ (if (> (string->number (difftime (time) stime)) tutcode-auto-help-time-limit)
+    #f
+    (let ((decomposed (tutcode-bushu-decompose-to-two-char kanji)))
+      (if decomposed
+        (let*
+          ((char1 (car decomposed))
+           (char2 (cdr decomposed))
+           (seq1 (tutcode-auto-help-get-stroke char1 rule))
+           (seq2 (tutcode-auto-help-get-stroke char2 rule)))
+          (cond
+            (seq1
+              (if seq2
+                (list seq1 seq2)
+                (let*
+                  ((bushu-list (tutcode-bushu-for-char char2))
+                   (find-loop
+                    (lambda (set)
+                      (let loop
+                        ((lis
+                          (sort! set
+                            (lambda (a b)
+                              (tutcode-bushu-less? a b bushu-list)))))
+                        (if (null? lis)
+                          #f
+                          (let
+                            ((res (tutcode-bushu-composed
+                                    kanji char1 (car lis) rule)))
+                            (or res
+                              (loop (cdr lis)))))))))
+                  (or
+                    ;; ¶¯¹çÀ®½¸¹ç¤òõ¤¹
+                    (find-loop (tutcode-bushu-subset bushu-list))
+                    ;; ¼å¹çÀ®½¸¹ç¤òõ¤¹
+                    (find-loop (tutcode-bushu-superset bushu-list))
+                    ;; ºÆµ¢Åª¤Ëõ¤¹
+                    (let
+                      ((dec2
+                        (tutcode-auto-help-bushu-decompose-tc23 char2
+                          rule stime)))
+                      (and dec2
+                        (list seq1 dec2)))))))
+            (seq2
+              (let*
+                ((bushu-list (tutcode-bushu-for-char char1))
+                 (find-loop
+                  (lambda (set)
+                    (let loop
+                      ((lis
+                        (sort! set
+                          (lambda (a b)
+                            (tutcode-bushu-less? a b bushu-list)))))
+                      (if (null? lis)
+                        #f
+                        (let
+                          ((res (tutcode-bushu-composed
+                                  kanji (car lis) char2 rule)))
+                          (or res
+                            (loop (cdr lis)))))))))
+                (or
+                  ;; ¶¯¹çÀ®½¸¹ç¤òõ¤¹
+                  (find-loop (tutcode-bushu-subset bushu-list))
+                  ;; ¼å¹çÀ®½¸¹ç¤òõ¤¹
+                  (find-loop (tutcode-bushu-superset bushu-list))
+                  ;; ºÆµ¢Åª¤Ëõ¤¹
+                  (let
+                    ((dec1
+                      (tutcode-auto-help-bushu-decompose-tc23 char1
+                        rule stime)))
+                    (and dec1
+                      (list dec1 seq2))))))
+            (else
+              (let*
+                ((bushu1 (tutcode-bushu-for-char char1))
+                 (bushu2 (tutcode-bushu-for-char char2))
+                 (bushu-list (append bushu1 bushu2))
+                 (mkcl
+                  (lambda (bushu)
+                    (sort!
+                      (delete-duplicates!
+                        (append!
+                          (tutcode-bushu-subset bushu)
+                          (tutcode-bushu-superset bushu)))
+                      (lambda (a b)
+                        (tutcode-bushu-less? a b bushu-list)))))
+                 (cl1 (mkcl bushu1))
+                 (cl2 (mkcl bushu2)))
+                (let loop1
+                  ((cl1 cl1))
+                  (if (null? cl1)
+                    #f
+                    (let loop2
+                      ((cl2 cl2))
+                      (if (null? cl2)
+                        (loop1 (cdr cl1))
+                        (let
+                          ((res (tutcode-bushu-composed
+                                  kanji (car cl1) (car cl2) rule)))
+                          (or res
+                            (loop2 (cdr cl2))))))))))))
+        ;; Æó¤Ä¤Ëʬ³ä¤Ç¤­¤Ê¤¤¾ì¹ç
+        ;; ¶¯º¹¹çÀ®½¸¹ç¤òõ¤¹
+        (let*
+          ((bushu-list (tutcode-bushu-for-char kanji))
+           (superset
+            (sort!
+              (tutcode-bushu-superset bushu-list)
+              (lambda (a b)
+                (tutcode-bushu-less? a b bushu-list)))))
+          (let loop1
+            ((lis superset))
+            (if (null? lis)
+              #f
+              (let*
+                ((seq1 (tutcode-auto-help-get-stroke (car lis) rule))
+                 (diff (if seq1
+                        (tutcode-bushu-subtract-set
+                          (tutcode-bushu-for-char (car lis) bushu-list))
+                        ())))
+                (if seq1
+                  (let loop2
+                    ((lis2 (tutcode-bushu-subset diff)))
+                    (if (null? lis2)
+                      (loop1 (cdr lis))
+                      (let
+                        ((res (tutcode-bushu-composed
+                                kanji (car lis) (car lis2) rule)))
+                        (or res
+                          (loop2 (cdr lis2))))))
+                  (loop1 (cdr lis)))))))))))
=======================================
--- /trunk/scm/tutcode-custom.scm       Tue Jul 19 03:54:31 2011
+++ /trunk/scm/tutcode-custom.scm       Tue Aug  2 23:51:30 2011
@@ -140,6 +140,15 @@
   (N_ "Maximum length of yomi suffix for mazegaki conversion")
   (N_ "long description will be here."))

+(define-custom 'tutcode-bushu-conversion-algorithm 'tc-2.1+ml1925
+  '(tutcode tutcode-bushu)
+  (list 'choice
+    (list 'tc-2.1+ml1925
+          (N_ "tc-2.1+[tcode-ml:1925]") (N_ "tc-2.1+[tcode-ml:1925]"))
+    (list 'tc-2.3.1-22.6 (N_ "tc-2.3.1-22.6") (N_ "tc-2.3.1-22.6")))
+  (N_ "Bushu conversion algorithm")
+  (N_ "long description will be here."))
+
 (define-custom 'tutcode-use-interactive-bushu-conversion? #f
   '(tutcode tutcode-bushu)
   '(boolean)
@@ -365,9 +374,13 @@
 (custom-add-hook 'tutcode-bushu-index2-filename
                 'custom-activity-hooks
                 (lambda ()
-                  tutcode-use-interactive-bushu-conversion?))
+                   (or
+                     tutcode-use-interactive-bushu-conversion?
+ (eq? tutcode-bushu-conversion-algorithm 'tc-2.3.1-22.6))))

 (custom-add-hook 'tutcode-bushu-expand-filename
                 'custom-activity-hooks
                 (lambda ()
-                  tutcode-use-interactive-bushu-conversion?))
+                   (or
+                     tutcode-use-interactive-bushu-conversion?
+ (eq? tutcode-bushu-conversion-algorithm 'tc-2.3.1-22.6))))
=======================================
--- /trunk/scm/tutcode.scm      Fri Jul 22 17:10:06 2011
+++ /trunk/scm/tutcode.scm      Tue Aug  2 23:51:30 2011
@@ -2406,6 +2406,15 @@
 ;;; Éô¼ó¹çÀ®ÊÑ´¹Ãæ¤Ëͽ¬ÆþÎϸõÊä¤ò¸¡º÷¤·¤Æ¸õÊ䥦¥£¥ó¥É¥¦¤Ëɽ¼¨¤¹¤ë
 ;;; @param char ÆþÎϤµ¤ì¤¿Éô¼ó1
 (define (tutcode-check-bushu-prediction pc char)
+  (case tutcode-bushu-conversion-algorithm
+    ((tc-2.3.1-22.6)
+      (tutcode-check-bushu-prediction-tc23 pc char))
+    (else ; 'tc-2.1+ml1925
+      (tutcode-check-bushu-prediction-tc21 pc char))))
+
+;;; Éô¼ó¹çÀ®ÊÑ´¹Ãæ¤Ëͽ¬ÆþÎϸõÊä¤ò¸¡º÷¤·¤Æ¸õÊ䥦¥£¥ó¥É¥¦¤Ëɽ¼¨¤¹¤ë
+;;; @param char ÆþÎϤµ¤ì¤¿Éô¼ó1
+(define (tutcode-check-bushu-prediction-tc21 pc char)
   (if (eq? (tutcode-context-predicting pc) 'tutcode-predicting-off)
     (let* ((res (tutcode-bushu-predict char tutcode-bushudic))
            (alt (assoc char tutcode-bushudic-altchar))
@@ -2417,6 +2426,20 @@
       (tutcode-context-set-prediction-bushu! pc resall)
       (tutcode-bushu-prediction-show-page pc 0))))

+;;; Éô¼ó¹çÀ®ÊÑ´¹Ãæ¤Ëͽ¬ÆþÎϸõÊä¤ò¸¡º÷¤·¤Æ¸õÊ䥦¥£¥ó¥É¥¦¤Ëɽ¼¨¤¹¤ë
+;;; @param char ÆþÎϤµ¤ì¤¿Éô¼ó1
+(define (tutcode-check-bushu-prediction-tc23 pc char)
+  (if (eq? (tutcode-context-predicting pc) 'tutcode-predicting-off)
+    (let*
+      ((gosei (tutcode-bushu-compose-tc23 (list char) #f))
+       (res
+        (map
+          (lambda (elem)
+            (list #f elem))
+          gosei)))
+      (tutcode-context-set-prediction-bushu! pc res)
+      (tutcode-bushu-prediction-show-page pc 0))))
+
;;; Éô¼ó¹çÀ®ÊÑ´¹¤Îͽ¬ÆþÎϸõÊä¤Î¤¦¤Á¡¢»ØÄꤵ¤ì¤¿Èֹ椫¤é»Ï¤Þ¤ë¸õÊä¤òɽ¼¨¤¹¤ë¡£
 ;;; @param start-index ³«»ÏÈÖ¹æ
 (define (tutcode-bushu-prediction-show-page pc start-index)
@@ -3801,9 +3824,20 @@
 ;;; @param c2 2ÈÖÌܤÎÉô¼ó
 ;;; @return ¹çÀ®¸å¤Îʸ»ú¡£¹çÀ®¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­¤Ï#f
 (define (tutcode-bushu-convert c1 c2)
+  (case tutcode-bushu-conversion-algorithm
+    ((tc-2.3.1-22.6)
+      (tutcode-bushu-convert-tc23 c1 c2))
+    (else ; 'tc-2.1+ml1925
+      (tutcode-bushu-convert-tc21 c1 c2))))
+
+;;; Éô¼ó¹çÀ®ÊÑ´¹¤ò¹Ô¤¦¡£
+;;; tc-2.1+[tcode-ml:1925]¤ÎÉô¼ó¹çÀ®¥¢¥ë¥´¥ê¥º¥à¤ò»ÈÍÑ¡£
+;;; @param c1 1ÈÖÌܤÎÉô¼ó
+;;; @param c2 2ÈÖÌܤÎÉô¼ó
+;;; @return ¹çÀ®¸å¤Îʸ»ú¡£¹çÀ®¤Ç¤­¤Ê¤«¤Ã¤¿¤È¤­¤Ï#f
+(define (tutcode-bushu-convert-tc21 c1 c2)
   (if (null? tutcode-bushu-help)
     (set! tutcode-bushu-help (tutcode-bushu-help-load)))
-  ;; tc-2.1+[tcode-ml:1925]¤ÎÉô¼ó¹çÀ®¥¢¥ë¥´¥ê¥º¥à¤ò»ÈÍÑ
   (and c1 c2
     (or
(and tutcode-bushu-help (tutcode-bushu-compose c1 c2 tutcode-bushu-help))
@@ -3937,6 +3971,21 @@
 ;;; @return ÂоÝʸ»ú¤ÎÉô¼ó¹çÀ®¤ËɬÍפÊ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
 ;;;  ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
 (define (tutcode-auto-help-bushu-decompose c rule stime)
+  (case tutcode-bushu-conversion-algorithm
+    ((tc-2.3.1-22.6)
+      (tutcode-auto-help-bushu-decompose-tc23 c rule stime))
+    (else ; 'tc-2.1+ml1925
+      (tutcode-auto-help-bushu-decompose-tc21 c rule stime))))
+
+;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤òÉô¼ó¹çÀ®¤¹¤ë¤Î¤ËɬÍפȤʤ롢
+;;; ³°»ú¤Ç¤Ê¤¤2¤Ä¤Îʸ»ú¤Î¥ê¥¹¥È¤òÊÖ¤¹
+;;; Îã: "·Ò" => (((("," "o"))("·â")) ((("f" "q"))("»å")))
+;;; @param c ÂоÝʸ»ú
+;;; @param rule tutcode-rule
+;;; @param stime ³«»ÏÆü»þ
+;;; @return ÂоÝʸ»ú¤ÎÉô¼ó¹çÀ®¤ËɬÍפÊ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
+;;;  ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
+(define (tutcode-auto-help-bushu-decompose-tc21 c rule stime)
(if (> (string->number (difftime (time) stime)) tutcode-auto-help-time-limit)
     #f
     (let*
@@ -3964,7 +4013,9 @@
                   (tutcode-auto-help-get-stroke-list-with-right-part
                     c b1 b2 seq1 rule elem)))
               ;; Éô¼ó2¤Ç¤Ï¹çÀ®ÉÔǽ¢ªÉô¼ó2¤ò¤µ¤é¤Ëʬ²ò
- (let ((b2dec (tutcode-auto-help-bushu-decompose b2 rule stime)))
+              (let
+                ((b2dec
+                  (tutcode-auto-help-bushu-decompose-tc21 b2 rule stime)))
                 (and b2dec
                   (list seq1 b2dec)))))
           ;; Éô¼ó2¤¬Ä¾ÀÜÆþÎϲÄǽ
@@ -3977,14 +4028,16 @@
                   (tutcode-auto-help-get-stroke-list-with-left-part
                     c b1 b2 seq2 rule elem)))
               ;; Éô¼ó1¤Ç¤Ï¹çÀ®ÉÔǽ¢ªÉô¼ó1¤ò¤µ¤é¤Ëʬ²ò
- (let ((b1dec (tutcode-auto-help-bushu-decompose b1 rule stime)))
+              (let
+                ((b1dec
+                  (tutcode-auto-help-bushu-decompose-tc21 b1 rule stime)))
                 (and b1dec
                   (list b1dec seq2)))))
           ;; Éô¼ó1¤âÉô¼ó2¤âľÀÜÆþÎÏÉԲĢª¤µ¤é¤Ëʬ²ò
           (and b1 b2
             (let
-              ((b1dec (tutcode-auto-help-bushu-decompose b1 rule stime))
-               (b2dec (tutcode-auto-help-bushu-decompose b2 rule stime)))
+ ((b1dec (tutcode-auto-help-bushu-decompose-tc21 b1 rule stime)) + (b2dec (tutcode-auto-help-bushu-decompose-tc21 b2 rule stime)))
               (and b1dec b2dec
                 (list b1dec b2dec))))
           ;; XXX: ÉôÉʤɤ¦¤·¤Î¹çÀ®¤Ï̤Âбþ
@@ -4374,11 +4427,12 @@
                (p-idx (+ idx-in-page (* pages nr-in-page)))
                (i (remainder p-idx nr-predictions))
                (cand (tutcode-lib-get-nth-prediction tc i))
+               (word (and (eq? (tutcode-context-predicting tc)
+                               'tutcode-predicting-bushu)
+                          (tutcode-lib-get-nth-word tc i)))
                (cand-guide
-                (if (eq? (tutcode-context-predicting tc)
-                          'tutcode-predicting-bushu)
-                  (string-append
-                    cand "(" (tutcode-lib-get-nth-word tc i) ")")
+                (if word
+                  (string-append cand "(" word ")")
                   cand))
                (n (remainder p-idx
(length tutcode-heading-label-char-list-for-prediction)))

Reply via email to