;;; egg-canna.el --- Canna Conversion Facility in Egg Input ;;; Method Architecture ;; Copyright (C) 2000 Free Software Foundation, Inc ;; Author: ITOH Kinji ;; Keywords: mule, multilingual, input method, canna ;; This file is not part of EGG. ;; egg-canna.el is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; egg-canna.el 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;;; Code: (require 'egg-sim) ;;; canna-touroku (defun canna-touroku () "Register a word into a kana-to-kanji dictionary." (interactive) (condition-case err (egg-toroku-string (read-multilingual-string "単語?: ")) (error (message "登録できませんでした")))) (defun canna-delete-word () "Delete a word into a kana-to-kanji dictionary." (interactive) (let* ((ret (condition-case err (canna-word-delete-regist 'canna-backend-Japanese (read-multilingual-string "読み?: ")) (error nil))) kanji yomi hinshi dic) (if ret (progn (setq kanji (nth 0 ret) yomi (nth 1 ret) hinshi (nth 2 ret) dic (nth 3 ret)) (message (concat "辞書項目『" kanji "』(" yomi ": " hinshi ")を " dic " から削除しました"))) (message "削除できませんでした")))) (fset 'canna-touroku-region 'egg-toroku-region) ;;; canna-get-hinshi-info (defun canna-get-hinshi-info () (interactive) (let* ((b (car (egg-get-major-bunsetsu (point)))) (env (canna-bunsetsu-get-env b)) (bp (canna-bunsetsu-get-bunsetsu-pos b)) (zpos (canna-bunsetsu-get-zenkouho-pos b)) res) (setq res (cannarpc-get-hinshi env bp (or zpos 0))) (message res))) (define-key egg-conversion-map "\C-y" 'canna-get-hinshi-info) ;;; canna-kigou-mode (defvar canna-sim-kigou-menu `(menu "記号:" , (make-char-list 'japanese-jisx0208 1 2))) (defvar canna-sim-kigou-menu nil) (defun canna-kigou-mode () "Enter symbol choosing mode." (interactive "*") (let* ((ret (menudiag-select canna-sim-kigou-menu))) (insert ret))) ;;; canna-bushu-mode (defvar canna-sim-bushu-menu `(menu "部首:" (("一" . "いち") ("丿" . "の") ("凵" . "うけばこ") ("十" . "じゅう") ("卩" . "ふし") ("刀" . "かたな") ("刈(りっとう)" . "りっとう") ("力" . "か") ("厂" . "がん") ("勹" . "く") ("冂匚囗" . "かまえ") ("亠" . "なべ") ("冫" . "に") ("人/仁(にんべん)" . "ひと") ("又" . "ぬ") ("几" . "つくえ") ("八" . "はち") ("儿" . "る") ("冖" . "わ") ("宀" . "う") ("廴" . "えん") ("郁(おおざと)" . "おおざと") ("己" . "おのれ") ("女" . "おんな") ("彳" . "ぎょう") ("口" . "ろ") ("草(くさかんむり)" . "くさ") ("独(けものへん)" . "けもの") ("子" . "こ") ("陏(こざと)" . "こざと") ("士" . "さむらい") ("江(さんずい)" . "し") ("弋" . "しき") ("尸" . "しゃく") ("小/単(つ)" . "つ") ("辷(しんにょう)" . "しん") ("寸" . "すん") ("大" . "だい") ("土" . "ど") ("手(てへん)" . "て") ("巾" . "はば") ("广" . "ま") ("山" . "やま") ("夕" . "ゆう") ("弓" . "ゆみ") ("忙(りっしんべん)" . "りっしん") ("欠" . "けつ") ("歹" . "いちた") ("犬" . "いぬ") ("牛/牡(うしへん)" . "うし") ("片" . "かた") ("木" . "き") ("气" . "きがまえ") ("毛" . "け") ("心" . "こころ") ("水" . "すい") ("月" . "つき") ("爪" . "つめ") ("日" . "にち") ("攵" . "のぶん") ("火" . "ひ") ("方" . "ほう") ("戈" . "ほこ") ("点(れっか)" . "よつてん") ("殳" . "るまた") ("穴" . "あな") ("石" . "いし") ("玉" . "おう") ("皮" . "かわ") ("瓦" . "かわら") ("皿" . "さら") ("示" . "しめす") ("神(しめすへん)" . "ね") ("白" . "しろ") ("田" . "た") ("立" . "たつ") ("禾" . "のぎ") ("目" . "め") ("癶" . "はつ") ("矢" . "や") ("疔(やまいだれ)" . "やまい") ("四" . "よん") ("糸" . "いと") ("臼" . "うす") ("瓜" . "うり") ("老" . "おい") ("缶" . "かん") ("衣" . "きぬ") ("初(ころもへん)" . "ころも") ("米" . "こめ") ("舌" . "した") ("耒" . "すき") ("竹(たけかんむり)" . "たけ") ("血" . "ち") ("虎(とらかんむり)" . "とら") ("肉" . "にく") ("西" . "にし") ("羽" . "はね") ("羊" . "ひつじ") ("聿" . "ふで") ("舟" . "ふね") ("耳" . "みみ") ("虫" . "むし") ("赤" . "あか") ("足/疋" . "あし") ("豕" . "いのこ") ("臣" . "おみ") ("貝" . "かい") ("辛" . "からい") ("車" . "くるま") ("見" . "けん") ("言" . "ごん") ("酉" . "さけ") ("走" . "そう") ("谷" . "たに") ("角" . "つの") ("釆" . "のごめ") ("麦" . "ばく") ("豆" . "まめ") ("身" . "み") ("豸" . "むじな") ("雨" . "あめ") ("非" . "あらず") ("金" . "かね") ("門" . "もん") ("隹" . "ふるとり") ("頁" . "ぺーじ") ("音" . "おと") ("香" . "こう") ("革" . "かく") ("風" . "かぜ") ("首" . "くび") ("食" . "しょく") ("韋" . "なめし") ("面" . "めん") ("馬" . "うま") ("鬼" . "おに") ("髟" . "かみ") ("高" . "たかい") ("鬥" . "とう") ("骨" . "ほね") ("魚" . "うお") ("亀" . "かめ") ("鳥" . "とり") ("黒" . "くろ") ("鹿" . "しか") ("鼻" . "はな") ("齒" . "は") ("記号" . "きごう") ("その他" . "そのた")))) (defun canna-bushu-mode () "Enter special mode to convert by BUSHU name." (interactive "*") (let* ((key (car (menudiag-select canna-sim-bushu-menu nil nil t))) (bushu (car key)) (yomi (cdr key)) (bunsetsu (canna-start-conversion 'canna-backend-Japanese-Bushu yomi nil)) (kouho-list (cdr (canna-list-candidates bunsetsu nil nil nil))) (result (menudiag-select `(menu , (concat bushu ":") , kouho-list)))) (insert result) )) ;;; canna server operation (defun canna-server-finalize () "disconnect server." (interactive) (canna-finalize-backend)) (defun canna-server-change () "change server." (interactive) (let* ((hosts (if (listp canna-hostname) canna-hostname (list canna-hostname))) (hostname (completing-read "サーバー名: " (mapcar '(lambda (x) (list x)) hosts) nil nil nil)) port) (if (null (string-match ":" hostname)) (progn (setq port (if (numberp canna-server-port) (number-to-string canna-server-port) canna-server-port)) (setq port (completing-read "ポート: " (mapcar '(lambda (x) (list x)) (list port)) nil nil port nil port))) (setq port (substring hostname (match-end 0)) hostname (substring hostname 0 (match-beginning 0)))) (setq canna-server-port port) (setq hosts (delete hostname hosts)) (setq canna-hostname (cons hostname hosts)) (canna-finalize-backend) )) ;;; XXX canna-extend-mode (defvar canna-sim-russia-menu '(menu "ロシア語:" ("А" "Б" "В" "Г" "Д" "Е" "Ё" "Ж" "З" "И" "Й" "К" "Л" "М" "Н" "О" "П" "Р" "С" "Т" "У" "Ф" "Х" "Ц" "Ч" "Ш" "Щ" "Ъ" "Ы" "Ь" "Э" "Ю" "Я" "а" "б" "в" "г" "д" "е" "ё" "ж" "з" "и" "й" "к" "л" "м" "н" "о" "п" "р" "с" "т" "у" "ф" "х" "ц" "ч" "ш" "щ" "ъ" "ы" "ь" "э" "ю" "я"))) (defvar canna-sim-greek-menu '(menu "ギリシャ語:" ("Α" "Β" "Γ" "Δ" "Ε" "Ζ" "Η" "Θ" "Ι" "Κ" "Λ" "Μ" "Ν" "Ξ" "Ο" "Π" "Ρ" "Σ" "Τ" "Υ" "Φ" "Χ" "Ψ" "Ω" "α" "β" "γ" "δ" "ε" "ζ" "η" "θ" "ι" "κ" "λ" "μ" "ν" "ξ" "ο" "π" "ρ" "σ" "τ" "υ" "φ" "χ" "ψ" "ω"))) (defvar canna-sim-keisen-menu '(menu "罫線:" ("─" "│" "┌" "┐" "┘" "└" "├" "┬" "┤" "┴" "┼" "━" "┃" "┏" "┓" "┛" "┗" "┣" "┳" "┫" "┻" "╋" "┠" "┯" "┨" "┷" "┿" "┝" "┰" "┥" "┸" "╂"))) (defvar canna-kigou-menu `(menu "記号メニュー:" (("記号全般" . , canna-sim-kigou-menu) ("ロシア語" . , canna-sim-russia-menu) ("ギリシャ文字" . , canna-sim-greek-menu) ("罫線" . , canna-sim-keisen-menu)))) (defvar canna-toroku-menu `(menu "単語登録メニュー:" (("単語登録" . touroku) ("単語削除" . delete-word) ("辞書マウント/アンマウント" . NO_SUPPORT)))) (defvar canna-server-menu `(menu "サーバ操作メニュー:" (("サーバの切り離し" . server-finalize) ("サーバの切り替え" . server-change) ("サーバの表示" . NO_SUPPORT)))) (defvar canna-environment-menu `(menu "環境設定メニュー:" (("サーバ操作" . , canna-server-menu) ("辞書マウント/アンマウント" . NO_SUPPORT) ("学習状態表示" . NO_SUPPORT)))) (defun canna-extend-mode () "To enter an extend-mode of Canna." (interactive "*") (let* ((key (menudiag-select `(menu "メニュー:" (("記号入力" . , canna-kigou-menu) ("コード入力" . NO_SUPPORT) ("部首入力" . bushu-mode) ("単語登録" . , canna-toroku-menu) ("環境設定" . , canna-environment-menu)))))) (cond ((eq key 'NO_SUPPORT) (message "まだ実現されていません.")) ((symbolp key) (funcall (intern (concat "canna-" (symbol-name key))))) ((stringp key) (insert key)) (t (insert key)) ))) ;;; for mlh (setq mlh-default-backend "canna") ;;; for canna boil (setq boiling-input-method "japanese-egg-canna") (autoload 'boiling-rK-trans "boiling-egg" "romaji-kanji conversion" t) (autoload 'boiling-rhkR-trans "boiling-egg" "romaji-kana conversion" t) (defun canna-boil () "`canna-boil' cooks `canna' as if `boil' does for `egg'." (interactive) (local-set-key "\C-j" 'boiling-rK-trans) (local-set-key "\ej" 'boiling-rhkR-trans) (message "boiled")) (provide 'egg-canna) ;;; egg-canna.el ends here.