1 ;;; its/bixing.el --- Bixing (stroke) Input in Egg Input Method Architecture
3 ;; Copyright (C) 1999,2000 PFU LIMITED
5 ;; Author: KATAYAMA Yoshio <kate@pfu.co.jp>
7 ;; Maintainer: TOMURA Satoru <tomura@etl.go.jp>
9 ;; Keywords: mule, multilingual, input method
11 ;; This file is part of EGG.
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)
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.
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.
38 (defvar its-qianma-enable-quanjioao-alphabet
39 (if (boundp 'its-enable-fullwidth-alphabet)
40 its-enable-fullwidth-alphabet
42 "*Enable Quanjiao alphabet")
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"
47 (defvar its-wubi-enable-quanjioao-alphabet
48 (if (boundp 'its-enable-fullwidth-alphabet)
49 its-enable-fullwidth-alphabet
51 "*Enable Quanjiao alphabet")
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"
56 (its-set-stroke-input '((QianMa . 3) (WuBi . 4)))
58 (egg-set-message-language-alist '((QianMa . Chinese-GB) (WuBi . Chinese-GB)))
60 (define-its-state-machine its-qianma-map
61 "qinama" "
\e$AG.
\e(B" QianMa
62 "Map for QianMa input. (Chinese-GB)"
64 (defconst its-quanjiao-escape "Z")
65 (defconst its-banjiao-escape "X")
67 (its-defrule-select-mode-temporally "B" downcase)
68 (its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
70 (let ((ch (string-to-list "0123456789abcdefghijklmnopqrstuvwxyz;=@[]")))
72 (its-defrule (char-to-string (car ch)) (char-to-string (car ch)))
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)))
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))
112 (define-its-state-machine its-wubi-map
113 "wubi" "
\e$ANe
\e(B" WuBi
114 "Map for WuBi input. (Chinese-GB)"
116 (defconst its-quanjiao-escape "Z")
117 (defconst its-banjiao-escape "X")
119 (its-defrule-select-mode-temporally "B" downcase)
120 (its-defrule-select-mode-temporally "Q" quanjiao-downcase-cn)
122 (let ((ch (string-to-list "abcdefghijklmnopqrstuvwxy")))
124 (its-defrule (char-to-string (car ch)) (char-to-string (car ch)))
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)))
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))
165 (define-its-state-machine-append its-qianma-map
166 (its-defrule "{" its-qianma-open-braket)
167 (its-defrule "}" its-qianma-close-braket)
169 (if its-qianma-enable-quanjioao-alphabet
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))
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))))
193 (define-its-state-machine-append its-wubi-map
194 (its-defrule "[" its-wubi-open-braket)
195 (its-defrule "]" its-wubi-close-braket)
197 (if its-wubi-enable-quanjioao-alphabet
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))
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))))
235 (provide 'its/bixing)