1 ;;; its/zhuyin.el --- Zhuyin Input in Egg Input Method Architecture
3 ;; Copyright (C) 1997, 1998 Mule Project,
4 ;; Powered by Electrotechnical Laboratory, JAPAN.
5 ;; Project Leader: Satoru Tomura <tomura@etl.go.jp>
7 ;; Author: KATAYAMA Yoshio <kate@pfu.co.jp>
9 ;; This file will be part of GNU Emacs (in future).
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;; GNU General Public License for more details.
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24 ;; Boston, MA 02111-1307, USA.
35 (defvar its-zhuyin-cn-enable-quanjioao-alphabet
36 (if (boundp 'its-enable-fullwidth-alphabet)
37 its-enable-fullwidth-alphabet
39 "*Enable Quanjiao alphabet")
41 (defvar its-zhuyin-cn-open-braket "
\e$A!8
\e(B" "*[") ; "
\e$A#[
\e(B"
42 (defvar its-zhuyin-cn-close-braket "
\e$A!9
\e(B" "*]") ; "
\e$A#]
\e(B"
44 (defvar its-zhuyin-tw-enable-quanjioao-alphabet
45 (if (boundp 'its-enable-fullwidth-alphabet)
46 its-enable-fullwidth-alphabet
48 "*Enable Quanjiao alphabet")
50 (defvar its-zhuyin-tw-open-braket "
\e$(G!V
\e(B" "*[") ; "
\e$(G!b
\e(B "
51 (defvar its-zhuyin-tw-close-braket "
\e$(G!W
\e(B" "*]") ; "
\e$(G!c
\e(B"
54 (defmacro its-do-zhuyin-table (list)
56 ,@(mapcar (lambda (syl) `(its-define-zhuyin ,@syl))
59 (defmacro its-define-zhuyin (shengmu yunmu1 &optional yunmu2 qingsheng)
60 `(let ((s (list ,@shengmu))
61 (yi (concat (car ,yunmu1) (car ,yunmu2)))
62 (yo (concat (nth 1 ,yunmu1) (nth 1 ,yunmu2)))
63 (tone (if ,qingsheng "
\e(0A
\e(B" "
\e(0@
\e(B"))
66 (setq in (concat (car (car s)) yi)
67 out (concat (nth 1 (car s)) yo)
68 out1 (concat out tone)
69 state (its-defrule in out1)
71 (its-defrule (concat in " ") out1)
72 ,@(if (null qingsheng)
73 '((its-make-next-state state ?1 (concat out "
\e(0A
\e(B"))
74 (its-make-next-state state ?2 (concat out "
\e(0B
\e(B"))
75 (its-make-next-state state ?3 (concat out "
\e(0C
\e(B"))
76 (its-make-next-state state ?4 (concat out "
\e(0D
\e(B")))))))
78 (defmacro its-define-zhuyin-table ()
80 (B '("b" "
\e(0E
\e(B")) (P '("p" "
\e(0F
\e(B")) (M '("m" "
\e(0G
\e(B")) (F '("f" "
\e(0H
\e(B"))
81 (D '("d" "
\e(0I
\e(B")) (T '("t" "
\e(0J
\e(B")) (N '("n" "
\e(0K
\e(B")) (L '("l" "
\e(0L
\e(B"))
82 (G '("v" "
\e(0M
\e(B")) (K '("k" "
\e(0N
\e(B")) (H '("h" "
\e(0O
\e(B"))
83 (J '("g" "
\e(0P
\e(B")) (Q '("7" "
\e(0Q
\e(B")) (X '("c" "
\e(0R
\e(B"))
84 (ZH '("," "
\e(0S
\e(B")) (CH '("." "
\e(0T
\e(B")) (SH '("/" "
\e(0U
\e(B")) (R '("j" "
\e(0V
\e(B"))
85 (Z '(";" "
\e(0W
\e(B")) (C '(":" "
\e(0X
\e(B")) (S '("s" "
\e(0Y
\e(B"))
87 (A '("a" "
\e(0Z
\e(B")) (O '("o" "
\e(0[
\e(B")) (e '("r" "
\e(0\
\e(B")) (E '("w" "
\e(0]
\e(B"))
88 (AI '("i" "
\e(0^
\e(B")) (EI '("q" "
\e(0_
\e(B")) (AO '("z" "
\e(0`
\e(B"))
89 (AN '("8" "
\e(0b
\e(B")) (EN '("9" "
\e(0c
\e(B")) (ANG '("0" "
\e(0d
\e(B")) (ENG '("-" "
\e(0e
\e(B"))
90 (ER '("^" "
\e(0f
\e(B")) (OU '("y" "
\e(0a
\e(B"))
91 (I '("e" "
\e(0g
\e(B")) (U '("x" "
\e(0h
\e(B")) (V '("u" "
\e(0i
\e(B")))
93 (its-define-zhuyin (- H) M nil t)
94 (its-define-zhuyin (- H) '("@" "@") nil t)
95 (its-define-zhuyin (- ) N nil t)
98 ((( ZH CH SH R Z C S ) -)
99 ((- B P M F D T N L G K H ZH CH SH Z C S ) A)
101 ((- M D T N L G K H ZH CH SH R Z C S ) e)
102 ((- B P M D T N L G K H ZH CH SH Z C S ) AI)
103 ((- B P M F D T N L G K H ZH SH Z C ) EI)
104 ((- B P M D T N L G K H ZH CH SH R Z C S ) AO)
105 ((- B P M F D T N L G K H ZH CH SH R Z C S ) AN)
106 ((- B P M F D N G K H ZH CH SH R Z C S ) EN)
107 ((- B P M F D T N L G K H ZH CH SH R Z C S ) ANG)
108 ((- B P M F D T N L G K H ZH CH SH R Z C S ) ENG)
110 ((- P M F D T N L G K H ZH CH SH R Z C S ) OU)
111 ((- B P M D T N L J Q X ) I)
114 ((- B P M D T N L J Q X ) I E)
115 ((- B P M D T N L J Q X ) I AO)
116 ((- M D N L J Q X ) I OU)
117 ((- B P M D T N L J Q X ) I AN)
118 ((- B P M N L J Q X ) I EN)
119 ((- N L J Q X ) I ANG)
120 ((- B P M D T N L J Q X ) I ENG)
121 ((- B P M F D T N L G K H ZH CH SH R Z C S ) U)
122 ((- G K H ZH CH SH R ) U A)
123 ((- D T N L G K H ZH CH SH R Z C S ) U O)
124 ((- G K H ZH CH SH ) U AI)
125 ((- D T G K H ZH CH SH R Z C S ) U EI)
126 ((- D T N L G K H ZH CH SH R Z C S ) U AN)
127 ((- D T L G K H ZH CH SH R Z C S ) U EN)
128 ((- G K H ZH CH SH ) U ANG)
129 ((- D T N L G K H ZH CH R Z C S ) U ENG)
136 (mapcar (lambda (s) (its-defoutput (car s) (nth 1 s)))
137 (list B P M F D T N L G K H J Q X))
139 (its-defrule (concat (car N) 2) (concat (nth 1 N) "
\e(0B
\e(B"))
140 (its-defrule (concat (car N) 3) (concat (nth 1 N) "
\e(0C
\e(B"))
141 (its-defrule (concat (car N) 4) (concat (nth 1 N) "
\e(0D
\e(B")))))
143 (define-its-state-machine its-zhuyin-cn-map
144 "zhuyin-cn" "
\e$AW"
\e(BG" Chinese-GB
145 "Map for Zhuyin input. (Chinese-GB)"
147 (defconst its-quanjiao-escape "Z")
148 (defconst its-banjiao-escape "X")
150 (its-defrule-select-mode-temporally "B" downcase)
151 (its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
153 (its-define-zhuyin-table)
154 (dolist (ascii '(("0" . "
\e$A#0
\e(B") ("1" . "
\e$A#1
\e(B") ("2" . "
\e$A#2
\e(B") ("3" . "
\e$A#3
\e(B")
155 ("4" . "
\e$A#4
\e(B") ("5" . "
\e$A#5
\e(B") ("6" . "
\e$A#6
\e(B") ("7" . "
\e$A#7
\e(B")
156 ("8" . "
\e$A#8
\e(B") ("9" . "
\e$A#9
\e(B")
157 (" " . "
\e$A!!
\e(B") ("!" . "
\e$A#!
\e(B") ("@" . "
\e$A#@
\e(B") ("#" . "
\e$A##
\e(B")
158 ("$" . "
\e$A!g
\e(B") ("%" . "
\e$A#%
\e(B") ("^" . "
\e$A#^
\e(B") ("&" . "
\e$A#&
\e(B")
159 ("*" . "
\e$A#*
\e(B") ("(" . "
\e$A#(
\e(B") (")" . "
\e$A#)
\e(B")
160 ("-" . "
\e$A#-
\e(B") ("=" . "
\e$A#=
\e(B") ("`" . "
\e$A#`
\e(B") ("\\" . "
\e$A#\
\e(B")
161 ("|" . "
\e$A#|
\e(B") ("_" . "
\e$A#_
\e(B") ("+" . "
\e$A#+
\e(B") ("~" . "
\e$A!+
\e(B")
162 ("[" . "
\e$A#[
\e(B") ("]" . "
\e$A#]
\e(B") ("{" . "
\e$A#{
\e(B") ("}" . "
\e$A#}
\e(B")
163 (":" . "
\e$A#:
\e(B") (";" . "
\e$A#;
\e(B") ("\"" . "
\e$A#"
\e(B") ("'" . "
\e$A#'
\e(B")
164 ("<" . "
\e$A#<
\e(B") (">" . "
\e$A#>
\e(B") ("?" . "
\e$A#?
\e(B") ("/" . "
\e$A#/
\e(B")
165 ("," . "
\e$A#,
\e(B") ("." . "
\e$A#.
\e(B")
166 ("a" . "
\e$A#a
\e(B") ("b" . "
\e$A#b
\e(B") ("c" . "
\e$A#c
\e(B") ("d" . "
\e$A#d
\e(B")
167 ("e" . "
\e$A#e
\e(B") ("f" . "
\e$A#f
\e(B") ("g" . "
\e$A#g
\e(B") ("h" . "
\e$A#h
\e(B")
168 ("i" . "
\e$A#i
\e(B") ("j" . "
\e$A#j
\e(B") ("k" . "
\e$A#k
\e(B") ("l" . "
\e$A#l
\e(B")
169 ("m" . "
\e$A#m
\e(B") ("n" . "
\e$A#n
\e(B") ("o" . "
\e$A#o
\e(B") ("p" . "
\e$A#p
\e(B")
170 ("q" . "
\e$A#q
\e(B") ("r" . "
\e$A#r
\e(B") ("s" . "
\e$A#s
\e(B") ("t" . "
\e$A#t
\e(B")
171 ("u" . "
\e$A#u
\e(B") ("v" . "
\e$A#v
\e(B") ("w" . "
\e$A#w
\e(B") ("x" . "
\e$A#x
\e(B")
172 ("y" . "
\e$A#y
\e(B") ("z" . "
\e$A#z
\e(B")
173 ("A" . "
\e$A#A
\e(B") ("B" . "
\e$A#B
\e(B") ("C" . "
\e$A#C
\e(B") ("D" . "
\e$A#D
\e(B")
174 ("E" . "
\e$A#E
\e(B") ("F" . "
\e$A#F
\e(B") ("G" . "
\e$A#G
\e(B") ("H" . "
\e$A#H
\e(B")
175 ("I" . "
\e$A#I
\e(B") ("J" . "
\e$A#J
\e(B") ("K" . "
\e$A#K
\e(B") ("L" . "
\e$A#L
\e(B")
176 ("M" . "
\e$A#M
\e(B") ("N" . "
\e$A#N
\e(B") ("O" . "
\e$A#O
\e(B") ("P" . "
\e$A#P
\e(B")
177 ("Q" . "
\e$A#Q
\e(B") ("R" . "
\e$A#R
\e(B") ("S" . "
\e$A#S
\e(B") ("T" . "
\e$A#T
\e(B")
178 ("U" . "
\e$A#U
\e(B") ("V" . "
\e$A#V
\e(B") ("W" . "
\e$A#W
\e(B") ("X" . "
\e$A#X
\e(B")
179 ("Y" . "
\e$A#Y
\e(B") ("Z" . "
\e$A#Z
\e(B")))
180 (let ((in (car ascii)) (out (cdr ascii)))
181 (its-defrule (concat its-banjiao-escape in) in)
182 (its-defrule (concat its-quanjiao-escape in) out)))
184 (its-defrule "<" "
\e$A#,
\e(B")
185 (its-defrule ">" "
\e$A!#
\e(B")
186 (its-defrule "?" "
\e$A!"
\e(B"))
188 (define-its-state-machine its-zhuyin-tw-map
189 "zhuyin-tw" "
\e$(GNC
\e(BC" Chinese-CNS
190 "Map for Zhuyin input."
192 (defconst its-quanjiao-escape "Z")
193 (defconst its-banjiao-escape "X")
195 (its-defrule-select-mode-temporally "B" downcase)
196 (its-defrule-select-mode-temporally "Q" quanjiao-downcase-tw)
198 (its-define-zhuyin-table)
199 (dolist (ascii '(("0" . "
\e$(G$!
\e(B") ("1" . "
\e$(G$"
\e(B") ("2" . "
\e$(G$#
\e(B") ("3" . "
\e$(G$$
\e(B")
200 ("4" . "
\e$(G$%
\e(B") ("5" . "
\e$(G$&
\e(B") ("6" . "
\e$(G$'
\e(B") ("7" . "
\e$(G$(
\e(B")
201 ("8" . "
\e$(G$)
\e(B") ("9" . "
\e$(G$*
\e(B")
202 (" " . "
\e$(G!!
\e(B") ("!" . "
\e$(G!*
\e(B") ("@" . "
\e$(G"i
\e(B") ("#" . "
\e$(G!l
\e(B")
203 ("$" . "
\e$(G"c
\e(B") ("%" . "
\e$(G"h
\e(B") ("^" . "
\e$(G!T
\e(B") ("&" . "
\e$(G!m
\e(B")
204 ("*" . "
\e$(G!n
\e(B") ("(" . "
\e$(G!>
\e(B") (")" . "
\e$(G!?
\e(B")
205 ("-" . "
\e$(G"1
\e(B") ("=" . "
\e$(G"8
\e(B") ("`" . "
\e$(G!j
\e(B") ("\\" . "
\e$(G"`
\e(B")
206 ("|" . "
\e$(G"^
\e(B") ("_" . "
\e$(G"%
\e(B") ("+" . "
\e$(G"0
\e(B") ("~" . "
\e$(G"D
\e(B")
207 ("[" . "
\e$(G!b
\e(B") ("]" . "
\e$(G!c
\e(B") ("{" . "
\e$(G!B
\e(B") ("}" . "
\e$(G!C
\e(B")
208 (":" . "
\e$(G!(
\e(B") (";" . "
\e$(G!'
\e(B") ("\"" . "
\e$(G!i
\e(B") ("'" . "
\e$(G!k
\e(B")
209 ("<" . "
\e$(G"6
\e(B") (">" . "
\e$(G"7
\e(B") ("?" . "
\e$(G!)
\e(B") ("/" . "
\e$(G"_
\e(B")
210 ("," . "
\e$(G!"
\e(B") ("." . "
\e$(G!%
\e(B")
211 ("a" . "
\e$(G$[
\e(B") ("b" . "
\e$(G$\
\e(B") ("c" . "
\e$(G$]
\e(B") ("d" . "
\e$(G$^
\e(B")
212 ("e" . "
\e$(G$_
\e(B") ("f" . "
\e$(G$`
\e(B") ("g" . "
\e$(G$a
\e(B") ("h" . "
\e$(G$b
\e(B")
213 ("i" . "
\e$(G$c
\e(B") ("j" . "
\e$(G$d
\e(B") ("k" . "
\e$(G$e
\e(B") ("l" . "
\e$(G$f
\e(B")
214 ("m" . "
\e$(G$g
\e(B") ("n" . "
\e$(G$h
\e(B") ("o" . "
\e$(G$i
\e(B") ("p" . "
\e$(G$j
\e(B")
215 ("q" . "
\e$(G$k
\e(B") ("r" . "
\e$(G$l
\e(B") ("s" . "
\e$(G$m
\e(B") ("t" . "
\e$(G$n
\e(B")
216 ("u" . "
\e$(G$o
\e(B") ("v" . "
\e$(G$p
\e(B") ("w" . "
\e$(G$q
\e(B") ("x" . "
\e$(G$r
\e(B")
217 ("y" . "
\e$(G$s
\e(B") ("z" . "
\e$(G$t
\e(B")
218 ("A" . "
\e$(G$A
\e(B") ("B" . "
\e$(G$B
\e(B") ("C" . "
\e$(G$C
\e(B") ("D" . "
\e$(G$D
\e(B")
219 ("E" . "
\e$(G$E
\e(B") ("F" . "
\e$(G$F
\e(B") ("G" . "
\e$(G$G
\e(B") ("H" . "
\e$(G$H
\e(B")
220 ("I" . "
\e$(G$I
\e(B") ("J" . "
\e$(G$J
\e(B") ("K" . "
\e$(G$K
\e(B") ("L" . "
\e$(G$L
\e(B")
221 ("M" . "
\e$(G$M
\e(B") ("N" . "
\e$(G$N
\e(B") ("O" . "
\e$(G$O
\e(B") ("P" . "
\e$(G$P
\e(B")
222 ("Q" . "
\e$(G$Q
\e(B") ("R" . "
\e$(G$R
\e(B") ("S" . "
\e$(G$S
\e(B") ("T" . "
\e$(G$T
\e(B")
223 ("U" . "
\e$(G$U
\e(B") ("V" . "
\e$(G$V
\e(B") ("W" . "
\e$(G$W
\e(B") ("X" . "
\e$(G$X
\e(B")
224 ("Y" . "
\e$(G$Y
\e(B") ("Z" . "
\e$(G$Z
\e(B")))
225 (let ((in (car ascii)) (out (cdr ascii)))
226 (its-defrule (concat its-banjiao-escape in) in)
227 (its-defrule (concat its-quanjiao-escape in) out)))
229 (its-defrule "<" "
\e$(G!"
\e(B")
230 (its-defrule ">" "
\e$(G!$
\e(B")
231 (its-defrule "?" "
\e$(G!#
\e(B"))
233 (define-its-state-machine-append its-zhuyin-cn-map
234 (its-defrule "[" its-zhuyin-cn-open-braket nil t)
235 (its-defrule "]" its-zhuyin-cn-close-braket nil t)
237 (if its-zhuyin-cn-enable-quanjioao-alphabet
239 (its-defrule "#" "
\e$A##
\e(B") (its-defrule "$" "
\e$A!g
\e(B")
240 (its-defrule "%" "
\e$A#%
\e(B")
241 (its-defrule "&" "
\e$A#&
\e(B") (its-defrule "*" "
\e$A#*
\e(B")
242 (its-defrule "(" "
\e$A#(
\e(B") (its-defrule ")" "
\e$A#)
\e(B")
243 (its-defrule "~" "
\e$A!+
\e(B")
244 (its-defrule "=" "
\e$A#=
\e(B") (its-defrule "`" "
\e$A#`
\e(B")
245 (its-defrule "\\" "
\e$A#\
\e(B") (its-defrule "|" "
\e$A#|
\e(B")
246 (its-defrule "_" "
\e$A#_
\e(B") (its-defrule "+" "
\e$A#+
\e(B")
247 (its-defrule "{" "
\e$A#{
\e(B") (its-defrule "}" "
\e$A#}
\e(B")
248 (its-defrule "\"" "
\e$A#"
\e(B") (its-defrule "'" "
\e$A#'
\e(B"))
250 (its-defrule "#" "#") (its-defrule "$" "$")
251 (its-defrule "%" "%")
252 (its-defrule "&" "&") (its-defrule "*" "*")
253 (its-defrule "(" "(") (its-defrule ")" ")")
254 (its-defrule "~" "~")
255 (its-defrule "=" "=") (its-defrule "`" "`")
256 (its-defrule "\\" "\\") (its-defrule "|" "|")
257 (its-defrule "_" "_") (its-defrule "+" "+")
258 (its-defrule "{" "{") (its-defrule "}" "}")
259 (its-defrule "\"" "\"") (its-defrule "'" "'"))))
261 (define-its-state-machine-append its-zhuyin-tw-map
262 (its-defrule "[" its-zhuyin-tw-open-braket nil t)
263 (its-defrule "]" its-zhuyin-tw-close-braket nil t)
265 (if its-zhuyin-tw-enable-quanjioao-alphabet
267 (its-defrule "#" "
\e$(G!l
\e(B") (its-defrule "$" "
\e$(G"c
\e(B")
268 (its-defrule "%" "
\e$(G"h
\e(B")
269 (its-defrule "&" "
\e$(G!m
\e(B") (its-defrule "*" "
\e$(G!n
\e(B")
270 (its-defrule "(" "
\e$(G!>
\e(B") (its-defrule ")" "
\e$(G!?
\e(B")
271 (its-defrule "~" "
\e$(G"D
\e(B")
272 (its-defrule "=" "
\e$(G"8
\e(B") (its-defrule "`" "
\e$(G!j
\e(B")
273 (its-defrule "\\" "
\e$(G"`
\e(B") (its-defrule "|" "
\e$(G"^
\e(B")
274 (its-defrule "_" "
\e$(G"%
\e(B") (its-defrule "+" "
\e$(G"0
\e(B")
275 (its-defrule "{" "
\e$(G!B
\e(B") (its-defrule "}" "
\e$(G!C
\e(B")
276 (its-defrule "\"" "
\e$(G!i
\e(B") (its-defrule "'" "
\e$(G!k
\e(B"))
278 (its-defrule "#" "#") (its-defrule "$" "$")
279 (its-defrule "%" "%")
280 (its-defrule "&" "&") (its-defrule "*" "*")
281 (its-defrule "(" "(") (its-defrule ")" ")")
282 (its-defrule "~" "~")
283 (its-defrule "=" "=") (its-defrule "`" "`")
284 (its-defrule "\\" "\\") (its-defrule "|" "|")
285 (its-defrule "_" "_") (its-defrule "+" "+")
286 (its-defrule "{" "{") (its-defrule "}" "}")
287 (its-defrule "\"" "\"") (its-defrule "'" "'"))))
289 (provide 'its/zhuyin)