(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")