Revision: 6515
Author: deton.kih
Date: Fri Jul 16 21:50:58 2010
Log: * Change to show bushu conversion candidate which has shorter stroke
length
on auto help window
* Change for performance on auto help
* scm/tutcode.scm
- (tutcode-reverse-rule-alist, tutcode-reverse-bushudic-alist): New
- (tutcode-bushu-decompose):
Change to make and use tutcode-reverse-bushudic-alist for performance
- (tutcode-auto-help-bushu-decompose):
Follow the change of tutcode-reverse-find-seq.
Follow the change of tutcode-auto-help-bushu-decompose-by-subtraction.
Follow the change of tutcode-auto-help-bushu-decompose-with-part.
- (tutcode-auto-help-bushu-decompose-looking-bushudic): New
- (tutcode-auto-help-bushu-decompose-by-subtraction):
Change to call tutcode-auto-help-bushu-decompose-looking-bushudic
- (tutcode-auto-help-count-stroke-length): New
- (tutcode-auto-help-get-stroke-list-by-subtraction):
Change to check stroke length before bushu conversion for performance
- (tutcode-auto-help-bushu-decompose-with-part): Remove
- (tutcode-auto-help-get-stroke-list-with-right-part,
tutcode-auto-help-get-stroke-list-with-left-part):
Split from tutcode-auto-help-get-stroke-list-with-part
- (tutcode-auto-help-get-stroke-list-with-part):
Split to tutcode-auto-help-get-stroke-list-with-right-part and
tutcode-auto-help-get-stroke-list-with-left-part
- (tutcode-reverse-find-seq):
Change to make and use tutcode-reverse-rule-alist for performance
- (tutcode-auto-help-update-stroke-alist-with-kanji):
Follow the change of tutcode-reverse-find-seq
- (tutcode-auto-help-get-stroke): Ditto
http://code.google.com/p/uim/source/detail?r=6515
Modified:
/trunk/scm/tutcode.scm
=======================================
--- /trunk/scm/tutcode.scm Mon Jul 12 05:44:22 2010
+++ /trunk/scm/tutcode.scm Fri Jul 16 21:50:58 2010
@@ -119,6 +119,13 @@
;;; »ÈÍѤ¹¤ë¥³¡¼¥Éɽ¡£
;;; tutcode-context-new»þ¤Ë(tutcode-custom-load-rule!)¤ÇÀßÄê
(define tutcode-rule ())
+;;; tutcode-rule¤«¤éºîÀ®¤¹¤ë¡¢µÕ°ú¤¸¡º÷(´Á»ú¤«¤éÂǸ°¥ê¥¹¥È¤ò¼èÆÀ)ÍÑalist¡£
+;;; (¼«Æ°¥Ø¥ë¥×ÍѤÎÉô¼ó¹çÀ®ÊÑ´¹¸õÊ両º÷»þ¤Î¹â®²½¤Î¤¿¤á)
+(define tutcode-reverse-rule-alist ())
+;;; tutcode-bushudic¤«¤éºîÀ®¤¹¤ë¡¢
+;;; µÕ°ú¤¸¡º÷(¹çÀ®¸å¤Îʸ»ú¤«¤é¹çÀ®ÍѤÎ2ʸ»ú¤ò¼èÆÀ)ÍÑalist¡£
+;;; (¼«Æ°¥Ø¥ë¥×ÍѤÎÉô¼ó¹çÀ®ÊÑ´¹¸õÊ両º÷»þ¤Î¹â®²½¤Î¤¿¤á)
+(define tutcode-reverse-bushudic-alist ())
;;; ¥³¡¼¥Éɽ¤ò¾å½ñ¤Êѹ¹/Äɲ乤뤿¤á¤Î¥³¡¼¥Éɽ¡£
;;; ~/.uim¤Çtutcode-rule-set-sequences!¤ÇÅÐÏ¿¤·¤Æ¡¢
@@ -675,7 +682,7 @@
;;; @return ¹¹¿·¸å¤Î¼«Æ°¥Ø¥ë¥×ÍÑalist
(define (tutcode-auto-help-update-stroke-alist-with-kanji label-cands-alist
cand-list kanji)
- (let ((stroke (tutcode-reverse-find-seq tutcode-rule kanji)))
+ (let ((stroke (tutcode-reverse-find-seq kanji)))
(if stroke
(tutcode-auto-help-update-stroke-alist-with-stroke
label-cands-alist (car cand-list) stroke)
@@ -1213,7 +1220,15 @@
;;; @param c ʬ²òÂоݤÎʸ»ú
;;; @return ʬ²ò¤·¤Æ¤Ç¤¤¿2¤Ä¤ÎÉô¼ó¤Î¥ê¥¹¥È¡£Ê¬²ò¤Ç¤¤Ê¤«¤Ã¤¿¤È¤¤Ï#f
(define (tutcode-bushu-decompose c)
- (tutcode-reverse-find-seq tutcode-bushudic c))
+ (if (null? tutcode-reverse-bushudic-alist)
+ (set! tutcode-reverse-bushudic-alist
+ (map
+ (lambda (elem)
+ (cons (caadr elem) (caar elem)))
+ tutcode-bushudic)))
+ (let ((res (assoc c tutcode-reverse-bushudic-alist)))
+ (and res
+ (cdr res))))
;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤òÉô¼ó¹çÀ®¤¹¤ë¤Î¤ËɬÍפȤʤ롢
;;; ³°»ú¤Ç¤Ê¤¤2¤Ä¤Îʸ»ú¤Î¥ê¥¹¥È¤òÊÖ¤¹
@@ -1223,28 +1238,35 @@
;;; ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
(define (tutcode-auto-help-bushu-decompose c)
(let*
- ((bushu (tutcode-reverse-find-seq tutcode-bushudic c))
+ ((bushu (tutcode-bushu-decompose c))
(b1 (and bushu (car bushu)))
(b2 (and bushu (cadr bushu)))
(seq1 (and b1 (tutcode-auto-help-get-stroke b1)))
(seq2 (and b2 (tutcode-auto-help-get-stroke b2))))
(or
+ ;; ¤·»»¤Ë¤è¤ë¹çÀ®
(and seq1 seq2
(list seq1 seq2))
;; ñ½ã¤Ê°ú¤»»¤Ë¤è¤ë¹çÀ®
- (tutcode-auto-help-bushu-decompose-by-subtraction c tutcode-bushudic)
+ (tutcode-auto-help-bushu-decompose-by-subtraction c)
;; ÉôÉʤˤè¤ë¹çÀ®
(or
;; Éô¼ó1¤¬Ä¾ÀÜÆþÎϲÄǽ
;; ¢ª(Éô¼ó1)¤È(Éô¼ó2¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú)¤Ë¤è¤ë¹çÀ®¤¬²Äǽ¤«?
(and seq1 b2
- (tutcode-auto-help-bushu-decompose-with-part
- c seq1 b1 b2 tutcode-bushudic))
+ (tutcode-auto-help-bushu-decompose-looking-bushudic
tutcode-bushudic
+ () 99
+ (lambda (elem)
+ (tutcode-auto-help-get-stroke-list-with-right-part
+ c b1 b2 seq1 elem))))
;; Éô¼ó2¤¬Ä¾ÀÜÆþÎϲÄǽ
;; ¢ª(Éô¼ó2)¤È(Éô¼ó1¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú)¤Ë¤è¤ë¹çÀ®¤¬²Äǽ¤«?
(and seq2 b1
- (tutcode-auto-help-bushu-decompose-with-part
- c seq2 b1 b2 tutcode-bushudic))
+ (tutcode-auto-help-bushu-decompose-looking-bushudic
tutcode-bushudic
+ () 99
+ (lambda (elem)
+ (tutcode-auto-help-get-stroke-list-with-left-part
+ c b1 b2 seq2 elem))))
;; XXX: ÉôÉʤɤ¦¤·¤Î¹çÀ®¤ä¡¢3ʸ»ú°Ê¾å¤Ç¤Î¹çÀ®¤Ï̤Âбþ
))))
@@ -1255,7 +1277,7 @@
(define (tutcode-auto-help-get-stroke b)
(let
((seq
- (or (tutcode-reverse-find-seq tutcode-rule b)
+ (or (tutcode-reverse-find-seq b)
;;
Éô¼ó¹çÀ®¤Ç»È¤ï¤ì¤ë"3"¤Î¤è¤¦¤ÊľÀÜÆþÎϲÄǽ¤ÊÉô¼ó¤ËÂбþ¤¹¤ë¤¿¤á¡¢
;; ¥é¥Ù¥ëʸ»ú¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ì¤Ð¡¢Ä¾ÀÜÆþÎϲÄǽ¤È¤ß¤Ê¤¹
(and
@@ -1264,6 +1286,33 @@
(and seq
(list (list seq) (list b)))))
+;;; ¼«Æ°¥Ø¥ë¥×:Éô¼ó¹çÀ®¼½ñ¤ÎÍ×ÁǤò½ç¤Ë¸«¤Æ
+;;; ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿2ÂǸ°¤ÎÉô¼ó¤ÎÁȤ߹ç¤ï¤»¤òÊÖ¤¹¡£
+;;; (filter¤ämap¤ò»È¤Ã¤Æ¡¢ºÇ¾®¤Î¥¹¥È¥í¡¼¥¯¤Î¤â¤Î¤òõ¤¹¤È»þ´Ö¤¬¤«¤«¤ë¤Î¤Ç¡£)
+;;; ξÊý¤È¤â2ÂǸ°¤ÎÉô¼ó¤ÎÁȤ߹ç¤ï¤»¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤é¡¢
+;;; 3ÂǸ°¤ÎÉô¼ó¤È¤ÎÁȤ߹ç¤ï¤»¤¬¤¢¤ì¤ÐÊÖ¤¹¡£
+;;; @param long-stroke-result 3ÂǸ°°Ê¾å¤Îʸ»ú¤ò´Þ¤à·ë²Ì
+;;; @param min-stroke long-stroke-resultÆâ¤Î¸½ºß¤ÎºÇ¾¯ÂǸ°¿ô
+;;; @param get-stroke-list
Éô¼ó¹çÀ®ÍѤÎ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¤òÊÖ¤¹´Ø¿ô
+;;; @return Éô¼ó¹çÀ®ÍѤÎ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
+;;; ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
+(define (tutcode-auto-help-bushu-decompose-looking-bushudic bushudic
+ long-stroke-result min-stroke get-stroke-list)
+ (if (null? bushudic)
+ (and
+ (not (null? long-stroke-result))
+ long-stroke-result)
+ (let*
+ ((res
+ (get-stroke-list (list min-stroke (car bushudic))))
+ (len (if (not res) 99 (tutcode-auto-help-count-stroke-length res)))
+ (min (if (< len min-stroke) len min-stroke)))
+ (if (<= len
4) ; "5"Åù¤ò»È¤¦Éô¼ó¹çÀ®¤Ç4ÂǸ°Ì¤Ëþ¤â¤¢¤ë¤¬¡¢¤½¤³¤Þ¤Ç¤Ï¸«¤Ê¤¤
+ res
+ (tutcode-auto-help-bushu-decompose-looking-bushudic (cdr bushudic)
+ (if (< len min-stroke) res long-stroke-result)
+ min get-stroke-list)))))
+
;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤ò°ú¤»»¤Ë¤è¤êÉô¼ó¹çÀ®¤¹¤ë¤Î¤ËɬÍפȤʤ롢
;;; ³°»ú¤Ç¤Ê¤¤Ê¸»ú¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
;;; Îã: "ÝÆ" => (((("g" "t" "h")) ("Îó")) ((("G" "I")) ("¥ê")))
@@ -1271,107 +1320,116 @@
;;; @param c ÂоÝʸ»ú
;;; @return ÂоÝʸ»ú¤ÎÉô¼ó¹çÀ®¤ËɬÍפÊ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
;;; ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
-(define (tutcode-auto-help-bushu-decompose-by-subtraction c bushudic)
- ;; bushudic¤ÎÍ×ÁǤò½ç¤Ë¸«¤ÆºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¤â¤Î¤òÊÖ¤¹¡£
- ;; filter¤ämap¤ò»È¤Ã¤Æ¡¢ºÇ¾®¤Î¥¹¥È¥í¡¼¥¯¤Î¤â¤Î¤òõ¤¹¤È»þ´Ö¤¬¤«¤«¤ë¤Î¤Ç¡£
- (and
- (not (null? bushudic))
- (or
- (tutcode-auto-help-get-stroke-list-by-subtraction c (car bushudic))
- (tutcode-auto-help-bushu-decompose-by-subtraction c (cdr
bushudic)))))
+(define (tutcode-auto-help-bushu-decompose-by-subtraction c)
+ (tutcode-auto-help-bushu-decompose-looking-bushudic tutcode-bushudic
+ () 99
+ (lambda (elem)
+ (tutcode-auto-help-get-stroke-list-by-subtraction c elem))))
+
+;;; ¼«Æ°¥Ø¥ë¥×:Éô¼ó¹çÀ®¤ËɬÍפÊÂǸ°¿ô¤ò¿ô¤¨¤ë
+;;; @param bushu-compose-list Éô¼ó¹çÀ®¤Ë»È¤¦2ʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
+;;; Îã: (((("g" "t" "h")) ("Îó")) ((("G" "I")) ("¥ê")))
+;;; @return bushu-compose-list¤Ë´Þ¤Þ¤ì¤ëÂǸ°¿ô¡£(¾å¤ÎÎã¤Î¾ì¹ç¤Ï5)
+(define (tutcode-auto-help-count-stroke-length bushu-compose-list)
+ (+ (length (caaar bushu-compose-list))
+ (length (caaadr bushu-compose-list))))
;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤ò°ú¤»»¤Ë¤è¤êÉô¼ó¹çÀ®¤Ç¤¤ë¾ì¹ç¤Ï¡¢
;;; ¹çÀ®¤Ë»È¤¦³ÆÊ¸»ú¤È¡¢¤½¤Î¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
;;; @param c ÂоÝʸ»ú
-;;; @param bushu-list bushudicÆâ¤ÎÍ×ÁÇ¡£Îã: ((("ÝÆ" "¥ê")) ("Îó"))
+;;; @param min-stroke-bushu-list min-stroke¤ÈbushudicÆâ¤ÎÍ×ÁǤΥꥹ¥È¡£
+;;; Îã: (6 ((("ÝÆ" "¥ê")) ("Îó")))
;;; @return ÂоÝʸ»ú¤ÎÉô¼ó¹çÀ®¤ËɬÍפÊ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
;;; bushu-list¤ò»È¤Ã¤Æ¹çÀ®¤Ç¤¤Ê¤¤¾ì¹ç¤Ï#f¡£
;;; Îã: (((("g" "t" "h")) ("Îó")) ((("G" "I")) ("¥ê")))
-(define (tutcode-auto-help-get-stroke-list-by-subtraction c bushu-list)
+(define (tutcode-auto-help-get-stroke-list-by-subtraction
+ c min-stroke-bushu-list)
(and-let*
- ((mem (member c (caar bushu-list)))
+ ((min-stroke (car min-stroke-bushu-list))
+ (bushu-list (cadr min-stroke-bushu-list))
+ (mem (member c (caar bushu-list)))
(b1 (caadr bushu-list))
;; 2¤Ä¤ÎÉô¼ó¤Î¤¦¤Á¡¢c°Ê³°¤ÎÉô¼ó¤ò¼èÆÀ
(b2 (if (= 2 (length mem)) (cadr mem) (car (caar bushu-list))))
+ (seq1 (tutcode-auto-help-get-stroke b1))
+ (seq2 (tutcode-auto-help-get-stroke b2))
+ (ret (list seq1 seq2))
+ ;; Éô¼ó¹çÀ®¤ÏÃÙ¤¤¤Î¤Ç¡¢Àè¤ËÂǸ°¿ô¤ò¥Á¥§¥Ã¥¯
+ (small-stroke? (< (tutcode-auto-help-count-stroke-length ret)
min-stroke))
;; ¼ÂºÝ¤ËÉô¼ó¹çÀ®¤·¤Æ¡¢ÂоÝʸ»ú¤¬¹çÀ®¤µ¤ì¤Ê¤¤¤â¤Î¤ÏÂÌÌÜ
(composed (tutcode-bushu-convert b1 b2))
- (c-composed? (string=? composed c))
- (seq1 (tutcode-auto-help-get-stroke b1))
- (seq2 (tutcode-auto-help-get-stroke b2)))
- (list seq1 seq2)))
-
-;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤ò¹çÀ®²Äǽ¤Ê¡¢¶¦¤Ë³°»ú¤Ç¤Ê¤¤¡ÖÉô¼ó1¡×¤È
-;;; ¡ÖÉô¼ó2¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú¡×¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
-;;; @param c ÂоÝʸ»ú (Îã: "½²")
-;;; @param seq ³°»ú¤Ç¤Ê¤¤Éô¼ó(b1 or b2)¤ÎÆþÎÏ¥¡¼¥·¡¼¥±¥ó¥¹¤ÈÉô¼ó¤Î¥ê¥¹¥È¡£
-;;; Îã: ((("b" ",")) ("¸À"))
-;;; @param b1 Éô¼ó1 (Îã: "ð²")
-;;; @param b2 Éô¼ó2 (Îã: "¸À")
-;;; @param bushudic Éô¼ó¹çÀ®ÊÑ´¹¼½ñ
+ (c-composed? (string=? composed c)))
+ ret))
+
+;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤ò¡ÖÉô¼ó1¡×¤È¡ÖÉô¼ó2¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú¡×¤Ë¤è¤ê
+;;; Éô¼ó¹çÀ®¤Ç¤¤ë¾ì¹ç¤Ï¡¢
+;;; ¹çÀ®¤Ë»È¤¦³ÆÊ¸»ú¤È¡¢¤½¤Î¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
+;;; @param c ÂоÝʸ»ú
+;;; @param b1 Éô¼ó1(ľÀÜÆþÎϲÄǽ)
+;;; @param b2 Éô¼ó2(ľÀÜÆþÎÏÉÔ²Äǽ)
+;;; @param seq1 b1¤ÎÆþÎÏ¥¡¼¥·¡¼¥±¥ó¥¹¤ÈÉô¼ó¤Î¥ê¥¹¥È
+;;; @param min-stroke-bushu-list min-stroke¤ÈbushudicÆâ¤ÎÍ×ÁǤΥꥹ¥È¡£
;;; @return ÂоÝʸ»ú¤ÎÉô¼ó¹çÀ®¤ËɬÍפÊ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
-;;; ¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f¡£
-;;; Îã: (((("e" "v" ".")) ("°Ô")) ((("b" ",")) ("¸À")))
-(define (tutcode-auto-help-bushu-decompose-with-part c seq b1 b2 bushudic)
- ;; bushudic¤ÎÍ×ÁǤò½ç¤Ë¸«¤ÆºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¤â¤Î¤òÊÖ¤¹¡£
- ;; filter¤ämap¤ò»È¤Ã¤Æ¡¢ºÇ¾®¤Î¥¹¥È¥í¡¼¥¯¤Î¤â¤Î¤òõ¤¹¤È»þ´Ö¤¬¤«¤«¤ë¤Î¤Ç¡£
- ;; XXX: µÕ°ú¤ÍÑbushudic¤òºî¤Ã¤Æ»È¤¦?
- (and
- (not (null? bushudic))
- (or
- (tutcode-auto-help-get-stroke-list-with-part c seq b1 b2 (car
bushudic))
- (tutcode-auto-help-bushu-decompose-with-part
- c seq b1 b2 (cdr bushudic)))))
-
-;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤ò¡ÖÉô¼ó1¡×¤È¡ÖÉô¼ó2¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú¡×¤Ë¤è¤ê
+;;; bushu-list¤ò»È¤Ã¤Æ¹çÀ®¤Ç¤¤Ê¤¤¾ì¹ç¤Ï#f¡£
+(define (tutcode-auto-help-get-stroke-list-with-right-part
+ c b1 b2 seq1 min-stroke-bushu-list)
+ (and-let*
+ ((min-stroke (car min-stroke-bushu-list))
+ (bushu-list (cadr min-stroke-bushu-list))
+ (mem (member b2 (caar bushu-list)))
+ (kanji (caadr bushu-list)) ; Éô¼ó2¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú
+ (seq (tutcode-auto-help-get-stroke kanji))
+ (ret (list seq1 seq))
+ ;; Éô¼ó¹çÀ®¤ÏÃÙ¤¤¤Î¤Ç¡¢Àè¤ËÂǸ°¿ô¤ò¥Á¥§¥Ã¥¯
+ (small-stroke? (< (tutcode-auto-help-count-stroke-length ret)
min-stroke))
+ ;; ¼ÂºÝ¤ËÉô¼ó¹çÀ®¤·¤Æ¡¢ÂоÝʸ»ú¤¬¹çÀ®¤µ¤ì¤Ê¤¤¤â¤Î¤ÏÂÌÌÜ
+ (composed (tutcode-bushu-convert b1 kanji))
+ (c-composed? (string=? composed c)))
+ ret))
+
+;;; ¼«Æ°¥Ø¥ë¥×:ÂоÝʸ»ú¤ò¡ÖÉô¼ó1¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú¡×¤È¡ÖÉô¼ó2¡×¤Ë¤è¤ê
;;; Éô¼ó¹çÀ®¤Ç¤¤ë¾ì¹ç¤Ï¡¢
;;; ¹çÀ®¤Ë»È¤¦³ÆÊ¸»ú¤È¡¢¤½¤Î¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
;;; @param c ÂоÝʸ»ú (Îã: "½²")
-;;; @param seq ³°»ú¤Ç¤Ê¤¤Éô¼ó(b1 or b2)¤ÎÆþÎÏ¥¡¼¥·¡¼¥±¥ó¥¹¤ÈÉô¼ó¤Î¥ê¥¹¥È¡£
+;;; @param b1 Éô¼ó1(ľÀÜÆþÎÏÉÔ²Äǽ) (Îã: "ð²")
+;;; @param b2 Éô¼ó2(ľÀÜÆþÎϲÄǽ) (Îã: "¸À")
+;;; @param seq2 b2¤ÎÆþÎÏ¥¡¼¥·¡¼¥±¥ó¥¹¤ÈÉô¼ó¤Î¥ê¥¹¥È¡£
;;; Îã: ((("b" ",")) ("¸À"))
-;;; @param b1 Éô¼ó1 (Îã: "ð²")
-;;; @param b2 Éô¼ó2 (Îã: "¸À")
-;;; @param bushu-list bushudicÆâ¤ÎÍ×ÁÇ¡£Îã: ((("À" "ð²"))("°Ô"))
+;;; @param min-stroke-bushu-list min-stroke¤ÈbushudicÆâ¤ÎÍ×ÁǤΥꥹ¥È¡£
+;;; Îã: (6 ((("À" "ð²")) ("°Ô")))
;;; @return ÂоÝʸ»ú¤ÎÉô¼ó¹çÀ®¤ËɬÍפÊ2¤Ä¤Îʸ»ú¤È¥¹¥È¥í¡¼¥¯¤Î¥ê¥¹¥È¡£
;;; bushu-list¤ò»È¤Ã¤Æ¹çÀ®¤Ç¤¤Ê¤¤¾ì¹ç¤Ï#f¡£
;;; Îã: (((("e" "v" ".")) ("°Ô")) ((("b" ",")) ("¸À")))
-(define (tutcode-auto-help-get-stroke-list-with-part
- c seq b1 b2 bushu-list)
- (if (string=? b1 (caadr seq))
- ;; Éô¼ó1¤Ï³°»ú¤Ç¤Ê¤¤(ľÀÜÆþÎϲÄǽ)
- (and-let*
- ((mem (member b2 (caar bushu-list)))
- (kanji (caadr bushu-list)) ; Éô¼ó2¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú
- ;; ¼ÂºÝ¤ËÉô¼ó¹çÀ®¤·¤Æ¡¢ÂоÝʸ»ú¤¬¹çÀ®¤µ¤ì¤Ê¤¤¤â¤Î¤ÏÂÌÌÜ
- (composed (tutcode-bushu-convert b1 kanji))
- (c-composed? (string=? composed c))
- (seq2 (tutcode-auto-help-get-stroke kanji)))
- (list seq seq2))
- ;; Éô¼ó2¤Ï³°»ú¤Ç¤Ê¤¤(ľÀÜÆþÎϲÄǽ)
- (and-let*
- ((mem (member b1 (caar bushu-list)))
- (kanji (caadr bushu-list)) ; Éô¼ó1¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú
- ;; ¼ÂºÝ¤ËÉô¼ó¹çÀ®¤·¤Æ¡¢ÂоÝʸ»ú¤¬¹çÀ®¤µ¤ì¤Ê¤¤¤â¤Î¤ÏÂÌÌÜ
- (composed (tutcode-bushu-convert kanji b2))
- (c-composed? (string=? composed c))
- (seq1 (tutcode-auto-help-get-stroke kanji)))
- (list seq1 seq))))
-
-;;; rule¤òµÕ°ú¤¤·¤Æ¡¢ÊÑ´¹¸å¤Îʸ»ú¤«¤é¡¢ÆþÎÏ¥¡¼Îó¤ò¼èÆÀ¤¹¤ë¡£
-;;; Îã: (tutcode-reverse-find-seq tutcode-rule "¤¢") => ("r" "k")
-;;; @param rule rk¤Ç»È¤¦·Á¼°¤Îrule
+(define (tutcode-auto-help-get-stroke-list-with-left-part
+ c b1 b2 seq2 min-stroke-bushu-list)
+ (and-let*
+ ((min-stroke (car min-stroke-bushu-list))
+ (bushu-list (cadr min-stroke-bushu-list))
+ (mem (member b1 (caar bushu-list)))
+ (kanji (caadr bushu-list)) ; Éô¼ó1¤òÉôÉʤȤ·¤Æ»ý¤Ä´Á»ú
+ (seq (tutcode-auto-help-get-stroke kanji))
+ (ret (list seq seq2))
+ ;; Éô¼ó¹çÀ®¤ÏÃÙ¤¤¤Î¤Ç¡¢Àè¤ËÂǸ°¿ô¤ò¥Á¥§¥Ã¥¯
+ (small-stroke? (< (tutcode-auto-help-count-stroke-length ret)
min-stroke))
+ ;; ¼ÂºÝ¤ËÉô¼ó¹çÀ®¤·¤Æ¡¢ÂоÝʸ»ú¤¬¹çÀ®¤µ¤ì¤Ê¤¤¤â¤Î¤ÏÂÌÌÜ
+ (composed (tutcode-bushu-convert kanji b2))
+ (c-composed? (string=? composed c)))
+ ret))
+
+;;; tutcode-rule¤òµÕ°ú¤¤·¤Æ¡¢ÊÑ´¹¸å¤Îʸ»ú¤«¤é¡¢ÆþÎÏ¥¡¼Îó¤ò¼èÆÀ¤¹¤ë¡£
+;;; Îã: (tutcode-reverse-find-seq "¤¢") => ("r" "k")
;;; @param c ÊÑ´¹¸å¤Îʸ»ú
-;;; @return ÆþÎÏ¥¡¼¤Î¥ê¥¹¥È¡£ruleÃæ¤Ëc¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
-(define (tutcode-reverse-find-seq rule c)
- ;; XXX: µÕ°ú¤ÍÑalist¤òºî¤Ã¤Æ»È¤¦?
- (let ((lst
- (filter
- (lambda (elem)
- ;; string=?¤À¤È'tutcode-mazegaki-start¤Ç¥¨¥é¡¼
- (equal? c (car (cadr elem))))
- rule)))
- (and
- (not (null? lst))
- (car (caar lst)))))
+;;; @return ÆþÎÏ¥¡¼¤Î¥ê¥¹¥È¡£tutcode-ruleÃæ¤Ëc¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï#f
+(define (tutcode-reverse-find-seq c)
+ (if (null? tutcode-reverse-rule-alist)
+ (set! tutcode-reverse-rule-alist
+ (map
+ (lambda (elem)
+ (cons (caadr elem) (caar elem)))
+ tutcode-rule)))
+ (let ((res (assoc c tutcode-reverse-rule-alist)))
+ (and res
+ (cdr res))))
;;; ¸½ºß¤Îstate¤¬preedit¤ò»ý¤Ä¤«¤É¤¦¤«¤òÊÖ¤¹¡£
;;; @param pc ¥³¥ó¥Æ¥¥¹¥È¥ê¥¹¥È