Revision: 6319
Author: ek.kato
Date: Sun Apr 11 06:48:34 2010
Log: * scm/sj3v2-socket.scm
- (sj3-lib-connect) : Workaround for environment with
SCM_USE_LONG_FIXNUM.
- (sj3-lib-open) : Don't crash even when server is not working
and just show message instead.
- (sj3-lib-opened?) : New.
- (sj3-lib-getkan) : Add check for the connection. Return #f
when not connected.
- (sj3-lib-douoncnt) : Ditto. Return 0 when not connected.
* scm/sj3.scm
- (sj3-lib-init) : Don't use sj3-lib-funcall which would try to
connect infinitely when server is not working.
- (sj3-lib-begin-conversion) : Support disconnected situation.
- (sj3-lib-commit-segment) : Ditto.
- (sj3-lib-commit-segments) : Ditto.
- (sj3-context-rec-spec) : Fix to initialize prediction-ctx with
'().
http://code.google.com/p/uim/source/detail?r=6319
Modified:
/trunk/scm/sj3.scm
/trunk/scm/sj3v2-socket.scm
=======================================
--- /trunk/scm/sj3.scm Sun Apr 4 20:35:54 2010
+++ /trunk/scm/sj3.scm Sun Apr 11 06:48:34 2010
@@ -49,8 +49,8 @@
;;
(define (sj3-lib-init server)
(if sj3-use-remote-server?
- (sj3-lib-funcall #f sj3-lib-open server sj3-user)
- (sj3-lib-funcall #f sj3-lib-open "" sj3-user)))
+ (sj3-lib-open server sj3-user)
+ (sj3-lib-open "" sj3-user)))
;; error recovery
(define (sj3-connect-wait sc w)
@@ -193,17 +193,20 @@
(sj3-context-set-sc-ctx! sc (cdr ret))
(- (length ret) 1))
(else
- (length (sj3-make-map-from-kana-string str))))))
+ (sj3-context-set-sc-ctx! sc (list
(sj3-make-map-from-kana-string str))) ; XXX hack
+ 1))))
(define (sj3-lib-commit-segment sc seg delta)
;; segment learnining
- (let* ((yomi (sj3-get-nth-yomi sc seg))
- (douon (sj3-getdouon sc yomi)))
- (if (< delta (length douon))
- (let ((entry (list-ref douon delta)))
- (if (= 2 (length entry))
- (begin
- (predict-meta-commit (sj3-context-prediction-ctx sc) yomi
(list-ref entry 0) "")
- (sj3-lib-funcall sc sj3-lib-gakusyuu (list-ref entry
1))))))))
+ (if (sj3-lib-opened?)
+ (let* ((yomi (sj3-get-nth-yomi sc seg))
+ (douon (sj3-getdouon sc yomi)))
+ (if (< delta (length douon))
+ (let ((entry (list-ref douon delta)))
+ (if (= 2 (length entry))
+ (begin
+ (predict-meta-commit (sj3-context-prediction-ctx sc)
yomi (list-ref entry 0) "")
+ (sj3-lib-funcall sc sj3-lib-gakusyuu (list-ref entry
1)))))))
+ #f))
;; return alist of cons'ed offset and length
;; ("abc" "d" "efgh") => ((3 . 3) (4 . 1) (8 . 4))
@@ -279,41 +282,42 @@
(iota (length segs))
segs))
;; segment-length learnining
- (let* ((sc-ctx (sj3-context-sc-ctx sc))
- ;; revert from hell
- (new-segments (restore-segments))
- (orig (apply string-append (map car sc-ctx)))
- ;; revert too
- (old-string-list (map car (cdr (sj3-lib-funcall sc sj3-lib-getkan
orig)))))
- (receive (new-string-list new-dcid-list)
- (unzip2 new-segments)
- (let ((old-offset (sj3-get-seg-offset old-string-list))
- (new-offset (sj3-get-seg-offset new-string-list)))
- ;; split case
- (for-each (lambda (l)
- (let ((yomi1 (list-ref new-string-list l))
- (yomi2 (list-ref new-string-list (+ 1 l)))
- (dcid (list-ref new-dcid-list (+ 1 l))))
- (if dcid
- (sj3-lib-gakusyuu2 yomi1 yomi2 dcid))))
- (sj3-filter-split-segment old-offset new-offset))
- ;; merge case
- (for-each (lambda (l)
- (let ((yomi1 (list-ref new-string-list l))
- (yomi2 #f)
- (dcid #f))
- (if dcid
- (sj3-lib-gakusyuu2 yomi1 yomi2 dcid))))
- (sj3-filter-merge-segment old-offset new-offset))
- ;; move case
- (for-each (lambda (l)
- (let ((yomi1 (list-ref new-string-list l))
- (yomi2 (list-ref new-string-list (+ 1 l)))
- (dcid (list-ref new-dcid-list (+ 1 l))))
- (if dcid
- (sj3-lib-gakusyuu2 yomi1 yomi2 dcid))))
- (sj3-filter-move-segment old-offset new-offset))
- )))
+ (if (sj3-lib-opened?)
+ (let* ((sc-ctx (sj3-context-sc-ctx sc))
+ ;; revert from hell
+ (new-segments (restore-segments))
+ (orig (apply string-append (map car sc-ctx)))
+ ;; revert too
+ (old-string-list (map car (cdr (sj3-lib-funcall sc
sj3-lib-getkan orig)))))
+ (receive (new-string-list new-dcid-list)
+ (unzip2 new-segments)
+ (let ((old-offset (sj3-get-seg-offset old-string-list))
+ (new-offset (sj3-get-seg-offset new-string-list)))
+ ;; split case
+ (for-each (lambda (l)
+ (let ((yomi1 (list-ref new-string-list l))
+ (yomi2 (list-ref new-string-list (+ 1 l)))
+ (dcid (list-ref new-dcid-list (+ 1 l))))
+ (if dcid
+ (sj3-lib-gakusyuu2 yomi1 yomi2 dcid))))
+ (sj3-filter-split-segment old-offset new-offset))
+ ;; merge case
+ (for-each (lambda (l)
+ (let ((yomi1 (list-ref new-string-list l))
+ (yomi2 #f)
+ (dcid #f))
+ (if dcid
+ (sj3-lib-gakusyuu2 yomi1 yomi2 dcid))))
+ (sj3-filter-merge-segment old-offset new-offset))
+ ;; move case
+ (for-each (lambda (l)
+ (let ((yomi1 (list-ref new-string-list l))
+ (yomi2 (list-ref new-string-list (+ 1 l)))
+ (dcid (list-ref new-dcid-list (+ 1 l))))
+ (if dcid
+ (sj3-lib-gakusyuu2 yomi1 yomi2 dcid))))
+ (sj3-filter-move-segment old-offset new-offset))
+ ))))
#t)
(define (sj3-lib-reset-conversion sc)
@@ -560,7 +564,7 @@
(list 'commit-raw #t)
(list 'input-rule sj3-input-rule-roma)
(list 'raw-ustr #f)
- (list 'prediction-ctx #f)
+ (list 'prediction-ctx '())
(list 'prediction-word '())
(list 'prediction-candidates '())
(list 'prediction-appendix '())
=======================================
--- /trunk/scm/sj3v2-socket.scm Sun Jan 17 23:04:40 2010
+++ /trunk/scm/sj3v2-socket.scm Sun Apr 11 06:48:34 2010
@@ -137,7 +137,9 @@
(call-with-u8list-unpack
'(u32) (string-buf->u8list (file-read socket 4))
(lambda (result)
- (= -2 result))))
+ (or
+ (= -2 result)
+ (= 4294967294 result)))))
(define (sj3-lib-disconnect socket)
(file-write socket
@@ -393,9 +395,12 @@
(sj3-lib-opendict *sj3-lib-socket*
(sj3-lib-get-private-dicionary-name user-name) ""))
(sj3-lib-openstdy *sj3-lib-socket* (sj3-lib-get-private-study-name
user-name))
(set! *sj3-lib-stdy-size* (sj3-lib-stdy-size *sj3-lib-socket*)))
- (raise (N_ "Cannot connect SJ3 server")))
+ (uim-notify-info (N_ "Cannot connect SJ3 server")))
*sj3-lib-socket*)
+(define (sj3-lib-opened?)
+ *sj3-lib-socket*)
+
(define (sj3-lib-close)
(if *sj3-lib-socket*
(begin
@@ -406,17 +411,21 @@
(file-close *sj3-lib-socket*))))
(define (sj3-lib-getkan yomi)
- (receive (yomi-len stdy cands)
- (sj3-lib-ph2knj-euc *sj3-lib-socket* *sj3-lib-stdy-size* yomi)
- (cons (apply string-append cands)
- (zip (sj3-lib-split-yomi yomi yomi-len)
- cands
- stdy))))
+ (if *sj3-lib-socket*
+ (receive (yomi-len stdy cands)
+ (sj3-lib-ph2knj-euc *sj3-lib-socket* *sj3-lib-stdy-size* yomi)
+ (cons (apply string-append cands)
+ (zip (sj3-lib-split-yomi yomi yomi-len)
+ cands
+ stdy)))
+ #f))
(define (sj3-lib-douoncnt yomi)
- (sj3-lib-cl2knj-cnt-euc *sj3-lib-socket* *sj3-lib-stdy-size*
- (length (string->list yomi)) ;; byte length
- yomi))
+ (if *sj3-lib-socket*
+ (sj3-lib-cl2knj-cnt-euc *sj3-lib-socket* *sj3-lib-stdy-size*
+ (length (string->list yomi)) ;; byte length
+ yomi)
+ 0))
(define (sj3-lib-getdouon yomi)
(receive (yomi-len stdy cand)
--
To unsubscribe, reply using "remove me" as the subject.