egg-980703.
[elisp/egg.git] / its / hangul.el
index 83a7556..714682e 100644 (file)
@@ -31,7 +31,6 @@
 
 (eval-when-compile
   (require 'its)
-  (require 'egg-edep)
   (require 'cl))
 
 (defvar its-hangul-enable-jeonkak-alphabet
 
 (eval-when-compile
   (defun its-define-hangul-key (key output)
-    (let ((out (string-to-char output))
-         (state (its-goto-state key nil t)))
-      (setq its-hangul-key-alist (cons (cons out (string-to-char key))
-                                      its-hangul-key-alist))
-      (its-set-output state output)
-      (its-make-next-state state -1 (its-get-keyseq state) output)
-      (its-defrule-otherwise state output)))
+    (setq its-hangul-key-alist
+         (cons (cons (string-to-char output)
+                     (string-to-char key))
+               its-hangul-key-alist))
+    (its-defrule key output))
 
   (defun its-define-hangul-successor-list (keyseq)
     (let ((pair (assq (aref keyseq 0) its-hangul-successor-list)))
            (setcdr pair (its-hangul-make-successor (cdr pair) keyseq))))))
 
   (defun its-defrule-hangul (input output)
-    (let ((state (its-get-start-state (symbol-value its-current-map)))
-         (len (length input)) (i 0)
-         keyseq key prev-out out pair)
-      (while (< i len)
-       (setq key (aref input i)
-             next-state (its-get-next-state state key)
-             i (1+ i))
-       (if next-state
-           (setq prev-out out
-                 out (its-get-output next-state)
-                 state next-state)
-         (setq keyseq (substring input 0 i)
-               prev-out out
-               out (if (= i len) output (concat out (list key)))
-               state (its-make-next-state state key keyseq out))
-         (its-make-next-state state -1 keyseq out)
-         (its-defrule-otherwise state out)))
-     (if (and (= (egg-chars-in-period prev-out 0 (length prev-out)) 1)
+    (let* ((state (its-defrule input output nil nil))
+          (prev-out (its-get-output (car its-parent-states)))
+          pair)
+     (if (and (= (length (string-to-list prev-out)) 1)
              (> (string-to-char prev-out) ?\377)
-             (setq pair (assq (aref keyseq (1- len))
+             (setq pair (assq (string-to-char (substring input -1))
                               its-hangul-successor-list)))
-        (its-defrule-otherwise state prev-out (cdr pair) -2))))
+        (progn
+          (its-set-interim-terminal-state state)
+          (its-defrule-otherwise state prev-out (cdr pair) -2)))))
 
   (defmacro its-define-hangul (&rest list)
     (cons 'progn
                  list))))
 
 (define-its-state-machine its-hangul-map
-  "hangul" "\e$(CGQ\e(B" 'Korean
+  "hangul" "\e$(CGQ\e(B" Korean
   "Map for Hangul input. (Korean)"
 
   (defconst its-jeonkak-escape "Z")