;;; hangul.el --- Korean Hangul input method
+;; Copyright (C) 2008-2011 Free Software Foundation, Inc.
+
;; Author: Jihyun Cho <jihyun.jo@gmail.com>
;; Keywords: multilingual, input method, Korean, Hangul
;;; Code:
(require 'quail)
-(require 'cl)
+(eval-when-compile (require 'cl)) ; for setf
(require 'hanja-util)
;; Hangul double Jamo table.
(let ((map (make-sparse-keymap)))
(define-key map "\d" 'hangul-delete-backward-char)
(define-key map [f9] 'hangul-to-hanja-conversion)
+ (define-key map [Hangul_Hanja] 'hangul-to-hanja-conversion)
map)
- "Keymap for Hangul method. It is used by all Hangul input method.")
+ "Keymap for Hangul method. It is used by all Hangul input methods.")
;; Current input character buffer. Store separated hangul character.
;; The first and second are Choseong position.
""))
(defun hangul-insert-character (&rest queues)
- "Insert characters generated from QUEUEs.
-Each QUEUE has the same form as `hangul-queue'.
+ "Insert characters generated from QUEUES.
+Each queue has the same form as `hangul-queue'.
Setup `quail-overlay' to the last character."
(if (and mark-active transient-mark-mode)
(progn
(move-overlay quail-overlay (1+ (overlay-start quail-overlay)) (point))))
(defun hangul-djamo (jamo char1 char2)
- "Return the dobule Jamo index calculated from the arguments.
+ "Return the double Jamo index calculated from the arguments.
JAMO is a type of Hangul Jamo; `cho', `jung', or `jong'.
-CHAR1 and CAHR2 are Hangul Jamo indices.
-Return nil if CHAR1 and CHAR2 can not combined."
+CHAR1 and CHAR2 are Hangul Jamo indices.
+Return nil if CHAR1 and CHAR2 can not be combined."
(let* ((jamo (cdr (assoc jamo hangul-djamo-table)))
(char1 (cdr (assoc char1 jamo))))
(if char1
(defsubst hangul2-input-method-moum (char)
"Store Hangul Jamo indice CHAR in `hangul-queue'.
It is a Hangul 2-Bulsik Moum.
-This function process a Hangul 2-Bulsik Moum.
+This function processes a Hangul 2-Bulsik Moum.
The Moum can be located in a Jungseong position.
Other parts are the same as a `hangul2-input-method-jaum'."
(if (cond ((zerop (aref hangul-queue 2))
(defsubst hangul3-input-method-cho (char)
"Store Hangul Jamo indice CHAR in `hangul-queue'.
It is a Hangul 3-Bulsik Choseong.
-This function process a Hangul 3-Bulsik Choseong.
+This function processes a Hangul 3-Bulsik Choseong.
The Hangul 3-Bulsik is composed of a Choseong, a Jungseong and a Jongseong.
The Choseong can be located in a Choseong position.
Other parts are the same as a `hangul2-input-method-jaum'."
(defsubst hangul3-input-method-jung (char)
"Store Hangul Jamo indice CHAR in `hangul-queue'.
It is a Hangul 3-Bulsik Jungseong.
-This function process a Hangul 3-Bulsik Jungseong.
+This function processes a Hangul 3-Bulsik Jungseong.
The Jungseong can be located in a Jungseong position.
Other parts are the same as a `hangul3-input-method-cho'."
(if (cond ((and (zerop (aref hangul-queue 2))
(defsubst hangul3-input-method-jong (char)
"Store Hangul Jamo indice CHAR in `hangul-queue'.
It is a Hangul 3-Bulsik Jongseong.
-This function process a Hangul 3-Bulsik Jongseong.
+This function processes a Hangul 3-Bulsik Jongseong.
The Jongseong can be located in a Jongseong position.
Other parts are the same as a `hangul3-input-method-cho'."
(if (cond ((and (zerop (aref hangul-queue 4))
'jong
(aref hangul-queue 4)
char)))))
- (aset hangul-queue 6 char)))
+ (aset hangul-queue 5 char)))
(hangul-insert-character hangul-queue)
(if (zerop (apply '+ (append hangul-queue nil)))
(hangul-insert-character (setq hangul-queue (vector 0 0 0 0 char 0)))
(delete-backward-char 1)))
(defun hangul-to-hanja-conversion ()
- "Convert the previous hangul character to the corresponding hanja character."
+ "Convert the previous hangul character to the corresponding hanja character.
+When a Korean input method is off, convert the following hangul character."
(interactive)
(let ((echo-keystrokes 0)
delete-func
hanja-character)
- (setq hanja-character (hangul-to-hanja-char (preceding-char)))
+ (if (and (overlayp quail-overlay) (overlay-start quail-overlay))
+ (progn
+ (setq hanja-character (hangul-to-hanja-char (preceding-char)))
+ (setq delete-func (lambda () (delete-backward-char 1))))
+ (setq hanja-character (hangul-to-hanja-char (following-char)))
+ (setq delete-func (lambda () (delete-char 1))))
(when hanja-character
- (delete-backward-char 1)
+ (funcall delete-func)
(insert hanja-character)
(setq hangul-queue (make-vector 6 0))
- (move-overlay quail-overlay (point) (point)))))
+ (if (and (overlayp quail-overlay) (overlay-start quail-overlay))
+ (move-overlay quail-overlay (point) (point))))))
;; Support function for `hangul2-input-method'. Actually, this
;; function handles the Hangul 2-Bulsik. KEY is an entered key code
(provide 'hangul)
-;; arch-tag: 26bc93fc-64ee-4fb1-b26d-22220d132dbe
;;; hangul.el ends here