*** empty log message ***
[elisp/tamago.git] / its-keydef.el
1 ;;; its-keydef.el
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 ;; Keywords: mule, multilingual, input method
12
13 ;; This file is part of EGG.
14
15 ;; EGG is free software; you can redistribute it and/or modify
16 ;; it under the terms of the GNU General Public License as published by
17 ;; the Free Software Foundation; either version 2, or (at your option)
18 ;; any later version.
19
20 ;; EGG is distributed in the hope that it will be useful,
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 ;; GNU General Public License for more details.
24
25 ;; You should have received a copy of the GNU General Public License
26 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
27 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
28 ;; Boston, MA 02111-1307, USA.
29
30 ;;; Commentary:
31
32
33 ;;; Code:
34
35
36
37 (eval-when-compile
38   (require 'cl))
39
40 (defvar its-zhuyin nil)
41 (make-variable-buffer-local 'its-zhuyin)
42 (put 'its-zhuyin 'permanent-local t)
43
44 (defvar its-select-alist nil)
45 (make-variable-buffer-local 'its-select-func-alist)
46 (setq-default its-select-func-alist nil)
47 (put 'its-select-alist 'permanent-local t)
48
49 (defvar its-select-func-default-alist nil)
50
51 (eval-when-compile
52   (defmacro its-set-select-func-alist (list)
53     `'(setq ,list (cons (cons lang func)
54                        (delq (assq lang ,list) ,list)))))
55
56 (eval-and-compile
57   (defun its-make-select-func (key1 key2 func file map &optional zhuyin)
58     (setq func (intern (concat "its-select-" (symbol-name func)))
59           file (intern (concat "its/" (symbol-name file)))
60           map (intern (concat "its-" (symbol-name map) "-map")))
61     (cons
62      `(defun ,func (&optional temporally mode-line-unchange)
63         (interactive "P")
64         (let ((inhibit-read-only t)
65               (func ',func)
66               lang)
67           (if temporally
68               (its-select-mode-temporally func)
69             (require ',file)
70             (cond
71              ((its-in-fence-p)
72               (its-input-end)
73               (its-put-cursor t))
74              ((egg-conversion-fence-p)
75               (egg-exit-conversion)))
76             (setq its-current-select-func func
77                   its-current-map ',map
78                   lang (its-get-language ,map))
79             (when lang
80               (setq its-current-language lang)
81               ;; avoid overwriting when select temporally
82               (when (and (null its-previous-select-func)
83                          (null (assq lang its-select-func-default-alist)))
84                 ,(its-set-select-func-alist its-select-func-alist)
85                 ,(its-set-select-func-alist its-select-func-default-alist)))
86             ,(if zhuyin `(setq its-zhuyin ,(eq zhuyin 'T)))
87             (if (null mode-line-unchange)
88                 (its-set-mode-line-title)))))
89      `(,func ,(concat "\C-x\C-m" key1) ,(concat "\e" key2)))))
90
91 (defmacro its-do-list-make-select-func (list)
92   (let (funcs keydefs pair)
93     (while list
94       (setq pair (apply 'its-make-select-func (car list))
95             funcs (cons (car pair) funcs)
96             keydefs (cons (cdr pair) keydefs)
97             list (cdr list)))
98     `(progn
99        ,@funcs
100        (defvar its-define-select-key-list ',keydefs))))
101
102 (defmacro its-add-select-funcs (list)
103   (let (funcs keydefs pair)
104     (while list
105       (setq pair (apply 'its-make-select-func (car list))
106             funcs (cons (car pair) funcs)
107             keydefs (cons (cdr pair) keydefs)
108             list (cdr list)))
109     `(progn
110        ,@funcs
111        (setq its-define-select-key-list
112              (append ',keydefs its-define-select-key-list)))))
113
114 (defun its-define-select-keys (map &optional fence)
115   (let ((key-list its-define-select-key-list))
116     (while key-list
117       (define-key map (nth 1 (car key-list)) (car (car key-list)))
118       (if fence
119           (define-key map (nth 2 (car key-list)) (car (car key-list))))
120       (setq key-list (cdr key-list)))))
121
122 (its-do-list-make-select-func
123  (("Q"    "Q"    upcase               ascii    up)
124   ("q"    "q"    downcase             ascii    down)
125   ("h"    "\C-h" hiragana             hira     hira)
126   ("k"    "\C-k" katakana             kata     kata)
127   ("x"    "\C-x" hankaku-katakana     hankata  han-kata)
128   ("Z"    "Z"    zenkaku-upcase       zenkaku  zenkaku-up)
129   ("z"    "z"    zenkaku-downcase     zenkaku  zenkaku-down)
130   ("\C-e" "\C-e" erpin-cn             erpin    erpin-cn          NIL)
131   ("\C-p" "\C-p" pinyin-cn            pinyin   pinyin-cn         NIL)
132   ("\C-z" "\C-z" zhuyin-cn            zhuyin   zhuyin-cn         T)
133   ("\C-q" "\C-q" qianma               bixing   qianma)
134   ("\C-w" "\C-w" wubi                 bixing   wubi)
135   ("\C-u" "\C-u" quanjiao-upcase-cn   quanjiao quanjiao-up-cn)
136   ("\C-d" "\C-d" quanjiao-downcase-cn quanjiao quanjiao-down-cn)
137   ("E"    "E"    erpin-tw             erpin    erpin-tw          NIL)
138   ("P"    "P"    pinyin-tw            pinyin   pinyin-tw         NIL)
139   ("C"    "C"    zhuyin-tw            zhuyin   zhuyin-tw         T)
140   ("U"    "U"    quanjiao-upcase-tw   quanjiao quanjiao-up-tw)
141   ("D"    "D"    quanjiao-downcase-tw quanjiao quanjiao-down-tw)
142   ("H"    "H"    hangul               hangul   hangul)
143   ("J"    "J"    jeonkak-upcase       jeonkak  jeonkak-up)
144   ("j"    "j"    jeonkak-downcase     jeonkak  jeonkak-down)))
145
146 (provide 'its-keydef)