Revision: 7273
Author: deton.kih
Date: Wed Aug 24 15:10:27 2011
Log: * scm/tutcode-bushu.scm
- (tutcode-bushu-for-char-hash-table): New variable.
- (tutcode-bushu-for-char): Change to use cache for performance.
- (tutcode-bushu-less?):
Change optional argument to required argument to reduce optional check.
Change for performance.
- (tutcode-bushu-strong-compose-set,
tutcode-bushu-weak-compose-set,
tutcode-auto-help-bushu-decompose-tc23):
Follow the argument change of tutcode-bushu-less?.
http://code.google.com/p/uim/source/detail?r=7273
Modified:
/trunk/scm/tutcode-bushu.scm
=======================================
--- /trunk/scm/tutcode-bushu.scm Sat Aug 13 15:06:28 2011
+++ /trunk/scm/tutcode-bushu.scm Wed Aug 24 15:10:27 2011
@@ -33,7 +33,7 @@
;;; tc-2.3.1¤Îtc-bushu.el¤ò°Ü¿¢(sort¤Ç¤ÎÂǤÁ¤ä¤¹¤µ¤Î¹Íθ¤Ï̤Âбþ)¡£
;;; (»²¹Í:Éô¼ó¹çÀ®¥¢¥ë¥´¥ê¥º¥à¤Ï[tcode-ml:1942]¤¢¤¿¤ê)
-(require-extension (srfi 1 2 8 95))
+(require-extension (srfi 1 2 8 69 95))
(require "fileio.scm")
(require-dynlib "look")
@@ -57,6 +57,9 @@
;;; bushu.help¥Õ¥¡¥¤¥ë¤òÆÉ¤ó¤ÇÀ¸À®¤·¤¿tutcode-bushudic·Á¼°¤Î¥ê¥¹¥È
(define tutcode-bushu-help ())
+;;; tutcode-bushu-for-char¤Î¥¥ã¥Ã¥·¥åÍÑhash-table
+(define tutcode-bushu-for-char-hash-table (make-hash-table =))
+
;;; ʸ»ú¤Î¥ê¥¹¥È¤È¤·¤ÆÊÖ¤¹¡£
(define (tutcode-bushu-parse-entry str)
(reverse! (string-to-list str)))
@@ -72,10 +75,21 @@
;;; CHAR¤ò¹½À®¤¹¤ëÉô¼ó¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
(define (tutcode-bushu-for-char char)
- (let ((looked (tutcode-bushu-search char tutcode-bushu-expand-filename)))
- (if looked
- (tutcode-bushu-parse-entry looked)
- (list char))))
+ (let*
+ ((i (tutcode-euc-jp-string->ichar char))
+ (cache
+ (and i (hash-table-ref/default tutcode-bushu-for-char-hash-table i
#f))))
+ (if cache
+ (list-copy cache)
+ (let*
+ ((looked (tutcode-bushu-search char tutcode-bushu-expand-filename))
+ (res
+ (if looked
+ (tutcode-bushu-parse-entry looked)
+ (list char))))
+ (if i
+ (hash-table-set! tutcode-bushu-for-char-hash-table i (list-copy
res)))
+ res))))
(define (tutcode-bushu-lookup-index2-entry-internal str)
(let
@@ -320,13 +334,12 @@
;;; CHAR1¤¬CHAR2¤è¤êÍ¥ÀèÅÙ¤¬¹â¤¤¤«?
;;; BUSHU-LIST¤Ç»ØÄꤵ¤ì¤¿Éô¼ó¥ê¥¹¥È¤ò´ð½à¤È¤¹¤ë¡£
-;;; OPT-MANY?¤¬#f¤Î¾ì¹ç¡¢Æ±¤¸Í¥ÀèÅ٤Ǥϡ¢BUSHU-LIST¤Ë´Þ¤Þ¤ì¤Ê¤¤
+;;; MANY?¤¬#f¤Î¾ì¹ç¡¢Æ±¤¸Í¥ÀèÅ٤Ǥϡ¢BUSHU-LIST¤Ë´Þ¤Þ¤ì¤Ê¤¤
;;; Éô¼ó¤Î¿ô¤¬¾¯¤Ê¤¤Êý¤¬Í¥À褵¤ì¤ë¡£
;;; #t¤Î¾ì¹ç¤Ï¿¤¤Êý¤¬Í¥À褵¤ì¤ë¡£
-(define (tutcode-bushu-less? char1 char2 bushu-list . opt-many?)
+(define (tutcode-bushu-less? char1 char2 bushu-list many?)
(let*
- ((many? (:optional opt-many? #f))
- (bushu1 (tutcode-bushu-for-char char1))
+ ((bushu1 (tutcode-bushu-for-char char1))
(bushu2 (tutcode-bushu-for-char char2))
(i1 (tutcode-bushu-intersection bushu1 bushu-list))
(i2 (tutcode-bushu-intersection bushu2 bushu-list))
@@ -348,21 +361,22 @@
(else
(let
((val (tutcode-bushu-higher-priority? i1 i2
- (tutcode-bushu-intersection bushu-list
- (append bushu1 bushu2)) 'default)))
+ (tutcode-bushu-intersection bushu-list (append! i1
i2))
+ 'default)))
(if (not (eq? val 'default))
val
- (let*
+ (let
((s1 (tutcode-reverse-find-seq char1 tutcode-rule))
- (s2 (tutcode-reverse-find-seq char2 tutcode-rule))
- (sl1 (if s1 (length s1) 99))
- (sl2 (if s2 (length s2) 99)))
+ (s2 (tutcode-reverse-find-seq char2 tutcode-rule)))
(cond
((and s1 s2)
- (if (= sl1 sl2)
- ;;XXX:ÂǤÁ¤ä¤¹¤µ¤Ç¤ÎÈæ³Ó¤Ï¾Êά
- (string<? char1 char2)
- (< sl1 sl2)))
+ (let
+ ((sl1 (length s1))
+ (sl2 (length s2)))
+ (if (= sl1 sl2)
+ ;;XXX:ÂǤÁ¤ä¤¹¤µ¤Ç¤ÎÈæ³Ó¤Ï¾Êά
+ (string<? char1 char2)
+ (< sl1 sl2))))
(s1
#t)
(s2
@@ -409,7 +423,7 @@
r
(loop (cdr lis) (delete! (car lis) r))))))
(tutcode-bushu-sort! r2
- (lambda (a b) (tutcode-bushu-less? a b bushu-list)))))
+ (lambda (a b) (tutcode-bushu-less? a b bushu-list #f)))))
(define (tutcode-bushu-include-all-chars-bushu? char char-list)
(let*
@@ -467,7 +481,7 @@
(tutcode-bushu-all-compose-set char-list ())
strong-compose-set)
(lambda (a b)
- (tutcode-bushu-less? a b bushu-list)))))
+ (tutcode-bushu-less? a b bushu-list #f)))))
(define (tutcode-bushu-subset bushu-list)
;;XXX:Ť¤¥ê¥¹¥È¤ËÂФ¹¤ëdelete-duplicates!¤ÏÃÙ¤¤¤Î¤Ç¡¢filter¸å¤Ë¹Ô¤¦
@@ -795,7 +809,7 @@
((lis
(tutcode-bushu-sort! set
(lambda (a b)
- (tutcode-bushu-less? a b bushu-list)))))
+ (tutcode-bushu-less? a b bushu-list #f)))))
(if (null? lis)
#f
(let
@@ -824,7 +838,7 @@
((lis
(tutcode-bushu-sort! set
(lambda (a b)
- (tutcode-bushu-less? a b bushu-list)))))
+ (tutcode-bushu-less? a b bushu-list #f)))))
(if (null? lis)
#f
(let
@@ -857,7 +871,7 @@
(tutcode-bushu-subset bushu)
(tutcode-bushu-superset bushu)))
(lambda (a b)
- (tutcode-bushu-less? a b bushu-list)))))
+ (tutcode-bushu-less? a b bushu-list #f)))))
(cl1 (mkcl bushu1))
(cl2 (mkcl bushu2)))
(let loop1
@@ -881,7 +895,7 @@
(tutcode-bushu-sort!
(tutcode-bushu-superset bushu-list)
(lambda (a b)
- (tutcode-bushu-less? a b bushu-list)))))
+ (tutcode-bushu-less? a b bushu-list #f)))))
(let loop1
((lis superset))
(if (null? lis)