[Prime-cvs] CVS update: prime/uim

Back to archive index

Hiroyuki Komatsu komat****@users*****
2004年 12月 23日 (木) 06:52:10 JST


Index: prime/uim/prime.scm
diff -u prime/uim/prime.scm:1.1.2.10 prime/uim/prime.scm:1.1.2.11
--- prime/uim/prime.scm:1.1.2.10	Wed Dec 22 03:23:33 2004
+++ prime/uim/prime.scm	Thu Dec 23 06:52:09 2004
@@ -95,6 +95,8 @@
 (define-key prime-typing-mode-hankana-key?    "F8")
 (define-key prime-typing-mode-wideascii-key?  "F9")
 (define-key prime-typing-mode-ascii-key?      "F10")
+(define-key prime-expand-segment-key? '("<Control>o" "<Shift>right"))
+(define-key prime-shrink-segment-key? '("<Control>i" "<Shift>left"))
 
 (define-key prime-space-key?          '(" "))
 (define-key prime-altspace-key?       '("<Control> " "<Alt> "))
@@ -281,6 +283,10 @@
    (prime-cancel-key?         . prime-command-conv-cancel)
    (prime-backspace-key?      . prime-command-conv-cancel)
    (prime-commit-key?         . prime-command-conv-commit)
+   (prime-go-left-edge-key?   . prime-command-modify-cursor-left-edge)
+   (prime-go-right-edge-key?  . prime-command-modify-cursor-right-edge)
+   (prime-go-left-key?        . prime-command-modify-cursor-left)
+   (prime-go-right-key?       . prime-command-modify-cursor-right)
    (prime-cand-select-key?    . prime-command-conv-select)
    ;; Typing mode key bindings
    (prime-typing-mode-hiragana-key?  . prime-command-mode-hiragana)
@@ -312,6 +318,47 @@
    (prime-any-key?            . prime-command-register-conv-input)
    ))
 
+(define prime-keymap-modify-state
+  '(
+;    (prime-register-key?       . prime-command-register-mode)
+   (prime-begin-conv-key?      . prime-command-modify-convert)
+   (prime-next-candidate-key?  . prime-command-modify-convert)
+   (prime-prev-candidate-key?  . prime-command-modify-convert-reversely)
+    (prime-cancel-key?         . prime-command-conv-cancel)
+;    (prime-backspace-key?      . prime-command-conv-cancel)
+    (prime-commit-key?         . prime-command-modify-commit)
+    (prime-go-left-edge-key?   . prime-command-modify-cursor-left-edge)
+    (prime-go-right-edge-key?  . prime-command-modify-cursor-right-edge)
+    (prime-go-left-key?        . prime-command-modify-cursor-left)
+    (prime-go-right-key?       . prime-command-modify-cursor-right)
+    (prime-expand-segment-key? . prime-command-modify-cursor-expand)
+    (prime-shrink-segment-key? . prime-command-modify-cursor-shrink)
+;    ;; Typing mode key bindings
+;    (prime-typing-mode-hiragana-key?  . prime-command-mode-hiragana)
+;    (prime-typing-mode-katakana-key?  . prime-command-mode-katakana)
+;    (prime-typing-mode-hankana-key?   . prime-command-mode-hankana)
+;    (prime-typing-mode-wideascii-key? . prime-command-mode-wideascii)
+;    (prime-typing-mode-ascii-key?     . prime-command-mode-ascii)
+;    (prime-symbol-key?         . prime-command-pass)
+;    (prime-with-control-key?   . prime-command-pass)
+    (prime-any-key?            . prime-command-pass)
+   ))
+
+(define prime-keymap-segment-state
+  '(
+    (prime-cancel-key?         . prime-command-segment-cancel)
+    (prime-commit-key?         . prime-command-segment-commit)
+    (prime-next-candidate-key? . prime-command-segment-next)
+    (prime-prev-candidate-key? . prime-command-segment-prev)
+    (prime-go-left-edge-key?   . prime-command-modify-cursor-left-edge)
+    (prime-go-right-edge-key?  . prime-command-modify-cursor-right-edge)
+    (prime-go-left-key?        . prime-command-modify-cursor-left)
+    (prime-go-right-key?       . prime-command-modify-cursor-right)
+    (prime-expand-segment-key? . prime-command-modify-cursor-expand)
+    (prime-shrink-segment-key? . prime-command-modify-cursor-shrink)
+    (prime-any-key?            . prime-command-pass)
+    ))
+
 ;;;; ------------------------------------------------------------
 
 (define prime-mode-latin      0)
@@ -322,19 +369,20 @@
   (append
    context-rec-spec
    (list
-    (list 'state         'prime-state-no-preedit)
-    (list 'learning-word #f)
-    (list 'nth           0)
-    (list 'candidates    ())
-    (list 'mode          prime-mode-latin)
-    (list 'last-word     "") ;;PRIMEやPOBoxの用語でいうContext
-    (list 'session          "")  ; the actual value is -default or -register.
-    (list 'session-default  "")
-    (list 'session-register "")
-    (list 'register-line '(() . ()))
-    ;; history = (prev-status, prev-preedition, prev-register-preedtion 
-    ;;            index-of-candidate)
-    (list 'history       '(prime-state-no-preedit ("" "" "") (() . ()) 0)))))
+    (list 'state              'prime-state-no-preedit)
+    (list 'learning-word      #f)
+    (list 'nth                0)
+    (list 'candidates         ())
+    (list 'mode               prime-mode-latin)
+    (list 'last-word          "")  ;; PRIMEやPOBoxの用語でいうContext
+    (list 'session            "")  ; the actual value is -default or -register.
+    (list 'session-default    "")
+    (list 'session-register   "")
+    (list 'modification       '("" "" ""))
+    (list 'segment-nth        0)
+    (list 'segment-candidates ())
+    (list 'register-line      '(() . ()))
+    (list 'history            ()))))
 (define-record 'prime-context prime-context-rec-spec)
 (define prime-context-new-internal prime-context-new)
 
@@ -347,29 +395,49 @@
       (prime-context-set-session!          context session1)
       (prime-context-set-session-default!  context session1)
       (prime-context-set-session-register! context session2)
+      (prime-context-history-update! context)
       context)))
 
-(define prime-context-history-set!
+(define prime-context-history-update!
   (lambda (context)
-    (prime-context-set-history! context (list
-				    (prime-context-state context)
-				    (prime-context-copy-preedit-line  context)
-				    (prime-context-copy-register-line context)
-				    (prime-context-nth context)))))
-(define prime-context-history-get prime-context-history)
+    (let* ((state          (prime-context-state context))
+	   (selected-index (if (= state 'prime-state-segment)
+			       (prime-context-segment-nth context)
+			       (prime-context-nth context))))
+      (prime-context-set-history!
+       context
+       (list (list 'state           state)
+	     (list 'preedit-line    (prime-context-copy-preedit-line  context))
+	     (list 'register-line   (prime-context-copy-register-line context))
+	     (list 'selected-index  selected-index)
+	     (list 'conversion-line (copy-list
+				     (prime-context-modification context)))
+	     )))))
+
 (define prime-context-history-compare
   (lambda (context)
     (print "prime-context-history-compare")
-    (let ((prev-data (prime-context-history-get context)))
+    (let* ((prev-data      (prime-context-history context))
+	   (state          (prime-context-state context))
+	   (selected-index (if (= state 'prime-state-segment)
+			       (prime-context-segment-nth context)
+			       (prime-context-nth context))))
       (cond
-       ((not (equal? (prime-context-state context) (nth 0 prev-data)))
+       ((not (equal? state
+		     (cadr (assoc 'state prev-data))))
 	'state)
-       ((not (equal? (prime-context-get-preedit-line context)  (nth 1 prev-data)))
+       ((not (equal? (prime-context-get-preedit-line context)
+		     (cadr (assoc 'preedit-line prev-data))))
 	'preedit)
-       ((not (equal? (prime-context-get-register-line context) (nth 2 prev-data)))
+       ((not (equal? (prime-context-get-register-line context)
+		     (cadr (assoc 'register-line prev-data))))
 	'cursor)
-       ((not (equal? (prime-context-nth context) (nth 3 prev-data)))
+       ((not (equal? selected-index
+		     (cadr (assoc 'selected-index prev-data))))
 	'nth)
+       ((not (equal? (prime-context-modification context)
+		     (cadr (assoc 'conversion-line prev-data))))
+	'cursor)
        ))))
 
 
@@ -402,16 +470,6 @@
   (lambda (context)
     (prime-engine-edit-get-preedition (prime-context-session context))))
 
-
-(define prime-send-command
-  (lambda (command)
-    (let ((result (prime-lib-send-command command)))
-      (let loop ((res result))
-	(if (string=? res "")
-	    (loop (prime-lib-send-command ""))
-	    res
-	    )))))
-
 (define prime-preedit-reset!
   (lambda (context)
     (print "prime-preedit-reset!")
@@ -428,25 +486,6 @@
 	#f
 	(car (nth n (prime-context-candidates context))))))
 
-;; This returns the data sepecified by key of the N th word.
-;; This is called by prime-get-nth-usage and prime-get-nth-annotation.
-(define prime-get-nth-word-data
-  (lambda (context n key)
-    (if (> n (prime-get-nr-candidates context))
-	#f
-	(cadr (assoc key
-		     (nth 1 (nth n (prime-context-candidates context))))))))
-
-(define prime-get-nth-usage
-  (lambda (context n)
-    (print "prime-get-nth-usage")
-    (prime-get-nth-word-data context n "usage")))
-
-(define prime-get-nth-annotation
-  (lambda (context n)
-    (print "prime-get-nth-annotation")
-    (prime-get-nth-word-data context n "annotation")))
-
 (define prime-get-nr-candidates
   (lambda (context)
     (length (prime-context-candidates context))))
@@ -456,27 +495,6 @@
     (print "prime-get-current-candidate")
     (prime-get-nth-candidate context (prime-context-nth context))))
 
-;; DELETEME: obsolete
-(define prime-get-candidates! ;;もうちょっと関数名をどうにかしたい
-  (lambda (context preedit prime-context)
-    (print "prime-get-candidates!")
-    (prime-engine-set-context prime-context)
-    (prime-context-set-candidates!
-     context
-     (prime-engine-lookup prime-engine-command-lookup preedit))
-    ))
-
-;; DELETEME: obsolete
-(define prime-get-all-candidates! ;;これももうちょっと関数名をどうにかしたい
-  (lambda (context preedit prime-context)
-    (prime-engine-set-context prime-context)
-    (prime-context-set-candidates!
-     context
-     (prime-engine-lookup prime-engine-command-lookup-all preedit))
-    ))
-
-
-
 ;;;; ------------------------------------------------------------
 ;;;; prime-util: General purpose functions
 ;;;; ------------------------------------------------------------
@@ -516,6 +534,21 @@
       (set! result (cons node-string result))
       (reverse result))))
 
+(define prime-util-string-to-integer
+  (lambda (string)
+    (let ((integer 0)
+	  (figure  1))
+      (mapcar
+       (lambda (digit-string)
+	 (if (string=? digit-string "-")
+	     (set! integer (- integer))
+	     (set! integer (+ integer (* (- (string->charcode digit-string)
+					    (string->charcode "0"))
+					 figure))))
+	 (set! figure (* figure 10)))
+       (string-to-list string))
+      integer)))
+
 ;;;; ------------------------------------------------------------
 ;;;; prime-uim:
 ;;;; ------------------------------------------------------------
@@ -532,49 +565,49 @@
 ;;;; prime-engine: Functions to connect with a prime server.
 ;;;; ------------------------------------------------------------
 
+(define prime-send-command
+  (lambda (command)
+    (let ((result (prime-lib-send-command command)))
+      (let loop ((buffer result))
+	(if (string=? buffer "")
+	    (loop (prime-lib-send-command ""))
+	    buffer)))))
+
 (define prime-engine-send-command
   (lambda (arg-list)
-    (cdr 
-     (string-split
-      (prime-send-command
-       (string-append (prime-util-string-concat arg-list "\t") "\n"))
-      "\n"))))
-
-;; DELETEME: Obsolete function.
-(define prime-engine-lookup
-  (lambda (command string)
-    (print "prime-engine-lookup")
-    (mapcar
-     (lambda (string-line)
-       (let ((word-data (prime-util-string-split string-line "\t")))
-	 (list (nth 0 word-data)  ; reading
-	       (nth 1 word-data)  ; literal
-	       (prime-util-assoc-list (nthcdr 2 word-data)))))
-     (prime-engine-send-command (list command string)))))
+    (cdr (string-split
+	  (prime-send-command
+	   (string-append (prime-util-string-concat arg-list "\t") "\n"))
+	  "\n"))))
 
 (define prime-engine-conv-predict
   (lambda (prime-session)
-    (prime-engine-conv-convert-internal prime-session "conv_predict")))
+    (print "prime-engine-conv-predict")
+    (cdr (prime-engine-conv-convert-internal prime-session "conv_predict"))))
 
 (define prime-engine-conv-convert
   (lambda (prime-session)
-    (prime-engine-conv-convert-internal prime-session "conv_convert")))
+    (print "prime-engine-conv-convert")
+    (cdr (prime-engine-conv-convert-internal prime-session "conv_convert"))))
 
 (define prime-engine-conv-convert-internal
   (lambda (prime-session command)
+    (print "prime-engine-conv-convert-internal")
     (let* ((result
 	    (prime-engine-send-command (list command prime-session)))
-	   (index (car result))
-	   (words (cdr result)))
-      (mapcar
-       (lambda (string-line)
-	 (let ((word-data (prime-util-string-split string-line "\t")))
-	   (list (car word-data)  ; literal
-		 (prime-util-assoc-list (cdr word-data)))))
-       words))))
+	   (index (prime-util-string-to-integer (car result)))
+	   (words (mapcar
+		   (lambda (string-line)
+		     (let ((word-data (prime-util-string-split string-line
+							       "\t")))
+		       (list (car word-data)  ; literal
+			     (prime-util-assoc-list (cdr word-data)))))
+		   (cdr result))))
+      (cons index words))))
 
 (define prime-engine-conv-select
   (lambda (prime-session index-no)
+    (print "prime-engine-conv-select")
     (prime-engine-send-command (list "conv_select"
 				     prime-session
 				     (digit->string index-no)))))
@@ -585,6 +618,46 @@
   (lambda (prime-session)
     (car (prime-engine-send-command (list "conv_commit" prime-session)))))
 
+(define prime-engine-modify-cursor-internal
+  (lambda (prime-session command)
+    (prime-util-string-split
+     (car (prime-engine-send-command (list command prime-session)))
+     "\t")))
+
+(define prime-engine-modify-cursor-right
+  (lambda (prime-session)
+    (prime-engine-modify-cursor-internal prime-session "modify_cursor_right")))
+(define prime-engine-modify-cursor-left
+  (lambda (prime-session)
+    (prime-engine-modify-cursor-internal prime-session "modify_cursor_left")))
+(define prime-engine-modify-cursor-right-edge
+  (lambda (prime-session)
+    (prime-engine-modify-cursor-internal prime-session
+					 "modify_cursor_right_edge")))
+(define prime-engine-modify-cursor-left-edge
+  (lambda (prime-session)
+    (prime-engine-modify-cursor-internal prime-session
+					 "modify_cursor_left_edge")))
+(define prime-engine-modify-cursor-expand
+  (lambda (prime-session)
+    (prime-engine-modify-cursor-internal prime-session
+					 "modify_cursor_expand")))
+(define prime-engine-modify-cursor-shrink
+  (lambda (prime-session)
+    (prime-engine-modify-cursor-internal prime-session
+					 "modify_cursor_shrink")))
+
+(define prime-engine-segment-select
+  (lambda (prime-session index-no)
+    (prime-util-string-split 
+     (car (prime-engine-send-command (list "segment_select"
+					   prime-session
+					   (digit->string index-no))))
+     "\t")))
+
+(define prime-engine-segment-reconvert
+  (lambda (prime-session)
+    (prime-engine-conv-convert-internal prime-session "segment_reconvert")))
 
 (define prime-engine-set-context
   (lambda (prime-context)
@@ -796,7 +869,7 @@
 
 (define prime-command-register-conv-next
   (lambda (context key key-state)
-    (prime-context-set-nth! context (+ 1 (prime-context-nth context)))
+    (prime-context-set-nth! context (+ (prime-context-nth context) 1))
     (cond
      ((prime-get-current-candidate context)
       #f)
@@ -807,10 +880,10 @@
 (define prime-command-conv-prev
   (lambda (context key key-state)
     (if (> (prime-context-nth context) 0)
-	(prime-context-set-nth! context
-				(- (prime-context-nth context) 1))
-	(prime-context-set-nth! context
-				(- (prime-get-nr-candidates context) 1)))
+	(prime-convert-selection-move context
+				      (- (prime-context-nth context) 1))
+	(prime-convert-selection-move context
+				      (- (prime-get-nr-candidates context) 1)))
     ))
 
 (define prime-command-conv-cancel
@@ -820,7 +893,8 @@
 (define prime-command-conv-commit
   (lambda (context key key-state)
     (print "prime-command-conv-commit")
-    (prime-commit-candidate context (prime-context-nth context))
+    (prime-commit-conversion context)
+;    (prime-commit-candidate context (prime-context-nth context))
     ))
 
 (define prime-command-register-conv-commit
@@ -864,11 +938,129 @@
 (define prime-command-register-conv-input
   (lambda (context key key-state)
     (print "prime-command-register-conv-input")
-    (prime-commit-to-register-buffer context (prime-get-current-candidate context))
+    (prime-commit-to-register-buffer context
+				     (prime-get-current-candidate context))
     (prime-push-key context key key-state)
     ))
 
 ;;;; ------------------------------------------------------------
+;;;; prime-command-modify: User commands in a modification state.
+;;;; ------------------------------------------------------------
+
+(define prime-command-modify-commit
+  (lambda (context key key-state)
+    (print "prime-command-modify-commit")
+    (prime-commit-conversion context)))
+
+(define prime-command-modify-convert
+  (lambda (context key key-state)
+    (print "prime-command-modify-convert")
+    (prime-context-set-state! context 'prime-state-segment)
+    (let ((conversion (prime-engine-segment-reconvert
+		       (prime-context-session context))))
+      (prime-context-set-segment-nth!        context (car conversion))
+      (prime-context-set-segment-candidates! context (cdr conversion)))))
+
+(define prime-command-modify-convert-reversely
+  (lambda (context key key-state)
+    (print "prime-command-modify-convert-reversely")
+    (prime-command-modify-convert context key key-state)
+    (prime-command-segment-prev   context key key-state)))
+
+(define prime-command-modify-cursor-right
+  (lambda (context key key-state)
+    (print "prime-command-modify-cursor-right")
+    (prime-modify-reset! context)
+    (prime-context-set-modification!
+     context
+     (prime-engine-modify-cursor-right (prime-context-session context)))
+    ))
+
+(define prime-command-modify-cursor-left
+  (lambda (context key key-state)
+    (prime-modify-reset! context)
+    (prime-context-set-modification!
+     context
+     (prime-engine-modify-cursor-left (prime-context-session context)))
+    ))
+
+(define prime-command-modify-cursor-right-edge
+  (lambda (context key key-state)
+    (prime-modify-reset! context)
+    (prime-context-set-modification!
+     context
+     (prime-engine-modify-cursor-right-edge (prime-context-session context)))
+    ))
+
+(define prime-command-modify-cursor-left-edge
+  (lambda (context key key-state)
+    (prime-modify-reset! context)
+    (prime-context-set-modification!
+     context
+     (prime-engine-modify-cursor-left-edge (prime-context-session context)))
+    ))
+
+(define prime-command-modify-cursor-expand
+  (lambda (context key key-state)
+    (prime-modify-reset! context)
+    (prime-context-set-modification!
+     context
+     (prime-engine-modify-cursor-expand (prime-context-session context)))
+    ))
+
+(define prime-command-modify-cursor-shrink
+  (lambda (context key key-state)
+    (prime-modify-reset! context)
+    (prime-context-set-modification!
+     context
+     (prime-engine-modify-cursor-shrink (prime-context-session context)))
+    ))
+
+(define prime-modify-reset!
+  (lambda (context)
+    (prime-context-set-state!              context 'prime-state-modifying)
+    (prime-context-set-segment-nth!        context 0)
+    (prime-context-set-segment-candidates! context ())))
+
+;;;; ------------------------------------------------------------
+;;;; prime-command-segment: User commands in a segment state.
+;;;; ------------------------------------------------------------
+(define prime-command-segment-cancel
+  (lambda (context key key-state)
+    (prime-modify-reset! context)))
+
+(define prime-command-segment-commit
+  (lambda (context key key-state)
+    (prime-commit-segment context)))
+
+(define prime-command-segment-next
+  (lambda (context key key-state)
+    (prime-segment-selection-move context
+				  (+ (prime-context-segment-nth context) 1))))
+
+(define prime-command-segment-prev
+  (lambda (context key key-state)
+    (prime-segment-selection-move context
+				  (- (prime-context-segment-nth context) 1))))
+
+(define prime-segment-selection-move
+  (lambda (context selection-index)
+    (print "prime-segment-selection-move")
+    (if (or (<  selection-index 0)
+	    (>= selection-index (prime-segment-get-candidates-length context)))
+	(set! selection-index 0))
+    (prime-context-set-segment-nth! context selection-index)
+    (prime-context-set-modification! context
+				     (prime-engine-segment-select
+				      (prime-context-session-default context)
+				      selection-index))
+    ))
+
+(define prime-segment-get-candidates-length
+  (lambda (context)
+    (length (prime-context-segment-candidates context))))
+
+;;;; ------------------------------------------------------------
 ;;;; prime-command-preedit: User commands in a preedit state.
 ;;;; ------------------------------------------------------------
 
@@ -952,12 +1144,12 @@
 (define prime-command-preedit-convert
   (lambda (context key key-state)
     (print "prime-command-preedit-convert")
-    (prime-begin-conversion context)
+    (prime-convert-start context)
     ))
 
 (define prime-command-preedit-convert-reversely
   (lambda (context key key-state)
-    (prime-begin-conversion-reversely context)
+    (prime-convert-start-reversely context)
     ))
 
 ;;;; ------------------------------------------------------------
@@ -1066,8 +1258,13 @@
 	   (learning-word (prime-context-learning-word context))
 	   (keymap))
       (cond
+       ((= state 'prime-state-segment)
+	(set! keymap prime-keymap-segment-state))
+
+       ((= state 'prime-state-modifying)
+	(set! keymap prime-keymap-modify-state))
+
        ((= state 'prime-state-converting)
-	(print ":prime-push-key: converting")
 	(if learning-word
 	    (set! keymap prime-keymap-register-conv-state)
 	    (set! keymap prime-keymap-conv-state)))
@@ -1218,36 +1415,49 @@
     (prime-context-set-last-word! context "")
     ))
 
+(define prime-commit-string
+  (lambda (context string)
+    (print "prime-commit-string")
+    (im-commit context string)
+    (prime-preedit-reset! context)))
+
 ;; obsolete
 (define prime-commit-word-data
   (lambda (context word-data)
     (print "prime-commit-word-data")
-    (im-commit context
-	       (string-append (or (cadr (assoc "base"        word-data)) "")
-			      (or (cadr (assoc "conjugation" word-data)) "")
-			      (or (cadr (assoc "suffix"      word-data)) "")))
     (prime-learn-word context word-data)
-    (prime-preedit-reset! context)))
+    (prime-commit-string
+     context
+     (string-append (or (cadr (assoc "base"        word-data)) "")
+		    (or (cadr (assoc "conjugation" word-data)) "")
+		    (or (cadr (assoc "suffix"      word-data)) "")))))
 
 (define prime-commit-preedition
   (lambda (context)
     (print "prime-commit-preedition")
-    (let* ((prime-session (prime-context-session-default context))
-	   (commited-string (prime-engine-edit-commit prime-session)))
-      (im-commit context commited-string)
-      (prime-preedit-reset! context))))
+    (let ((commited-string (prime-engine-edit-commit 
+			    (prime-context-session-default context))))
+      (prime-commit-string context commited-string))))
+
+(define prime-commit-conversion
+  (lambda (context)
+    (print "prime-commit-conversion")
+    (let ((commited-string (prime-engine-conv-commit 
+			    (prime-context-session-default context))))
+      (prime-commit-string context commited-string))))
+
+(define prime-commit-segment
+  (lambda (context)
+    (print "prime-commit-segment")
+;    (prime-engine-modify-commit (prime-context-session-default context))
+    (prime-context-set-state! context 'prime-state-modifying)))
 
 (define prime-commit-candidate
   (lambda (context index-no)
     (print "prime-commit-candidate")
-    (let* ((prime-session (prime-context-session-default context))
-	   (commited-string (begin
-			      (prime-engine-conv-select prime-session index-no)
-			      (prime-engine-conv-commit prime-session))))
-      (im-commit context commited-string)
-      (prime-preedit-reset! context))))
-;    (let ((word-data (nth 1 (nth n (prime-context-candidates context)))))
-;      (prime-commit-word-data context word-data))))
+    (prime-engine-conv-select (prime-context-session-default context)
+			      index-no)
+    (prime-commit-conversion context)))
 
 (define prime-commit-to-register-buffer
   (lambda (context word)
@@ -1274,14 +1484,48 @@
 				    (string-append value suffix rest))
       )))
 
+
+;;;; ------------------------------------------------------------
+;;;; prime-convert
+;;;; ------------------------------------------------------------
+
+(define prime-convert-start
+  (lambda (context)
+    (prime-convert-start-internal context 0)))
+
+(define prime-convert-start-reversely
+  (lambda (context)
+    (let ((last-idx (- (prime-get-nr-candidates context)
+		       1)))
+      (prime-convert-start-internal context last-idx))))
+
+(define prime-convert-start-internal
+  (lambda (context init-idx)
+    (print "prime-convert-start-internal")
+    (let ((res))
+      (prime-convert-get-conversion context)
+      (set! res (prime-get-nth-candidate context init-idx))
+      (if res
+	  (begin
+	    (prime-context-set-nth!   context init-idx)
+	    (prime-context-set-state! context 'prime-state-converting))
+	  )
+      (prime-convert-selection-move context init-idx)
+      )))
+
+
 ;; This function moves the cursor of candidate words.  If the cursor is out of
 ;; the range and the variable prime-auto-register-mode? is #t, the mode is
 ;; changed to register-mode.
 (define prime-convert-selection-move
   (lambda (context selection-index)
+    (print "prime-convert-selection-move")
     (prime-context-set-nth! context selection-index)
     (if (prime-get-current-candidate context)
-	#f
+	;; If the selection-index is a valid number, sends the number
+	;; to the server.
+	(prime-engine-conv-select (prime-context-session-default context)
+				  selection-index)
 	(if prime-auto-register-mode?
 	    (prime-register-mode-on context)
 	    (prime-context-set-nth! context 0)))
@@ -1310,31 +1554,6 @@
      context
      (prime-engine-conv-convert (prime-context-session-default context)))))
 
-(define prime-begin-conversion-internal
-  (lambda (context init-idx)
-    (print "prime-begin-conversion-internal")
-    (let ((res))
-      (prime-convert-get-conversion context)
-      (set! res (prime-get-nth-candidate context init-idx))
-      (if res
-	  (begin
-	    (prime-context-set-nth!   context init-idx)
-	    (prime-context-set-state! context 'prime-state-converting))
-	  )
-      (prime-convert-selection-move context init-idx)
-      )))
-
-(define prime-begin-conversion-reversely
-  (lambda (context)
-    (let ((last-idx (- (prime-get-nr-candidates context)
-		       1)))
-      (prime-begin-conversion-internal context last-idx))))
-
-(define prime-begin-conversion
-  (lambda (context)
-    (prime-begin-conversion-internal context 0)))
-
-
 ;;;; ------------------------------------------------------------
 ;;;; prime-commit
 ;;;; ------------------------------------------------------------
@@ -1342,7 +1561,6 @@
 (define prime-update
   (lambda (context)
     (print "prime-update")
-    (print (prime-context-state context))
 
     (prime-update-state context)
     (prime-update-prediction context)
@@ -1356,15 +1574,81 @@
 (define prime-update-state
   (lambda (context)
     (if (not (prime-preedit-exist? context))
-	(begin
-	  (print "  prime-update-state: set-state no-preedit")
-	  (prime-context-set-state! context 'prime-state-no-preedit)))
-    ))
+	(prime-context-set-state! context 'prime-state-no-preedit))))
 
 (define prime-update-history
   (lambda (context)
     (print "prime-update-history")
-    (prime-context-history-set! context)))
+    (prime-context-history-update! context)))
+
+(define prime-update-prediction
+  (lambda (context)
+    (print "prime-update-prediction")
+    (let ((diff (prime-context-history-compare context)))
+      (cond
+       ((= diff 'state)
+	(let ((state     (prime-context-state context))
+	      (last-word (prime-context-last-word context)))
+	  (cond
+	   ((= state 'prime-state-preedit)
+	    (prime-convert-get-prediction context))
+	   ((= state 'prime-state-converting)
+	    ;; Do nothing.  (prime-convert-get-conversion context) had been
+	    ;; already executed at prime-convert-start-internal
+	    )
+	   ((= state 'prime-state-no-preedit)
+	    (prime-context-set-candidates! context '()))
+	    )))
+       ((= diff 'preedit)
+	(prime-convert-get-prediction context))
+       ))))
+
+(define prime-update-candidate-window
+  (lambda (context)
+    (print "prime-update-candidate-window")
+    (let ((diff (prime-context-history-compare context)))
+      (cond
+       ((= diff 'state)
+	(let ((state (prime-context-state context)))
+	  (cond
+	   ((= state 'prime-state-no-preedit)
+	    (im-deactivate-candidate-selector context))
+
+	   ((= state 'prime-state-preedit)
+	    (if (> (prime-get-nr-candidates context) 0)
+		(im-activate-candidate-selector
+		 context
+		 (prime-get-nr-candidates context)
+		 3)))
+;		 prime-nr-candidate-max)))
+
+	   ((= state 'prime-state-converting)
+ 	    (im-activate-candidate-selector
+ 	     context (prime-get-nr-candidates context) prime-nr-candidate-max)
+	    (im-select-candidate context (prime-context-nth context)))
+
+	   ((= state 'prime-state-modifying)
+	    (im-deactivate-candidate-selector context))
+
+	   ((= state 'prime-state-segment)
+ 	    (im-activate-candidate-selector
+	     context
+	     (prime-segment-get-candidates-length context)
+	     prime-nr-candidate-max)
+	    (im-select-candidate context (prime-context-segment-nth context)))
+	    )))
+
+       ((= diff 'nth)
+	(if (= (prime-context-state context) 'prime-state-segment)
+	    (im-select-candidate context (prime-context-segment-nth context))
+	    (im-select-candidate context (prime-context-nth context))))
+
+       ((= diff 'preedit)
+	(if (> (prime-get-nr-candidates context) 0)
+	    (im-activate-candidate-selector
+	     context (prime-get-nr-candidates context) prime-nr-candidate-max)
+	    (im-deactivate-candidate-selector context)))
+       ))))
 
 (define prime-update-preedit
   (lambda (context)
@@ -1390,49 +1674,56 @@
 	   (register-left  (prime-editor-get-left           line))
 	   (register-right (reverse (prime-editor-get-right line))))
       (append
-       (list
-	(cons 'register-label  "単語登録")
-	(cons 'register-border "[")
-	(cons 'register-word   learning-word)
-	(cons 'register-border "|")
-	(cons 'committed (string-list-concat register-left)))
-
+       (list (cons 'register-label  "単語登録")
+	     (cons 'register-border "[")
+	     (cons 'register-word   learning-word)
+	     (cons 'register-border "|")
+	     (cons 'committed (string-list-concat register-left)))
        (prime-preedit-state-update-preedit context)
-       (list
-	(cons 'committed (string-list-concat register-right))
-	(cons 'register-border "]"))))))
+       (list (cons 'committed (string-list-concat register-right))
+	     (cons 'register-border "]"))))))
 
 (define prime-preedit-state-update-preedit
   (lambda (context)
     (print "prime-preedit-state-update-preedit")
-    (let* ((state (prime-context-state            context))
-	   (line  (prime-context-get-preedit-line context))
-	   (left  (car line))
-	   (right (apply string-append (cdr line)))
-	   )
+    (let* ((state (prime-context-state context)))
       (cond
        ((= state 'prime-state-converting)
-	(list (cons 'converting (prime-get-current-candidate context))))
+	(list (cons 'converting (prime-get-current-candidate context))
+	      (cons 'cursor     "")))
+
+       ((or (= state 'prime-state-modifying)
+	    (= state 'prime-state-segment))
+	(let* ((line (prime-context-modification context)))
+	  (list (cons 'segment           (nth 0 line))
+		(cons 'segment-highlight (nth 1 line))
+		(cons 'cursor            "")
+		(cons 'segment           (nth 2 line)))))
 
        ((prime-preedit-exist? context)
-	(list (cons 'preedit left)
-	      (cons 'cursor "")
-	      (cons 'preedit right)))
+	(let* ((line  (prime-context-get-preedit-line context))
+	       (left  (car line))
+	       (right (apply string-append (cdr line))))
+	  (list (cons 'preedit left)
+		(cons 'cursor "")
+		(cons 'preedit right))))
+
        (else
 	(list (cons 'cursor "")))))))
 
 (define prime-display-preedit-format
-  (list (cons 'committed        preedit-none)
-	(cons 'cursor           preedit-cursor)
-	(cons 'pseude-cursor    preedit-reverse)
-	(cons 'preedit          preedit-underline)
-	(cons 'converting       preedit-reverse)
-	(cons 'register-border  preedit-reverse)
-	(cons 'register-label   preedit-reverse)
-	(cons 'register-word    preedit-reverse)
+  (list (cons 'committed         preedit-none)
+	(cons 'cursor            preedit-cursor)
+	(cons 'pseude-cursor     preedit-reverse)
+	(cons 'preedit           preedit-underline)
+	(cons 'converting        preedit-underline)
+	(cons 'segment           preedit-underline)
+	(cons 'segment-highlight preedit-reverse)
+	(cons 'register-border   preedit-reverse)
+	(cons 'register-label    preedit-reverse)
+	(cons 'register-word     preedit-reverse)
 	))
 
-
 (define prime-display-preedit
   (lambda (context preedit-list)
     (if preedit-list
@@ -1460,57 +1751,6 @@
 			     " "))
     ))
 
-(define prime-update-prediction
-  (lambda (context)
-    (print "prime-update-prediction")
-    (let ((diff (prime-context-history-compare context)))
-      (cond
-       ((= diff 'state)
-	(let ((state     (prime-context-state context))
-	      (last-word (prime-context-last-word context)))
-	  (cond
-	   ((= state 'prime-state-preedit)
-	    (prime-convert-get-prediction context))
-	   ((= state 'prime-state-converting)
-	    (prime-convert-get-conversion context))
-	   ((= state 'prime-state-no-preedit)
-	    (prime-context-set-candidates! context '()))
-	    )))
-       ((= diff 'preedit)
-	(prime-convert-get-prediction context))
-       ))))
-
-(define prime-update-candidate-window
-  (lambda (context)
-    (print "prime-update-candidate-window")
-    (let ((diff (prime-context-history-compare context)))
-      (cond
-       ((= diff 'state)
-	(let ((state (prime-context-state context)))
-	  (cond
-	   ((= state 'prime-state-no-preedit)
-	    (im-deactivate-candidate-selector context))
-	   ((= state 'prime-state-preedit)
-	    (if (> (prime-get-nr-candidates context) 0)
-		(im-activate-candidate-selector
-		 context
-		 (prime-get-nr-candidates context)
-		 3)))
-;		 prime-nr-candidate-max)))
-	   ((= state 'prime-state-converting)
- 	    (im-activate-candidate-selector
- 	     context (prime-get-nr-candidates context) prime-nr-candidate-max)
-	    (im-select-candidate context (prime-context-nth context)))
-	    )))
-       ((= diff 'nth)
-	(im-select-candidate context (prime-context-nth context)))
-       ((= diff 'preedit)
-	(if (> (prime-get-nr-candidates context) 0)
-	    (im-activate-candidate-selector
-	     context (prime-get-nr-candidates context) prime-nr-candidate-max)
-	    (im-deactivate-candidate-selector context)))
-       ))))
-
 ;;;; ------------------------------------------------------------
 
 (define prime-register-mode-on
@@ -1590,26 +1830,48 @@
     ()))
 
 (define prime-get-candidate-handler
-  (lambda (context idx accel-enum-hint)
-    (let* ((cand       (prime-get-nth-candidate  context idx))
-	   (usage      (prime-get-nth-usage      context idx))
-	   (annotation (prime-get-nth-annotation context idx)))
+  (lambda (context index-no accel-enum-hint)
+    (print "prime-get-candidate-handler")
+    (let ((candidate
+	   (if (= (prime-context-state context) 'prime-state-segment)
+	       (nth index-no (prime-context-segment-candidates context))
+	       (nth index-no (prime-context-candidates context)))))
+      ;; The return value is a list with a candidate string and the next index.
+      (list (prime-candidate-combine-string context candidate)
+	    (digit->string (+ index-no 1))))))
+
+(define prime-candidate-combine-string
+  (lambda (context candidate)
+    (print "prime-candidate-combine-string")
+    (let ((string     (prime-candidate-get-literal candidate))
+	  (usage      (prime-candidate-get-data    candidate "usage"))
+	  (annotation (prime-candidate-get-data    candidate "annotation")))
       (if (and prime-char-annotation?
 	       annotation
-	       (= (prime-context-state context) 'prime-state-converting))
-	  (set! cand (string-append cand "  (" annotation ")")))
+	       (or (= (prime-context-state context) 'prime-state-converting)
+		   (= (prime-context-state context) 'prime-state-segment)))
+	  (set! string (string-append string "  (" annotation ")")))
       (if (and prime-custom-display-usage?
 	       usage
-	       (= (prime-context-state context) 'prime-state-converting))
-	  (set! cand (string-append cand "\t▽" usage)))
-
-      ;; The return value is a list with a candidate string and the next index.
-      (list cand (digit->string (+ idx 1))))))
+	       (or (= (prime-context-state context) 'prime-state-converting)
+		   (= (prime-context-state context) 'prime-state-segment)))
+	  (set! string (string-append string "\t▽" usage)))
+      string)))
+
+(define prime-candidate-get-literal
+  (lambda (candidate)
+    (car candidate)))
+
+(define prime-candidate-get-data
+  (lambda (candidate key)
+    (cadr (assoc key (nth 1 candidate)))))
 
 (define prime-set-candidate-index-handler
   (lambda (context selection-index)
     (print "prime-set-candidate-index-handler")
-    (prime-convert-selection-move context selection-index)
+    (if (= (prime-context-state context) 'prime-state-segment)
+	(prime-segment-selection-move context selection-index)
+	(prime-convert-selection-move context))
     (prime-update context)
     ))
 
Index: prime/uim/ChangeLog
diff -u prime/uim/ChangeLog:1.1.2.10 prime/uim/ChangeLog:1.1.2.11
--- prime/uim/ChangeLog:1.1.2.10	Wed Dec 22 03:23:33 2004
+++ prime/uim/ChangeLog	Thu Dec 23 06:52:09 2004
@@ -1,3 +1,8 @@
+2004-12-23  Hiroyuki Komatsu  <komat****@taiya*****>
+
+	* prime.scm: 
+	Implementing functions for the PRIME2 protocol (for PRIME 0.9.4).
+
 2004-12-22  Hiroyuki Komatsu  <komat****@taiya*****>
 
 	* prime.scm: 


Prime-cvs メーリングリストの案内
Back to archive index