(eval-when-compile (require 'cl)) (defvar its-current-language "Japanese") (defvar its-zhuyin nil) (make-variable-buffer-local 'its-zhuyin) (defmacro its-make-slect-func (key name file map &optional lang zhuyin) (setq name (intern (concat "its-select-" (symbol-name name))) file (intern (concat "its/" (symbol-name file))) map (intern (concat "its-" (symbol-name map) "-map")) lang (symbol-name lang)) `(progn (defun ,name () (interactive) (cond ((its-in-fence-p) (its-input-end) (its-put-cursor t)) ((egg-get-bunsetsu-info (point)) (egg-exit-conversion))) ,(if lang `(egg-check-language ,lang)) (require ',file) (setq its-current-map ,map) ,(if lang `(setq its-current-language ,lang)) ,(if zhuyin `(setq its-zhuyin ,(eq zhuyin 'T))) (egg-set-mode-line-title (its-get-indicator its-current-map))) (define-key mule-keymap ,key ',name))) (defmacro its-do-list-make-slect-func (list) (eval-when (eval compile) (let (e l) (while list (setq e (car list)) (setq l (cons `(its-make-slect-func ,@(car list)) l)) (setq list (cdr list))) (cons 'progn l)))) (its-do-list-make-slect-func (("Q" upcase ascii up) ("q" downcase ascii down) ("h" hiragana hira hira Japanese) ("K" katakana kata kata Japanese) ("x" hankaku-katakana hankata han-kata Japanese) ("Z" zenkaku-upcase zenkaku zenkaku-up Japanese) ("z" zenkaku-downcase zenkaku zenkaku-down Japanese) ("\C-e" erpin-cn erpin erpin-cn Chinese-GB NIL) ("\C-p" pinyin-cn pinyin pinyin-cn Chinese-GB NIL) ("\C-z" zhuyin-cn zhuyin zhuyin-cn Chinese-GB T) ("\C-u" quanjiao-upcase-cn quanjiao quanjiao-up-cn Chinese-GB) ("\C-d" quanjiao-downcase-cn quanjiao quanjiao-down-cn Chinese-GB) ("E" erpin-tw erpin erpin-tw Chinese-CNS NIL) ("P" pinyin-tw pinyin pinyin-tw Chinese-CNS NIL) ("Z" zhuyin-tw zhuyin zhuyin-tw Chinese-CNS T) ("U" quanjiao-upcase-tw quanjiao quanjiao-up-tw Chinese-CNS) ("D" quanjiao-downcase-tw quanjiao quanjiao-down-tw Chinese-CNS) ("H" hangul hangul hangul Korean) ("J" jeonkak-upcase jeonkak jeonkak-up Korean) ("j" jeonkak-downcase jeonkak jeonkak-down Korean))) (provide 'its-keydef)