X-Git-Url: http://git.chise.org/gitweb/?p=elisp%2Fegg.git;a=blobdiff_plain;f=its%2Fhangul.el;fp=its%2Fhangul.el;h=714682e869a838437da7142556f4d1eb326a9068;hp=83a75565179e65534f6b187b4254223661a5a157;hb=a279e4bc8317bd5b9f656a1ae15775dfecd86588;hpb=76732e6a1bda6c43729b2c8e356a717b2c7b1043 diff --git a/its/hangul.el b/its/hangul.el index 83a7556..714682e 100644 --- a/its/hangul.el +++ b/its/hangul.el @@ -31,7 +31,6 @@ (eval-when-compile (require 'its) - (require 'egg-edep) (require 'cl)) (defvar its-hangul-enable-jeonkak-alphabet @@ -61,13 +60,11 @@ (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))) @@ -80,28 +77,16 @@ (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 @@ -114,7 +99,7 @@ list)))) (define-its-state-machine its-hangul-map - "hangul" "$(CGQ(B" 'Korean + "hangul" "$(CGQ(B" Korean "Map for Hangul input. (Korean)" (defconst its-jeonkak-escape "Z")