Revision: 6529
Author: deton.kih
Date: Sun Jul 18 13:35:59 2010
Log: * scm/tutcode-editor.scm
  - New file.
* scm/tutcode-dialog.scm
  - New file.

http://code.google.com/p/uim/source/detail?r=6529

Added:
 /trunk/scm/tutcode-dialog.scm
 /trunk/scm/tutcode-editor.scm

=======================================
--- /dev/null
+++ /trunk/scm/tutcode-dialog.scm       Sun Jul 18 13:35:59 2010
@@ -0,0 +1,122 @@
+;;;
+;;; Copyright (c) 2005-2010 uim Project http://code.google.com/p/uim/
+;;;
+;;; All rights reserved.
+;;;
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+;;; 1. Redistributions of source code must retain the above copyright
+;;;    notice, this list of conditions and the following disclaimer.
+;;; 2. Redistributions in binary form must reproduce the above copyright
+;;;    notice, this list of conditions and the following disclaimer in the
+;;;    documentation and/or other materials provided with the distribution.
+;;; 3. Neither the name of authors nor the names of its contributors
+;;; may be used to endorse or promote products derived from this software
+;;;    without specific prior written permission.
+;;;
+;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+;;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+;;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +;;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE +;;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+;;; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+;;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +;;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+;;; SUCH DAMAGE.
+;;;;
+
+;; yes/no dialog for tutcode-purge-candidate
+;; this is just a quick hack derived from skk-editor.scm
+
+(define-record 'tutcode-dialog
+  '((context      ())
+    (left-string  ())
+    (right-string ())))
+(define tutcode-dialog-new-internal tutcode-dialog-new)
+
+(define tutcode-dialog-new
+  (lambda (sc)
+    (let ((dc (tutcode-dialog-new-internal)))
+      (tutcode-dialog-set-context! dc sc)
+      dc)))
+
+(define tutcode-dialog-flush
+  (lambda (dc)
+    (tutcode-dialog-set-left-string! dc ())
+    (tutcode-dialog-set-right-string! dc ())))
+
+(define tutcode-dialog-make-string
+  (lambda (sl dir)
+    (if (null? sl)
+        (if dir
+            "Really purge? (yes/no) "
+            "")
+       (if dir
+           (string-append (tutcode-dialog-make-string (cdr sl) dir)
+                          (car sl))
+           (string-append (car sl)
+                          (tutcode-dialog-make-string (cdr sl) dir))))))
+
+(define tutcode-dialog-get-left-string
+  (lambda (dc)
+    (tutcode-dialog-make-string
+     (tutcode-dialog-left-string dc) #t)))
+
+(define tutcode-dialog-get-right-string
+  (lambda (dc)
+    (tutcode-dialog-make-string
+     (tutcode-dialog-right-string dc) #f)))
+
+(define tutcode-dialog-commit-char-list
+  (lambda (dc sl)
+    (if (not (null? sl))
+       (begin
+         (tutcode-dialog-set-left-string!
+          dc
+          (cons (car sl)
+                (tutcode-dialog-left-string dc)))
+         (tutcode-dialog-commit-char-list
+          dc (cdr sl))))))
+
+(define tutcode-dialog-commit
+  (lambda (dc str)
+    (tutcode-dialog-commit-char-list
+     dc (reverse (string-to-list str)))))
+
+(define tutcode-dialog-commit-raw
+  (lambda (dc key key-state)
+    (let ((raw-str (im-get-raw-key-str key key-state))
+         (sc (tutcode-dialog-context dc))
+         (str
+          (string-append
+           (tutcode-dialog-get-left-string dc)
+           (tutcode-dialog-get-right-string dc))))
+      (if raw-str
+         (tutcode-dialog-commit dc raw-str)
+         ;; not a string
+         (cond
+            ((tutcode-backspace-key? key key-state)
+              (let ((cur (tutcode-dialog-left-string dc)))
+               (if (not (null? cur))
+                   (tutcode-dialog-set-left-string! dc (cdr cur)))))
+           ((tutcode-return-key? key key-state)
+              (cond
+                ((string=? str "Really purge? (yes/no) yes")
+                  (tutcode-purge-candidate sc)
+                  (tutcode-dialog-flush dc)
+                  (tutcode-context-set-child-context! sc ())
+                  (tutcode-context-set-child-type! sc ())
+                  (tutcode-update-preedit sc))
+                ((string=? str "Really purge? (yes/no) no")
+                  (tutcode-dialog-flush dc)
+                  (tutcode-context-set-child-context! sc ())
+                  (tutcode-context-set-child-type! sc ())
+                  (tutcode-update-preedit sc))))
+            ((tutcode-cancel-key? key key-state)
+              (tutcode-dialog-flush dc)
+              (tutcode-context-set-child-context! sc ())
+              (tutcode-context-set-child-type! sc ())
+              (tutcode-update-preedit sc)))))))
=======================================
--- /dev/null
+++ /trunk/scm/tutcode-editor.scm       Sun Jul 18 13:35:59 2010
@@ -0,0 +1,142 @@
+;;;
+;;; Copyright (c) 2003-2010 uim Project http://code.google.com/p/uim/
+;;;
+;;; All rights reserved.
+;;;
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+;;; 1. Redistributions of source code must retain the above copyright
+;;;    notice, this list of conditions and the following disclaimer.
+;;; 2. Redistributions in binary form must reproduce the above copyright
+;;;    notice, this list of conditions and the following disclaimer in the
+;;;    documentation and/or other materials provided with the distribution.
+;;; 3. Neither the name of authors nor the names of its contributors
+;;; may be used to endorse or promote products derived from this software
+;;;    without specific prior written permission.
+;;;
+;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
+;;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+;;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +;;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE +;;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+;;; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+;;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +;;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+;;; SUCH DAMAGE.
+;;;;
+
+;; SKK¤ÈƱ¤¸ºÆµ¢³Ø½¬¤ò¥¤¥ó¥é¥¤¥ó¤Ç¹Ô¤¦¤¿¤á¤Î´Ê°×¥Æ¥­¥¹¥È¥¨¥Ç¥£¥¿¡£
+;; skk-editor.scm¤«¤é¥³¥Ô¡¼¤·¤Ætutcode.scmÍѤËÊѹ¹¡£
+
+(define-record 'tutcode-editor
+  '((context      ())
+    (left-string  ())
+    (right-string ())))
+(define tutcode-editor-new-internal tutcode-editor-new)
+
+(define tutcode-editor-new
+  (lambda (sc)
+    (let ((ec (tutcode-editor-new-internal)))
+      (tutcode-editor-set-context! ec sc)
+      ec)))
+
+(define tutcode-editor-flush
+  (lambda (ec)
+    (tutcode-editor-set-left-string! ec ())
+    (tutcode-editor-set-right-string! ec ())))
+
+(define tutcode-editor-make-string
+  (lambda (sl dir)
+    (if (null? sl)
+        ""
+       (if dir
+           (string-append (tutcode-editor-make-string (cdr sl) dir)
+                          (car sl))
+           (string-append (car sl)
+                          (tutcode-editor-make-string (cdr sl) dir))))))
+
+(define tutcode-editor-get-left-string
+  (lambda (ec)
+    (tutcode-editor-make-string
+     (tutcode-editor-left-string ec) #t)))
+
+(define tutcode-editor-get-right-string
+  (lambda (ec)
+    (tutcode-editor-make-string
+     (tutcode-editor-right-string ec) #f)))
+
+(define tutcode-editor-commit-char-list
+  (lambda (ec sl)
+    (if (not (null? sl))
+       (begin
+         (tutcode-editor-set-left-string!
+          ec
+          (cons (car sl)
+                (tutcode-editor-left-string ec)))
+         (tutcode-editor-commit-char-list
+          ec (cdr sl))))))
+
+(define tutcode-editor-commit
+  (lambda (ec str)
+    (tutcode-editor-commit-char-list
+     ec (reverse (string-to-list str)))))
+
+(define tutcode-editor-commit-raw
+  (lambda (ec key key-state)
+    (let ((raw-str (im-get-raw-key-str key key-state))
+         (sc (tutcode-editor-context ec))
+         (str
+          (string-append
+           (tutcode-editor-get-left-string ec)
+           (tutcode-editor-get-right-string ec))))
+      (if raw-str
+         (tutcode-editor-commit ec raw-str)
+         ;; not a string
+         (cond
+            ((tutcode-backspace-key? key key-state)
+              (let ((cur (tutcode-editor-left-string ec)))
+                (if (not (null? cur))
+                    (tutcode-editor-set-left-string! ec (cdr cur)))))
+           ((generic-go-left-key? key key-state)
+              (let ((cur (tutcode-editor-left-string ec)))
+                (if (not (null? cur))
+                    (begin
+                      (tutcode-editor-set-left-string! ec (cdr cur))
+                      (tutcode-editor-set-right-string!
+ ec (cons (car cur) (tutcode-editor-right-string ec)))))))
+           ((generic-go-right-key? key key-state)
+              (let ((cur (tutcode-editor-right-string ec)))
+                (if (not (null? cur))
+                    (begin
+                      (tutcode-editor-set-right-string! ec (cdr cur))
+                      (tutcode-editor-set-left-string!
+ ec (cons (car cur) (tutcode-editor-left-string ec)))))))
+           ((tutcode-return-key? key key-state)
+              (if (< 0 (string-length str))
+                  (begin
+                    (skk-lib-learn-word
+                     (tutcode-make-string (tutcode-context-head sc))
+                      ""
+                      ""
+                      str
+                      #f)
+                    (tutcode-save-personal-dictionary #t)
+                    (tutcode-commit-editor-context sc str))
+                  (begin
+                    (tutcode-editor-flush ec)
+                    (tutcode-context-set-child-context! sc '())
+                    (tutcode-context-set-child-type! sc '())
+                    (if (> (tutcode-context-nr-candidates sc) 0)
+                        (tutcode-back-to-converting-state sc)
+                        (tutcode-back-to-yomi-state sc)))))
+           ((tutcode-cancel-key? key key-state)
+              (tutcode-editor-flush ec)
+              (tutcode-context-set-child-context! sc '())
+              (tutcode-context-set-child-type! sc '())
+              (if (> (tutcode-context-nr-candidates sc) 0)
+                  (tutcode-back-to-converting-state sc)
+                  (tutcode-back-to-yomi-state sc)))
+         )))))

Reply via email to