--- /dev/null
+;; zh-util.mim -- Provide utilities for Chinese input methods.
+;; Copyright (C) 2005
+;; National Institute of Advanced Industrial Science and Technology (AIST)
+;; Registration Number H15PRO112
+
+;; This file is part of the m17n library.
+
+;; The m17n library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public License
+;; as published by the Free Software Foundation; either version 2.1 of
+;; the License, or (at your option) any later version.
+
+;; The m17n library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; Lesser General Public License for more details.
+
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with the m17n library; if not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+(input-method t nil zh-util)
+
+(description "Provide utilities for Chinese input methods.
+This is acutually not a standalone input method, but is expected
+to be included in the other Chinese input method (e.g. zh-py).
+")
+
+(map
+ ;; Typing 1, 2, ..., 0 selects the 0th, 1st, ..., 9th candidate.
+ (choose
+ ("1" (select 0))
+ ("2" (select 1))
+ ("3" (select 2))
+ ("4" (select 3))
+ ("5" (select 4))
+ ("6" (select 5))
+ ("7" (select 6))
+ ("8" (select 7))
+ ("9" (select 8))
+ ("0" (select 9)))
+
+ (change-candidate
+ ((Left) (select @-))
+ ((C-b) (select @-))
+ ((Right) (select @+))
+ ((C-f) (select @+))
+ ((Up) (select @[))
+ ((C-p) (select @[))
+ ((Down) (select @]))
+ ((C-n) (select @])))
+
+ (focus-change
+ ;; When an input spot is moved, commit the current predit by shifting
+ ;; to init.
+ ((input-focus-move) (shift init))
+ ;; When an input focus is out or in, keep the current preedit.
+ ((input-focus-out) (set KK @@) (sub KK 1) (undo KK))
+ ((input-focus-in) (set KK @@) (sub KK 1) (undo KK)))
+
+ (backspace
+ ((BackSpace)))
+
+ (commit-preedit
+ ((S-\ ))))
+
+(state
+ (check-undo
+ ;; When Backspace is typed, cancel the last input.
+ (backspace (undo))
+ (focus-change)
+ ;; When anything else is typed, produce the current candidate (if
+ ;; any), and re-handle the last input in "init" state.
+ (nil (hide) (shift init)))
+
+ (select
+ (t (set K @@) (sub K 1))
+ ;; When a number is typed, select the corresponding canidate,
+ ;; produce it, and shift to "init" state.
+ (focus-change)
+ (choose (hide) (shift init))
+ (change-candidate)
+ (backspace (undo K))
+ ;; When key to force committing, commit the current preedit.
+ (commit-preedit (shift init))
+ ;; When anything else is typed, produce the current candidate,
+ ;; and re-handle the last input in "init" state.
+ (nil (hide) (shift init))))