egg-980304.
[elisp/egg.git] / its / erpin.el
1 (eval-when-compile
2   (require 'its)
3   (require 'cl))
4
5 (defvar its-erpin-cn-enable-quanjioao-alphabet t "*Enable Quanjiao alphabet")
6 (defvar its-erpin-cn-open-braket  "\e$A!8\e(B" "*[") ; "\e$A#[\e(B"
7 (defvar its-erpin-cn-close-braket "\e$A!9\e(B" "*]") ; "\e$A#]\e(B"
8
9 (defvar its-erpin-tw-enable-quanjioao-alphabet t "*Enable Quanjiao alphabet")
10 (defvar its-erpin-tw-open-braket  "\e$(G!V\e(B" "*[") ; "\e$(G!b\e(B "
11 (defvar its-erpin-tw-close-braket "\e$(G!W\e(B" "*]") ; "\e$(G!c\e(B"
12
13 (eval-when-compile
14   (defsubst its-defoutput* (input display)
15     (its-set-output (its-goto-state input nil t) display))
16
17   (defun its-define-erpin-qingsheng (shengmu yunmu &optional y)
18     (let ((input (concat (car shengmu) yunmu))
19           (output (concat (cdr shengmu) (if y y yunmu) "\e(0@\e(B"))
20           state)
21       (setq state (its-goto-state input nil t))
22       (its-set-output state output)
23       (its-make-next-state state -1 input              output)
24       (its-make-next-state state ?  (concat input " ") output)
25       (its-make-next-state state ?0 (concat input "0") output)
26       (its-define-otherwise state (its-make-otherwise output
27                                                       its-otherwise-back-one))
28       state))
29
30   (defmacro its-do-erpin-table (list)
31     `(progn
32        ,@(mapcar (lambda (syl)
33                    `(its-define-erpin ,(car syl) ,(cdr syl)))
34                  list)))
35
36   (defmacro its-define-erpin (shengmu yunmu)
37     `(let ((y1 (nth 1 ,yunmu)) (y2 (nth 2 ,yunmu)) (y3 (nth 3 ,yunmu))
38            (y4 (nth 4 ,yunmu)) (y5 (nth 5 ,yunmu)) (y (car ,yunmu))
39            (ss (list ,@shengmu)) sa sd state)
40        (while ss
41          (setq sa (caar ss) sd (cdar ss) 
42                state (its-define-erpin-qingsheng (car ss) y y5))
43          (its-make-next-state state ?1 (concat sa y 1) (concat sd y1 "\e(0@\e(B"))
44          (its-make-next-state state ?2 (concat sa y 2) (concat sd y2 "\e(0@\e(B"))
45          (its-make-next-state state ?3 (concat sa y 3) (concat sd y3 "\e(0@\e(B"))
46          (its-make-next-state state ?4 (concat sa y 4) (concat sd y4 "\e(0@\e(B"))
47          (setq ss (cdr ss)))))
48
49   (defmacro its-define-erpin-table ()
50     '(let ((O '("o" . ""))  (B '("b" . "B")) (C '("c" . "C")) (D '("d" . "D"))
51            (F '("f" . "F")) (G '("g" . "G")) (H '("h" . "H")) (J '("j" . "J"))
52            (K '("k" . "K")) (L '("l" . "L")) (M '("m" . "M")) (N '("n" . "N"))
53            (P '("p" . "P")) (Q '("q" . "Q")) (R '("r" . "R")) (S '("s" . "S"))
54            (T '("t" . "T")) (W '("w" . "W")) (X '("x" . "X")) (Y '("y" . "Y"))
55            (Z '("z" . "Z"))
56            (I '("i" . "Ch")) (U '("u" . "Sh")) (V '("v" . "Zh"))
57
58            (a    '("a"  "\e(0!\e(B"    "\e(0"\e(B"    "\e(0#\e(B"    "\e(0$\e(B"    "a"   ))
59            (ai   '("s"  "\e(0!\e(Bi"   "\e(0"\e(Bi"   "\e(0#\e(Bi"   "\e(0$\e(Bi"   "ai"  ))
60            (an   '("f"  "\e(0!\e(Bn"   "\e(0"\e(Bn"   "\e(0#\e(Bn"   "\e(0$\e(Bn"   "an"  ))
61            (ang  '("g"  "\e(0!\e(Bng"  "\e(0"\e(Bng"  "\e(0#\e(Bng"  "\e(0$\e(Bng"  "ang" ))
62            (ao   '("d"  "\e(0!\e(Bo"   "\e(0"\e(Bo"   "\e(0#\e(Bo"   "\e(0$\e(Bo"   "ao"  ))
63            (e    '("e"  "\e(0%\e(B"    "\e(0&\e(B"    "\e(0'\e(B"    "\e(0(\e(B"    "e"   ))
64            (ei   '("w"  "\e(0%\e(Bi"   "\e(0&\e(Bi"   "\e(0'\e(Bi"   "\e(0(\e(Bi"   "ei"  ))
65            (en   '("r"  "\e(0%\e(Bn"   "\e(0&\e(Bn"   "\e(0'\e(Bn"   "\e(0(\e(Bn"   "en"  ))
66            (eng  '("t"  "\e(0%\e(Bng"  "\e(0&\e(Bng"  "\e(0'\e(Bng"  "\e(0(\e(Bng"  "eng" ))
67            (er   '("y"  "\e(0%\e(Br"   "\e(0&\e(Br"   "\e(0'\e(Br"   "\e(0(\e(Br"   "er"  ))
68            (i    '("i"  "\e(0)\e(B"    "\e(0*\e(B"    "\e(0+\e(B"    "\e(0,\e(B"    "i"   ))
69            (ia   '("p"  "i\e(0!\e(B"   "i\e(0"\e(B"   "i\e(0#\e(B"   "i\e(0$\e(B"   "ia"  ))
70            (ian  '("h"  "i\e(0!\e(Bn"  "i\e(0"\e(Bn"  "i\e(0#\e(Bn"  "i\e(0$\e(Bn"  "ian" ))
71            (iang '("j"  "i\e(0!\e(Bng" "i\e(0"\e(Bng" "i\e(0#\e(Bng" "i\e(0$\e(Bng" "iang"))
72            (iao  '("k"  "i\e(0!\e(Bo"  "i\e(0"\e(Bo"  "i\e(0#\e(Bo"  "i\e(0$\e(Bo"  "iao" ))
73            (ie   '("l"  "i\e(0%\e(B"   "i\e(0&\e(B"   "i\e(0'\e(B"   "i\e(0(\e(B"   "ie"  ))
74            (in   '("m"  "\e(0)\e(Bn"   "\e(0*\e(Bn"   "\e(0+\e(Bn"   "\e(0,\e(Bn"   "in"  ))
75            (ing  '("n"  "\e(0)\e(Bng"  "\e(0*\e(Bng"  "\e(0+\e(Bng"  "\e(0,\e(Bng"  "ing" ))
76            (iong '("b"  "i\e(0-\e(Bng" "i\e(0.\e(Bng" "i\e(0/\e(Bng" "i\e(00\e(Bng" "iong"))
77            (iu   '("y"  "i\e(01\e(B"   "i\e(02\e(B"   "i\e(03\e(B"   "i\e(04\e(B"   "iu"  ))
78            (o    '("o"  "\e(0-\e(B"    "\e(0.\e(B"    "\e(0/\e(B"    "\e(00\e(B"    "o"   ))
79            (ong  '("b"  "\e(0-\e(Bng"  "\e(0.\e(Bng"  "\e(0/\e(Bng"  "\e(00\e(Bng"  "ong" ))
80            (ou   '("q"  "\e(0-\e(Bu"   "\e(0.\e(Bu"   "\e(0/\e(Bu"   "\e(00\e(Bu"   "ou"  ))
81            (u    '("u"  "\e(01\e(B"    "\e(02\e(B"    "\e(03\e(B"    "\e(04\e(B"    "u"   ))
82            (v    '("v"  "\e(05\e(B"    "\e(06\e(B"    "\e(07\e(B"    "\e(08\e(B"    "\e(09\e(B"   ))
83            (ua   '("p"  "u\e(0!\e(B"   "u\e(0"\e(B"   "u\e(0#\e(B"   "u\e(0$\e(B"   "ua"  ))
84            (uai  '("k"  "u\e(0!\e(Bi"  "u\e(0"\e(Bi"  "u\e(0#\e(Bi"  "u\e(0$\e(Bi"  "uai" ))
85            (uan  '("x"  "u\e(0!\e(Bn"  "u\e(0"\e(Bn"  "u\e(0#\e(Bn"  "u\e(0$\e(Bn"  "uan" ))
86            (uang '("j"  "u\e(0!\e(Bng" "u\e(0"\e(Bng" "u\e(0#\e(Bng" "u\e(0$\e(Bng" "uang"))
87            (ue   '("c"  "u\e(0%\e(B"   "u\e(0&\e(B"   "u\e(0'\e(B"   "u\e(0(\e(B"   "ue"  ))
88            (ve   '("c"  "\e(09%\e(B"   "\e(09&\e(B"   "\e(09'\e(B"   "\e(09(\e(B"   "\e(09\e(Be"  ))
89            (ui   '("c"  "u\e(0)\e(B"   "u\e(0*\e(B"   "u\e(0+\e(B"   "u\e(0,\e(B"   "ui"  ))
90            (un   '("z"  "\e(01\e(Bn"   "\e(02\e(Bn"   "\e(03\e(Bn"   "\e(04\e(Bn"   "un"  ))
91            (uo   '("o"  "u\e(0-\e(B"   "u\e(0.\e(B"   "u\e(0/\e(B"   "u\e(00\e(B"   "uo"  )))
92
93        (dolist (SHENG (list B C D F G H J K L M N P Q R S T W X Y Z I U V))
94          (its-defrule (car SHENG) (cdr SHENG)))
95
96        (its-do-erpin-table
97         (((O B C D F G H   K L M N P     S T W   Y Z I U V) . a)
98          ((O B C D   G H   K L M N P     S T W     Z I U V) . ai)
99          ((O B C D F G H   K L M N P   R S T W   Y Z I U V) . an)
100          ((O B C D F G H   K L M N P   R S T W   Y Z I U V) . ang)
101          ((O B C D   G H   K L M N P   R S T     Y Z I U V) . ao)
102          ((O   C D   G H   K L M N     R S T     Y Z I U V) . e)
103          ((O B C D F G H   K L M N P       T W     Z   U V) . ei)
104          ((O B C D F G H   K   M N P   R S   W     Z I U V) . en)
105          ((O B C D F G H   K L M N P   R S T W     Z I U V) . eng)
106          ((O                                              ) . er)
107          ((  B C D       J   L M N P Q R S T   X Y Z I U V) . i)
108          ((      D       J   L       Q         X          ) . ia)
109          ((  B   D       J   L M N P Q     T   X          ) . ian)
110          ((              J   L   N   Q         X          ) . iang)
111          ((  B   D       J   L M N P Q     T   X          ) . iao)
112          ((  B   D       J   L M N P Q     T   X          ) . ie)
113          ((  B           J   L M N P Q         X Y        ) . in)
114          ((  B   D       J   L M N P Q     T   X Y        ) . ing)
115          ((              J           Q         X          ) . iong)
116          ((      D       J   L M N   Q         X          ) . iu)
117          ((O B     F           M   P         W   Y        ) . o)
118          ((    C D   G H   K L   N     R S T     Y Z I   V) . ong)
119          ((O   C D F G H   K L M N P   R S T     Y Z I U V) . ou)
120          ((  B C D F G H J K L M N P Q R S T W X Y Z I U V) . u)
121          ((                  L   N                        ) . v)
122          ((          G H   K           R             I U V) . ua)
123          ((          G H   K                         I U V) . uai)
124          ((    C D   G H J K L   N   Q R S T   X Y Z I U V) . uan)
125          ((          G H   K                         I U V) . uang)
126          ((              J           Q         X Y        ) . ue)
127          ((                  L   N                        ) . ve)
128          ((    C D   G H   K           R S T       Z I U V) . ui)
129          ((    C D   G H J K L       Q R S T   X Y Z I U V) . un)
130          ((    C D   G H   K L   N     R S T       Z I U V) . uo)
131
132          (('("" . "")) . (cons "er" (cdr er)))
133
134          ((J Q X) . (cons "a" (cdr ia  )))
135          ((J Q X) . (cons "s" (cdr ia  )))
136          ((J Q X) . (cons "f" (cdr ian )))
137          ((J Q X) . (cons "g" (cdr iang)))
138          ((J Q X) . (cons "d" (cdr iao )))
139          ((J Q X) . (cons "e" (cdr ie  )))
140          ((J Q X) . (cons "w" (cdr ie  )))
141          ((J Q X) . (cons "r" (cdr in  )))
142          ((J Q X) . (cons "t" (cdr ing )))
143          ((J Q X) . (cons "q" (cdr iu  )))))
144
145        (its-define-erpin-qingsheng      H        "m")
146        (its-define-erpin-qingsheng      H        "n"    "ng")
147        (its-define-erpin-qingsheng      O        "m")
148        (its-define-erpin-qingsheng      O        "n")
149
150        (its-defrule     "on5"   "ng\e(0@\e(B")
151        (its-defrule     "on2"   "\e(0=@\e(B")
152        (its-defrule     "on3"   "\e(0>@\e(B")
153        (its-defrule     "on4"   "\e(0?@\e(B"))))
154
155 (define-its-state-machine its-erpin-cn-map
156   "erpin-cn" "\e$A6~\e(BG" "Chinese-GB"
157   "Map for Erpin input. (Chinese-GB)"
158
159   (defconst its-quanjiao-escape "Z")
160   (defconst its-banjiao-escape  "X")
161
162   (its-defrule-select-mode-temporally "B" downcase)
163   (its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
164
165   (its-define-erpin-table)
166   (its-defoutput*       "b "    "\e$A2;\e(B")
167   (its-defoutput*       "c "    "\e$A2E\e(B")
168   (its-defoutput*       "ch "   "\e$A3v\e(B")
169   (its-defoutput*       "d "    "\e$A5D\e(B")
170   (its-defoutput*       "f "    "\e$A74\e(B")
171   (its-defoutput*       "g "    "\e$A8v\e(B")
172   (its-defoutput*       "h "    "\e$A:M\e(B")
173   (its-defoutput*       "i "    "\e$AR;\e(B")
174   (its-defoutput*       "j "    "\e$A>M\e(B")
175   (its-defoutput*       "k "    "\e$A?I\e(B")
176   (its-defoutput*       "l "    "\e$AAK\e(B")
177   (its-defoutput*       "m "    "\e$AC?\e(B")
178   (its-defoutput*       "n "    "\e$ADj\e(B")
179   (its-defoutput*       "p "    "\e$AEz\e(B")
180   (its-defoutput*       "q "    "\e$AH%\e(B")
181   (its-defoutput*       "r "    "\e$AHU\e(B")
182   (its-defoutput*       "s "    "\e$AJG\e(B")
183   (its-defoutput*       "u "    "\e$AIO\e(B")
184   (its-defoutput*       "t "    "\e$AK{\e(B")
185   (its-defoutput*       "w "    "\e$ANR\e(B")
186   (its-defoutput*       "x "    "\e$AOr\e(B")
187   (its-defoutput*       "y "    "\e$ASV\e(B")
188   (its-defoutput*       "z "    "\e$ATZ\e(B")
189   (its-defoutput*       "v "    "\e$AWE\e(B")
190
191   (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")
192                    ("4" . "\e$A#4\e(B")  ("5" . "\e$A#5\e(B")  ("6" . "\e$A#6\e(B")  ("7" . "\e$A#7\e(B")
193                    ("8" . "\e$A#8\e(B")  ("9" . "\e$A#9\e(B") 
194                    (" " . "\e$A!!\e(B")  ("!" . "\e$A#!\e(B")  ("@" . "\e$A#@\e(B")  ("#" . "\e$A##\e(B")
195                    ("$" . "\e$A!g\e(B")  ("%" . "\e$A#%\e(B")  ("^" . "\e$A#^\e(B")  ("&" . "\e$A#&\e(B")
196                    ("*" . "\e$A#*\e(B")  ("(" . "\e$A#(\e(B")  (")" . "\e$A#)\e(B")
197                    ("-" . "\e$A#-\e(B")  ("=" . "\e$A#=\e(B")  ("`" . "\e$A#`\e(B")  ("\\" . "\e$A#\\e(B")
198                    ("|" . "\e$A#|\e(B")  ("_" . "\e$A#_\e(B")  ("+" . "\e$A#+\e(B")  ("~" . "\e$A!+\e(B")
199                    ("[" . "\e$A#[\e(B")  ("]" . "\e$A#]\e(B")  ("{" . "\e$A#{\e(B")  ("}" . "\e$A#}\e(B")
200                    (":" . "\e$A#:\e(B")  (";" . "\e$A#;\e(B")  ("\"" . "\e$A#"\e(B") ("'" . "\e$A#'\e(B")
201                    ("<" . "\e$A#<\e(B")  (">" . "\e$A#>\e(B")  ("?" . "\e$A#?\e(B")  ("/" . "\e$A#/\e(B")
202                    ("," . "\e$A#,\e(B")  ("." . "\e$A#.\e(B")
203                    ("a" . "\e$A#a\e(B")  ("b" . "\e$A#b\e(B")  ("c" . "\e$A#c\e(B")  ("d" . "\e$A#d\e(B")
204                    ("e" . "\e$A#e\e(B")  ("f" . "\e$A#f\e(B")  ("g" . "\e$A#g\e(B")  ("h" . "\e$A#h\e(B")
205                    ("i" . "\e$A#i\e(B")  ("j" . "\e$A#j\e(B")  ("k" . "\e$A#k\e(B")  ("l" . "\e$A#l\e(B")
206                    ("m" . "\e$A#m\e(B")  ("n" . "\e$A#n\e(B")  ("o" . "\e$A#o\e(B")  ("p" . "\e$A#p\e(B")
207                    ("q" . "\e$A#q\e(B")  ("r" . "\e$A#r\e(B")  ("s" . "\e$A#s\e(B")  ("t" . "\e$A#t\e(B")
208                    ("u" . "\e$A#u\e(B")  ("v" . "\e$A#v\e(B")  ("w" . "\e$A#w\e(B")  ("x" . "\e$A#x\e(B")
209                    ("y" . "\e$A#y\e(B")  ("z" . "\e$A#z\e(B")
210                    ("A" . "\e$A#A\e(B")  ("B" . "\e$A#B\e(B")  ("C" . "\e$A#C\e(B")  ("D" . "\e$A#D\e(B")
211                    ("E" . "\e$A#E\e(B")  ("F" . "\e$A#F\e(B")  ("G" . "\e$A#G\e(B")  ("H" . "\e$A#H\e(B")
212                    ("I" . "\e$A#I\e(B")  ("J" . "\e$A#J\e(B")  ("K" . "\e$A#K\e(B")  ("L" . "\e$A#L\e(B")
213                    ("M" . "\e$A#M\e(B")  ("N" . "\e$A#N\e(B")  ("O" . "\e$A#O\e(B")  ("P" . "\e$A#P\e(B")
214                    ("Q" . "\e$A#Q\e(B")  ("R" . "\e$A#R\e(B")  ("S" . "\e$A#S\e(B")  ("T" . "\e$A#T\e(B")
215                    ("U" . "\e$A#U\e(B")  ("V" . "\e$A#V\e(B")  ("W" . "\e$A#W\e(B")  ("X" . "\e$A#X\e(B")
216                    ("Y" . "\e$A#Y\e(B")  ("Z" . "\e$A#Z\e(B")))
217     (let ((in (car ascii)) (out (cdr ascii)))
218       (its-defrule (concat its-banjiao-escape in) in)
219       (its-defrule (concat its-quanjiao-escape in) out)))
220
221   (its-defrule  ","     "\e$A#,\e(B")
222   (its-defrule  "."     "\e$A!#\e(B")
223   (its-defrule  "/"     "\e$A!"\e(B")
224   (its-defrule  ":"     "\e$A#:\e(B")
225   (its-defrule  ";"     "\e$A#;\e(B")
226   (its-defrule  "?"     "\e$A#?\e(B")
227   (its-defrule  "!"     "\e$A#!\e(B"))
228
229 (define-its-state-machine its-erpin-tw-map
230   "erpin-tw" "\e$(GD(\e(BC" "Chinese-CNS"
231   "Map for Erpin input."
232
233   (defconst its-quanjiao-escape "Z")
234   (defconst its-banjiao-escape  "X")
235
236   (its-defrule-select-mode-temporally "B" downcase)
237   (its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
238
239   (its-define-erpin-table)
240   (its-defoutput*       "b "    "\e$(GDb\e(B")
241   (its-defoutput*       "c "    "\e$(GD_\e(B")
242   (its-defoutput*       "ch "   "\e$(GEx\e(B")
243   (its-defoutput*       "d "    "\e$(GN{\e(B")
244   (its-defoutput*       "f "    "\e$(GE0\e(B")
245   (its-defoutput*       "g "    "\e$(GT6\e(B")
246   (its-defoutput*       "h "    "\e$(GLO\e(B")
247   (its-defoutput*       "i "    "\e$(GD!\e(B")
248   (its-defoutput*       "j "    "\e$(G^s\e(B")
249   (its-defoutput*       "k "    "\e$(GF+\e(B")
250   (its-defoutput*       "l "    "\e$(GD'\e(B")
251   (its-defoutput*       "m "    "\e$(GJd\e(B")
252   (its-defoutput*       "n "    "\e$(GH!\e(B")
253   (its-defoutput*       "p "    "\e$(GJG\e(B")
254   (its-defoutput*       "q "    "\e$(GF*\e(B")
255   (its-defoutput*       "r "    "\e$(GEJ\e(B")
256   (its-defoutput*       "s "    "\e$(GQR\e(B")
257   (its-defoutput*       "u "    "\e$(GD8\e(B")
258   (its-defoutput*       "t "    "\e$(GEl\e(B")
259   (its-defoutput*       "w "    "\e$(GJ<\e(B")
260   (its-defoutput*       "x "    "\e$(GGW\e(B")
261   (its-defoutput*       "y "    "\e$(GD4\e(B")
262   (its-defoutput*       "z "    "\e$(GGc\e(B")
263   (its-defoutput*       "v "    "\e$(Gaa\e(B")
264
265   (dolist (ascii '(("0" . "\e$(G$!\e(B")  ("1" . "\e$(G$"\e(B")  ("2" . "\e$(G$#\e(B")  ("3" . "\e$(G$$\e(B")
266                    ("4" . "\e$(G$%\e(B")  ("5" . "\e$(G$&\e(B")  ("6" . "\e$(G$'\e(B")  ("7" . "\e$(G$(\e(B")
267                    ("8" . "\e$(G$)\e(B")  ("9" . "\e$(G$*\e(B") 
268                    (" " . "\e$(G!!\e(B")  ("!" . "\e$(G!*\e(B")  ("@" . "\e$(G"i\e(B")  ("#" . "\e$(G!l\e(B")
269                    ("$" . "\e$(G"c\e(B")  ("%" . "\e$(G"h\e(B")  ("^" . "\e$(G!T\e(B")  ("&" . "\e$(G!m\e(B")
270                    ("*" . "\e$(G!n\e(B")  ("(" . "\e$(G!>\e(B")  (")" . "\e$(G!?\e(B")
271                    ("-" . "\e$(G"1\e(B")  ("=" . "\e$(G"8\e(B")  ("`" . "\e$(G!j\e(B")  ("\\" . "\e$(G"b\e(B")
272                    ("|" . "\e$(G"^\e(B")  ("_" . "\e$(G"%\e(B")  ("+" . "\e$(G"0\e(B")  ("~" . "\e$(G"D\e(B")
273                    ("[" . "\e$(G!b\e(B")  ("]" . "\e$(G!c\e(B")  ("{" . "\e$A#{\e(B")  ("}" . "\e$(G!a\e(B")
274                    (":" . "\e$(G!(\e(B")  (";" . "\e$(G!'\e(B")  ("\"" . "\e$(G!i\e(B") ("'" . "\e$(G!k\e(B")
275                    ("<" . "\e$(G"6\e(B")  (">" . "\e$(G"7\e(B")  ("?" . "\e$(G!)\e(B")  ("/" . "\e$(G"a\e(B")
276                    ("," . "\e$(G!"\e(B")  ("." . "\e$(G!%\e(B")
277                    ("a" . "\e$(G$[\e(B")  ("b" . "\e$(G$\\e(B")  ("c" . "\e$(G$]\e(B")  ("d" . "\e$(G$^\e(B")
278                    ("e" . "\e$(G$_\e(B")  ("f" . "\e$(G$`\e(B")  ("g" . "\e$(G$a\e(B")  ("h" . "\e$(G$b\e(B")
279                    ("i" . "\e$(G$c\e(B")  ("j" . "\e$(G$d\e(B")  ("k" . "\e$(G$e\e(B")  ("l" . "\e$(G$f\e(B")
280                    ("m" . "\e$(G$g\e(B")  ("n" . "\e$(G$h\e(B")  ("o" . "\e$(G$i\e(B")  ("p" . "\e$(G$j\e(B")
281                    ("q" . "\e$(G$k\e(B")  ("r" . "\e$(G$l\e(B")  ("s" . "\e$(G$m\e(B")  ("t" . "\e$(G$n\e(B")
282                    ("u" . "\e$(G$o\e(B")  ("v" . "\e$(G$p\e(B")  ("w" . "\e$(G$q\e(B")  ("x" . "\e$(G$r\e(B")
283                    ("y" . "\e$(G$s\e(B")  ("z" . "\e$(G$t\e(B")
284                    ("A" . "\e$(G$A\e(B")  ("B" . "\e$(G$B\e(B")  ("C" . "\e$(G$C\e(B")  ("D" . "\e$(G$D\e(B")
285                    ("E" . "\e$(G$E\e(B")  ("F" . "\e$(G$F\e(B")  ("G" . "\e$(G$G\e(B")  ("H" . "\e$(G$H\e(B")
286                    ("I" . "\e$(G$I\e(B")  ("J" . "\e$(G$J\e(B")  ("K" . "\e$(G$K\e(B")  ("L" . "\e$(G$L\e(B")
287                    ("M" . "\e$(G$M\e(B")  ("N" . "\e$(G$N\e(B")  ("O" . "\e$(G$O\e(B")  ("P" . "\e$(G$P\e(B")
288                    ("Q" . "\e$(G$Q\e(B")  ("R" . "\e$(G$R\e(B")  ("S" . "\e$(G$S\e(B")  ("T" . "\e$(G$T\e(B")
289                    ("U" . "\e$(G$U\e(B")  ("V" . "\e$(G$V\e(B")  ("W" . "\e$(G$W\e(B")  ("X" . "\e$(G$X\e(B")
290                    ("Y" . "\e$(G$Y\e(B")  ("Z" . "\e$(G$Z\e(B")))
291     (let ((in (car ascii)) (out (cdr ascii)))
292       (its-defrule (concat its-banjiao-escape in) in)
293       (its-defrule (concat its-quanjiao-escape in) out)))
294
295   (its-defrule  ","     "\e$(G!"\e(B")
296   (its-defrule  "."     "\e$(G!$\e(B")
297   (its-defrule  "/"     "\e$(G!#\e(B")
298   (its-defrule  ":"     "\e$(G!(\e(B")
299   (its-defrule  ";"     "\e$(G!'\e(B")
300   (its-defrule  "?"     "\e$(G!)\e(B")
301   (its-defrule  "!"     "\e$(G!*\e(B"))
302
303 (define-its-state-machine-append its-erpin-cn-map
304   (its-defrule "[" its-erpin-cn-open-braket)
305   (its-defrule "]" its-erpin-cn-close-braket)
306
307   (if its-erpin-cn-enable-quanjioao-alphabet
308       (progn
309         (its-defrule "1"  "\e$A#1\e(B")  (its-defrule "2"  "\e$A#2\e(B")
310         (its-defrule "3"  "\e$A#3\e(B")  (its-defrule "4"  "\e$A#4\e(B")
311         (its-defrule "5"  "\e$A#5\e(B")  (its-defrule "6"  "\e$A#6\e(B")
312         (its-defrule "7"  "\e$A#7\e(B")  (its-defrule "8"  "\e$A#8\e(B")
313         (its-defrule "9"  "\e$A#9\e(B")  (its-defrule "0"  "\e$A#0\e(B")
314         (its-defrule "@"  "\e$A#@\e(B")
315         (its-defrule "#"  "\e$A##\e(B")  (its-defrule "$"  "\e$A!g\e(B")
316         (its-defrule "%"  "\e$A#%\e(B")  (its-defrule "^"  "\e$A#^\e(B")
317         (its-defrule "&"  "\e$A#&\e(B")  (its-defrule "*"  "\e$A#*\e(B")
318         (its-defrule "("  "\e$A#(\e(B")  (its-defrule ")"  "\e$A#)\e(B")
319         (its-defrule "-"  "\e$A#-\e(B")  (its-defrule "~"  "\e$A!+\e(B")
320         (its-defrule "="  "\e$A#=\e(B")  (its-defrule "`"  "\e$A#`\e(B")
321         (its-defrule "\\" "\e$A#\\e(B")  (its-defrule "|"  "\e$A#|\e(B")
322         (its-defrule "_"  "\e$A#_\e(B")  (its-defrule "+"  "\e$A#+\e(B")
323         (its-defrule "{"  "\e$A#{\e(B")  (its-defrule "}"  "\e$A#}\e(B")
324         (its-defrule "\"" "\e$A#"\e(B")  (its-defrule "'"  "\e$A#'\e(B")
325         (its-defrule "<"  "\e$A#<\e(B")  (its-defrule ">"  "\e$A#>\e(B"))
326     (progn
327       (its-defrule "1"  "1")  (its-defrule "2"  "2")
328       (its-defrule "3"  "3")  (its-defrule "4"  "4")
329       (its-defrule "5"  "5")  (its-defrule "6"  "6")
330       (its-defrule "7"  "7")  (its-defrule "8"  "8")
331       (its-defrule "9"  "9")  (its-defrule "0"  "0")
332       (its-defrule "@"  "@")
333       (its-defrule "#"  "#")  (its-defrule "$"  "$")
334       (its-defrule "%"  "%")  (its-defrule "^"  "^")
335       (its-defrule "&"  "&")  (its-defrule "*"  "*")
336       (its-defrule "("  "(")  (its-defrule ")"  ")")
337       (its-defrule "-"  "-")  (its-defrule "~"  "~")
338       (its-defrule "="  "=")  (its-defrule "`"  "`")
339       (its-defrule "\\" "\\") (its-defrule "|"  "|")
340       (its-defrule "_"  "_")  (its-defrule "+"  "+")
341       (its-defrule "{"  "{")  (its-defrule "}"  "}")
342       (its-defrule "\"" "\"") (its-defrule "'"  "'")
343       (its-defrule "<"  "<")  (its-defrule ">"  ">"))))
344
345 (define-its-state-machine-append its-erpin-tw-map
346   (its-defrule "[" its-erpin-tw-open-braket)
347   (its-defrule "]" its-erpin-tw-close-braket)
348
349   (if its-erpin-tw-enable-quanjioao-alphabet
350       (progn
351         (its-defrule "1"  "\e$(G$"\e(B")  (its-defrule "2"  "\e$(G$#\e(B")
352         (its-defrule "3"  "\e$(G$$\e(B")  (its-defrule "4"  "\e$(G$%\e(B")
353         (its-defrule "5"  "\e$(G$&\e(B")  (its-defrule "6"  "\e$(G$'\e(B")
354         (its-defrule "7"  "\e$(G$(\e(B")  (its-defrule "8"  "\e$(G$)\e(B")
355         (its-defrule "9"  "\e$(G$*\e(B")  (its-defrule "0"  "\e$(G$!\e(B")
356         (its-defrule "@"  "\e$(G"i\e(B")
357         (its-defrule "#"  "\e$(G!l\e(B")  (its-defrule "$"  "\e$(G"c\e(B")
358         (its-defrule "%"  "\e$(G"h\e(B")  (its-defrule "^"  "\e$(G!T\e(B")
359         (its-defrule "&"  "\e$(G!m\e(B")  (its-defrule "*"  "\e$(G!n\e(B")
360         (its-defrule "("  "\e$(G!>\e(B")  (its-defrule ")"  "\e$(G!?\e(B")
361         (its-defrule "-"  "\e$(G"1\e(B")  (its-defrule "~"  "\e$(G"D\e(B")
362         (its-defrule "="  "\e$(G"8\e(B")  (its-defrule "`"  "\e$(G!j\e(B")
363         (its-defrule "\\" "\e$(G"b\e(B")  (its-defrule "|"  "\e$(G"^\e(B")
364         (its-defrule "_"  "\e$(G"%\e(B")  (its-defrule "+"  "\e$(G"0\e(B")
365         (its-defrule "{"  "\e$A#{\e(B")  (its-defrule "}"  "\e$(G!a\e(B")
366         (its-defrule "\"" "\e$(G!i\e(B")  (its-defrule "'"  "\e$(G!k\e(B")
367         (its-defrule "<"  "\e$(G"6\e(B")  (its-defrule ">"  "\e$(G"7\e(B"))
368     (progn
369       (its-defrule "1"  "1")  (its-defrule "2"  "2")
370       (its-defrule "3"  "3")  (its-defrule "4"  "4")
371       (its-defrule "5"  "5")  (its-defrule "6"  "6")
372       (its-defrule "7"  "7")  (its-defrule "8"  "8")
373       (its-defrule "9"  "9")  (its-defrule "0"  "0")
374       (its-defrule "@"  "@")
375       (its-defrule "#"  "#")  (its-defrule "$"  "$")
376       (its-defrule "%"  "%")  (its-defrule "^"  "^")
377       (its-defrule "&"  "&")  (its-defrule "*"  "*")
378       (its-defrule "("  "(")  (its-defrule ")"  ")")
379       (its-defrule "-"  "-")  (its-defrule "~"  "~")
380       (its-defrule "="  "=")  (its-defrule "`"  "`")
381       (its-defrule "\\" "\\") (its-defrule "|"  "|")
382       (its-defrule "_"  "_")  (its-defrule "+"  "+")
383       (its-defrule "{"  "{")  (its-defrule "}"  "}")
384       (its-defrule "\"" "\"") (its-defrule "'"  "'")
385       (its-defrule "<"  "<")  (its-defrule ">"  ">"))))
386
387 (provide 'its/erpin)