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.

Reply via email to