1 ;;; its/pinyin.el --- Pinyin 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-pinyin-cn-enable-quanjioao-alphabet
36 (if (boundp 'its-enable-fullwidth-alphabet)
37 its-enable-fullwidth-alphabet
39 "*Enable Quanjiao alphabet")
41 (defvar its-pinyin-cn-open-braket "
\e$A!8
\e(B" "*[") ; "
\e$A#[
\e(B"
42 (defvar its-pinyin-cn-close-braket "
\e$A!9
\e(B" "*]") ; "
\e$A#]
\e(B"
44 (defvar its-pinyin-tw-enable-quanjioao-alphabet t "*Enable Quanjiao alphabet")
45 (defvar its-pinyin-tw-open-braket "
\e$(G!V
\e(B" "*[") ; "
\e$(G!b
\e(B "
46 (defvar its-pinyin-tw-close-braket "
\e$(G!W
\e(B" "*]") ; "
\e$(G!c
\e(B"
49 (defconst its-pinyin-term
50 (char-to-string (make-char 'chinese-sisheng ?@)))
52 (defsubst its-defoutput* (input display)
53 (its-set-output (its-goto-state input nil t) display))
55 (defun its-prev-terminal-state (input)
56 (let ((len (length input))
57 (state (its-get-start-state (symbol-value its-current-map)))
58 (i 0) (ret nil) kst ks)
60 (setq state (its-get-next-state state (aref input i))))
61 (if (or (null (its-kst-p (setq kst (its-get-kst/t state))))
62 (mapcan (lambda (eob) (if (eq (its-eob-back eob) -1) (list t)))
64 (and (setq ks (assq -1 (car kst)))
65 (null (its-get-kst/t (cdr ks)))))
70 (defun its-define-qingsheng (shengmu yunmu &optional s y)
71 (let ((input (concat shengmu yunmu))
72 (output (concat (if s s (capitalize shengmu))
75 state term kst i len c+b)
76 (setq state (its-goto-state input nil t))
77 (its-make-next-state state -1 input output)
78 (its-make-next-state state ? (concat input " ") output)
79 (its-make-next-state state ?0 (concat input "0") output)
81 state (its-make-otherwise output its-otherwise-back-one))
82 (setq term (its-prev-terminal-state (substring input 0 -1)))
85 (setq len (length (its-get-keyseq term))
87 output (car (rassoc '(nil . -1) (cdr (its-get-kst/t term)))))
89 (eq (setq term (its-get-next-state term (aref input i)))
91 (setq i (1+ i) kst (its-get-kst/t term))
92 (if (null (assq -1 (car kst)))
93 (its-make-next-state term -1
94 (its-get-keyseq term) output (- len i)))
95 (setq c+b (its-make-class+back nil (1- (- len i))))
96 (if (null (rassoc c+b (cdr kst)))
97 (its-define-otherwise term
98 (its-make-otherwise output c+b))))))
101 (defmacro its-do-sisheng-table (list)
103 ,@(mapcar (lambda (syl)
104 `(its-define-sisheng ,@syl))
107 (defmacro its-define-sisheng (shengmu yunmu)
108 `(let ((qing (nth 5 ,yunmu)) (y (car ,yunmu))
109 (ss (list ,@shengmu)) s cs state i)
113 state (its-define-qingsheng s y cs qing))
116 (its-make-next-state state (+ ?0 i)
118 (concat cs (nth i ,yunmu) its-pinyin-term))
120 (setq ss (cdr ss)))))
122 (defmacro its-define-pinyin-table ()
123 '(let ((- "") (B "b") (C "c") (D "d") (F "f") (G "g") (H "h")
124 (J "j") (K "k") (L "l") (M "m") (N "n") (P "p") (Q "q")
125 (R "r") (S "s") (T "t") (W "w") (X "x") (Y "y") (Z "z")
126 (CH "ch") (SH "sh") (ZH "zh")
128 (A '("a" "
\e(0!
\e(B" "
\e(0"
\e(B" "
\e(0#
\e(B" "
\e(0$
\e(B" "a" ))
129 (AI '("ai" "
\e(0!
\e(Bi" "
\e(0"
\e(Bi" "
\e(0#
\e(Bi" "
\e(0$
\e(Bi" "ai" ))
130 (AN '("an" "
\e(0!
\e(Bn" "
\e(0"
\e(Bn" "
\e(0#
\e(Bn" "
\e(0$
\e(Bn" "an" ))
131 (ANG '("ang" "
\e(0!
\e(Bng" "
\e(0"
\e(Bng" "
\e(0#
\e(Bng" "
\e(0$
\e(Bng" "ang" ))
132 (AO '("ao" "
\e(0!
\e(Bo" "
\e(0"
\e(Bo" "
\e(0#
\e(Bo" "
\e(0$
\e(Bo" "ao" ))
133 (E '("e" "
\e(0%
\e(B" "
\e(0&
\e(B" "
\e(0'
\e(B" "
\e(0(
\e(B" "e" ))
134 (EI '("ei" "
\e(0%
\e(Bi" "
\e(0&
\e(Bi" "
\e(0'
\e(Bi" "
\e(0(
\e(Bi" "ei" ))
135 (EN '("en" "
\e(0%
\e(Bn" "
\e(0&
\e(Bn" "
\e(0'
\e(Bn" "
\e(0(
\e(Bn" "en" ))
136 (ENG '("eng" "
\e(0%
\e(Bng" "
\e(0&
\e(Bng" "
\e(0'
\e(Bng" "
\e(0(
\e(Bng" "eng" ))
137 (ER '("er" "
\e(0%
\e(Br" "
\e(0&
\e(Br" "
\e(0'
\e(Br" "
\e(0(
\e(Br" "er" ))
138 (I '("i" "
\e(0)
\e(B" "
\e(0*
\e(B" "
\e(0+
\e(B" "
\e(0,
\e(B" "i" ))
139 (IA '("ia" "i
\e(0!
\e(B" "i
\e(0"
\e(B" "i
\e(0#
\e(B" "i
\e(0$
\e(B" "ia" ))
140 (IAN '("ian" "i
\e(0!
\e(Bn" "i
\e(0"
\e(Bn" "i
\e(0#
\e(Bn" "i
\e(0$
\e(Bn" "ian" ))
141 (IANG '("iang" "i
\e(0!
\e(Bng" "i
\e(0"
\e(Bng" "i
\e(0#
\e(Bng" "i
\e(0$
\e(Bng" "iang"))
142 (IAO '("iao" "i
\e(0!
\e(Bo" "i
\e(0"
\e(Bo" "i
\e(0#
\e(Bo" "i
\e(0$
\e(Bo" "iao" ))
143 (IE '("ie" "i
\e(0%
\e(B" "i
\e(0&
\e(B" "i
\e(0'
\e(B" "i
\e(0(
\e(B" "ie" ))
144 (IN '("in" "
\e(0)
\e(Bn" "
\e(0*
\e(Bn" "
\e(0+
\e(Bn" "
\e(0,
\e(Bn" "in" ))
145 (ING '("ing" "
\e(0)
\e(Bng" "
\e(0*
\e(Bng" "
\e(0+
\e(Bng" "
\e(0,
\e(Bng" "ing" ))
146 (IONG '("iong" "i
\e(0-
\e(Bng" "i
\e(0.
\e(Bng" "i
\e(0/
\e(Bng" "i
\e(00
\e(Bng" "iong"))
147 (IU '("iu" "i
\e(01
\e(B" "i
\e(02
\e(B" "i
\e(03
\e(B" "i
\e(04
\e(B" "iu" ))
148 (O '("o" "
\e(0-
\e(B" "
\e(0.
\e(B" "
\e(0/
\e(B" "
\e(00
\e(B" "o" ))
149 (ONG '("ong" "
\e(0-
\e(Bng" "
\e(0.
\e(Bng" "
\e(0/
\e(Bng" "
\e(00
\e(Bng" "ong" ))
150 (OU '("ou" "
\e(0-
\e(Bu" "
\e(0.
\e(Bu" "
\e(0/
\e(Bu" "
\e(00
\e(Bu" "ou" ))
151 (U '("u" "
\e(01
\e(B" "
\e(02
\e(B" "
\e(03
\e(B" "
\e(04
\e(B" "u" ))
152 (V '("v" "
\e(05
\e(B" "
\e(06
\e(B" "
\e(07
\e(B" "
\e(08
\e(B" "
\e(09
\e(B" ))
153 (UA '("ua" "u
\e(0!
\e(B" "u
\e(0"
\e(B" "u
\e(0#
\e(B" "u
\e(0$
\e(B" "ua" ))
154 (UAI '("uai" "u
\e(0!
\e(Bi" "u
\e(0"
\e(Bi" "u
\e(0#
\e(Bi" "u
\e(0$
\e(Bi" "uai" ))
155 (UAN '("uan" "u
\e(0!
\e(Bn" "u
\e(0"
\e(Bn" "u
\e(0#
\e(Bn" "u
\e(0$
\e(Bn" "uan" ))
156 (UANG '("uang" "u
\e(0!
\e(Bng" "u
\e(0"
\e(Bng" "u
\e(0#
\e(Bng" "u
\e(0$
\e(Bng" "uang"))
157 (UE '("ue" "u
\e(0%
\e(B" "u
\e(0&
\e(B" "u
\e(0'
\e(B" "u
\e(0(
\e(B" "ue" ))
158 (VE '("ve" "
\e(09%
\e(B" "
\e(09&
\e(B" "
\e(09'
\e(B" "
\e(09(
\e(B" "
\e(09
\e(Be" ))
159 (UI '("ui" "u
\e(0)
\e(B" "u
\e(0*
\e(B" "u
\e(0+
\e(B" "u
\e(0,
\e(B" "ui" ))
160 (UN '("un" "
\e(01
\e(Bn" "
\e(02
\e(Bn" "
\e(03
\e(Bn" "
\e(04
\e(Bn" "un" ))
161 (UO '("uo" "u
\e(0-
\e(B" "u
\e(0.
\e(B" "u
\e(0/
\e(B" "u
\e(00
\e(B" "uo" )))
163 (its-do-sisheng-table
164 (((- B C D F G H K L M N P S T W Y Z CH SH ZH ) A)
165 ((- B C D G H K L M N P S T W Z CH SH ZH ) AI)
166 ((- B C D F G H K L M N P R S T W Y Z CH SH ZH ) AN)
167 ((- B C D F G H K L M N P R S T W Y Z CH SH ZH ) ANG)
168 ((- B C D G H K L M N P R S T Y Z CH SH ZH ) AO)
169 ((- C D G H K L M N R S T Y Z CH SH ZH ) E)
170 ((- B C D F G H K L M N P T W Z SH ZH ) EI)
171 ((- B C D F G H K M N P R S W Z CH SH ZH ) EN)
172 ((- B C D F G H K L M N P R S T W Z CH SH ZH ) ENG)
174 (( B C D J L M N P Q R S T X Y Z CH SH ZH ) I)
176 (( B D J L M N P Q T X ) IAN)
178 (( B D J L M N P Q T X ) IAO)
179 (( B D J L M N P Q T X ) IE)
180 (( B J L M N P Q X Y ) IN)
181 (( B D J L M N P Q T X Y ) ING)
183 (( D J L M N Q X ) IU)
184 ((- B F L M P W Y ) O)
185 (( C D G H K L N R S T Y Z CH ZH ) ONG)
186 ((- C D F G H K L M N P R S T Y Z CH SH ZH ) OU)
187 (( B C D F G H J K L M N P Q R S T W X Y Z CH SH ZH ) U)
189 (( G H K R CH SH ZH ) UA)
190 (( G H K CH SH ZH ) UAI)
191 (( C D G H J K L N Q R S T X Y Z CH SH ZH ) UAN)
192 (( G H K CH SH ZH ) UANG)
195 (( C D G H K R S T Z CH SH ZH ) UI)
196 (( C D G H J K L Q R S T X Y Z CH SH ZH ) UN)
197 (( C D G H K L N R S T Z CH SH ZH ) UO)
199 ((J Q X) (cons "a" (cdr IA )))
200 ((J Q X) (cons "ai" (cdr IA )))
201 ((J Q X) (cons "an" (cdr IAN )))
202 ((J Q X) (cons "ang" (cdr IANG)))
203 ((J Q X) (cons "ao" (cdr IAO )))
204 ((J Q X) (cons "e" (cdr IE )))
205 ((J Q X) (cons "ei" (cdr IE )))
206 ((J Q X) (cons "en" (cdr IN )))
207 ((J Q X) (cons "eng" (cdr ING )))
208 ((J Q X) (cons "ou" (cdr IU )))))
210 (its-define-qingsheng "hm" "")
211 (its-define-qingsheng "hng" "")
212 (its-define-qingsheng "" "ng")
214 (its-define-qingsheng "" "m")
215 (its-define-qingsheng "" "n")
216 (its-defrule "n2" "
\e(0=@
\e(B")
217 (its-defrule "n3" "
\e(0>@
\e(B")
218 (its-defrule "n4" "
\e(0?@
\e(B"))))
220 (define-its-state-machine its-pinyin-cn-map
221 "pinyin-cn" "
\e$AF4
\e(BG" 'Chinese-GB
222 "Map for Pinyin input. (Chinese-GB)"
224 (defconst its-quanjiao-escape "Z")
225 (defconst its-banjiao-escape "X")
227 (its-defrule-select-mode-temporally "B" downcase)
228 (its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
230 (its-define-pinyin-table)
231 (its-defoutput* "b " "
\e$A2;
\e(B")
232 (its-defoutput* "c " "
\e$A2E
\e(B")
233 (its-defoutput* "ch " "
\e$A3v
\e(B")
234 (its-defoutput* "d " "
\e$A5D
\e(B")
235 (its-defoutput* "f " "
\e$A74
\e(B")
236 (its-defoutput* "g " "
\e$A8v
\e(B")
237 (its-defoutput* "h " "
\e$A:M
\e(B")
238 (its-defoutput* "i " "
\e$AR;
\e(B")
239 (its-defoutput* "j " "
\e$A>M
\e(B")
240 (its-defoutput* "k " "
\e$A?I
\e(B")
241 (its-defoutput* "l " "
\e$AAK
\e(B")
242 (its-defoutput* "m " "
\e$AC?
\e(B")
243 (its-defoutput* "n " "
\e$ADj
\e(B")
244 (its-defoutput* "p " "
\e$AEz
\e(B")
245 (its-defoutput* "q " "
\e$AH%
\e(B")
246 (its-defoutput* "r " "
\e$AHU
\e(B")
247 (its-defoutput* "s " "
\e$AJG
\e(B")
248 (its-defoutput* "sh " "
\e$AIO
\e(B")
249 (its-defoutput* "t " "
\e$AK{
\e(B")
250 (its-defoutput* "w " "
\e$ANR
\e(B")
251 (its-defoutput* "x " "
\e$AOr
\e(B")
252 (its-defoutput* "y " "
\e$ASV
\e(B")
253 (its-defoutput* "z " "
\e$ATZ
\e(B")
254 (its-defoutput* "zh " "
\e$AWE
\e(B")
256 (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")
257 ("4" . "
\e$A#4
\e(B") ("5" . "
\e$A#5
\e(B") ("6" . "
\e$A#6
\e(B") ("7" . "
\e$A#7
\e(B")
258 ("8" . "
\e$A#8
\e(B") ("9" . "
\e$A#9
\e(B")
259 (" " . "
\e$A!!
\e(B") ("!" . "
\e$A#!
\e(B") ("@" . "
\e$A#@
\e(B") ("#" . "
\e$A##
\e(B")
260 ("$" . "
\e$A!g
\e(B") ("%" . "
\e$A#%
\e(B") ("^" . "
\e$A#^
\e(B") ("&" . "
\e$A#&
\e(B")
261 ("*" . "
\e$A#*
\e(B") ("(" . "
\e$A#(
\e(B") (")" . "
\e$A#)
\e(B")
262 ("-" . "
\e$A#-
\e(B") ("=" . "
\e$A#=
\e(B") ("`" . "
\e$A#`
\e(B") ("\\" . "
\e$A#\
\e(B")
263 ("|" . "
\e$A#|
\e(B") ("_" . "
\e$A#_
\e(B") ("+" . "
\e$A#+
\e(B") ("~" . "
\e$A!+
\e(B")
264 ("[" . "
\e$A#[
\e(B") ("]" . "
\e$A#]
\e(B") ("{" . "
\e$A#{
\e(B") ("}" . "
\e$A#}
\e(B")
265 (":" . "
\e$A#:
\e(B") (";" . "
\e$A#;
\e(B") ("\"" . "
\e$A#"
\e(B") ("'" . "
\e$A#'
\e(B")
266 ("<" . "
\e$A#<
\e(B") (">" . "
\e$A#>
\e(B") ("?" . "
\e$A#?
\e(B") ("/" . "
\e$A#/
\e(B")
267 ("," . "
\e$A#,
\e(B") ("." . "
\e$A#.
\e(B")
268 ("a" . "
\e$A#a
\e(B") ("b" . "
\e$A#b
\e(B") ("c" . "
\e$A#c
\e(B") ("d" . "
\e$A#d
\e(B")
269 ("e" . "
\e$A#e
\e(B") ("f" . "
\e$A#f
\e(B") ("g" . "
\e$A#g
\e(B") ("h" . "
\e$A#h
\e(B")
270 ("i" . "
\e$A#i
\e(B") ("j" . "
\e$A#j
\e(B") ("k" . "
\e$A#k
\e(B") ("l" . "
\e$A#l
\e(B")
271 ("m" . "
\e$A#m
\e(B") ("n" . "
\e$A#n
\e(B") ("o" . "
\e$A#o
\e(B") ("p" . "
\e$A#p
\e(B")
272 ("q" . "
\e$A#q
\e(B") ("r" . "
\e$A#r
\e(B") ("s" . "
\e$A#s
\e(B") ("t" . "
\e$A#t
\e(B")
273 ("u" . "
\e$A#u
\e(B") ("v" . "
\e$A#v
\e(B") ("w" . "
\e$A#w
\e(B") ("x" . "
\e$A#x
\e(B")
274 ("y" . "
\e$A#y
\e(B") ("z" . "
\e$A#z
\e(B")
275 ("A" . "
\e$A#A
\e(B") ("B" . "
\e$A#B
\e(B") ("C" . "
\e$A#C
\e(B") ("D" . "
\e$A#D
\e(B")
276 ("E" . "
\e$A#E
\e(B") ("F" . "
\e$A#F
\e(B") ("G" . "
\e$A#G
\e(B") ("H" . "
\e$A#H
\e(B")
277 ("I" . "
\e$A#I
\e(B") ("J" . "
\e$A#J
\e(B") ("K" . "
\e$A#K
\e(B") ("L" . "
\e$A#L
\e(B")
278 ("M" . "
\e$A#M
\e(B") ("N" . "
\e$A#N
\e(B") ("O" . "
\e$A#O
\e(B") ("P" . "
\e$A#P
\e(B")
279 ("Q" . "
\e$A#Q
\e(B") ("R" . "
\e$A#R
\e(B") ("S" . "
\e$A#S
\e(B") ("T" . "
\e$A#T
\e(B")
280 ("U" . "
\e$A#U
\e(B") ("V" . "
\e$A#V
\e(B") ("W" . "
\e$A#W
\e(B") ("X" . "
\e$A#X
\e(B")
281 ("Y" . "
\e$A#Y
\e(B") ("Z" . "
\e$A#Z
\e(B")))
282 (let ((in (car ascii)) (out (cdr ascii)))
283 (its-defrule (concat its-banjiao-escape in) in)
284 (its-defrule (concat its-quanjiao-escape in) out)))
286 (its-defrule "," "
\e$A#,
\e(B")
287 (its-defrule "." "
\e$A!#
\e(B")
288 (its-defrule "/" "
\e$A!"
\e(B")
289 (its-defrule ":" "
\e$A#:
\e(B")
290 (its-defrule ";" "
\e$A#;
\e(B")
291 (its-defrule "?" "
\e$A#?
\e(B")
292 (its-defrule "!" "
\e$A#!
\e(B"))
294 (define-its-state-machine its-pinyin-tw-map
295 "pinyin-tw" "
\e$(GQ;
\e(BC" 'Chinese-CNS
296 "Map for Pinyin input."
298 (defconst its-quanjiao-escape "Z")
299 (defconst its-banjiao-escape "X")
301 (its-defrule-select-mode-temporally "B" downcase)
302 (its-defrule-select-mode-temporally "Q" quanjiao-downcase-tw)
304 (its-define-pinyin-table)
305 (its-defoutput* "b " "
\e$(GDb
\e(B")
306 (its-defoutput* "c " "
\e$(GD_
\e(B")
307 (its-defoutput* "ch " "
\e$(GEx
\e(B")
308 (its-defoutput* "d " "
\e$(GN{
\e(B")
309 (its-defoutput* "f " "
\e$(GE0
\e(B")
310 (its-defoutput* "g " "
\e$(GT6
\e(B")
311 (its-defoutput* "h " "
\e$(GLO
\e(B")
312 (its-defoutput* "i " "
\e$(GD!
\e(B")
313 (its-defoutput* "j " "
\e$(G^s
\e(B")
314 (its-defoutput* "k " "
\e$(GF+
\e(B")
315 (its-defoutput* "l " "
\e$(GD'
\e(B")
316 (its-defoutput* "m " "
\e$(GJd
\e(B")
317 (its-defoutput* "n " "
\e$(GH!
\e(B")
318 (its-defoutput* "p " "
\e$(GJG
\e(B")
319 (its-defoutput* "q " "
\e$(GF*
\e(B")
320 (its-defoutput* "r " "
\e$(GEJ
\e(B")
321 (its-defoutput* "s " "
\e$(GQR
\e(B")
322 (its-defoutput* "sh " "
\e$(GD8
\e(B")
323 (its-defoutput* "t " "
\e$(GEl
\e(B")
324 (its-defoutput* "w " "
\e$(GJ<
\e(B")
325 (its-defoutput* "x " "
\e$(GGW
\e(B")
326 (its-defoutput* "y " "
\e$(GD4
\e(B")
327 (its-defoutput* "z " "
\e$(GGc
\e(B")
328 (its-defoutput* "zh " "
\e$(Gaa
\e(B")
330 (dolist (ascii '(("0" . "
\e$(G$!
\e(B") ("1" . "
\e$(G$"
\e(B") ("2" . "
\e$(G$#
\e(B") ("3" . "
\e$(G$$
\e(B")
331 ("4" . "
\e$(G$%
\e(B") ("5" . "
\e$(G$&
\e(B") ("6" . "
\e$(G$'
\e(B") ("7" . "
\e$(G$(
\e(B")
332 ("8" . "
\e$(G$)
\e(B") ("9" . "
\e$(G$*
\e(B")
333 (" " . "
\e$(G!!
\e(B") ("!" . "
\e$(G!*
\e(B") ("@" . "
\e$(G"i
\e(B") ("#" . "
\e$(G!l
\e(B")
334 ("$" . "
\e$(G"c
\e(B") ("%" . "
\e$(G"h
\e(B") ("^" . "
\e$(G!T
\e(B") ("&" . "
\e$(G!m
\e(B")
335 ("*" . "
\e$(G!n
\e(B") ("(" . "
\e$(G!>
\e(B") (")" . "
\e$(G!?
\e(B")
336 ("-" . "
\e$(G"1
\e(B") ("=" . "
\e$(G"8
\e(B") ("`" . "
\e$(G!j
\e(B") ("\\" . "
\e$(G"`
\e(B")
337 ("|" . "
\e$(G"^
\e(B") ("_" . "
\e$(G"%
\e(B") ("+" . "
\e$(G"0
\e(B") ("~" . "
\e$(G"D
\e(B")
338 ("[" . "
\e$(G!b
\e(B") ("]" . "
\e$(G!c
\e(B") ("{" . "
\e$(G!B
\e(B") ("}" . "
\e$(G!C
\e(B")
339 (":" . "
\e$(G!(
\e(B") (";" . "
\e$(G!'
\e(B") ("\"" . "
\e$(G!i
\e(B") ("'" . "
\e$(G!k
\e(B")
340 ("<" . "
\e$(G"6
\e(B") (">" . "
\e$(G"7
\e(B") ("?" . "
\e$(G!)
\e(B") ("/" . "
\e$(G"_
\e(B")
341 ("," . "
\e$(G!"
\e(B") ("." . "
\e$(G!%
\e(B")
342 ("a" . "
\e$(G$[
\e(B") ("b" . "
\e$(G$\
\e(B") ("c" . "
\e$(G$]
\e(B") ("d" . "
\e$(G$^
\e(B")
343 ("e" . "
\e$(G$_
\e(B") ("f" . "
\e$(G$`
\e(B") ("g" . "
\e$(G$a
\e(B") ("h" . "
\e$(G$b
\e(B")
344 ("i" . "
\e$(G$c
\e(B") ("j" . "
\e$(G$d
\e(B") ("k" . "
\e$(G$e
\e(B") ("l" . "
\e$(G$f
\e(B")
345 ("m" . "
\e$(G$g
\e(B") ("n" . "
\e$(G$h
\e(B") ("o" . "
\e$(G$i
\e(B") ("p" . "
\e$(G$j
\e(B")
346 ("q" . "
\e$(G$k
\e(B") ("r" . "
\e$(G$l
\e(B") ("s" . "
\e$(G$m
\e(B") ("t" . "
\e$(G$n
\e(B")
347 ("u" . "
\e$(G$o
\e(B") ("v" . "
\e$(G$p
\e(B") ("w" . "
\e$(G$q
\e(B") ("x" . "
\e$(G$r
\e(B")
348 ("y" . "
\e$(G$s
\e(B") ("z" . "
\e$(G$t
\e(B")
349 ("A" . "
\e$(G$A
\e(B") ("B" . "
\e$(G$B
\e(B") ("C" . "
\e$(G$C
\e(B") ("D" . "
\e$(G$D
\e(B")
350 ("E" . "
\e$(G$E
\e(B") ("F" . "
\e$(G$F
\e(B") ("G" . "
\e$(G$G
\e(B") ("H" . "
\e$(G$H
\e(B")
351 ("I" . "
\e$(G$I
\e(B") ("J" . "
\e$(G$J
\e(B") ("K" . "
\e$(G$K
\e(B") ("L" . "
\e$(G$L
\e(B")
352 ("M" . "
\e$(G$M
\e(B") ("N" . "
\e$(G$N
\e(B") ("O" . "
\e$(G$O
\e(B") ("P" . "
\e$(G$P
\e(B")
353 ("Q" . "
\e$(G$Q
\e(B") ("R" . "
\e$(G$R
\e(B") ("S" . "
\e$(G$S
\e(B") ("T" . "
\e$(G$T
\e(B")
354 ("U" . "
\e$(G$U
\e(B") ("V" . "
\e$(G$V
\e(B") ("W" . "
\e$(G$W
\e(B") ("X" . "
\e$(G$X
\e(B")
355 ("Y" . "
\e$(G$Y
\e(B") ("Z" . "
\e$(G$Z
\e(B")))
356 (let ((in (car ascii)) (out (cdr ascii)))
357 (its-defrule (concat its-banjiao-escape in) in)
358 (its-defrule (concat its-quanjiao-escape in) out)))
360 (its-defrule "," "
\e$(G!"
\e(B")
361 (its-defrule "." "
\e$(G!$
\e(B")
362 (its-defrule "/" "
\e$(G!#
\e(B")
363 (its-defrule ":" "
\e$(G!(
\e(B")
364 (its-defrule ";" "
\e$(G!'
\e(B")
365 (its-defrule "?" "
\e$(G!)
\e(B")
366 (its-defrule "!" "
\e$(G!*
\e(B"))
368 (define-its-state-machine-append its-pinyin-cn-map
369 (its-defrule "[" its-pinyin-cn-open-braket)
370 (its-defrule "]" its-pinyin-cn-close-braket)
372 (if its-pinyin-cn-enable-quanjioao-alphabet
374 (its-defrule "1" "
\e$A#1
\e(B") (its-defrule "2" "
\e$A#2
\e(B")
375 (its-defrule "3" "
\e$A#3
\e(B") (its-defrule "4" "
\e$A#4
\e(B")
376 (its-defrule "5" "
\e$A#5
\e(B") (its-defrule "6" "
\e$A#6
\e(B")
377 (its-defrule "7" "
\e$A#7
\e(B") (its-defrule "8" "
\e$A#8
\e(B")
378 (its-defrule "9" "
\e$A#9
\e(B") (its-defrule "0" "
\e$A#0
\e(B")
379 (its-defrule "@" "
\e$A#@
\e(B")
380 (its-defrule "#" "
\e$A##
\e(B") (its-defrule "$" "
\e$A!g
\e(B")
381 (its-defrule "%" "
\e$A#%
\e(B") (its-defrule "^" "
\e$A#^
\e(B")
382 (its-defrule "&" "
\e$A#&
\e(B") (its-defrule "*" "
\e$A#*
\e(B")
383 (its-defrule "(" "
\e$A#(
\e(B") (its-defrule ")" "
\e$A#)
\e(B")
384 (its-defrule "-" "
\e$A#-
\e(B") (its-defrule "~" "
\e$A!+
\e(B")
385 (its-defrule "=" "
\e$A#=
\e(B") (its-defrule "`" "
\e$A#`
\e(B")
386 (its-defrule "\\" "
\e$A#\
\e(B") (its-defrule "|" "
\e$A#|
\e(B")
387 (its-defrule "_" "
\e$A#_
\e(B") (its-defrule "+" "
\e$A#+
\e(B")
388 (its-defrule "{" "
\e$(G!B
\e(B") (its-defrule "}" "
\e$(G!C
\e(B")
389 (its-defrule "\"" "
\e$A#"
\e(B") (its-defrule "'" "
\e$A#'
\e(B")
390 (its-defrule "<" "
\e$A#<
\e(B") (its-defrule ">" "
\e$A#>
\e(B"))
392 (its-defrule "1" "1") (its-defrule "2" "2")
393 (its-defrule "3" "3") (its-defrule "4" "4")
394 (its-defrule "5" "5") (its-defrule "6" "6")
395 (its-defrule "7" "7") (its-defrule "8" "8")
396 (its-defrule "9" "9") (its-defrule "0" "0")
397 (its-defrule "@" "@")
398 (its-defrule "#" "#") (its-defrule "$" "$")
399 (its-defrule "%" "%") (its-defrule "^" "^")
400 (its-defrule "&" "&") (its-defrule "*" "*")
401 (its-defrule "(" "(") (its-defrule ")" ")")
402 (its-defrule "-" "-") (its-defrule "~" "~")
403 (its-defrule "=" "=") (its-defrule "`" "`")
404 (its-defrule "\\" "\\") (its-defrule "|" "|")
405 (its-defrule "_" "_") (its-defrule "+" "+")
406 (its-defrule "{" "{") (its-defrule "}" "}")
407 (its-defrule "\"" "\"") (its-defrule "'" "'")
408 (its-defrule "<" "<") (its-defrule ">" ">"))))
410 (define-its-state-machine-append its-pinyin-tw-map
411 (its-defrule "[" its-pinyin-tw-open-braket)
412 (its-defrule "]" its-pinyin-tw-close-braket)
414 (if its-pinyin-tw-enable-quanjioao-alphabet
416 (its-defrule "1" "
\e$(G$"
\e(B") (its-defrule "2" "
\e$(G$#
\e(B")
417 (its-defrule "3" "
\e$(G$$
\e(B") (its-defrule "4" "
\e$(G$%
\e(B")
418 (its-defrule "5" "
\e$(G$&
\e(B") (its-defrule "6" "
\e$(G$'
\e(B")
419 (its-defrule "7" "
\e$(G$(
\e(B") (its-defrule "8" "
\e$(G$)
\e(B")
420 (its-defrule "9" "
\e$(G$*
\e(B") (its-defrule "0" "
\e$(G$!
\e(B")
421 (its-defrule "@" "
\e$(G"i
\e(B")
422 (its-defrule "#" "
\e$(G!l
\e(B") (its-defrule "$" "
\e$(G"c
\e(B")
423 (its-defrule "%" "
\e$(G"h
\e(B") (its-defrule "^" "
\e$(G!T
\e(B")
424 (its-defrule "&" "
\e$(G!m
\e(B") (its-defrule "*" "
\e$(G!n
\e(B")
425 (its-defrule "(" "
\e$(G!>
\e(B") (its-defrule ")" "
\e$(G!?
\e(B")
426 (its-defrule "-" "
\e$(G"1
\e(B") (its-defrule "~" "
\e$(G"D
\e(B")
427 (its-defrule "=" "
\e$(G"8
\e(B") (its-defrule "`" "
\e$(G!j
\e(B")
428 (its-defrule "\\" "
\e$(G"b
\e(B") (its-defrule "|" "
\e$(G"^
\e(B")
429 (its-defrule "_" "
\e$(G"%
\e(B") (its-defrule "+" "
\e$(G"0
\e(B")
430 (its-defrule "{" "
\e$A#{
\e(B") (its-defrule "}" "
\e$(G!a
\e(B")
431 (its-defrule "\"" "
\e$(G!i
\e(B") (its-defrule "'" "
\e$(G!k
\e(B")
432 (its-defrule "<" "
\e$(G"6
\e(B") (its-defrule ">" "
\e$(G"7
\e(B"))
434 (its-defrule "1" "1") (its-defrule "2" "2")
435 (its-defrule "3" "3") (its-defrule "4" "4")
436 (its-defrule "5" "5") (its-defrule "6" "6")
437 (its-defrule "7" "7") (its-defrule "8" "8")
438 (its-defrule "9" "9") (its-defrule "0" "0")
439 (its-defrule "@" "@")
440 (its-defrule "#" "#") (its-defrule "$" "$")
441 (its-defrule "%" "%") (its-defrule "^" "^")
442 (its-defrule "&" "&") (its-defrule "*" "*")
443 (its-defrule "(" "(") (its-defrule ")" ")")
444 (its-defrule "-" "-") (its-defrule "~" "~")
445 (its-defrule "=" "=") (its-defrule "`" "`")
446 (its-defrule "\\" "\\") (its-defrule "|" "|")
447 (its-defrule "_" "_") (its-defrule "+" "+")
448 (its-defrule "{" "{") (its-defrule "}" "}")
449 (its-defrule "\"" "\"") (its-defrule "'" "'")
450 (its-defrule "<" "<") (its-defrule ">" ">"))))
452 (provide 'its/pinyin)