+;;; its/hangul.el --- Hangul Input in Egg Input Method Architecture
+
+;; Copyright (C) 1997, 1998 Mule Project,
+;; Powered by Electrotechnical Laboratory, JAPAN.
+;; Project Leader: Satoru Tomura <tomura@etl.go.jp>
+
+;; Author: NIIBE Yutaka <gniibe@mri.co.jp>
+;; KATAYAMA Yoshio <kate@pfu.co.jp>
+
+;; This file will be part of GNU Emacs (in future).
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+
+;;; Code:
+
(eval-when-compile
(require 'its)
(require 'cl))
+(defvar its-hangul-enable-jeonkak-alphabet t "*Enable Jeonkak alphabet")
+(defvar its-hangul-period ". " "*\e$(C#.\e(B") ; ". " "\e$(C#.\e(B"
+(defvar its-hangul-comma ", " "*\e$(C#,\e(B") ; ", " "\e$(C#,\e(B"
(defvar its-hangul-open-bracket "\e$(C!8\e(B" "*[") ; "\e$(C#[\e(B"
-(defvar its-hangul-close-bracket "\e$(C!9\e(B" "*]") ; "\e$(C#]\e(B"
+(defvar its-hangul-close-bracket "\e$(C!9\e(B" "*]") ; "\e$(C#]\e(B"
(eval-when-compile
-
- (defvar its-jeonkak-escape "J")
- (defvar its-pankak-escape "B")
-
(defconst its-hangul-kijuhynbmlopOP
(its-make-class+back "[kijuhynbmlopOP]" -2))
(defconst its-hangul-kijuhynbmlopP
(its-defrule-otherwise state output))))
(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")
+ (defconst its-pankak-escape "X")
+
+ (its-defrule-select-mode-temporally "B" downcase)
+ (its-defrule-select-mode-temporally "J" jeonkak-downcase)
+
(its-defrule-hangul "r" "\e$(C$!\e(B")
(its-defrule-hangul "s" "\e$(C$$\e(B")
(its-defrule-hangul "e" "\e$(C$'\e(B")
(its-define-hangul "glt" "\e$(CH}\e(B" kijuhynbmlopOP)
(its-define-hangul "gld" "\e$(CH~\e(B" kijuhynbmlopOP))
- ;;; Jeonkak Symbols
-
- (its-defrule "1" "\e$(C#1\e(B")
- (its-defrule "2" "\e$(C#2\e(B")
- (its-defrule "3" "\e$(C#3\e(B")
- (its-defrule "4" "\e$(C#4\e(B")
- (its-defrule "5" "\e$(C#5\e(B")
- (its-defrule "6" "\e$(C#6\e(B")
- (its-defrule "7" "\e$(C#7\e(B")
- (its-defrule "8" "\e$(C#8\e(B")
- (its-defrule "9" "\e$(C#9\e(B")
- (its-defrule "0" "\e$(C#0\e(B")
-
- ;;(its-defrule " " "\e$(C!!\e(B")
- (its-defrule "!" "\e$(C#!\e(B")
- (its-defrule "@" "\e$(C#@\e(B")
- (its-defrule "#" "\e$(C##\e(B")
- (its-defrule "$" "\e$(C#$\e(B")
- (its-defrule "%" "\e$(C#%\e(B")
- (its-defrule "^" "\e$(C#^\e(B")
- (its-defrule "&" "\e$(C#&\e(B")
- (its-defrule "*" "\e$(C#*\e(B")
- (its-defrule "(" "\e$(C#(\e(B")
- (its-defrule ")" "\e$(C#)\e(B")
- (its-defrule "-" "\e$(C#-\e(B")
- (its-defrule "=" "\e$(C#=\e(B")
- (its-defrule "`" "\e$(C#`\e(B")
- (its-defrule "\\" "\e$(C#\\e(B")
- (its-defrule "|" "\e$(C#|\e(B")
- (its-defrule "_" "\e$(C#_\e(B")
- (its-defrule "+" "\e$(C#+\e(B")
- (its-defrule "~" "\e$(C#~\e(B")
- (its-defrule "[" "\e$(C!8\e(B");;(its-defrule "[" "\e$(C#[\e(B")
- (its-defrule "]" "\e$(C!9\e(B");;(its-defrule "]" "\e$(C#]\e(B")
- (its-defrule "{" "\e$(C#{\e(B")
- (its-defrule "}" "\e$(C#}\e(B")
- (its-defrule ":" "\e$(C#:\e(B")
- (its-defrule ";" "\e$(C#;\e(B")
- (its-defrule "\"" "\e$(C#"\e(B")
- (its-defrule "'" "\e$(C#'\e(B")
- (its-defrule "<" "\e$(C#<\e(B")
- (its-defrule ">" "\e$(C#>\e(B")
- (its-defrule "?" "\e$(C#?\e(B")
- (its-defrule "/" "\e$(C#/\e(B")
- (its-defrule "," "\e$(C#,\e(B")
- (its-defrule "." "\e$(C#.\e(B")
-
- (its-defrule (concat its-jeonkak-escape " ") "\e$(C!!\e(B")
- (let ((i ?!))
- (while (<= i ?~)
- (its-defrule (concat its-jeonkak-escape (char-to-string i))
- (char-to-string (+ (- ?\e$(C#!\e(B ?!) i)))
- (setq i (1+ i))))
-
- ;;; pankak
- (let ((i ?!))
- (while (<= i ?~)
- (its-defrule (concat its-pankak-escape (char-to-string i))
- (char-to-string i))
- (setq i (1+ i)))))
+ (dolist (ascii '(("1" . "\e$(C#1\e(B") ("2" . "\e$(C#2\e(B") ("3" . "\e$(C#3\e(B") ("4" . "\e$(C#4\e(B")
+ ("5" . "\e$(C#5\e(B") ("6" . "\e$(C#6\e(B") ("7" . "\e$(C#7\e(B") ("8" . "\e$(C#8\e(B")
+ ("9" . "\e$(C#9\e(B") ("0" . "\e$(C#0\e(B")
+ (" " . "\e$(C!!\e(B") ("!" . "\e$(C#!\e(B") ("@" . "\e$(C#@\e(B") ("#" . "\e$(C##\e(B")
+ ("$" . "\e$(C#$\e(B") ("%" . "\e$(C#%\e(B") ("^" . "\e$(C#^\e(B") ("&" . "\e$(C#&\e(B")
+ ("*" . "\e$(C#*\e(B") ("(" . "\e$(C#(\e(B") (")" . "\e$(C#)\e(B")
+ ("-" . "\e$(C#-\e(B") ("=" . "\e$(C#=\e(B") ("`" . "\e$(C#`\e(B") ("\\" . "\e$(C#\\e(B")
+ ("|" . "\e$(C#|\e(B") ("_" . "\e$(C#_\e(B") ("+" . "\e$(C#+\e(B") ("~" . "\e$(C#~\e(B")
+ ("[" . "\e$(C!8\e(B") ("]" . "\e$(C!9\e(B") ("{" . "\e$(C#{\e(B") ("}" . "\e$(C#}\e(B")
+ (":" . "\e$(C#:\e(B") (";" . "\e$(C#;\e(B") ("\"" . "\e$(C#"\e(B") ("'" . "\e$(C#'\e(B")
+ ("<" . "\e$(C#<\e(B") (">" . "\e$(C#>\e(B") ("?" . "\e$(C#?\e(B") ("/" . "\e$(C#/\e(B")
+ ("," . "\e$(C#,\e(B") ("." . "\e$(C#.\e(B")
+ ("a" . "\e$(C#a\e(B") ("b" . "\e$(C#b\e(B") ("c" . "\e$(C#c\e(B") ("d" . "\e$(C#d\e(B")
+ ("e" . "\e$(C#e\e(B") ("f" . "\e$(C#f\e(B") ("g" . "\e$(C#g\e(B") ("h" . "\e$(C#h\e(B")
+ ("i" . "\e$(C#i\e(B") ("j" . "\e$(C#j\e(B") ("k" . "\e$(C#k\e(B") ("l" . "\e$(C#l\e(B")
+ ("m" . "\e$(C#m\e(B") ("n" . "\e$(C#n\e(B") ("o" . "\e$(C#o\e(B") ("p" . "\e$(C#p\e(B")
+ ("q" . "\e$(C#q\e(B") ("r" . "\e$(C#r\e(B") ("s" . "\e$(C#s\e(B") ("t" . "\e$(C#t\e(B")
+ ("u" . "\e$(C#u\e(B") ("v" . "\e$(C#v\e(B") ("w" . "\e$(C#w\e(B") ("x" . "\e$(C#x\e(B")
+ ("y" . "\e$(C#y\e(B") ("z" . "\e$(C#z\e(B")
+ ("A" . "\e$(C#A\e(B") ("B" . "\e$(C#B\e(B") ("C" . "\e$(C#C\e(B") ("D" . "\e$(C#D\e(B")
+ ("E" . "\e$(C#E\e(B") ("F" . "\e$(C#F\e(B") ("G" . "\e$(C#G\e(B") ("H" . "\e$(C#H\e(B")
+ ("I" . "\e$(C#I\e(B") ("J" . "\e$(C#J\e(B") ("K" . "\e$(C#K\e(B") ("L" . "\e$(C#L\e(B")
+ ("M" . "\e$(C#M\e(B") ("N" . "\e$(C#N\e(B") ("O" . "\e$(C#O\e(B") ("P" . "\e$(C#P\e(B")
+ ("Q" . "\e$(C#Q\e(B") ("R" . "\e$(C#R\e(B") ("S" . "\e$(C#S\e(B") ("T" . "\e$(C#T\e(B")
+ ("U" . "\e$(C#U\e(B") ("V" . "\e$(C#V\e(B") ("W" . "\e$(C#W\e(B") ("X" . "\e$(C#X\e(B")
+ ("Y" . "\e$(C#Y\e(B") ("Z" . "\e$(C#Z\e(B")))
+ (let ((in (car ascii)) (out (cdr ascii)))
+ (its-defrule (concat its-pankak-escape in) in)
+ (its-defrule (concat its-jeonkak-escape in) out))))
(define-its-state-machine-append its-hangul-map
- (its-defrule "[" its-hangul-open-bracket nil t)
- (its-defrule "]" its-hangul-close-bracket nil t)
- )
+ (its-defrule "[" its-hangul-open-bracket)
+ (its-defrule "]" its-hangul-close-bracket)
+ (its-defrule "." its-hangul-period)
+ (its-defrule "," its-hangul-comma)
+
+ (if its-hangul-enable-jeonkak-alphabet
+ (progn
+ (its-defrule "1" "\e$(C#1\e(B") (its-defrule "2" "\e$(C#2\e(B")
+ (its-defrule "3" "\e$(C#3\e(B") (its-defrule "4" "\e$(C#4\e(B")
+ (its-defrule "5" "\e$(C#5\e(B") (its-defrule "6" "\e$(C#6\e(B")
+ (its-defrule "7" "\e$(C#7\e(B") (its-defrule "8" "\e$(C#8\e(B")
+ (its-defrule "9" "\e$(C#9\e(B") (its-defrule "0" "\e$(C#0\e(B")
+ (its-defrule "!" "\e$(C#!\e(B") (its-defrule "@" "\e$(C#@\e(B")
+ (its-defrule "#" "\e$(C##\e(B") (its-defrule "$" "\e$(C#$\e(B")
+ (its-defrule "%" "\e$(C#%\e(B") (its-defrule "^" "\e$(C#^\e(B")
+ (its-defrule "&" "\e$(C#&\e(B") (its-defrule "*" "\e$(C#*\e(B")
+ (its-defrule "(" "\e$(C#(\e(B") (its-defrule ")" "\e$(C#)\e(B")
+ (its-defrule "-" "\e$(C#-\e(B") (its-defrule "~" "\e$(C#~\e(B")
+ (its-defrule "=" "\e$(C#=\e(B") (its-defrule "`" "\e$(C#`\e(B")
+ (its-defrule "\\" "\e$(C#\\e(B") (its-defrule "|" "\e$(C#|\e(B")
+ (its-defrule "_" "\e$(C#_\e(B") (its-defrule "+" "\e$(C#+\e(B")
+ (its-defrule "{" "\e$(C#{\e(B") (its-defrule "}" "\e$(C#}\e(B")
+ (its-defrule ":" "\e$(C#:\e(B") (its-defrule ";" "\e$(C#;\e(B")
+ (its-defrule "\"" "\e$(C#"\e(B") (its-defrule "'" "\e$(C#'\e(B")
+ (its-defrule "<" "\e$(C#<\e(B") (its-defrule ">" "\e$(C#>\e(B")
+ (its-defrule "?" "\e$(C#?\e(B") (its-defrule "/" "\e$(C#/\e(B"))
+ (progn
+ (its-defrule "1" "1") (its-defrule "2" "2")
+ (its-defrule "3" "3") (its-defrule "4" "4")
+ (its-defrule "5" "5") (its-defrule "6" "6")
+ (its-defrule "7" "7") (its-defrule "8" "8")
+ (its-defrule "9" "9") (its-defrule "0" "0")
+ (its-defrule "!" "!") (its-defrule "@" "@")
+ (its-defrule "#" "#") (its-defrule "$" "$")
+ (its-defrule "%" "%") (its-defrule "^" "^")
+ (its-defrule "&" "&") (its-defrule "*" "*")
+ (its-defrule "(" "(") (its-defrule ")" ")")
+ (its-defrule "-" "-") (its-defrule "~" "~")
+ (its-defrule "=" "=") (its-defrule "`" "`")
+ (its-defrule "\\" "\\") (its-defrule "|" "|")
+ (its-defrule "_" "_") (its-defrule "+" "+")
+ (its-defrule "{" "{") (its-defrule "}" "}")
+ (its-defrule ":" ":") (its-defrule ";" ";")
+ (its-defrule "\"" "\"") (its-defrule "'" "'")
+ (its-defrule "<" "<") (its-defrule ">" ">")
+ (its-defrule "?" "?") (its-defrule "/" "/"))))
(provide 'its/hangul)