1 ;;; egg-com.el --- Communication Routines 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: Hisashi Miyashita <himi@bird.scphys.kyoto-u.ac.jp>
8 ;; NIIBE Yutaka <gniibe@mri.co.jp>
9 ;; KATAYAMA Yoshio <kate@pfu.co.jp> ; Korean, Chinese support.
10 ;; Maintainer: NIIBE Yutaka <gniibe@mri.co.jp>
12 ;; This file is part of EGG.
14 ;; EGG is free software; you can redistribute it and/or modify
15 ;; it under the terms of the GNU General Public License as published by
16 ;; the Free Software Foundation; either version 2, or (at your option)
19 ;; EGG is distributed in the hope that it will be useful,
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 ;; GNU General Public License for more details.
24 ;; You should have received a copy of the GNU General Public License
25 ;; along with GNU Emacs; see the file COPYING. If not, write to the
26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
27 ;; Boston, MA 02111-1307, USA.
35 (defvar egg-fixed-euc 'fixed-euc-jp)
36 (make-variable-buffer-local 'egg-fixed-euc)
38 (defvar egg-mb-euc 'euc-japan)
39 (make-variable-buffer-local 'egg-mb-euc)
42 (define-ccl-program ccl-decode-fixed-euc-jp
44 ((r2 = ,(charset-id 'japanese-jisx0208))
45 (r3 = ,(charset-id 'japanese-jisx0212))
46 (r4 = ,(charset-id 'katakana-jisx0201))
53 (write-read-repeat r0))
55 (write-read-repeat r0))
59 (write-read-repeat r0))
62 (write-read-repeat r0)))))))))
64 (define-ccl-program ccl-encode-fixed-euc-jp
68 (if (r0 == ,(charset-id 'latin-jisx0201)) ; Unify
73 (write-read-repeat r0)))
74 (r6 = (r0 == ,(charset-id 'japanese-jisx0208)))
75 (r6 |= (r0 == ,(charset-id 'japanese-jisx0208-1978)))
80 (write-read-repeat r0)))
81 (if (r0 == ,(charset-id 'katakana-jisx0201)) ;G2
84 (write-read-repeat r0)))
85 (if (r0 == ,(charset-id 'japanese-jisx0212)) ;G3
90 (write-read-repeat r0)))
95 (make-coding-system 'fixed-euc-jp 4 ?W "Coding System for fixed EUC Japanese"
96 (cons ccl-decode-fixed-euc-jp ccl-encode-fixed-euc-jp))
101 (define-ccl-program ccl-decode-fixed-euc-kr
103 ((r2 = ,(charset-id 'korean-ksc5601))
111 (write-read-repeat r0)))))
113 (define-ccl-program ccl-encode-fixed-euc-kr
119 (write-read-repeat r0)))
120 (if (r0 == ,(charset-id 'korean-ksc5601))
124 (write-read-repeat r0)))
129 (make-coding-system 'fixed-euc-kr 4 ?W "Coding System for fixed EUC Korean"
130 (cons ccl-decode-fixed-euc-kr ccl-encode-fixed-euc-kr))
133 (defvar egg-zhuyin nil)
135 (defconst yincode-pinyin-shengmu
136 '(("" . 0) ("B" . 1) ("C" . 2) ("Ch" . 3) ("D" . 4)
137 ("F" . 5) ("G" . 6) ("H" . 7) ("J" . 8) ("K" . 9)
138 ("L" . 10) ("M" . 11) ("N" . 12) ("P" . 13) ("Q" . 14)
139 ("R" . 15) ("S" . 16) ("Sh" . 17) ("T" . 18) ("W" . 19)
140 ("X" . 20) ("Y" . 21) ("Z" . 22) ("Zh" . 23)))
142 (defconst yincode-pinyin-yunmu
143 '(("
\e(0@
\e(B" 0 0) ("
\e(0@
\e(B" 0 1) ("
\e(0@
\e(B" 0 3) ("
\e(0@
\e(B" 0 5) ("
\e(0@
\e(B" 0 7)
144 ("a
\e(0@
\e(B" 1 0) ("
\e(0!@
\e(B" 1 1) ("
\e(0"@
\e(B" 1 3) ("
\e(0#@
\e(B" 1 5) ("
\e(0$@
\e(B" 1 7)
145 ("ai
\e(0@
\e(B" 2 0) ("
\e(0!
\e(Bi
\e(0@
\e(B" 2 1) ("
\e(0"
\e(Bi
\e(0@
\e(B" 2 3) ("
\e(0#
\e(Bi
\e(0@
\e(B" 2 5) ("
\e(0$
\e(Bi
\e(0@
\e(B" 2 7)
146 ("an
\e(0@
\e(B" 3 0) ("
\e(0!
\e(Bn
\e(0@
\e(B" 3 1) ("
\e(0"
\e(Bn
\e(0@
\e(B" 3 3) ("
\e(0#
\e(Bn
\e(0@
\e(B" 3 5) ("
\e(0$
\e(Bn
\e(0@
\e(B" 3 7)
147 ("ang
\e(0@
\e(B" 4 0) ("
\e(0!
\e(Bng
\e(0@
\e(B" 4 1) ("
\e(0"
\e(Bng
\e(0@
\e(B" 4 3) ("
\e(0#
\e(Bng
\e(0@
\e(B" 4 5) ("
\e(0$
\e(Bng
\e(0@
\e(B" 4 7)
148 ("ao
\e(0@
\e(B" 5 0) ("
\e(0!
\e(Bo
\e(0@
\e(B" 5 1) ("
\e(0"
\e(Bo
\e(0@
\e(B" 5 3) ("
\e(0#
\e(Bo
\e(0@
\e(B" 5 5) ("
\e(0$
\e(Bo
\e(0@
\e(B" 5 7)
149 ("e
\e(0@
\e(B" 6 0) ("
\e(0%@
\e(B" 6 1) ("
\e(0&@
\e(B" 6 3) ("
\e(0'@
\e(B" 6 5) ("
\e(0(@
\e(B" 6 7)
150 ("ei
\e(0@
\e(B" 7 0) ("
\e(0%
\e(Bi
\e(0@
\e(B" 7 1) ("
\e(0&
\e(Bi
\e(0@
\e(B" 7 3) ("
\e(0'
\e(Bi
\e(0@
\e(B" 7 5) ("
\e(0(
\e(Bi
\e(0@
\e(B" 7 7)
151 ("en
\e(0@
\e(B" 8 0) ("
\e(0%
\e(Bn
\e(0@
\e(B" 8 1) ("
\e(0&
\e(Bn
\e(0@
\e(B" 8 3) ("
\e(0'
\e(Bn
\e(0@
\e(B" 8 5) ("
\e(0(
\e(Bn
\e(0@
\e(B" 8 7)
152 ("eng
\e(0@
\e(B" 9 0) ("
\e(0%
\e(Bng
\e(0@
\e(B" 9 1) ("
\e(0&
\e(Bng
\e(0@
\e(B" 9 3) ("
\e(0'
\e(Bng
\e(0@
\e(B" 9 5) ("
\e(0(
\e(Bng
\e(0@
\e(B" 9 7)
153 ("er
\e(0@
\e(B" 10 0) ("
\e(0%
\e(Br
\e(0@
\e(B" 10 1) ("
\e(0&
\e(Br
\e(0@
\e(B" 10 3) ("
\e(0'
\e(Br
\e(0@
\e(B" 10 5) ("
\e(0(
\e(Br
\e(0@
\e(B" 10 7)
154 ("i
\e(0@
\e(B" 11 0) ("
\e(0)@
\e(B" 11 1) ("
\e(0*@
\e(B" 11 3) ("
\e(0+@
\e(B" 11 5) ("
\e(0,@
\e(B" 11 7)
155 ("ia
\e(0@
\e(B" 12 0) ("i
\e(0!@
\e(B" 12 1) ("i
\e(0"@
\e(B" 12 3) ("i
\e(0#@
\e(B" 12 5) ("i
\e(0$@
\e(B" 12 7)
156 ("ian
\e(0@
\e(B" 13 0) ("i
\e(0!
\e(Bn
\e(0@
\e(B" 13 1) ("i
\e(0"
\e(Bn
\e(0@
\e(B" 13 3) ("i
\e(0#
\e(Bn
\e(0@
\e(B" 13 5) ("i
\e(0$
\e(Bn
\e(0@
\e(B" 13 7)
157 ("iang
\e(0@
\e(B" 14 0) ("i
\e(0!
\e(Bng
\e(0@
\e(B" 14 1) ("i
\e(0"
\e(Bng
\e(0@
\e(B" 14 3) ("i
\e(0#
\e(Bng
\e(0@
\e(B" 14 5) ("i
\e(0$
\e(Bng
\e(0@
\e(B" 14 7)
158 ("iao
\e(0@
\e(B" 15 0) ("i
\e(0!
\e(Bo
\e(0@
\e(B" 15 1) ("i
\e(0"
\e(Bo
\e(0@
\e(B" 15 3) ("i
\e(0#
\e(Bo
\e(0@
\e(B" 15 5) ("i
\e(0$
\e(Bo
\e(0@
\e(B" 15 7)
159 ("ie
\e(0@
\e(B" 16 0) ("i
\e(0%@
\e(B" 16 1) ("i
\e(0&@
\e(B" 16 3) ("i
\e(0'@
\e(B" 16 5) ("i
\e(0(@
\e(B" 16 7)
160 ("in
\e(0@
\e(B" 17 0) ("
\e(0)
\e(Bn
\e(0@
\e(B" 17 1) ("
\e(0*
\e(Bn
\e(0@
\e(B" 17 3) ("
\e(0+
\e(Bn
\e(0@
\e(B" 17 5) ("
\e(0,
\e(Bn
\e(0@
\e(B" 17 7)
161 ("ing
\e(0@
\e(B" 18 0) ("
\e(0)
\e(Bng
\e(0@
\e(B" 18 1) ("
\e(0*
\e(Bng
\e(0@
\e(B" 18 3) ("
\e(0+
\e(Bng
\e(0@
\e(B" 18 5) ("
\e(0,
\e(Bng
\e(0@
\e(B" 18 7)
162 ("iong
\e(0@
\e(B" 19 0) ("i
\e(0-
\e(Bng
\e(0@
\e(B" 19 1) ("i
\e(0.
\e(Bng
\e(0@
\e(B" 19 3) ("i
\e(0/
\e(Bng
\e(0@
\e(B" 19 5) ("i
\e(00
\e(Bng
\e(0@
\e(B" 19 7)
163 ("iu
\e(0@
\e(B" 20 0) ("i
\e(01@
\e(B" 20 1) ("i
\e(02@
\e(B" 20 3) ("i
\e(03@
\e(B" 20 5) ("i
\e(04@
\e(B" 20 7)
164 ("m
\e(0@
\e(B" 21 0) ("m
\e(0@
\e(B" 21 1) ("m
\e(0@
\e(B" 21 3) ("m
\e(0@
\e(B" 21 5) ("m
\e(0@
\e(B" 21 7)
165 ("n
\e(0@
\e(B" 22 0) ("n
\e(0@
\e(B" 22 1) ("
\e(0=@
\e(B" 22 3) ("
\e(0>@
\e(B" 22 5) ("
\e(0?@
\e(B" 22 7)
166 ("ng
\e(0@
\e(B" 23 0) ("ng
\e(0@
\e(B" 23 1) ("ng
\e(0@
\e(B" 23 3) ("ng
\e(0@
\e(B" 23 5) ("ng
\e(0@
\e(B" 23 7)
167 ("o
\e(0@
\e(B" 24 0) ("
\e(0-@
\e(B" 24 1) ("
\e(0.@
\e(B" 24 3) ("
\e(0/@
\e(B" 24 5) ("
\e(00@
\e(B" 24 7)
168 ("ong
\e(0@
\e(B" 25 0) ("
\e(0-
\e(Bng
\e(0@
\e(B" 25 1) ("
\e(0.
\e(Bng
\e(0@
\e(B" 25 3) ("
\e(0/
\e(Bng
\e(0@
\e(B" 25 5) ("
\e(00
\e(Bng
\e(0@
\e(B" 25 7)
169 ("ou
\e(0@
\e(B" 26 0) ("
\e(0-
\e(Bu
\e(0@
\e(B" 26 1) ("
\e(0.
\e(Bu
\e(0@
\e(B" 26 3) ("
\e(0/
\e(Bu
\e(0@
\e(B" 26 5) ("
\e(00
\e(Bu
\e(0@
\e(B" 26 7)
170 ("u
\e(0@
\e(B" 27 0) ("
\e(01@
\e(B" 27 1) ("
\e(02@
\e(B" 27 3) ("
\e(03@
\e(B" 27 5) ("
\e(04@
\e(B" 27 7)
171 ("ua
\e(0@
\e(B" 28 0) ("u
\e(0!@
\e(B" 28 1) ("u
\e(0"@
\e(B" 28 3) ("u
\e(0#@
\e(B" 28 5) ("u
\e(0$@
\e(B" 28 7)
172 ("uai
\e(0@
\e(B" 29 0) ("u
\e(0!
\e(Bi
\e(0@
\e(B" 29 1) ("u
\e(0"
\e(Bi
\e(0@
\e(B" 29 3) ("u
\e(0#
\e(Bi
\e(0@
\e(B" 29 5) ("u
\e(0$
\e(Bi
\e(0@
\e(B" 29 7)
173 ("uan
\e(0@
\e(B" 30 0) ("u
\e(0!
\e(Bn
\e(0@
\e(B" 30 1) ("u
\e(0"
\e(Bn
\e(0@
\e(B" 30 3) ("u
\e(0#
\e(Bn
\e(0@
\e(B" 30 5) ("u
\e(0$
\e(Bn
\e(0@
\e(B" 30 7)
174 ("uang
\e(0@
\e(B" 31 0) ("u
\e(0!
\e(Bng
\e(0@
\e(B" 31 1) ("u
\e(0"
\e(Bng
\e(0@
\e(B" 31 3) ("u
\e(0#
\e(Bng
\e(0@
\e(B" 31 5) ("u
\e(0$
\e(Bng
\e(0@
\e(B" 31 7)
175 ("ue
\e(0@
\e(B" 32 0) ("u
\e(0%@
\e(B" 32 1) ("u
\e(0&@
\e(B" 32 3) ("u
\e(0'@
\e(B" 32 5) ("u
\e(0(@
\e(B" 32 7)
176 ("ui
\e(0@
\e(B" 33 0) ("u
\e(0)@
\e(B" 33 1) ("u
\e(0*@
\e(B" 33 3) ("u
\e(0+@
\e(B" 33 5) ("u
\e(0,@
\e(B" 33 7)
177 ("un
\e(0@
\e(B" 34 0) ("
\e(01
\e(Bn
\e(0@
\e(B" 34 1) ("
\e(02
\e(Bn
\e(0@
\e(B" 34 3) ("
\e(03
\e(Bn
\e(0@
\e(B" 34 5) ("
\e(04
\e(Bn
\e(0@
\e(B" 34 7)
178 ("uo
\e(0@
\e(B" 35 0) ("u
\e(0-@
\e(B" 35 1) ("u
\e(0.@
\e(B" 35 3) ("u
\e(0/@
\e(B" 35 5) ("u
\e(00@
\e(B" 35 7)
179 ("
\e(09@
\e(B" 36 0) ("
\e(05@
\e(B" 36 1) ("
\e(06@
\e(B" 36 3) ("
\e(07@
\e(B" 36 5) ("
\e(08@
\e(B" 36 7)
180 ("
\e(09
\e(Be
\e(0@
\e(B" 37 0) ("
\e(09%@
\e(B" 37 1) ("
\e(09&@
\e(B" 37 3) ("
\e(09'@
\e(B" 37 5) ("
\e(09(@
\e(B" 37 7)
181 ("0
\e(0@
\e(B" 38 0) ("1
\e(0@
\e(B" 38 1) ("2
\e(0@
\e(B" 38 3) ("3
\e(0@
\e(B" 38 5) ("4
\e(0@
\e(B" 38 7)))
183 (defconst yincode-pinyin-table
185 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0
186 0 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1
187 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1
188 0 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1
189 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1
190 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1
191 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1
192 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1
193 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1
194 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1
195 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1
196 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1
197 0 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 1 1 1
198 0 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1
199 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1
200 0 0 0 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 0 0 1
201 0 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1
202 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 0 0 1
203 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1
204 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1
205 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1
206 0 1 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 1 0 1 0 1 0 0 0 1
207 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1
208 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 1
211 (defconst yincode-zhuyin-shengmu
212 '(("" . 0) ("
\e(0E
\e(B" . 1) ("
\e(0X
\e(B" . 2) ("
\e(0T
\e(B" . 3) ("
\e(0I
\e(B" . 4)
213 ("
\e(0H
\e(B" . 5) ("
\e(0M
\e(B" . 6) ("
\e(0O
\e(B" . 7) ("
\e(0P
\e(B" . 8) ("
\e(0N
\e(B" . 9)
214 ("
\e(0L
\e(B" . 10) ("
\e(0G
\e(B" . 11) ("
\e(0K
\e(B" . 12) ("
\e(0F
\e(B" . 13) ("
\e(0Q
\e(B" . 14)
215 ("
\e(0V
\e(B" . 15) ("
\e(0Y
\e(B" . 16) ("
\e(0U
\e(B" . 17) ("
\e(0J
\e(B" . 18) ("
\e(0h
\e(B" . 19)
216 ("
\e(0R
\e(B" . 20) ("
\e(0g
\e(B" . 21) ("
\e(0W
\e(B" . 22) ("
\e(0S
\e(B" . 23)))
218 (defconst yincode-zhuyin-yunmu
219 '(("
\e(0@
\e(B" 0 0) ("
\e(0A
\e(B" 0 1) ("
\e(0B
\e(B" 0 3) ("
\e(0C
\e(B" 0 5) ("
\e(0D
\e(B" 0 7) ; i
220 ("
\e(0Z@
\e(B" 1 0) ("
\e(0ZA
\e(B" 1 1) ("
\e(0ZB
\e(B" 1 3) ("
\e(0ZC
\e(B" 1 5) ("
\e(0ZD
\e(B" 1 7) ; a
221 ("
\e(0^@
\e(B" 2 0) ("
\e(0^A
\e(B" 2 1) ("
\e(0^B
\e(B" 2 3) ("
\e(0^C
\e(B" 2 5) ("
\e(0^D
\e(B" 2 7) ; ai
222 ("
\e(0b@
\e(B" 3 0) ("
\e(0bA
\e(B" 3 1) ("
\e(0bB
\e(B" 3 3) ("
\e(0bC
\e(B" 3 5) ("
\e(0bD
\e(B" 3 7) ; an
223 ("
\e(0d@
\e(B" 4 0) ("
\e(0dA
\e(B" 4 1) ("
\e(0dB
\e(B" 4 3) ("
\e(0dC
\e(B" 4 5) ("
\e(0dD
\e(B" 4 7) ; ang
224 ("
\e(0`@
\e(B" 5 0) ("
\e(0`A
\e(B" 5 1) ("
\e(0`B
\e(B" 5 3) ("
\e(0`C
\e(B" 5 5) ("
\e(0`D
\e(B" 5 7) ; ao
225 ("
\e(0\@
\e(B" 6 0) ("
\e(0\A
\e(B" 6 1) ("
\e(0\B
\e(B" 6 3) ("
\e(0\C
\e(B" 6 5) ("
\e(0\D
\e(B" 6 7) ; e
226 ("
\e(0_@
\e(B" 7 0) ("
\e(0_A
\e(B" 7 1) ("
\e(0_B
\e(B" 7 3) ("
\e(0_C
\e(B" 7 5) ("
\e(0_D
\e(B" 7 7) ; ei
227 ("
\e(0c@
\e(B" 8 0) ("
\e(0cA
\e(B" 8 1) ("
\e(0cB
\e(B" 8 3) ("
\e(0cC
\e(B" 8 5) ("
\e(0cD
\e(B" 8 7) ; en
228 ("
\e(0e@
\e(B" 9 0) ("
\e(0eA
\e(B" 9 1) ("
\e(0eB
\e(B" 9 3) ("
\e(0eC
\e(B" 9 5) ("
\e(0eD
\e(B" 9 7) ; eng
229 ("
\e(0f@
\e(B" 10 0) ("
\e(0fA
\e(B" 10 1) ("
\e(0fB
\e(B" 10 3) ("
\e(0fC
\e(B" 10 5) ("
\e(0fD
\e(B" 10 7) ; er
230 ("
\e(0g@
\e(B" 11 0) ("
\e(0gA
\e(B" 11 1) ("
\e(0gB
\e(B" 11 3) ("
\e(0gC
\e(B" 11 5) ("
\e(0gD
\e(B" 11 7) ; i
231 ("
\e(0gZ@
\e(B" 12 0) ("
\e(0gZA
\e(B" 12 1) ("
\e(0gZB
\e(B" 12 3) ("
\e(0gZC
\e(B" 12 5) ("
\e(0gZD
\e(B" 12 7) ; ia
232 ("
\e(0gb@
\e(B" 13 0) ("
\e(0gbA
\e(B" 13 1) ("
\e(0gbB
\e(B" 13 3) ("
\e(0gbC
\e(B" 13 5) ("
\e(0gbD
\e(B" 13 7) ; ian
233 ("
\e(0gd@
\e(B" 14 0) ("
\e(0gdA
\e(B" 14 1) ("
\e(0gdB
\e(B" 14 3) ("
\e(0gdC
\e(B" 14 5) ("
\e(0gdD
\e(B" 14 7) ; iang
234 ("
\e(0g`@
\e(B" 15 0) ("
\e(0g`A
\e(B" 15 1) ("
\e(0g`B
\e(B" 15 3) ("
\e(0g`C
\e(B" 15 5) ("
\e(0g`D
\e(B" 15 7) ; iao
235 ("
\e(0g]@
\e(B" 16 0) ("
\e(0g]A
\e(B" 16 1) ("
\e(0g]B
\e(B" 16 3) ("
\e(0g]C
\e(B" 16 5) ("
\e(0g]D
\e(B" 16 7) ; ie
236 ("
\e(0gc@
\e(B" 17 0) ("
\e(0gcA
\e(B" 17 1) ("
\e(0gcB
\e(B" 17 3) ("
\e(0gcC
\e(B" 17 5) ("
\e(0gcD
\e(B" 17 7) ; in
237 ("
\e(0ge@
\e(B" 18 0) ("
\e(0geA
\e(B" 18 1) ("
\e(0geB
\e(B" 18 3) ("
\e(0geC
\e(B" 18 5) ("
\e(0geD
\e(B" 18 7) ; ing
238 ("
\e(0ie@
\e(B" 19 0) ("
\e(0ieA
\e(B" 19 1) ("
\e(0ieB
\e(B" 19 3) ("
\e(0ieC
\e(B" 19 5) ("
\e(0ieD
\e(B" 19 7) ; iong
239 ("
\e(0ga@
\e(B" 20 0) ("
\e(0gaA
\e(B" 20 1) ("
\e(0gaB
\e(B" 20 3) ("
\e(0gaC
\e(B" 20 5) ("
\e(0gaD
\e(B" 20 7) ; iu
240 ("
\e(0G@
\e(B" 21 0) ("
\e(0GA
\e(B" 21 1) ("
\e(0GB
\e(B" 21 3) ("
\e(0GC
\e(B" 21 5) ("
\e(0GD
\e(B" 21 7) ; m
241 ("
\e(0K@
\e(B" 22 0) ("
\e(0KA
\e(B" 22 1) ("
\e(0KB
\e(B" 22 3) ("
\e(0KC
\e(B" 22 5) ("
\e(0KD
\e(B" 22 7) ; n
242 ("@
\e(0@
\e(B" 23 0) ("@
\e(0A
\e(B" 23 1) ("@
\e(0B
\e(B" 23 3) ("@
\e(0C
\e(B" 23 5) ("@
\e(0D
\e(B" 23 7) ; ng
243 ("
\e(0[@
\e(B" 24 0) ("
\e(0[A
\e(B" 24 1) ("
\e(0[B
\e(B" 24 3) ("
\e(0[C
\e(B" 24 5) ("
\e(0[D
\e(B" 24 7) ; o
244 ("
\e(0he@
\e(B" 25 0) ("
\e(0heA
\e(B" 25 1) ("
\e(0heB
\e(B" 25 3) ("
\e(0heC
\e(B" 25 5) ("
\e(0heD
\e(B" 25 7) ; ong
245 ("
\e(0a@
\e(B" 26 0) ("
\e(0aA
\e(B" 26 1) ("
\e(0aB
\e(B" 26 3) ("
\e(0aC
\e(B" 26 5) ("
\e(0aD
\e(B" 26 7) ; ou
246 ("
\e(0h@
\e(B" 27 0) ("
\e(0hA
\e(B" 27 1) ("
\e(0hB
\e(B" 27 3) ("
\e(0hC
\e(B" 27 5) ("
\e(0hD
\e(B" 27 7) ; u
247 ("
\e(0hZ@
\e(B" 28 0) ("
\e(0hZA
\e(B" 28 1) ("
\e(0hZB
\e(B" 28 3) ("
\e(0hZC
\e(B" 28 5) ("
\e(0hZD
\e(B" 28 7) ; ua
248 ("
\e(0h^@
\e(B" 29 0) ("
\e(0h^A
\e(B" 29 1) ("
\e(0h^B
\e(B" 29 3) ("
\e(0h^C
\e(B" 29 5) ("
\e(0h^D
\e(B" 29 7) ; uai
249 ("
\e(0hb@
\e(B" 30 0) ("
\e(0hbA
\e(B" 30 1) ("
\e(0hbB
\e(B" 30 3) ("
\e(0hbC
\e(B" 30 5) ("
\e(0hbD
\e(B" 30 7) ; uan
250 ("
\e(0hd@
\e(B" 31 0) ("
\e(0hdA
\e(B" 31 1) ("
\e(0hdB
\e(B" 31 3) ("
\e(0hdC
\e(B" 31 5) ("
\e(0hdD
\e(B" 31 7) ; uang
251 ("
\e(0i]@
\e(B" 37 0) ("
\e(0i]A
\e(B" 37 1) ("
\e(0i]B
\e(B" 37 3) ("
\e(0i]C
\e(B" 37 5) ("
\e(0i]D
\e(B" 37 7) ; ue
252 ("
\e(0h_@
\e(B" 33 0) ("
\e(0h_A
\e(B" 33 1) ("
\e(0h_B
\e(B" 33 3) ("
\e(0h_C
\e(B" 33 5) ("
\e(0h_D
\e(B" 33 7) ; ui
253 ("
\e(0hc@
\e(B" 34 0) ("
\e(0hcA
\e(B" 34 1) ("
\e(0hcB
\e(B" 34 3) ("
\e(0hcC
\e(B" 34 5) ("
\e(0hcD
\e(B" 34 7) ; un
254 ("
\e(0h[@
\e(B" 35 0) ("
\e(0h[A
\e(B" 35 1) ("
\e(0h[B
\e(B" 35 3) ("
\e(0h[C
\e(B" 35 5) ("
\e(0h[D
\e(B" 35 7) ; uo
255 ("
\e(0i@
\e(B" 36 0) ("
\e(0iA
\e(B" 36 1) ("
\e(0iB
\e(B" 36 3) ("
\e(0iC
\e(B" 36 5) ("
\e(0iD
\e(B" 36 7) ;
\e(09
\e(B
256 ("
\e(0i]@
\e(B" 37 0) ("
\e(0i]A
\e(B" 37 1) ("
\e(0i]B
\e(B" 37 3) ("
\e(0i]C
\e(B" 37 5) ("
\e(0i]D
\e(B" 37 7) ;
\e(09
\e(Be
257 ("0
\e(0@
\e(B" 38 0) ("1
\e(0A
\e(B" 38 1) ("2
\e(0B
\e(B" 38 3) ("3
\e(0C
\e(B" 38 5) ("4
\e(0D
\e(B" 38 7) ; undefined
258 ("
\e(0ib@
\e(B" 39 0) ("
\e(0ibA
\e(B" 39 1) ("
\e(0ibB
\e(B" 39 3) ("
\e(0ibC
\e(B" 39 5) ("
\e(0ibD
\e(B" 39 7) ;
\e(09
\e(Ban
259 ("
\e(0ic@
\e(B" 40 0) ("
\e(0icA
\e(B" 40 1) ("
\e(0icB
\e(B" 40 3) ("
\e(0icC
\e(B" 40 5) ("
\e(0icD
\e(B" 40 7) ;
\e(09
\e(Bn
262 (defconst yincode-zhuyin-table
265 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
266 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x9586 ?\x0000 ?\x9592 ?\x9599
267 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x0000
268 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x959b ?\x95a0 ?\x0000 ?\x959e
271 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000
272 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000
273 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000
274 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
277 ?\x828b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
278 ?\x0000 ?\x0280 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
279 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
280 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
283 ?\x838b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000
284 ?\x0000 ?\x0380 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
285 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
286 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
289 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
290 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000
291 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
292 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
295 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000
296 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
297 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
298 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
301 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
302 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
303 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
304 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
307 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
308 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
309 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
310 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
313 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
314 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
315 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x08a4 ?\x0000 ?\x0000
316 ?\x08a7 ?\x0000 ?\x08a5 ?\x0000 ?\x08a8 ?\x0000 ?\x889b ?\x88a0 ?\x8000 ?\x889e
319 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
320 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
321 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
322 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
325 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000
326 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000
327 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
328 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000
331 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
332 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000
333 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
334 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
337 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
338 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000
339 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
340 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000
343 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000
344 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000
345 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
346 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
349 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
350 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
351 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0ea4 ?\x0000 ?\x0000
352 ?\x0ea7 ?\x0000 ?\x0ea5 ?\x0000 ?\x0ea8 ?\x0000 ?\x8e9b ?\x8ea0 ?\x8000 ?\x8e9e
355 ?\x8f8b ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000
356 ?\x0000 ?\x0f80 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
357 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000
358 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
361 ?\x908b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000
362 ?\x0000 ?\x1080 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
363 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
364 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
367 ?\x918b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
368 ?\x0000 ?\x1180 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
369 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
370 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
373 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x8000
374 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x0000
375 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
376 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
379 ?\x939b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000
380 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
381 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000 ?\x0000 ?\x1380 ?\x0000 ?\x0000
382 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
385 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
386 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
387 ?\x8000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x14a4 ?\x0000 ?\x0000
388 ?\x14a7 ?\x0000 ?\x14a5 ?\x0000 ?\x14a8 ?\x0000 ?\x949b ?\x94a0 ?\x8000 ?\x949e
391 ?\x958b ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0090 ?\x0000 ?\x9591 ?\x9592
392 ?\x0000 ?\x1580 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x1588 ?\x1589 ?\x0000
393 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0093 ?\x8000 ?\x00a4 ?\x0000 ?\x0000
394 ?\x00a7 ?\x0000 ?\x00a5 ?\x0000 ?\x00a8 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
397 ?\x968b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
398 ?\x0000 ?\x1680 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
399 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000
400 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
403 ?\x978b ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
404 ?\x0000 ?\x1780 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000
405 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x8000 ?\x8000
406 ?\x8000 ?\x8000 ?\x0000 ?\x8000 ?\x8000 ?\x8000 ?\x0000 ?\x0000 ?\x8000 ?\x0000
410 (defconst egg-chinese-syllable-max-len
411 (max (length "Zhu
\e(0!
\e(Bng
\e(0@
\e(B") (length "
\e(0ShdA
\e(B")))
413 (defun egg-chinese-syllable (str pos)
414 (setq str (substring str pos (min (length str)
415 (+ pos egg-chinese-syllable-max-len))))
416 (or (car (egg-pinyin-syllable str))
417 (car (egg-zhuyin-syllable str))))
419 (defsubst egg-make-fixed-euc-china-code (s y)
421 (+ (* 2 (nth 1 y)) (logand (nth 2 y) 1) 32)
422 (+ (* 4 (if (= s 0) 20 s)) (lsh (nth 2 y) -1) 156)))
424 (defun egg-pinyin-syllable (str)
426 (if (eq (string-match "^[A-Za-z
\e(0!
\e(B-
\e(0?
\e(B]+
\e(0@
\e(B" str) 0)
428 (setq end (match-end 0))
430 ((setq s (cdr (assoc (substring str 0 2) yincode-pinyin-shengmu)))
431 (setq y (substring str 2 end)))
432 ((setq s (cdr (assoc (substring str 0 1) yincode-pinyin-shengmu)))
433 (setq y (substring str 1 end)))
435 (setq s 0 y (substring str 0 end))))
436 (if (and (setq y (assoc y yincode-pinyin-yunmu))
437 (= (aref yincode-pinyin-table (+ (* 39 s) (nth 1 y))) 1))
438 (cons end (egg-make-fixed-euc-china-code s y)))))))
440 (defun egg-zhuyin-syllable (str)
441 (let (end s y c z (zhuyin-len (egg-charset-bytes 'chinese-sisheng)))
442 (if (eq (string-match "^[
\e(0E
\e(B-
\e(0i
\e(B@0-4]+[
\e(0@ABCD
\e(B]" str) 0)
444 (setq end (match-end 0)
445 c (substring str 0 zhuyin-len)
446 s (cdr (assoc c yincode-zhuyin-shengmu))
447 y (assoc (substring str zhuyin-len end) yincode-zhuyin-yunmu))
450 y (assoc (substring str 0 end) yincode-zhuyin-yunmu)))
452 (setq z (aref yincode-zhuyin-table (+ (* 41 s) (nth 1 y))))
453 (/= (logand z ?\x8000) 0))
454 (if (/= (logand z ?\x80) 0)
455 (cons end (egg-make-fixed-euc-china-code
456 (logand (lsh z -8) ?\x7f)
457 (list nil (logand z ?\x7f) (nth 2 y))))
458 (cons end (egg-make-fixed-euc-china-code s y))))))))
460 (defun encode-fixed-euc-china-region (beg end type)
461 "Encode the text in the region to EUC-CN/TW."
465 (narrow-to-region beg end)
466 (goto-char (point-min))
467 (while (< (point) (point-max))
468 (setq s (buffer-substring
470 (min (point-max) (+ (point) egg-chinese-syllable-max-len))))
472 ((setq syl (egg-pinyin-syllable s))
473 (delete-region (point) (+ (point) (car syl)))
474 (insert (car (cdr syl)) (cdr (cdr syl))))
475 ((setq syl (egg-zhuyin-syllable s))
476 (delete-region (point) (+ (point) (car syl)))
477 (insert (car (cdr syl)) (cdr (cdr syl))))
479 (setq c (split-char (following-char))
482 ((or (and (eq cset 'chinese-gb2312) (eq type 'cn))
483 (and (eq cset 'chinese-cns11643-1) (eq type 'tw)))
485 (insert (+ (nth 1 c) 128) (+ (nth 2 c) 128)))
486 ((and (eq cset 'chinese-cns11643-2) (eq type 'tw))
488 (insert (+ (nth 1 c) 128) (nth 2 c)))
489 ((eq cset 'chinese-sisheng)
491 (insert 0 (+ (nth 1 c) 128)))
494 (insert 0 (nth 1 c)))
497 (- (point-max) (point-min))))))
499 (defun pre-write-encode-fixed-euc-china (from to type)
500 (let ((buf (current-buffer))
501 (work (get-buffer-create " *pre-write-encoding-work*")))
504 (if (null (stringp from))
507 (setq from (buffer-substring from to))))
508 (insert (string-as-multibyte from))
509 (encode-fixed-euc-china-region 1 (point-max) type)
512 (defun pre-write-encode-euc-cn (from to)
513 (pre-write-encode-fixed-euc-china from to 'cn))
515 (defun pre-write-encode-euc-tw (from to)
516 (pre-write-encode-fixed-euc-china from to 'tw))
518 (defun decode-fixed-euc-china-region (beg end type)
519 "Decode EUC-CN/TW encoded text in the region.
520 Return the length of resulting text."
522 (let ((str (string-as-unibyte (buffer-substring beg end)))
525 (delete-region beg end)
526 (setq l (1- (length str)))
528 (setq c0 (aref str i)
534 (insert leading-code-private-11
535 (charset-id 'chinese-sisheng)
541 (insert (charset-id 'chinese-gb2312) c0 (logior c1 ?\x80)))
543 (insert (charset-id 'chinese-cns11643-1) c0 c1))
545 (insert (charset-id 'chinese-cns11643-2) c0 (+ c1 ?\x80)))))
547 (setq c1 (logand c1 ?\x7f))
548 (setq s (- (lsh c1 -2) 7);;(+ (lsh (- c1 32) -2) 1)
549 y (- (lsh c0 -1) 16);;(lsh (- c0 32) -1)
550 ss (+ (logand c0 1) (logand c1 3)))
553 (setq c0 (aref yincode-zhuyin-table (+ (* 41 s) y)))
554 (if (eq (logand c0 ?\x8080) ?\x80)
556 y (logand c0 ?\x7f)))
558 (eq (aref yincode-pinyin-table (+ (* 39 s) y)) 0))
560 (setq s (car (nth s yincode-zhuyin-shengmu))
561 y (car (nth (+ (* 5 y) ss) yincode-zhuyin-yunmu))))
563 (eq (aref yincode-pinyin-table (+ (* 39 s) y)) 0))
565 (setq s (car (nth s yincode-pinyin-shengmu))
566 y (car (nth (+ (* 5 y) ss) yincode-pinyin-yunmu))))
567 (if enable-multibyte-characters
569 (insert (string-as-unibyte s) (string-as-unibyte y))))))
571 (if (looking-at "\0\0") (forward-char 2))))
573 (defun post-read-decode-fixed-euc-china (len type)
575 (buffer-modified-p (buffer-modified-p)))
577 (decode-fixed-euc-china-region pos (+ pos len) type)
578 (set-buffer-modified-p buffer-modified-p))))
580 (defun post-read-decode-euc-cn (len)
581 (post-read-decode-fixed-euc-china len 'cn))
583 (defun post-read-decode-euc-tw (len)
584 (post-read-decode-fixed-euc-china len 'tw))
586 (make-coding-system 'fixed-euc-cn 0 ?W "Coding System for fixed EUC Chinese-gb2312")
587 (coding-system-put 'fixed-euc-cn 'pre-write-conversion 'pre-write-encode-euc-cn)
588 (coding-system-put 'fixed-euc-cn 'post-read-conversion 'post-read-decode-euc-cn)
590 (make-coding-system 'fixed-euc-tw 0 ?W "Coding System for fixed EUC Chinese-cns11643")
591 (coding-system-put 'fixed-euc-tw 'pre-write-conversion 'pre-write-encode-euc-tw)
592 (coding-system-put 'fixed-euc-tw 'post-read-conversion 'post-read-decode-euc-tw)
594 (defsubst comm-format-u32c (uint32c)
595 (let ((h0 (car uint32c))
597 (let ((b0 (logand (lsh h0 -8) 255))
599 (b2 (logand (lsh h1 -8) 255))
600 (b3 (logand h1 255)))
604 (insert-char b3 1))))
606 (defsubst comm-format-u32 (uint32)
607 (let ((b0 (logand (lsh uint32 -24) 255))
608 (b1 (logand (lsh uint32 -16) 255))
609 (b2 (logand (lsh uint32 -8) 255))
610 (b3 (logand uint32 255)))
616 (defsubst comm-format-i32 (int32)
617 (let ((b0 (logand (ash int32 -24) 255))
618 (b1 (logand (ash int32 -16) 255))
619 (b2 (logand (ash int32 -8) 255))
620 (b3 (logand int32 255)))
626 (defsubst comm-format-u16 (uint16)
627 (let ((b0 (logand (lsh uint16 -8) 255))
628 (b1 (logand uint16 255)))
632 (defsubst comm-format-u8 (uint8)
633 (let ((b0 (logand uint8 255)))
636 ;;; XXX should support other code conversion
637 (defsubst comm-format-u16-string (s)
638 (let ((euc-string (encode-coding-string s egg-fixed-euc)))
643 ;;; XXX should support other code conversion
644 (defsubst comm-format-mb-string (s)
645 (let ((euc-string (encode-coding-string s egg-mb-euc)))
649 (defsubst comm-format-u8-string (s)
653 (defsubst comm-format-u8-vector (s)
656 (defsubst comm-format-bytes (s)
660 (defmacro comm-format (format &rest args)
661 "Format a string out of a control-list and arguments into the buffer.
662 u means unsigned 32-bit in big endian.
663 i means unsigned 32-bit in big endian.
664 w means unsigned 16-bit in big endian.
665 b means unsigned 8-bit.
666 S means 16-bit(big endian) wide-character string (0x0000 terminated).
667 E means multibyte string (0x00 terminated).
668 s means 8-bit string (0x00 terminated).
669 v means 8-bit vector."
670 (let ((p args) result arg f)
673 (setq f (car format))
677 (cond ((eq f 'U) (list 'comm-format-u32c arg))
678 ((eq f 'u) (list 'comm-format-u32 arg))
679 ((eq f 'i) (list 'comm-format-i32 arg))
680 ((eq f 'v) (list 'comm-format-u8-vector arg))
681 ((eq f 'w) (list 'comm-format-u16 arg))
682 ((eq f 'b) (list 'comm-format-u8 arg))
683 ((eq f 'S) (list 'comm-format-u16-string arg))
684 ((eq f 'E) (list 'comm-format-mb-string arg))
685 ((eq f 's) (list 'comm-format-u8-string arg))
686 ((eq f 'B) (list 'comm-format-bytes arg))))))
688 (setq format (cdr format)))
693 ;; Do not move the point, leave it where it was.
694 (defun comm-accept-process-output (proc)
696 (accept-process-output proc)
699 ;; Assume PROC is bound to the process of current buffer
700 (defsubst comm-following-char-or-wait (proc)
703 (while (= p (point-max))
704 (accept-process-output proc))
708 (defun comm-following+forward-char (proc)
710 (comm-following-char-or-wait proc)
713 (defsubst comm-unpack-u32c (proc uint32c)
717 (lsh (comm-following+forward-char proc) 8)
718 (comm-following+forward-char proc)))
721 (lsh (comm-following+forward-char proc) 8)
722 (comm-following+forward-char proc)))
723 (set uint32c (cons h0 h1))))
725 (defsubst comm-unpack-u32 (proc uint32)
728 (lsh (comm-following+forward-char proc) 24)
729 (lsh (comm-following+forward-char proc) 16)
730 (lsh (comm-following+forward-char proc) 8)
731 (comm-following+forward-char proc))))
733 (defsubst comm-unpack-u16 (proc uint16)
736 (lsh (comm-following+forward-char proc) 8)
737 (comm-following+forward-char proc))))
739 (defsubst comm-unpack-u8 (proc uint8)
741 (comm-following+forward-char proc)))
743 ;;; XXX should support other conversion (euc-kr, cns)
744 (defsubst comm-unpack-u16-string (proc s)
745 (let ((start (point)))
746 (while (not (search-forward "\0\0" nil t))
747 (comm-accept-process-output proc))
748 (set s (string-as-multibyte
749 (buffer-substring start
751 (decode-coding-region start (- (point) 2)
754 ;;; XXX should support other conversion (euc-kr, cns)
755 (defsubst comm-unpack-mb-string (proc s)
756 (let ((start (point)))
757 (while (not (search-forward "\0" nil t))
758 (comm-accept-process-output proc))
759 (set s (string-as-multibyte
760 (buffer-substring start
762 (decode-coding-region start (- (point) 1)
765 (defsubst comm-unpack-u8-string (proc s)
766 (let ((start (point)))
767 (while (not (search-forward "\0" nil 1))
768 (comm-accept-process-output proc))
769 (set s (buffer-substring start (1- (point))))))
771 (defsubst comm-unpack-bytes (proc s)
772 (let ((start (point)))
773 (while (not (search-forward "\377" nil 1))
774 (comm-accept-process-output proc))
775 (set s (buffer-substring start (1- (point))))))
777 (defmacro comm-unpack (format &rest args)
778 "Unpack a string out of a control-string and set arguments.
779 u means unsigned 32-bit in big endian.
780 w means unsigned 16-bit in big endian.
781 b means unsigned 8-bit.
782 S means 16-bit(big endian) string (0x0000 terminated).
783 E means multibyte string (0x00 terminated).
784 s means 8-bit string (0x00 terminated).
786 (let ((p args) result arg f)
789 (setq f (car format))
793 (cond ((eq f 'U) (list 'comm-unpack-u32c
794 'proc (list 'quote arg)))
795 ((eq f 'u) (list 'comm-unpack-u32
796 'proc (list 'quote arg)))
797 ((eq f 'w) (list 'comm-unpack-u16
798 'proc (list 'quote arg)))
799 ((eq f 'b) (list 'comm-unpack-u8
800 'proc (list 'quote arg)))
801 ((eq f 'S) (list 'comm-unpack-u16-string
802 'proc (list 'quote arg)))
803 ((eq f 'E) (list 'comm-unpack-mb-string
804 'proc (list 'quote arg)))
805 ((eq f 's) (list 'comm-unpack-u8-string
806 'proc (list 'quote arg)))
807 ((eq f 'B) (list 'comm-unpack-u8-string
808 'proc (list 'quote arg)))))))
810 (setq format (cdr format)))
815 (defmacro comm-call-with-proc (proc vlist send-expr &rest receive-exprs)
820 (set-buffer (process-buffer proc))
823 (process-send-region proc (point-min) (point-max))
824 (goto-char (prog1 (point) (accept-process-output proc))))
827 (defmacro comm-call-with-proc-1 (proc vlist send-expr &rest receive-exprs)
834 (process-send-region proc (point-min) (point-max))
835 (goto-char (prog1 (point) (accept-process-output proc))))
839 ;;; egg-com.el ends here.