XEmacs uses sisheng instead of chinese-sisheng.
[elisp/tamago.git] / its / bixing.el
1 ;;; its/bixing.el --- Bixing (stroke) Input in Egg Input Method Architecture
2
3 ;; Copyright (C) 1999,2000 PFU LIMITED
4
5 ;; Author: KATAYAMA Yoshio <kate@pfu.co.jp>
6
7 ;; Maintainer: TOMURA Satoru <tomura@etl.go.jp>
8
9 ;; Keywords: mule, multilingual, input method
10
11 ;; This file is part of EGG.
12
13 ;; EGG is free software; you can redistribute it and/or modify
14 ;; it under the terms of the GNU General Public License as published by
15 ;; the Free Software Foundation; either version 2, or (at your option)
16 ;; any later version.
17
18 ;; EGG is distributed in the hope that it will be useful,
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 ;; GNU General Public License for more details.
22
23 ;; You should have received a copy of the GNU General Public License
24 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
26 ;; Boston, MA 02111-1307, USA.
27
28 ;;; Commentary:
29
30
31 ;;; Code:
32
33
34 (eval-when-compile
35   (require 'its)
36   (require 'cl))
37
38 (defvar its-qianma-enable-quanjioao-alphabet
39   (if (boundp 'its-enable-fullwidth-alphabet)
40       its-enable-fullwidth-alphabet
41     t)
42   "*Enable Quanjiao alphabet")
43
44 (defvar its-qianma-open-braket  "\e$A!8\e(B" "*[") ; "\e$A#[\e(B"
45 (defvar its-qianma-close-braket "\e$A!9\e(B" "*]") ; "\e$A#]\e(B"
46
47 (defvar its-wubi-enable-quanjioao-alphabet
48   (if (boundp 'its-enable-fullwidth-alphabet)
49       its-enable-fullwidth-alphabet
50     t)
51   "*Enable Quanjiao alphabet")
52
53 (defvar its-wubi-open-braket  "\e$A!8\e(B" "*[") ; "\e$A#[\e(B"
54 (defvar its-wubi-close-braket "\e$A!9\e(B" "*]") ; "\e$A#]\e(B"
55
56 (its-set-stroke-input '((QianMa . 3) (WuBi . 4)))
57
58 (egg-set-message-language-alist '((QianMa . Chinese-GB) (WuBi . Chinese-GB)))
59
60 (define-its-state-machine its-qianma-map
61   "qinama" "\e$AG.\e(B" QianMa
62   "Map for QianMa input. (Chinese-GB)"
63
64   (defconst its-quanjiao-escape "Z")
65   (defconst its-banjiao-escape  "X")
66
67   (its-defrule-select-mode-temporally "B" downcase)
68   (its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
69
70   (let ((ch (string-to-list "0123456789abcdefghijklmnopqrstuvwxyz;=@[]")))
71     (while ch
72       (its-defrule (char-to-string (car ch)) (char-to-string (car ch)))
73       (setq ch (cdr ch))))
74
75   (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")
76                    ("4" . "\e$A#4\e(B")  ("5" . "\e$A#5\e(B")  ("6" . "\e$A#6\e(B")  ("7" . "\e$A#7\e(B")
77                    ("8" . "\e$A#8\e(B")  ("9" . "\e$A#9\e(B") 
78                    (" " . "\e$A!!\e(B")  ("!" . "\e$A#!\e(B")  ("@" . "\e$A#@\e(B")  ("#" . "\e$A##\e(B")
79                    ("$" . "\e$A!g\e(B")  ("%" . "\e$A#%\e(B")  ("^" . "\e$A#^\e(B")  ("&" . "\e$A#&\e(B")
80                    ("*" . "\e$A#*\e(B")  ("(" . "\e$A#(\e(B")  (")" . "\e$A#)\e(B")
81                    ("-" . "\e$A#-\e(B")  ("=" . "\e$A#=\e(B")  ("`" . "\e$A#`\e(B")  ("\\" . "\e$A#\\e(B")
82                    ("|" . "\e$A#|\e(B")  ("_" . "\e$A#_\e(B")  ("+" . "\e$A#+\e(B")  ("~" . "\e$A!+\e(B")
83                    ("[" . "\e$A#[\e(B")  ("]" . "\e$A#]\e(B")  ("{" . "\e$A#{\e(B")  ("}" . "\e$A#}\e(B")
84                    (":" . "\e$A#:\e(B")  (";" . "\e$A#;\e(B")  ("\"" . "\e$A#"\e(B") ("'" . "\e$A#'\e(B")
85                    ("<" . "\e$A#<\e(B")  (">" . "\e$A#>\e(B")  ("?" . "\e$A#?\e(B")  ("/" . "\e$A#/\e(B")
86                    ("," . "\e$A#,\e(B")  ("." . "\e$A#.\e(B")
87                    ("a" . "\e$A#a\e(B")  ("b" . "\e$A#b\e(B")  ("c" . "\e$A#c\e(B")  ("d" . "\e$A#d\e(B")
88                    ("e" . "\e$A#e\e(B")  ("f" . "\e$A#f\e(B")  ("g" . "\e$A#g\e(B")  ("h" . "\e$A#h\e(B")
89                    ("i" . "\e$A#i\e(B")  ("j" . "\e$A#j\e(B")  ("k" . "\e$A#k\e(B")  ("l" . "\e$A#l\e(B")
90                    ("m" . "\e$A#m\e(B")  ("n" . "\e$A#n\e(B")  ("o" . "\e$A#o\e(B")  ("p" . "\e$A#p\e(B")
91                    ("q" . "\e$A#q\e(B")  ("r" . "\e$A#r\e(B")  ("s" . "\e$A#s\e(B")  ("t" . "\e$A#t\e(B")
92                    ("u" . "\e$A#u\e(B")  ("v" . "\e$A#v\e(B")  ("w" . "\e$A#w\e(B")  ("x" . "\e$A#x\e(B")
93                    ("y" . "\e$A#y\e(B")  ("z" . "\e$A#z\e(B")
94                    ("A" . "\e$A#A\e(B")  ("B" . "\e$A#B\e(B")  ("C" . "\e$A#C\e(B")  ("D" . "\e$A#D\e(B")
95                    ("E" . "\e$A#E\e(B")  ("F" . "\e$A#F\e(B")  ("G" . "\e$A#G\e(B")  ("H" . "\e$A#H\e(B")
96                    ("I" . "\e$A#I\e(B")  ("J" . "\e$A#J\e(B")  ("K" . "\e$A#K\e(B")  ("L" . "\e$A#L\e(B")
97                    ("M" . "\e$A#M\e(B")  ("N" . "\e$A#N\e(B")  ("O" . "\e$A#O\e(B")  ("P" . "\e$A#P\e(B")
98                    ("Q" . "\e$A#Q\e(B")  ("R" . "\e$A#R\e(B")  ("S" . "\e$A#S\e(B")  ("T" . "\e$A#T\e(B")
99                    ("U" . "\e$A#U\e(B")  ("V" . "\e$A#V\e(B")  ("W" . "\e$A#W\e(B")  ("X" . "\e$A#X\e(B")
100                    ("Y" . "\e$A#Y\e(B")  ("Z" . "\e$A#Z\e(B")))
101     (let ((in (car ascii)) (out (cdr ascii)))
102       (its-defrule (concat its-banjiao-escape in) in t)
103       (its-defrule (concat its-quanjiao-escape in) out t)))
104
105   (its-defrule  ","     "\e$A#,\e(B"      t)
106   (its-defrule  "."     "\e$A!#\e(B"      t)
107   (its-defrule  "/"     "\e$A!"\e(B"      t)
108   (its-defrule  ":"     "\e$A#:\e(B"      t)
109   (its-defrule  "?"     "\e$A#?\e(B"      t)
110   (its-defrule  "!"     "\e$A#!\e(B"      t))
111
112 (define-its-state-machine its-wubi-map
113   "wubi" "\e$ANe\e(B" WuBi
114   "Map for WuBi input. (Chinese-GB)"
115
116   (defconst its-quanjiao-escape "Z")
117   (defconst its-banjiao-escape  "X")
118
119   (its-defrule-select-mode-temporally "B" downcase)
120   (its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
121
122   (let ((ch (string-to-list "abcdefghijklmnopqrstuvwxy")))
123     (while ch
124       (its-defrule (char-to-string (car ch)) (char-to-string (car ch)))
125       (setq ch (cdr ch))))
126
127   (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")
128                    ("4" . "\e$A#4\e(B")  ("5" . "\e$A#5\e(B")  ("6" . "\e$A#6\e(B")  ("7" . "\e$A#7\e(B")
129                    ("8" . "\e$A#8\e(B")  ("9" . "\e$A#9\e(B") 
130                    (" " . "\e$A!!\e(B")  ("!" . "\e$A#!\e(B")  ("@" . "\e$A#@\e(B")  ("#" . "\e$A##\e(B")
131                    ("$" . "\e$A!g\e(B")  ("%" . "\e$A#%\e(B")  ("^" . "\e$A#^\e(B")  ("&" . "\e$A#&\e(B")
132                    ("*" . "\e$A#*\e(B")  ("(" . "\e$A#(\e(B")  (")" . "\e$A#)\e(B")
133                    ("-" . "\e$A#-\e(B")  ("=" . "\e$A#=\e(B")  ("`" . "\e$A#`\e(B")  ("\\" . "\e$A#\\e(B")
134                    ("|" . "\e$A#|\e(B")  ("_" . "\e$A#_\e(B")  ("+" . "\e$A#+\e(B")  ("~" . "\e$A!+\e(B")
135                    ("[" . "\e$A#[\e(B")  ("]" . "\e$A#]\e(B")  ("{" . "\e$A#{\e(B")  ("}" . "\e$A#}\e(B")
136                    (":" . "\e$A#:\e(B")  (";" . "\e$A#;\e(B")  ("\"" . "\e$A#"\e(B") ("'" . "\e$A#'\e(B")
137                    ("<" . "\e$A#<\e(B")  (">" . "\e$A#>\e(B")  ("?" . "\e$A#?\e(B")  ("/" . "\e$A#/\e(B")
138                    ("," . "\e$A#,\e(B")  ("." . "\e$A#.\e(B")
139                    ("a" . "\e$A#a\e(B")  ("b" . "\e$A#b\e(B")  ("c" . "\e$A#c\e(B")  ("d" . "\e$A#d\e(B")
140                    ("e" . "\e$A#e\e(B")  ("f" . "\e$A#f\e(B")  ("g" . "\e$A#g\e(B")  ("h" . "\e$A#h\e(B")
141                    ("i" . "\e$A#i\e(B")  ("j" . "\e$A#j\e(B")  ("k" . "\e$A#k\e(B")  ("l" . "\e$A#l\e(B")
142                    ("m" . "\e$A#m\e(B")  ("n" . "\e$A#n\e(B")  ("o" . "\e$A#o\e(B")  ("p" . "\e$A#p\e(B")
143                    ("q" . "\e$A#q\e(B")  ("r" . "\e$A#r\e(B")  ("s" . "\e$A#s\e(B")  ("t" . "\e$A#t\e(B")
144                    ("u" . "\e$A#u\e(B")  ("v" . "\e$A#v\e(B")  ("w" . "\e$A#w\e(B")  ("x" . "\e$A#x\e(B")
145                    ("y" . "\e$A#y\e(B")  ("z" . "\e$A#z\e(B")
146                    ("A" . "\e$A#A\e(B")  ("B" . "\e$A#B\e(B")  ("C" . "\e$A#C\e(B")  ("D" . "\e$A#D\e(B")
147                    ("E" . "\e$A#E\e(B")  ("F" . "\e$A#F\e(B")  ("G" . "\e$A#G\e(B")  ("H" . "\e$A#H\e(B")
148                    ("I" . "\e$A#I\e(B")  ("J" . "\e$A#J\e(B")  ("K" . "\e$A#K\e(B")  ("L" . "\e$A#L\e(B")
149                    ("M" . "\e$A#M\e(B")  ("N" . "\e$A#N\e(B")  ("O" . "\e$A#O\e(B")  ("P" . "\e$A#P\e(B")
150                    ("Q" . "\e$A#Q\e(B")  ("R" . "\e$A#R\e(B")  ("S" . "\e$A#S\e(B")  ("T" . "\e$A#T\e(B")
151                    ("U" . "\e$A#U\e(B")  ("V" . "\e$A#V\e(B")  ("W" . "\e$A#W\e(B")  ("X" . "\e$A#X\e(B")
152                    ("Y" . "\e$A#Y\e(B")  ("Z" . "\e$A#Z\e(B")))
153     (let ((in (car ascii)) (out (cdr ascii)))
154       (its-defrule (concat its-banjiao-escape in) in t)
155       (its-defrule (concat its-quanjiao-escape in) out t)))
156
157   (its-defrule  ","     "\e$A#,\e(B"      t)
158   (its-defrule  "."     "\e$A!#\e(B"      t)
159   (its-defrule  "/"     "\e$A!"\e(B"      t)
160   (its-defrule  ";"     "\e$A#;\e(B"      t)
161   (its-defrule  ":"     "\e$A#:\e(B"      t)
162   (its-defrule  "?"     "\e$A#?\e(B"      t)
163   (its-defrule  "!"     "\e$A#!\e(B"      t))
164
165 (define-its-state-machine-append its-qianma-map
166   (its-defrule "{" its-qianma-open-braket)
167   (its-defrule "}" its-qianma-close-braket)
168
169   (if its-qianma-enable-quanjioao-alphabet
170       (progn
171         (its-defrule "#"  "\e$A##\e(B"  t)  (its-defrule "$"  "\e$A!g\e(B"  t)
172         (its-defrule "%"  "\e$A#%\e(B"  t)  (its-defrule "^"  "\e$A#^\e(B"  t)
173         (its-defrule "&"  "\e$A#&\e(B"  t)  (its-defrule "*"  "\e$A#*\e(B"  t)
174         (its-defrule "("  "\e$A#(\e(B"  t)  (its-defrule ")"  "\e$A#)\e(B"  t)
175         (its-defrule "-"  "\e$A#-\e(B"  t)  (its-defrule "~"  "\e$A!+\e(B"  t)
176         (its-defrule "`"  "\e$A#`\e(B"  t)
177         (its-defrule "\\" "\e$A#\\e(B"  t)  (its-defrule "|"  "\e$A#|\e(B"  t)
178         (its-defrule "_"  "\e$A#_\e(B"  t)  (its-defrule "+"  "\e$A#+\e(B"  t)
179         (its-defrule "\"" "\e$A#"\e(B"  t)  (its-defrule "'"  "\e$A#'\e(B"  t)
180         (its-defrule "<"  "\e$A#<\e(B"  t)  (its-defrule ">"  "\e$A#>\e(B"  t))
181     (progn
182       (its-defrule "#"  "#"  t)  (its-defrule "$"  "$"  t)
183       (its-defrule "%"  "%"  t)  (its-defrule "^"  "^"  t)
184       (its-defrule "&"  "&"  t)  (its-defrule "*"  "*"  t)
185       (its-defrule "("  "("  t)  (its-defrule ")"  ")"  t)
186       (its-defrule "-"  "-"  t)  (its-defrule "~"  "~"  t)
187       (its-defrule "`"  "`"  t)
188       (its-defrule "\\" "\\" t)  (its-defrule "|"  "|"  t)
189       (its-defrule "_"  "_"  t)  (its-defrule "+"  "+"  t)
190       (its-defrule "\"" "\"" t)  (its-defrule "'"  "'"  t)
191       (its-defrule "<"  "<"  t)  (its-defrule ">"  ">"  t))))
192
193 (define-its-state-machine-append its-wubi-map
194   (its-defrule "[" its-wubi-open-braket)
195   (its-defrule "]" its-wubi-close-braket)
196
197   (if its-wubi-enable-quanjioao-alphabet
198       (progn
199         (its-defrule "1"  "\e$A#1\e(B"  t)  (its-defrule "2"  "\e$A#2\e(B"  t)
200         (its-defrule "3"  "\e$A#3\e(B"  t)  (its-defrule "4"  "\e$A#4\e(B"  t)
201         (its-defrule "5"  "\e$A#5\e(B"  t)  (its-defrule "6"  "\e$A#6\e(B"  t)
202         (its-defrule "7"  "\e$A#7\e(B"  t)  (its-defrule "8"  "\e$A#8\e(B"  t)
203         (its-defrule "9"  "\e$A#9\e(B"  t)  (its-defrule "0"  "\e$A#0\e(B"  t)
204         (its-defrule "@"  "\e$A#@\e(B"  t)
205         (its-defrule "#"  "\e$A##\e(B"  t)  (its-defrule "$"  "\e$A!g\e(B"  t)
206         (its-defrule "%"  "\e$A#%\e(B"  t)  (its-defrule "^"  "\e$A#^\e(B"  t)
207         (its-defrule "&"  "\e$A#&\e(B"  t)  (its-defrule "*"  "\e$A#*\e(B"  t)
208         (its-defrule "("  "\e$A#(\e(B"  t)  (its-defrule ")"  "\e$A#)\e(B"  t)
209         (its-defrule "-"  "\e$A#-\e(B"  t)  (its-defrule "~"  "\e$A!+\e(B"  t)
210         (its-defrule "="  "\e$A#=\e(B"  t)  (its-defrule "`"  "\e$A#`\e(B"  t)
211         (its-defrule "\\" "\e$A#\\e(B"  t)  (its-defrule "|"  "\e$A#|\e(B"  t)
212         (its-defrule "_"  "\e$A#_\e(B"  t)  (its-defrule "+"  "\e$A#+\e(B"  t)
213         (its-defrule "{"  "\e$A#{\e(B"  t)  (its-defrule "}"  "\e$A#}\e(B"  t)
214         (its-defrule "\"" "\e$A#"\e(B"  t)  (its-defrule "'"  "\e$A#'\e(B"  t)
215         (its-defrule "<"  "\e$A#<\e(B"  t)  (its-defrule ">"  "\e$A#>\e(B"  t))
216     (progn
217       (its-defrule "1"  "1"  t)  (its-defrule "2"  "2"  t)
218       (its-defrule "3"  "3"  t)  (its-defrule "4"  "4"  t)
219       (its-defrule "5"  "5"  t)  (its-defrule "6"  "6"  t)
220       (its-defrule "7"  "7"  t)  (its-defrule "8"  "8"  t)
221       (its-defrule "9"  "9"  t)  (its-defrule "0"  "0"  t)
222       (its-defrule "@"  "@"  t)
223       (its-defrule "#"  "#"  t)  (its-defrule "$"  "$"  t)
224       (its-defrule "%"  "%"  t)  (its-defrule "^"  "^"  t)
225       (its-defrule "&"  "&"  t)  (its-defrule "*"  "*"  t)
226       (its-defrule "("  "("  t)  (its-defrule ")"  ")"  t)
227       (its-defrule "-"  "-"  t)  (its-defrule "~"  "~"  t)
228       (its-defrule "="  "="  t)  (its-defrule "`"  "`"  t)
229       (its-defrule "\\" "\\" t)  (its-defrule "|"  "|"  t)
230       (its-defrule "_"  "_"  t)  (its-defrule "+"  "+"  t)
231       (its-defrule "{"  "{"  t)  (its-defrule "}"  "}"  t)
232       (its-defrule "\"" "\"" t)  (its-defrule "'"  "'"  t)
233       (its-defrule "<"  "<"  t)  (its-defrule ">"  ">"  t))))
234
235 (provide 'its/bixing)