Mercurial > hg > xemacs-beta
diff lisp/skk/skk.el @ 219:262b8bb4a523 r20-4b8
Import from CVS: tag r20-4b8
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:09:35 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/skk/skk.el Mon Aug 13 10:09:35 2007 +0200 @@ -0,0 +1,5358 @@ +;; -*-byte-compile-dynamic: t;-*- +;;; skk.el --- SKK (Simple Kana to Kanji conversion program) +;; Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 +;; Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp> + +;; Author: Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp> +;; Maintainer: Murata Shuuichirou <mrt@mickey.ai.kyutech.ac.jp> +;; Mikio Nakajima <minakaji@osaka.email.ne.jp> +;; Version: $Id: skk.el,v 1.1 1997/12/02 08:48:40 steve Exp $ +;; Keywords: japanese +;; Last Modified: $Date: 1997/12/02 08:48:40 $ + +;; This program 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 versions 2, or (at your option) +;; any later version. + +;; This program 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 SKK, see the file COPYING. If not, write to the Free +;; Software Foundation Inc., 59 Temple Place - Suite 330, Boston, +;; MA 02111-1307, USA. + +;;; Commentary: + +;; Following people contributed modifications to skk.el (Alphabetical order): +;; Chikanobu Toyofuku <unbound@papaya.juice.or.jp> +;; FURUE Hideyuki <furue@kke.co.jp> +;; GUNJI Takao <gunji@lisa.lang.osaka-u.ac.jp> +;; Haru Mizuno <mizu@cs3.cs.oki.co.jp> +;; Hideki Sakurada <sakurada@kuis.kyoto-u.ac.jp> +;; Hisao Kuroda <kuroda@msi.co.jp> +;; Hitoshi SUZUKI <h-suzuki@ael.fujitsu.co.jp> +;; IIDA Yosiaki <iida@secom-sis.co.jp> +;; Jun-ichi Nakamura <nakamura@pluto.ai.kyutech.ac.jp> +;; Katuya Tomioka <tomioka@culle.l.chiba-u.ac.jp> +;; Kazuo Hirokawa <hirokawa@rics.co.jp> +;; Kazushi Marukawa <kazushi@kubota.co.jp> +;; Kimura Chikahiro <kimura@oa1.kb.nec.co.jp> +;; Kiyotaka Sakai <ksakai@netwk.ntt-at.co.jp> +;; Koichi MORI <kmori@onsei2.rilp.m.u-tokyo.ac.jp> +;; MINOURA Itsushi <minoura@uni.zool.s.u-tokyo.ac.jp> +;; MIYOSHI Tsutomu <minkov@fuzzy.or.jp> +;; Makoto MATSUSHITA <matusita@ics.es.osaka-u.ac.jp> +;; Masahiko Suzuki <suzmasa@sm.sony.co.jp> +;; Masahiro Doteguchi <xdote@rp.open.cs.fujitsu.co.jp> +;; Masakazu Takahashi <masaka-t@ascii.co.jp> +;; Masatake YAMATO <jet@airlab.cs.ritsumei.ac.jp> +;; Mikio Nakajima <minakaji@osaka.email.ne.jp> +;; Motohiko Mouri <mouri@jaist.ac.jp> +;; Murata Shuuichirou <mrt@mickey.ai.kyutech.ac.jp> +;; $BCfDE;3(B $B91(B <hisashi@rst.fujixerox.co.jp> +;; NAMBA Seiich <pi9s-nnb@asahi-net.or.jp> +;; Naoki HAMADA <nao@mimo.jaist-east.ac.jp> +;; Ryoichi Hashimoto <gnu@ipri.go.jp> +;; Sekita Daigo <sekita@mri.co.jp> +;; $B?JF#M5;V(B <shindo@super.ees.saitama-u.ac.jp> +;; Shuji Ashizawa <ashizawa@zuken.co.jp> +;; Takeshi OHTANI <ohtani@iias.flab.fujitsu.co.jp> +;; Tomoyuki Hiro <hiro@momo.it.okayama-u.ac.jp> +; $BDS?"(B $B@5Bg(B (ma-tsuge@kdd.co.jp) +;; Tsugutomo Enami <enami@ptgd.sony.co.jp> +;; Wataru Matsui <matsui@atr-rd.atr.co.jp> +;; Yoshida Toyonobu <toyono-y@is.aist-nara.ac.jp> + +;;; Change log: + +;;; Code: +(require 'advice) +;; Elib 1.0 is required +;; queue-m.el and string.el are now distributed with SKK; this seems +;; to be the primary source for XEmacs +(require 'queue-m) +(require 'string) +(require 'skk-foreword) +(require 'skk-vars) + +(defconst skk-version "10.38") + +;;;###skk-autoload +(defconst skk-month-alist + '(("Jan" . "1") ("Feb" . "2") ("Mar" . "3") ("Apr" . "4") ("May" . "5") + ("Jun" . "6") ("Jul" . "7") ("Aug" . "8") ("Sep" . "9") ("Oct" . "10") + ("Nov" . "11") ("Dec" . "12") ) + "$B1Q8l$N7nL>$H;;MQ?t;z$NO"A[%j%9%H!#(B + +$B;;MQ?t;z$+$i1Q8l$N7nL>$N$_$r=PNO$9$k$N$G$"$l$P!"%Y%/%?!<$r;H$C$?J}$,9bB.$@$,!"(B +$B1Q8l$N7nL>$+$i;;MQ?t;z$r=PNO$9$k$N$G$"$l$PO"A[%j%9%H$G$J$1$l$PL5M}$J$N$G!"B?(B +$BL\E*$K;HMQ$G$-$k$h$&O"A[%j%9%H$N7ABV$r<h$k!#(B + +Alist of English month abbreviations and numerical values. + +Although it is faster to use a vector if we only want to output +month abbreviations given the ordinal, without the alist it's +unreasonable [sic] to output the ordinal given the abbreviation, +so for multi-purpose utility we use the alist form." +) + +;;;###skk-autoload +(defun skk-version () + (interactive) + (if (not (interactive-p)) + skk-version + (save-match-data + (let* ((raw-date "$Date: 1997/12/02 08:48:40 $") + (year (substring raw-date 7 11)) + (month (substring raw-date 12 14)) + (date (substring raw-date 15 17)) ) + (if (string-match "^0" month) + (setq month (substring month (match-end 0))) ) + (if (string-match "^0" date) + (setq date (substring date (match-end 0))) ) + (message "SKK version %s of %s" + skk-version + (concat (car (rassoc month skk-month-alist)) + " " date ", " year )))))) + +;;;; variables declaration +;;; user variables +(defvar skk-debug nil) + +;;;###skk-autoload +(defvar skk-init-file (if (eq system-type 'ms-dos) "~/_skk" "~/.skk") + "*SKK $B$N=i4|@_Dj%U%!%$%kL>!#(B +skk.el 9.x $B$h$j(B ~/.emacs $B$G$N%+%9%?%^%$%:$,2DG=$H$J$C$?!#(B + +Name of the SKK initialization file. +From skk.el 9.x on all customization may be done in ~/.emacs." +) + +;;;###skk-autoload +(defvar skk-special-midashi-char-list '(?> ?< ??) + "*$B@\F,<-!"@\Hx<-$NF~NO$N$?$a$N%W%l%U%#%C%/%9%-!<!"%5%U%#%C%/%9%-!<$N%j%9%H!#(B + +List of prefix and suffix keys for entering `setsutoji' and `setsuoji'." +;#SJT# What are `setsutoji' and `setsuoji'? +) + +;#SJT# Is this hook also run in skk-auto-fill-mode? Before or after? +;;;###skk-autoload +(defvar skk-mode-hook nil + "*SKK $B$r5/F0$7$?$H$-$N%U%C%/!#(B +$BB>$K!"(Bskk-auto-fill-mode-hook$B!"(Bskk-load-hook, skk-init-file $B$G$b%+%9%?(B +$B%^%$%:$,2DG=!#(B + +Hook run at SKK startup. + +`skk-auto-fill-mode-hook', `skk-load-hook', and skk-init-file may also +be used for customization." +) + +;;;###skk-autoload +(defvar skk-auto-fill-mode-hook nil + "*skk-auto-fill-mode $B$r5/F0$7$?$H$-$N%U%C%/!#(B +$BB>$K!"(Bskk-mode-hook, skk-load-hook, skk-init-file $B$G$b%+%9%?%^%$%:$,2D(B +$BG=!#(B + +Hook run at startup of skk-auto-fill-mode. + +`skk-mode-hook', `skk-load-hook', and `skk-init-file' may also be +used for customization." +) + +;;;###skk-autoload +(defvar skk-load-hook nil + "*skk.el $B$r%m!<%I$7$?$H$-$N%U%C%/!#(B +$BB>$K!"(Bskk-mode-hook, skk-auto-fill-mode-hook, skk-init-file $B$G$b%+%9%?(B +$B%^%$%:$,2DG=!#(B + +Hook run when SKK is loaded. + +`skk-auto-fill-mode-hook', `skk-mode-hook', and `skk-init-file' may +also be used for customization." +) + +;;;###skk-autoload +(defvar skk-kakutei-jisyo nil + "*$B:G=i$K8!:w$9$k<-=q!#(B +Non-nil $B$G!"$+$D(B skk-search-prog-list $B$NMWAG$NCf$K$3$NJQ?t$,;HMQ$5$l$F$$$l$P!"(B +$B;XDj$5$l$?<-=q$r8!:w$N$?$a%P%C%U%!$KFI$_9~$_!"8!:w$r9T$J$&!#(B +$B8+=P$78l$O!"%=!<%H$5$l$F$$$J$1$l$P$J$i$J$$!#(B +$B3F8+=P$78l$N:G=i$N%(%s%H%j$7$+8!:w$7$J$$(B ($BJ#?t$N%(%s%H%j$,$"$C$F$b(B 2 $BHVL\0J9_$N(B +$B%(%s%H%j$OL5;k$5$l$k(B)$B!#(B +skk-search-prog-list $B$NCM$r@_Dj$9$k$3$H$K$h$j!"8!:wBP>]$N<-=q$NJQ99!"8!:w$N=g(B +$B=x$NJQ99$,2DG=!#(B + +The first dictionary to be searched. +If non-nil, and this variable is used as a component of +`skk-search-prog-list', the indicated dictionary is read into a +buffer and searched. +The keys must be sorted. +Only the first entry in each key is checked; if several entries are +present the second and following entries are ignored. +By setting the value of `skk-search-prog-list' the dictionaries +searched and the order of search can be changed." +) + +;;;###skk-autoload +(defvar skk-initial-search-jisyo nil + "*$B%f!<%6!<<-=q$N8!:w$NA0$K8!:w$9$k<-=q!#(B +$B8+=P$78l$O!"%=!<%H$5$l$F$$$J$1$l$P$J$i$J$$!#(B +Non-nil $B$G!"$+$D(B skk-search-prog-list $B$NMWAG$NCf$K$3$NJQ?t$,;HMQ$5$l$F$$$l$P!"(B +$B;XDj$5$l$?<-=q$r8!:w$N$?$a%P%C%U%!$KFI$_9~$_!"8!:w$r9T$J$&!#(B +skk-search-prog-list $B$NCM$r@_Dj$9$k$3$H$K$h$j!"8!:wBP>]$N<-=q$NJQ99!"8!:w$N=g(B +$B=x$NJQ99$,2DG=!#(B + +This dictionary is searched before the user's personal dictionary. +The keys must be sorted. +If non-nil, and this variable is used as a component of +`skk-search-prog-list', the indicated dictionary is read into a +buffer and searched. +By setting the value of `skk-search-prog-list' the dictionaries +searched and the order of search can be changed." +) + +;;;###skk-autoload +(defvar skk-large-jisyo nil + "*$B%f!<%6!<<-=q$N8!:w$N8e$K8!:w$9$k<-=q!#(B +$B8+=P$78l$O!"%=!<%H$5$l$F$$$J$1$l$P$J$i$J$$!#(B +Non-nil $B$G!"$+$D(B skk-search-prog-list $B$NMWAG$NCf$K$3$NJQ?t$,;HMQ$5$l$F$$$l$P!"(B +$B;XDj$5$l$?<-=q$r8!:w$N$?$a%P%C%U%!$KFI$_9~$_!"8!:w$r9T$J$&!#(B +skk-search-prog-list $B$NCM$r@_Dj$9$k$3$H$K$h$j!"8!:wBP>]$N<-=q$NJQ99!"8!:w$N=g(B +$B=x$NJQ99$,2DG=!#(B + +Dictionary searched after the user dictionary. +Keys must be sorted. +If non-nil and this variable is used as a component of +`skk-search-prog-list', the indicated dictionary is read into a buffer +for search, and the search is executed. +By setting the value of `skk-search-prog-list' the dictionaries +searched and the order of search can be changed." +) + +;;;###skk-autoload +(defvar skk-aux-large-jisyo nil + "*SKK $B%5!<%P!<$G:G8e$K8!:w$9$k<-=q!#(B +$B8+=P$78l$O!"%=!<%H$5$l$F$$$J$1$l$P$J$i$J$$!#(B +Non-nil $B$G!"$+$D(B skk-search-prog-list $B$NMWAG$NCf$K$3$NJQ?t$,;HMQ$5$l$F$$$l$P!"(B +SKK $B%5!<%P!<$r;H$$8!:w$r9T$&!#(B +SKK $B%5!<%P!<$,(B active $B$G$J$1$l$P!";XDj$5$l$?<-=q$r%P%C%U%!$KFI$_9~$`!#(B +skk-search-prog-list $B$NCM$r@_Dj$9$k$3$H$K$h$j!"8!:wBP>]$N<-=q$NJQ99!"8!:w$N=g(B +$B=x$NJQ99$,2DG=!#(B +$B$3$NCM$r@_Dj$9$k$3$H$K$h$j!"(Bskk-server.el $B$,(B autoload $B$5$l$k!#(B + +Last dictionary to be searched by the SKK server. +Keys must be sorted. + +If non-nil and this variable is used as a component of +`skk-search-prog-list', the SKK server is used to execute the search. +If the server is not active, the indicated dictionary is read into a +buffer for search, and the search is executed. +By setting the value of `skk-search-prog-list' the dictionaries +searched and the order of search can be changed. +According to the value of this variable the skkserv.el will be +autoloaded." +) + +;;;###skk-autoload +(defvar skk-search-prog-list + '((skk-search-kakutei-jisyo-file skk-kakutei-jisyo 10000 t) + (skk-search-jisyo-file skk-initial-search-jisyo 10000 t) + (skk-search-jisyo-file skk-jisyo 0 t) + ;; skk-auto.el $B$r%m!<%I$9$k$H2<5-$NMWAG$,%W%i%9$5$l$k!#(B + ;;(skk-okuri-search) + (skk-search-jisyo-file skk-large-jisyo 10000) + ;; skk-server.el $B$r%m!<%I$9$k$H2<5-$NMWAG$,%W%i%9$5$l$k!#(B + ;;(skk-search-server skk-aux-large-jisyo 10000) + ;; skk-server-host $B$b$7$/$O(B skk-servers-list $B$r;XDj$9$k$H!"(Bskk-server.el + ;; $B$,(B autoload $B$5$l$k!#(B + ) + "*$B8!:w4X?t!"8!:wBP>]$N<-=q$r7hDj$9$k$?$a$N%j%9%H!#(B +$BJQ49$7$?8uJd$rJV$9(B S $B<0$r%j%9%H$N7A$KI=5-$7$?$b$N!#(B +skk-search $B4X?t$,(B skk-search-prog-list $B$N(B car $B$+$i8eJ}8~$X=gHV$K(B S $B<0$NI>2A$r(B +$B9T$$JQ49$r9T$J$&!#(B + +This list determines the search functions used and the dictionaries +searched. +A list of S-expressions returning conversion candidates. +The function `skk-search' performs conversions by evaluating each S- +expression in order, starting with the car of `skk-search-prog-list'." +) + +;;;###skk-autoload +(defvar skk-jisyo (if (eq system-type 'ms-dos) "~/_skk-jisyo" "~/.skk-jisyo") + "*SKK $B$N%f!<%6!<<-=q!#(B + +SKK's dictionary of user-specified conversions." ) + +;;;###skk-autoload +(defvar skk-backup-jisyo + (if (eq system-type 'ms-dos) "~/_skk-jisyo.BAK" "~/.skk-jisyo.BAK") + "*SKK $B$N%f!<%6!<<-=q$N%P%C%/%"%C%W%U%!%$%k!#(B + +Name of user dictionary backup (a file name as a string)." +) + +;;;###skk-autoload +(defvar skk-jisyo-code nil + "*Non-nil $B$G$"$l$P!"$=$NCM$G<-=q%P%C%U%!$N4A;z%3!<%I$r@_Dj$9$k!#(B +Mule $B$G$O!"(B*euc-japan*, *sjis*, *junet*$B!#(B +$B$^$?!"(B\"euc\", \"ujis\", \"sjis\", \"jis\" $B$J$I$NJ8;zNs$K$h$C$F$b;XDj$,(B +$B2DG=!#(B + +If non-nil, the value sets the kanji code used in dictionary buffers. +In Mule, the symbols *euc-japan*, *sjis*, or *junet*. Can also be +specified as a string such as \"euc\", \"ujis\", \"sjis\", or \"jis\"." +) + +;;;###skk-autoload +(defvar skk-keep-record t + "*Non-nil $B$G$"$l$P!"JQ49$K4X$9$k5-O?$r(B skk-record-file $B$K<h$k!#(B + +If non-nil, a record of conversions is kept in `skk-record-file'.") + +;;;###skk-autoload +(defvar skk-record-file + (if (eq system-type 'ms-dos) "~/_skk-record" "~/.skk-record") + "*$B%f!<%6!<<-=q$NE}7W$r<h$k%U%!%$%k!#(B +$B<-=q%;!<%V$N;~9o!"C18l$NEPO??t!"3NDj$r9T$C$?2s?t!"3NDjN(!"A4BN$N8l?t$N(B +$B>pJs$r<}$a$k!#(B + +File containing statistics about the user dictionary. + +At the time the dictionary is saved, the number of words registered, +number of conversions accepted, rate of acceptance, and the total +number of words are collected." ) + +;;;###skk-autoload +(defvar skk-kakutei-key "\C-j" + "*$B3NDjF0:n(B (\"skk-kakutei\") $B$r9T$&%-!<!#(B + +The key that executes conversion confirmation (\"skk-kakutei\").") + +;;;###skk-autoload +(defvar skk-use-vip nil + "*Non-nil $B$G$"$l$P!"(BVIP $B$KBP1~$9$k!#(B + +If non-nil, VIP compatibility mode." ) + +;;;###skk-autoload +(defvar skk-use-viper nil + "*Non-nil $B$G$"$l$P!"(BVIPER $B$KBP1~$9$k!#!#(B + +If non-nil, VIPER compatibility mode." ) + +;;;###skk-autoload +(defvar skk-henkan-okuri-strictly nil + "*Non-nil $B$G$"$l$P!"8+=P$78l$HAw$j2>L>$,0lCW$7$?$H$-$@$18uJd$H$7$F=PNO$9$k!#(B +$BNc$($P!"2<5-$N$h$&$J<-=q%(%s%H%j$,!"(Bskk-jisyo \($B%W%i%$%Y!<%H<-=q(B\) $B$K$"$C$?>l9g$K(B + + \"$B$*$*(Bk /$BBg(B/$BB?(B/[$B$/(B/$BB?(B/]/[$B$-(B/$BBg(B/]/\" + +\"$B"&$*$*(B*$B$/(B\" $B$rJQ49$7$?$H$-!"(B\"$BB?$/(B\" $B$N$_$r=PNO$7!"(B\"$BBg$/(B\" $B$r=PNO$7$J$$!#(B + +SKK-JISYO.[SML] $B$NAw$j2>L>%(%s%H%j$O>e5-$N7A<0$K$J$C$F$$$J$$$N$G!"(Bskk-jisyo $B$N(B +$BAw$j$"$j$N<-=q%(%s%H%j$,$3$N7A<0$N$b$N$r$"$^$j4^$s$G$$$J$$>l9g$O!"$3$N%*%W%7%g(B +$B%s$r(B on $B$K$9$k$3$H$G!"$9$0$KC18lEPO?$KF~$C$F$7$^$&$N$GCm0U$9$k$3$H!#(B + +skk-process-okuri-early $B$NCM$,(B nil $B$J$i$P>e5-$N7A<0$G(B skk-jisyo $B$,:n$i$l$k!#(B + +Emacs 19 $B%Y!<%9$N(B Mule $B$J$i$P!"2<5-$N%U%)!<%`$rI>2A$9$k$3$H$G!"C18lEPO?$KF~$C(B +$B$?$H$-$@$10l;~E*$K$3$N%*%W%7%g%s$r(B nil $B$K$9$k$3$H$,$G$-$k!#(B + + \(add-hook 'minibuffer-setup-hook + \(function + \(lambda \(\) + \(if \(and \(boundp 'skk-henkan-okuri-strictly\) + skk-henkan-okuri-strictly + \(not \(eq last-command 'skk-purge-from-jisyo\)\) \) + \(progn + \(setq skk-henkan-okuri-strictly nil\) + \(put 'skk-henkan-okuri-strictly 'temporary-nil t\) \)\)\)\)\) + + \(add-hook 'minibuffer-exit-hook + \(function + \(lambda \(\) + \(if \(get 'skk-henkan-okuri-strictly 'temporary-nil\) + \(progn + \(put 'skk-henkan-okuri-strictly 'temporary-nil nil\) + \(setq skk-henkan-okuri-strictly t\) \)\)\)\)\) + +$B$3$N%*%W%7%g%sMxMQ;~$O!"(Bskk-process-okuri-early $B$NCM$O(B nil $B$G$J$1$l$P$J$i$J$$(B +\($B%a%K%e!<%P!<(B $B$rMxMQ$7$F%+%9%?%^%$%:$7$?>l9g$O<+F0E*$KD4@0$5$l$k(B\)$B!#(B + +If non-nil, only when the key and its inflected suffix are given +together in the dictionary will they be output as a candidate. For +example, if the following entry is in `skk-jisyo' (the provate +dictionary), + + \"$B$*$*(Bk /$BBg(B/$BB?(B/[$B$/(B/$BB?(B/]/[$B$-(B/$BBg(B/]/\" + +then when converting \"$B"&$*$*(B*$B$/(B\", only \"$BB?$/(B\" wil be output; \"$BBg$/(B +\" will not be offered as a candidate. + +The inflected suffixes in SKK-JISYO.[SML] are not given in the above +way, so if very few of the entries in skk-jisyo are given in that +form, then when this option is set `on', \"word registration mode\" will +be entered extremely often. + +If the value of `skk-process-okuri-early' is `nil', new entries in +`skk-jisyo' will be created in the form above. + +If using a Mule based on Emacs 19 or later, you can arrange for this +option to be temporarily set to `nil' by evaluating the following +form: + + \(add-hook 'minibuffer-setup-hook + \(function + \(lambda \(\) + \(if \(and \(boundp 'skk-henkan-okuri-strictly\) + skk-henkan-okuri-strictly + \(not \(eq last-command 'skk-purge-from-jisyo\)\) \) + \(progn + \(setq skk-henkan-okuri-strictly nil\) + \(put 'skk-henkan-okuri-strictly 'temporary-nil t\) \)\)\)\)\) + + \(add-hook 'minibuffer-exit-hook + \(function + \(lambda \(\) + \(if \(get 'skk-henkan-okuri-strictly 'temporary-nil\) + \(progn + \(put 'skk-henkan-okuri-strictly 'temporary-nil nil\) + \(setq skk-henkan-okuri-strictly t\) \)\)\)\)\) + +When using this option, `skk-process-okuri-early' must be `nil'. +(When using customize from the menubar this will automatically +temporarily be set to `nil'.)" ) + +;;;###skk-autoload +(defvar skk-henkan-strict-okuri-precedence nil + "*Non-nil $B$G$"$l$P!"8+=P$78l$HAw$j2>L>$,0lCW$7$?8uJd$rM%@h$7$FI=<($9$k!#(B +$BNc$($P!"2<5-$N$h$&$J<-=q%(%s%H%j$,!"(Bskk-jisyo \($B%W%i%$%Y!<%H<-=q(B\) $B$K$"$C$?>l9g$K(B + + \"$B$*$*(Bk /$BBg(B/$BB?(B/[$B$/(B/$BB?(B/]/[$B$-(B/$BBg(B/]/\" + +\"$B"&$*$*(B*$B$/(B\" $B$rJQ49$7$?$H$-!"$^$:(B\"$BB?$/(B\" $B$r=PNO$7!"(B +$B<!$K(B \"$BBg$/(B\" $B$r=PNO$9$k!#(B + +\"$BBg$/(B\"$B$J$I$N8uJd$O$&$C$H$&$7$$$,!"$9$0$KC18lEPO?$K$O$$$C$F$7$^$&$N$b(B +$B7y$J$R$H$K$*$9$9$a!#(B + +$B$3$N%*%W%7%g%sMxMQ;~$O!"(Bskk-process-okuri-early $B$NCM$O(B nil $B$G$J$i$J$$!#(B +$B$^$?(B skk-henkan-okuri-strictly $B$,(B non-nil $B$N$H$-$O!"$3$NJQ?t$OL5;k$5$l$k!#(B +\($B%a%K%e!<%P!<(B $B$rMxMQ$7$F%+%9%?%^%$%:$7$?>l9g$O<+F0E*$KD4@0$5$l$k(B\)$B!#(B") + +;;;###skk-autoload +(defvar skk-auto-okuri-process nil + "*Non-nil $B$G$"$l$P!"Aw$j2>L>ItJ,$r<+F0G'<1$7$FJQ49$r9T$&!#(B +$BNc$($P!"(B + + \"Uresii (\"UreSii\" $B$G$O$J$/(B) -> $B4r$7$$(B\" + +$B$N$h$&$KJQ49$5$l$k!#C"$7!"(Bskk-jisyo $B<-=q(B \($B%W%i%$%Y!<%H<-=q(B\) $B$,!"(B + + \"$B$&$l(Bs /$B4r(B/[$B$7(B/$B4r(B/]/\" + +$B$N$h$&$J7A<0$K$J$C$F$$$k$3$H$,I,MW$G$"$k(B \(SKK-JISYO.[SML] $B$O$3$N7A<0$KBP1~$7(B +$B$F$$$J$$$N$G!"(Bskk-jisyo $B$K$3$N%(%s%H%j$,$J$1$l$P$J$i$J$$(B\)$B!#(B + +$B$3$N%*%W%7%g%sMxMQ;~$O!"(Bskk-process-okuri-early $B$NCM$O(B nil $B$G$J$1$l$P$J$i$J$$(B +\($B%a%K%e!<%P!<(B $B$rMxMQ$7$F%+%9%?%^%$%:$7$?>l9g$O<+F0E*$KD4@0$5$l$k(B\)$B!#(B" ) + +;;;###skk-autoload +(defvar skk-process-okuri-early nil + "*Non-nil $B$G$"$l$P!"Aw$j2>L>$N%m!<%^;z%W%l%U%#%C%/%9$NF~NO;~E@$GJQ49$r3+;O$9$k!#(B +$BNc$($P!"(B + + \"UgoK -> $B"'F0(Bk\"$B!#(B + +$BAw$j2>L>$,J,$i$J$$$^$^JQ49$7$F$$$k$3$H$K$J$k$N$G!"(Bskk-jisyo $B$,Aw$j2>L>$KBP1~$7(B +$B$?7A$K@.D9$7$J$$!#$D$^$j(B + + \"$B$&$4(Bk /$BF0(B/\" + +$B$N$h$&$J7ABV$N$^$^$H$J$k!#$?$@$7!"4{$K(B + + \"$B$&$4(Bk /$BF0(B/[$B$/(B/$BF0(B/]/[$B$+(B/$BF0(B/]/[$B$1(B/$BF0(B/]/[$B$-(B/$BF0(B/]/[$B$3(B/$BF0(B/]/\" + +$B$N$h$&$J%(%s%H%j$,(B skk-jisyo $B$K$"$l$P!"$=$l$rGK2u$7$J$$!#(B + +nil $B$G$"$l$P!"Aw$j2>L>$NF~NO$,40N;$7$?;~E@$GJQ49$,3+;O$9$k!#Nc$($P!"(B + + \"UgoK -> $B"&$&$4(B*k\", \"UgoKu -> $B"'F0$/(B\" + +$B$3$N%*%W%7%g%s$r(B on $B$K$7$F(B skk-mode $B$r5/F0$9$k$H!"N>N)$G$-$J$$%*%W%7%g%s$G$"$k(B +skk-kakutei-early, skk-auto-okuri-process, skk-henkan-okuri-strictly $B$O(B nil $B$K(B +$B%;%C%H$5$l$k!#(B" ) + +;;;###skk-autoload +(defvar skk-egg-like-newline nil + "*Non-nil $B$G$"$l$P!""'%b!<%I$G2~9T$r%?%$%W$7$F$b3NDj$9$k$N$_$G2~9T$7$J$$!#(B" ) + +;;;###skk-autoload +(defvar skk-kakutei-early t + "*Non-nil $B$G$"$l$P(B skk-kana-input $B$,8F$P$l$?$H$-$K8=:_$N8uJd$r3NDj$9$k!#(B +$BNc$($P!"(B + + \"$B"&$+$/$F$$(B -> $B"'3NDj(B -> $B3NDj(Bs -> $B3NDj$9(B\" + +$B$N$h$&$KJQ498e!"!V$9!W$N(B prefix $B$G$"$k(B \"s\" $B$rF~NO$7$?;~E@$G3NDj$9$k!#(B +nil $B$G$"$l$P!"Nc$($P(B + + \"$B"&$+$/$F$$(B -> $B"'3NDj(B -> $B"'3NDj(Bs -> $B"'3NDj$9$k(B -> $B3NDj$9$k!#(B\" + +$B$N$h$&$K(B skk-kakutei $B$rD>@\!"4V@\$K%3!<%k$9$k$^$G(B \($B6gFIE@$rF~NO$7$?$j!"?7$?$J(B +$B"&%b!<%I$KF~$C$?$j$9$k$H4V@\E*$K(B skk-kakutei $B$r%3!<%k$9$k(B\) $B$O!"3NDj$7$J$$$N$G!"(B +$B$=$N4V$O!"JQ498uJd$rA*$S$J$*$9$3$H$J$I$,2DG=!#(B + +$B$3$N%*%W%7%g%sMxMQ;~$O!"(Bskk-process-okuri-early $B$NCM$O(B nil $B$G$J$1$l$P$J$i$J$$(B +\($B%a%K%e!<%P!<(B $B$rMxMQ$7$F%+%9%?%^%$%:$7$?>l9g$O<+F0E*$KD4@0$5$l$k(B\)$B!#(B" ) + +;;;###skk-autoload +(defvar skk-delete-implies-kakutei t + "*Non-nil $B$G$"$l$P!""'%b!<%I$G(B BS $B$r2!$9$H!"A0$N0lJ8;z$r:o=|$73NDj$9$k!#(B +nil $B$G$"$l$P!"0l$DA0$N8uJd$rI=<($9$k!#(B") + +;;;###skk-autoload +(defvar skk-allow-spaces-newlines-and-tabs t + "*Non-nil $B$G$"$l$P!"(Bskk-henkan-key $B$K%9%Z!<%9!"%?%V!"2~9T$,$"$C$F$bJQ492DG=!#(B +$BNc$($P!"2<5-$N$h$&$K(B skk-henkan-key $B$NCf$K2~9T$,F~$C$F$$$F$bJQ49$,2DG=$G$"$k!#(B + + \"$B"&$+(B + $B$J(B\" + -> \"$B2>L>(B\" + +$B$3$NCM$,(B nil $B$G$"$l$P!":G=i$N%9%Z!<%9$G(B skk-henkan-key $B$r@Z$j5M$a$F$7$^$$!"(B +$B0J9_$N%9%Z!<%9!"%?%V!"2~9T$OL5;k$5$l$k!#(B +$B$3$NCM$O!"(Bskk-start-henkan, skk-ascii-henkan, skk-katakana-henkan, +skk-hiragana-henkan, skk-zenkaku-henkan $B5Z$S(B skk-backward-and-set-henkan-point +$B$NF0:n$K1F6A$9$k!#(B") + +;;;###skk-autoload +(defvar skk-convert-okurigana-into-katakana nil + "*Non-nil $B$G$"$l$P!"%+%?%+%J%b!<%I$GJQ49$7$?$H$-$KAw$j2>L>$b%+%?%+%J$KJQ49$9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-delete-okuri-when-quit nil + "*Non-nil $B$G$"$l$P!"Aw$j$"$j$NJQ49Cf$K(B \"C-g\" $B$r2!$9$HAw$j2>L>$r>C$7"&%b!<%I$KF~$k!#(B +$BNc$($P!"(B + + \"$B"&$J(B*$B$/(B -> $B"'5c$/(B -> \"C-g\" ->$B"&$J(B\" + +nil $B$G$"$l$P!"Aw$j2>L>$r4^$a$?8+=P$78l$r$=$N$^$^;D$7!""#%b!<%I$KF~$k!#Nc$($P!"(B + + \"$B"&$J(B*$B$/(B -> $B"'5c$/(B -> \"C-g\" -> $B$J$/(B\"" ) + +;;;###skk-autoload +(defvar skk-henkan-show-candidates-keys '(?a ?s ?d ?f ?j ?k ?l) + "*$B%a%K%e!<7A<0$G8uJd$rA*Br$9$k$H$-$NA*Br%-!<$N%j%9%H!#(B +\"x\", \" \" $B5Z$S(B \"C-g\" $B0J30$N(B 7 $B$D$N%-!<(B (char type) $B$r4^$`I,MW$,$"(B +$B$k!#(B\"x\", \" \" $B5Z$S(B \"C-g\" $B$O8uJdA*Br;~$K$=$l$>$lFCJL$J;E;v$K3d$jEv(B +$B$F$i$l$F$$$k$N$G!"$3$N%j%9%H$NCf$K$O4^$a$J$$$3$H!#(B") + +;;;###skk-autoload +(defvar skk-ascii-mode-string " SKK" + "*SKK $B$,(B ascii $B%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B" ) + +;;;###skk-autoload +(defvar skk-hirakana-mode-string " $B$+$J(B" + "*$B$R$i$,$J%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B") + +;;;###skk-autoload +(defvar skk-katakana-mode-string " $B%+%J(B" + "*$B%+%?%+%J%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B") + +;;;###skk-autoload +(defvar skk-zenkaku-mode-string " $BA41Q(B" + "*$BA41Q%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B") + +;;;###skk-autoload +(defvar skk-abbrev-mode-string " a$B$"(B" + "*SKK abbrev $B%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B") + +;;;###skk-autoload +(defvar skk-echo t + "*Non-nil $B$G$"$l$P!"2>L>J8;z$N%W%l%U%#%C%/%9$rI=<($9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-use-numeric-conversion t + "*Non-nil $B$G$"$l$P!"?tCMJQ49$r9T$&!#(B" ) + +;;;###skk-autoload +(defvar skk-char-type-vector + [0 0 0 0 0 0 0 0 + 5 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 4 4 4 4 4 4 4 + 4 4 4 4 0 4 4 4 + 4 0 4 4 4 4 4 4 + 0 4 4 0 0 0 0 0 + 0 3 1 1 1 3 1 1 + 1 3 1 1 0 1 2 3 + 1 0 1 1 1 3 1 1 + 2 1 1 0 0 0 0 5] + "*skk-kana-input $B$G;2>H$9$k$+$JJ8;zJQ49$N$?$a$N(B char type $B%Y%/%?!<!#(B +$B3FMWAG$N?t;z$N0UL#$O2<5-$NDL$j!#(B + +0 $B%m!<%^J8;z$h$j$+$JJ8;z$X$NJQ49$rCf;_$9$k(B ($B8=:_$N$H$3$m;HMQ$7$F$$$J$$(B)$B!#(B +1 $BB%2;$N0lItJ,$H$J$jF@$k;R2;!#(B +2 $B>e5-(B 1 $B0J30$N;R2;(B (n, x) +3 $BJl2;(B +4 skk-mode $B$G!"(Bskk-set-henkan-point $B$K3d$jIU$1$i$l$F$$$kJ8;z!#(B +5 $B%W%l%U%#%C%/%9$r>C5n$9$k(B" ) + +;;;###skk-autoload +(defvar skk-standard-rom-kana-rule-list + '(("b" "b" nil) ("by" "by" nil) + ("c" "c" nil) ("ch" "ch" nil) ("cy" "cy" nil) + ("d" "d" nil) ("dh" "dh" nil) + ("dy" "dy" nil) + ("f" "f" nil) ("fy" "fy" nil) + ("g" "g" nil) ("gy" "gy" nil) + ("h" "h" nil) ("hy" "hy" nil) + ("j" "j" nil) ("jy" "jy" nil) + ("k" "k" nil) ("ky" "ky" nil) + ("m" "m" nil) ("my" "my" nil) + ("n" "n" nil) ("ny" "ny" nil) + ("p" "p" nil) ("py" "py" nil) + ("r" "r" nil) ("ry" "ry" nil) + ("s" "s" nil) ("sh" "sh" nil) + ("sy" "sy" nil) + ("t" "t" nil) ("th" "th" nil) + ("ts" "ts" nil) ("ty" "ty" nil) + ("v" "v" nil) ("w" "w" nil) + ("x" "x" nil) ("xk" "xk" nil) ("xt" "xt" nil) + ("xw" "xw" nil) ("xy" "xy" nil) + ("y" "y" nil) + ("z" "z" nil) ("zy" "zy" nil) + + ("bb" "b" ("$B%C(B" . "$B$C(B")) + ("cc" "c" ("$B%C(B" . "$B$C(B")) + ("dd" "d" ("$B%C(B" . "$B$C(B")) + ("ff" "f" ("$B%C(B" . "$B$C(B")) + ("gg" "g" ("$B%C(B" . "$B$C(B")) + ("hh" "h" ("$B%C(B" . "$B$C(B")) + ("jj" "j" ("$B%C(B" . "$B$C(B")) + ("kk" "k" ("$B%C(B" . "$B$C(B")) + ("mm" "m" ("$B%C(B" . "$B$C(B")) + ;;("nn" "n" ("$B%C(B" . "$B$C(B")) + ("pp" "p" ("$B%C(B" . "$B$C(B")) + ("rr" "r" ("$B%C(B" . "$B$C(B")) + ("ss" "s" ("$B%C(B" . "$B$C(B")) + ("tt" "t" ("$B%C(B" . "$B$C(B")) + ("vv" "v" ("$B%C(B" . "$B$C(B")) + ("ww" "w" ("$B%C(B" . "$B$C(B")) + ("xx" "x" ("$B%C(B" . "$B$C(B")) + ("yy" "y" ("$B%C(B" . "$B$C(B")) + ("zz" "z" ("$B%C(B" . "$B$C(B")) + + ("a" nil ("$B%"(B" . "$B$"(B")) + ("ba" nil ("$B%P(B" . "$B$P(B")) ("bya" nil ("$B%S%c(B" . "$B$S$c(B")) + ("cha" nil ("$B%A%c(B" . "$B$A$c(B")) ("cya" nil ("$B%A%c(B" . "$B$A$c(B")) + ("da" nil ("$B%@(B" . "$B$@(B")) ("dha" nil ("$B%G%c(B" . "$B$G$c(B")) + ("dya" nil ("$B%B%c(B" . "$B$B$c(B")) + ("fa" nil ("$B%U%!(B" . "$B$U$!(B")) ("fya" nil ("$B%U%c(B" . "$B$U$c(B")) + ("ga" nil ("$B%,(B" . "$B$,(B")) ("gya" nil ("$B%.%c(B" . "$B$.$c(B")) + ("ha" nil ("$B%O(B" . "$B$O(B")) ("hya" nil ("$B%R%c(B" . "$B$R$c(B")) + ("ja" nil ("$B%8%c(B" . "$B$8$c(B")) ("jya" nil ("$B%8%c(B" . "$B$8$c(B")) + ("ka" nil ("$B%+(B" . "$B$+(B")) ("kya" nil ("$B%-%c(B" . "$B$-$c(B")) + ("ma" nil ("$B%^(B" . "$B$^(B")) ("mya" nil ("$B%_%c(B" . "$B$_$c(B")) + ("na" nil ("$B%J(B" . "$B$J(B")) ("nya" nil ("$B%K%c(B" . "$B$K$c(B")) + ("pa" nil ("$B%Q(B" . "$B$Q(B")) ("pya" nil ("$B%T%c(B" . "$B$T$c(B")) + ("ra" nil ("$B%i(B" . "$B$i(B")) ("rya" nil ("$B%j%c(B" . "$B$j$c(B")) + ("sa" nil ("$B%5(B" . "$B$5(B")) ("sha" nil ("$B%7%c(B" . "$B$7$c(B")) + ("sya" nil ("$B%7%c(B" . "$B$7$c(B")) + ("ta" nil ("$B%?(B" . "$B$?(B")) ("tha" nil ("$B%F%!(B" . "$B$F$!(B")) + ("tya" nil ("$B%A%c(B" . "$B$A$c(B")) + ("va" nil ("$B%t%!(B" . "$B$&!+$!(B")) ("wa" nil ("$B%o(B" . "$B$o(B")) + ("xa" nil ("$B%!(B" . "$B$!(B")) ("xka" nil ("$B%u(B" . "$B$+(B")) + ("xwa" nil ("$B%n(B" . "$B$n(B")) ("xya" nil ("$B%c(B" . "$B$c(B")) + ("ya" nil ("$B%d(B" . "$B$d(B")) + ("za" nil ("$B%6(B" . "$B$6(B")) ("zya" nil ("$B%8%c(B" . "$B$8$c(B")) + + ("i" nil ("$B%$(B" . "$B$$(B")) + ("bi" nil ("$B%S(B" . "$B$S(B")) ("byi" nil ("$B%S%#(B" . "$B$S$#(B")) + ("chi" nil ("$B%A(B" . "$B$A(B")) ("cyi" nil ("$B%A%#(B" . "$B$A$#(B")) + ("di" nil ("$B%B(B" . "$B$B(B")) ("dhi" nil ("$B%G%#(B" . "$B$G$#(B")) + ("dyi" nil ("$B%B%#(B" . "$B$B$#(B")) + ("fi" nil ("$B%U%#(B" . "$B$U$#(B")) ("fyi" nil ("$B%U%#(B" . "$B$U$#(B")) + ("gi" nil ("$B%.(B" . "$B$.(B")) ("gyi" nil ("$B%.%#(B" . "$B$.$#(B")) + ("hi" nil ("$B%R(B" . "$B$R(B")) ("hyi" nil ("$B%R%#(B" . "$B$R$#(B")) + ("ji" nil ("$B%8(B" . "$B$8(B")) ("jyi" nil ("$B%8%#(B" . "$B$8$#(B")) + ("ki" nil ("$B%-(B" . "$B$-(B")) ("kyi" nil ("$B%-%#(B" . "$B$-$#(B")) + ("mi" nil ("$B%_(B" . "$B$_(B")) ("myi" nil ("$B%_%#(B" . "$B$_$#(B")) + ("ni" nil ("$B%K(B" . "$B$K(B")) ("nyi" nil ("$B%K%#(B" . "$B$K$#(B")) + ("pi" nil ("$B%T(B" . "$B$T(B")) ("pyi" nil ("$B%T%#(B" . "$B$T$#(B")) + ("ri" nil ("$B%j(B" . "$B$j(B")) ("ryi" nil ("$B%j%#(B" . "$B$j$#(B")) + ("si" nil ("$B%7(B" . "$B$7(B")) ("shi" nil ("$B%7(B" . "$B$7(B")) + ("syi" nil ("$B%7%#(B" . "$B$7$#(B")) + ("ti" nil ("$B%A(B" . "$B$A(B")) ("thi" nil ("$B%F%#(B" . "$B$F$#(B")) + ("tyi" nil ("$B%A%#(B" . "$B$A$#(B")) + ("vi" nil ("$B%t%#(B" . "$B$&!+$#(B")) ("wi" nil ("$B%&%#(B" . "$B$&$#(B")) + ("xi" nil ("$B%#(B" . "$B$#(B")) ("xwi" nil ("$B%p(B" . "$B$p(B")) + ("zi" nil ("$B%8(B" . "$B$8(B")) ("zyi" nil ("$B%8%#(B" . "$B$8$#(B")) + + ("u" nil ("$B%&(B" . "$B$&(B")) + ("bu" nil ("$B%V(B" . "$B$V(B")) ("byu" nil ("$B%S%e(B" . "$B$S$e(B")) + ("chu" nil ("$B%A%e(B" . "$B$A$e(B")) ("cyu" nil ("$B%A%e(B" . "$B$A$e(B")) + ("du" nil ("$B%E(B" . "$B$E(B")) ("dhu" nil ("$B%G%e(B" . "$B$G$e(B")) + ("dyu" nil ("$B%B%e(B" . "$B$B$e(B")) + ("fu" nil ("$B%U(B" . "$B$U(B")) ("fyu" nil ("$B%U%e(B" . "$B$U$e(B")) + ("gu" nil ("$B%0(B" . "$B$0(B")) ("gyu" nil ("$B%.%e(B" . "$B$.$e(B")) + ("hu" nil ("$B%U(B" . "$B$U(B")) ("hyu" nil ("$B%R%e(B" . "$B$R$e(B")) + ("ju" nil ("$B%8%e(B" . "$B$8$e(B")) ("jyu" nil ("$B%8%e(B" . "$B$8$e(B")) + ("ku" nil ("$B%/(B" . "$B$/(B")) ("kyu" nil ("$B%-%e(B" . "$B$-$e(B")) + ("mu" nil ("$B%`(B" . "$B$`(B")) ("myu" nil ("$B%_%e(B" . "$B$_$e(B")) + ("nu" nil ("$B%L(B" . "$B$L(B")) ("nyu" nil ("$B%K%e(B" . "$B$K$e(B")) + ("pu" nil ("$B%W(B" . "$B$W(B")) ("pyu" nil ("$B%T%e(B" . "$B$T$e(B")) + ("ru" nil ("$B%k(B" . "$B$k(B")) ("ryu" nil ("$B%j%e(B" . "$B$j$e(B")) + ("su" nil ("$B%9(B" . "$B$9(B")) ("shu" nil ("$B%7%e(B" . "$B$7$e(B")) + ("syu" nil ("$B%7%e(B" . "$B$7$e(B")) + ("tu" nil ("$B%D(B" . "$B$D(B")) ("thu" nil ("$B%F%e(B" . "$B$F$e(B")) + ("tsu" nil ("$B%D(B" . "$B$D(B")) ("tyu" nil ("$B%A%e(B" . "$B$A$e(B")) + ("vu" nil ("$B%t(B" . "$B$&!+(B")) ("wu" nil ("$B%&(B" . "$B$&(B")) + ("xu" nil ("$B%%(B" . "$B$%(B")) ("xtu" nil ("$B%C(B" . "$B$C(B")) + ("xtsu" nil ("$B%C(B" . "$B$C(B")) ("xyu" nil ("$B%e(B" . "$B$e(B")) + ("yu" nil ("$B%f(B" . "$B$f(B")) + ("zu" nil ("$B%:(B" . "$B$:(B")) ("zyu" nil ("$B%8%e(B" . "$B$8$e(B")) + + ("e" nil ("$B%((B" . "$B$((B")) + ("be" nil ("$B%Y(B" . "$B$Y(B")) ("bye" nil ("$B%S%'(B" . "$B$S$'(B")) + ("che" nil ("$B%A%'(B" . "$B$A$'(B")) ("cye" nil ("$B%A%'(B" . "$B$A$'(B")) + ("de" nil ("$B%G(B" . "$B$G(B")) ("dhe" nil ("$B%G%'(B" . "$B$G$'(B")) + ("dye" nil ("$B%B%'(B" . "$B$B$'(B")) + ("fe" nil ("$B%U%'(B" . "$B$U$'(B")) ("fye" nil ("$B%U%'(B" . "$B$U$'(B")) + ("ge" nil ("$B%2(B" . "$B$2(B")) ("gye" nil ("$B%.%'(B" . "$B$.$'(B")) + ("he" nil ("$B%X(B" . "$B$X(B")) ("hye" nil ("$B%R%'(B" . "$B$R$'(B")) + ("je" nil ("$B%8%'(B" . "$B$8$'(B")) ("jye" nil ("$B%8%'(B" . "$B$8$'(B")) + ("ke" nil ("$B%1(B" . "$B$1(B")) ("kye" nil ("$B%-%'(B" . "$B$-$'(B")) + ("me" nil ("$B%a(B" . "$B$a(B")) ("mye" nil ("$B%_%'(B" . "$B$_$'(B")) + ("ne" nil ("$B%M(B" . "$B$M(B")) ("nye" nil ("$B%K%'(B" . "$B$K$'(B")) + ("pe" nil ("$B%Z(B" . "$B$Z(B")) ("pye" nil ("$B%T%'(B" . "$B$T$'(B")) + ("re" nil ("$B%l(B" . "$B$l(B")) ("rye" nil ("$B%j%'(B" . "$B$j$'(B")) + ("se" nil ("$B%;(B" . "$B$;(B")) ("she" nil ("$B%7%'(B" . "$B$7$'(B")) + ("sye" nil ("$B%7%'(B" . "$B$7$'(B")) + ("te" nil ("$B%F(B" . "$B$F(B")) ("the" nil ("$B%F%'(B" . "$B$F$'(B")) + ("tye" nil ("$B%A%'(B" . "$B$A$'(B")) + ("ve" nil ("$B%t%'(B" . "$B$&!+$'(B")) ("we" nil ("$B%&%'(B" . "$B$&$'(B")) + ("xe" nil ("$B%'(B" . "$B$'(B")) ("xke" nil ("$B%v(B" . "$B$1(B")) + ("xwe" nil ("$B%q(B" . "$B$q(B")) + ("ye" nil ("$B%$%'(B" . "$B$$$'(B")) + ("ze" nil ("$B%<(B" . "$B$<(B")) ("zye" nil ("$B%8%'(B" . "$B$8$'(B")) + + ("o" nil ("$B%*(B" . "$B$*(B")) + ("bo" nil ("$B%\(B" . "$B$\(B")) ("byo" nil ("$B%S%g(B" . "$B$S$g(B")) + ("cho" nil ("$B%A%g(B" . "$B$A$g(B")) ("cyo" nil ("$B%A%g(B" . "$B$A$g(B")) + ("do" nil ("$B%I(B" . "$B$I(B")) ("dho" nil ("$B%G%g(B" . "$B$G$g(B")) + ("dyo" nil ("$B%B%g(B" . "$B$B$g(B")) + ("fo" nil ("$B%U%)(B" . "$B$U$)(B")) ("fyo" nil ("$B%U%g(B" . "$B$U$g(B")) + ("go" nil ("$B%4(B" . "$B$4(B")) ("gyo" nil ("$B%.%g(B" . "$B$.$g(B")) + ("ho" nil ("$B%[(B" . "$B$[(B")) ("hyo" nil ("$B%R%g(B" . "$B$R$g(B")) + ("jo" nil ("$B%8%g(B" . "$B$8$g(B")) ("jyo" nil ("$B%8%g(B" . "$B$8$g(B")) + ("ko" nil ("$B%3(B" . "$B$3(B")) ("kyo" nil ("$B%-%g(B" . "$B$-$g(B")) + ("mo" nil ("$B%b(B" . "$B$b(B")) ("myo" nil ("$B%_%g(B" . "$B$_$g(B")) + ("no" nil ("$B%N(B" . "$B$N(B")) ("nyo" nil ("$B%K%g(B" . "$B$K$g(B")) + ("po" nil ("$B%](B" . "$B$](B")) ("pyo" nil ("$B%T%g(B" . "$B$T$g(B")) + ("ro" nil ("$B%m(B" . "$B$m(B")) ("ryo" nil ("$B%j%g(B" . "$B$j$g(B")) + ("so" nil ("$B%=(B" . "$B$=(B")) ("sho" nil ("$B%7%g(B" . "$B$7$g(B")) + ("syo" nil ("$B%7%g(B" . "$B$7$g(B")) + ("to" nil ("$B%H(B" . "$B$H(B")) ("tho" nil ("$B%F%g(B" . "$B$F$g(B")) + ("tyo" nil ("$B%A%g(B" . "$B$A$g(B")) + ("vo" nil ("$B%t%)(B" . "$B$&!+$)(B")) ("wo" nil ("$B%r(B" . "$B$r(B")) + ("xo" nil ("$B%)(B" . "$B$)(B")) ("xyo" nil ("$B%g(B" . "$B$g(B")) + ("yo" nil ("$B%h(B" . "$B$h(B")) + ("zo" nil ("$B%>(B" . "$B$>(B")) ("zyo" nil ("$B%8%g(B" . "$B$8$g(B")) + + ("nn" nil ("$B%s(B" . "$B$s(B")) + ("n'" nil ("$B%s(B" . "$B$s(B")) + + ("z/" nil ("$B!&(B" . "$B!&(B")) ("z," nil ("$B!E(B" . "$B!E(B")) + ("z." nil ("$B!D(B" . "$B!D(B")) ("z-" nil ("$B!A(B" . "$B!A(B")) + ("zh" nil ("$B"+(B" . "$B"+(B")) ("zj" nil ("$B"-(B" . "$B"-(B")) + ("zk" nil ("$B",(B" . "$B",(B")) ("zl" nil ("$B"*(B" . "$B"*(B")) + ("z[" nil ("$B!X(B" . "$B!X(B")) ("z]" nil ("$B!Y(B" . "$B!Y(B")) ) + "SKK $B$NI8=`$N%m!<%^;z$+$JJQ49$N%*!<%H%^%H%s$N>uBVA+0\5,B'!#(B +$B%j%9%H$N3FMWAG$O!"(B\($B8=:_$N>uBV(B@$BF~NO(B $B<!$N>uBV(B $B=PNO(B\) \($BC"$7!"(B\"@\" $B$OO"@\(B\) $B$r0UL#(B +$B$9$k!#(B +$B%7%9%F%`MQ$J$N$G%+%9%?%^%$%:$K$O(B skk-rom-kana-rule-list $B$rMxMQ$7$F$/$@$5$$!#(B" ) + +;;;###skk-autoload +(defvar skk-rom-kana-rule-list + nil + "*$B%m!<%^;z$+$JJQ49$N%*!<%H%^%H%s$N>uBVA+0\5,B'!#(B +$B%j%9%H$N3FMWAG$O!"(B\($B8=:_$N>uBV(B@$BF~NO(B $B<!$N>uBV(B $B=PNO(B\) \($BC"$7!"(B\"@\" $B$OO"@\(B\) $B$r0UL#(B +$B$9$k!#%+%9%?%^%$%:$K$O(B skk-standard-rom-kana-rule-list $B$G$OL5$/!"(B +$B$3$A$i$rMxMQ$7$F$/$@$5$$!#(B" ) + +;;;###skk-autoload +(defvar skk-fallback-rule-alist + '(("n" "$B%s(B" . "$B$s(B")) + "*$B%m!<%^;z$+$JJQ49;~$K!"(Bskk-rom-kana-rule-list, skk-standard-rom-kana-rule-list $B$N(B +$B$"$H$K;2>H$5$l$k5,B'!#(B +$B%j%9%H$N3FMWAG$O!"(B\($B8=:_$N>uBV(B $B=PNO(B\) $B$r0UL#$9$k!#(B +$B$3$N5,B'$,E,MQ$5$l$?>l9g!"F~NO$O%9%H%j!<%`$KJV$5$l$k!#(B" ) + +;;;###skk-autoload +(defvar skk-postfix-rule-alist + '(("oh" "$B%*(B" . "$B$*(B")) + "*$B%m!<%^;z$+$JJQ49;~$K!"D>A0$N$+$JJ8;z$r:n$k$N$KMQ$$$i$l$?:G8e$NF~NO$H(B +$B8=:_$NF~NO$+$i$+$JJ8;z$r:n$j$@$9$?$a$N5,B'!#(B +$B%j%9%H$N3FMWAG$O!"(B\($BD>A0$NF~NO(B@$BF~NO(B $B=PNO(B\) \($BC"$7!"(B\"@\" $B$OO"@\(B\) $B$r0UL#$9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-previous-candidate-char + ?x + "*skk-previous-candidate $B$r3dEv$F$?%-%c%i%/%?!#(B" ) + +;;;###skk-autoload +(defvar skk-okuri-char-alist + nil + "*" ) + +;;;###skk-autoload +(defvar skk-downcase-alist + nil + "*" ) + +;;;###skk-autoload +(defvar skk-input-vector + [nil nil nil nil nil nil nil nil ;7 + nil nil nil nil nil nil nil nil ;15 + nil nil nil nil nil nil nil nil ;23 + nil nil nil nil nil nil nil nil ;31 + nil "$B!*(B" nil nil nil nil nil nil ;39 + nil nil nil nil "$B!"(B" "$B!<(B" "$B!#(B" nil ;47 + nil nil nil nil nil nil nil nil ;55 + nil nil "$B!'(B" "$B!((B" nil nil nil "$B!)(B" ;63 + nil nil nil nil nil nil nil nil ;71 + nil nil nil nil nil nil nil nil ;79 + nil nil nil nil nil nil nil nil ;87 + nil nil nil "$B!V(B" nil "$B!W(B" nil nil ;95 + nil nil nil nil nil nil nil nil ;103 + nil nil nil nil nil nil nil nil ;111 + nil nil nil nil nil nil nil nil ;119 + nil nil nil nil nil nil nil nil] ;127 + "*skk-self-insert $B$G;2>H$5$l$kJ8;z%F!<%V%k!#(B +$B%-!<$KBP1~$9$k0LCV$KJ8;zNs$,$"$l$P!"$R$i$,$J%b!<%I$b$7$/$O%+%?%+%J%b!<%I$G!"3:(B +$BEv$N%-!<$r2!$9$3$H$G!"BP1~$9$kJ8;z$,A^F~$5$l$k!#(B +$BNc$($P!"(B\"~\" $B%-!<$KBP1~$7$F!"(B\"$B!A(B\" $B$rA^F~$5$;$k$h$&$KJQ99$7$?$1$l$P!"(Bskk.el +$B$N%m!<%I8e(B ($B$b$7$/$O(B skk-load-hook $B$rMxMQ$7$F(B)$B!"(B + + \(aset skk-input-vector 126 \"$B!A(B\"\) + +$B$H$9$k$+!"$b$7$/$O!"(Bskk-input-vector $B$N(B 126 $BHVL\(B (0 $BHV$+$i?t$($F(B) $B$NCM$r(B +\"$B!A(B\" $B$H$9$k$h$&$J(B skk-input-vector $B$rD>@\=q$-!"(Bsetq $B$GBeF~$9$k(B \(126 $B$O!"(B? +{ $B$rI>2A$7$?$H$-$NCM(B\)$B!#(B" ) + +;;;###skk-autoload +(defvar skk-zenkaku-vector + [nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil + "$B!!(B" "$B!*(B" "$B!I(B" "$B!t(B" "$B!p(B" "$B!s(B" "$B!u(B" "$B!G(B" + "$B!J(B" "$B!K(B" "$B!v(B" "$B!\(B" "$B!$(B" "$B!](B" "$B!%(B" "$B!?(B" + "$B#0(B" "$B#1(B" "$B#2(B" "$B#3(B" "$B#4(B" "$B#5(B" "$B#6(B" "$B#7(B" + "$B#8(B" "$B#9(B" "$B!'(B" "$B!((B" "$B!c(B" "$B!a(B" "$B!d(B" "$B!)(B" + "$B!w(B" "$B#A(B" "$B#B(B" "$B#C(B" "$B#D(B" "$B#E(B" "$B#F(B" "$B#G(B" + "$B#H(B" "$B#I(B" "$B#J(B" "$B#K(B" "$B#L(B" "$B#M(B" "$B#N(B" "$B#O(B" + "$B#P(B" "$B#Q(B" "$B#R(B" "$B#S(B" "$B#T(B" "$B#U(B" "$B#V(B" "$B#W(B" + "$B#X(B" "$B#Y(B" "$B#Z(B" "$B!N(B" "$B!@(B" "$B!O(B" "$B!0(B" "$B!2(B" + "$B!F(B" "$B#a(B" "$B#b(B" "$B#c(B" "$B#d(B" "$B#e(B" "$B#f(B" "$B#g(B" + "$B#h(B" "$B#i(B" "$B#j(B" "$B#k(B" "$B#l(B" "$B#m(B" "$B#n(B" "$B#o(B" + "$B#p(B" "$B#q(B" "$B#r(B" "$B#s(B" "$B#t(B" "$B#u(B" "$B#v(B" "$B#w(B" + "$B#x(B" "$B#y(B" "$B#z(B" "$B!P(B" "$B!C(B" "$B!Q(B" "$B!A(B" nil] + "*skk-zenkaku-insert $B$G;2>H$5$l$kJ8;z%F!<%V%k!#(B +$B%-!<$KBP1~$9$k0LCV$KJ8;zNs$,$"$l$P!"A41Q%b!<%I$G3:Ev$N%-!<$r2!$9$3$H$G!"BP1~$9(B +$B$kJ8;z$,A^F~$5$l$k!#(B +$BCM$NJQ99J}K!$K$D$$$F$O!"(Bskk-input-vector $B$r;2>H$N$3$H!#(B" ) + +;;;###skk-autoload +(defvar skk-use-face (or window-system (skk-terminal-face-p)) + "*Non-nil $B$G$"$l$P!"(BEmacs 19 $B$N(B face $B$N5!G=$r;HMQ$7$FJQ49I=<($J$I$r9T$J$&!#(B" ) + +;;;###skk-autoload +(defvar skk-henkan-face + (if (and (or window-system (skk-terminal-face-p)) + (or (and (fboundp 'frame-face-alist) + (assq 'highlight (frame-face-alist (selected-frame)))) + (and (fboundp 'face-list) + (memq 'highlight (face-list)))) ) + 'highlight ) + "*$BJQ498uJd$N(B face $BB0@-!#(Bskk-use-face $B$,(B non-nil $B$N$H$-$N$_M-8z!#(B +Emacs $BI8=`%U%'%$%9$N(B default, modeline, region, secondary-selection, +highlight, underline, bold, italic, bold-italic $B$NB>!"?7$?$K(B face $B$r:n$j;XDj$9(B +$B$k$3$H$b2DG=!#(B +$B?7$?$J(B face $B$r:n$j;XDj$9$k$K$O(B skk-make-face $B$rMxMQ$7$F!"(B + + \(skk-make-face 'DimGray/PeachPuff1\) + \(setq skk-henkan-face 'DimGray/PeachPuff1\) + +$B$N$h$&$K$9$k$N$,<j7Z!#(Bforeground $B$H(B background $B$N?';XDj$@$1$G$J$$6E$C$?(B face +$B$r:n$k>l9g$O!"(Bskk-make-face $B$G$OBP1~$G$-$J$$$N$G!"(BEmacs $B$N(B hilit19.el $B$N(B +hilit-lookup-face-create $B$J$I$rMxMQ$9$k!#?'$rIU$1$k>l9g$NG[?'$O!"(Bcanna.el $B$N(B +canna:attribute-alist $B$,NI$$Nc$+$b$7$l$J$$!#(B" ) + +;;;###skk-autoload +(defvar skk-use-color-cursor (and window-system + (fboundp 'x-display-color-p) + (x-display-color-p) ) + "*Non-nil $B$G$"$l$P!"(BSKK $B%b!<%I$NF~NO%b!<%I$K1~$8$F%+!<%=%k$K?'$rIU$1$k!#(B") + +(defvar skk-default-cursor-color + (if skk-xemacs + (frame-property (selected-frame) 'cursor-color) + (cdr (assq 'cursor-color (frame-parameters (selected-frame))))) + "*SKK $B$N%*%U$r<($9%+!<%=%k?'!#(B" ) + +;; $BGX7J?'$r9u$K$7$F;HMQ$5$l$F$$$kJ}$G!"NI$$G[?'$,$"$l$P$*CN$i$;2<$5$$!#(B +;;;###skk-autoload +(defvar skk-hirakana-cursor-color (if (eq skk-background-mode 'light) + "coral4" + "pink" ) + "*$B$+$J%b!<%I$r<($9%+!<%=%k?'!#(B" ) + +;;;###skk-autoload +(defvar skk-katakana-cursor-color (if (eq skk-background-mode 'light) + "forestgreen" + "green" ) + "*$B%+%?%+%J%b!<%I$r<($9%+!<%=%k?'!#(B" ) + +;;;###skk-autoload +(defvar skk-zenkaku-cursor-color "gold" + "*$BA43Q1Q;z%b!<%I$r<($9%+!<%=%k?'!#(B" ) + +;;;###skk-autoload +(defvar skk-ascii-cursor-color (if (eq skk-background-mode 'light) + "ivory4" + "gray" ) + "*$B%"%9%-!<%b!<%I$r<($9%+!<%=%k?'!#(B" ) + +;;;###skk-autoload +(defvar skk-abbrev-cursor-color "royalblue" + "*$B%"%9%-!<%b!<%I$r<($9%+!<%=%k?'!#(B" ) + +;;;###skk-autoload +(defvar skk-report-set-cursor-error t + "*Non-nil $B$G$"$l$P!"%+%i!<%^%C%W@Z$l$,5/$-$?>l9g!"%(%i!<%a%C%;!<%8$rI=<($9$k!#(B +nil $B$G$"$l$P!"I=<($7$J$$!#(B" ) + +;;;###skk-autoload +(defvar skk-use-cursor-change t + "*Non-nil $B$G$"$l$P!"(BOvwrt $B%^%$%J!<%b!<%I;~$K%+!<%=%k$NI}$r=L$a$k!#(B" ) + +;;;###skk-autoload +(defvar skk-auto-insert-paren nil + "*Non-nil $B$G$"$l$P!"(B2 $B$D$NJ8;zNs$r$^$H$a$FA^F~$7!"$=$NJ8;zNs$N4V$K%+!<%=%k$r0\F0$9$k!#(B +$BNc$($P!"(B\"$B!V(B\" $B$rF~NO$7$?$H$-$K(B \"$B!W(B\" $B$r<+F0E*$KA^F~$7!"N>$+$.$+$C$3$N4V$K(B +$B%+!<%=%k$r0\F0$9$k!#(B +$BA^F~$9$kJ8;zNs$O!"(Bskk-auto-paren-string-alist $B$G;XDj$9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-auto-paren-string-alist + '(("$B!V(B" . "$B!W(B") ("$B!X(B" . "$B!Y(B") ("(" . ")") ("$B!J(B" . "$B!K(B") + ("{" . "}")("$B!P(B" . "$B!Q(B") ("$B!R(B" . "$B!S(B") ("$B!T(B" . "$B!U(B") + ("[" . "]") ("$B!N(B" . "$B!O(B") ("$B!L(B" . "$B!M(B") ("$B!Z(B" . "$B![(B") + ("\"" . "\"")("$B!H(B" . "$B!I(B") + ;; skk-special-midashi-char-list $B$NMWAG$K$J$C$F$$$kJ8;z$O!"(B + ;; skk-auto-paren-string-alist $B$K4^$a$F$b:o=|$5$l$k!#(B + ;;("<" . ">") + ) + "*$B<+F0E*$KBP$K$J$kJ8;zNs$rF~NO$9$k$?$a$NO"A[%j%9%H!#(B +car $B$NJ8;zNs$,A^F~$5$l$?$H$-$K(B cdr $B$NJ8;zNs$r<+F0E*$KA^F~$9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-japanese-message-and-error nil + "*Non-nil $B$G$"$l$P!"(BSKK $B$N%a%C%;!<%8$H%(%i!<$rF|K\8l$GI=<($9$k!#(B +nil $B$G$"$l$P!"1Q8l$GI=<($9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-ascii-mode-map nil "*ASCII $B%b!<%I$N%-!<%^%C%W!#(B" ) +(or skk-ascii-mode-map + (let ((map (make-sparse-keymap))) + (define-key map skk-kakutei-key 'skk-kakutei) + (skk-define-menu-bar-map map) + (setq skk-ascii-mode-map map))) + +;;;###skk-autoload +(defvar skk-j-mode-map nil "*$B$+$J%b!<%I$N%-!<%^%C%W!#(B" ) +(or skk-j-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "!" 'skk-self-insert) + (define-key map "#" 'skk-self-insert) + (define-key map "$" 'skk-display-code-for-char-at-point) + (define-key map "%" 'skk-self-insert) + (define-key map "&" 'skk-self-insert) + (define-key map "'" 'skk-self-insert) + (define-key map "*" 'skk-self-insert) + (define-key map "+" 'skk-self-insert) + (define-key map "," 'skk-insert-comma) + (define-key map "-" 'skk-self-insert) + (define-key map "." 'skk-insert-period) + (define-key map "/" 'skk-abbrev-mode) + (define-key map "0" 'skk-self-insert) + (define-key map "1" 'skk-self-insert) + (define-key map "2" 'skk-self-insert) + (define-key map "3" 'skk-self-insert) + (define-key map "4" 'skk-self-insert) + (define-key map "5" 'skk-self-insert) + (define-key map "6" 'skk-self-insert) + (define-key map "7" 'skk-self-insert) + (define-key map "8" 'skk-self-insert) + (define-key map "9" 'skk-self-insert) + (define-key map ":" 'skk-self-insert) + (define-key map ";" 'skk-self-insert) + ;; "<", ">", "?" $B$N(B 3 $BJ8;z$O!"(Bskk-special-midashi-char-list $B$NCM$,%G%#%U%)%k(B + ;; $B%H$N$^$^$G$"$l$P!"(Bskk-setup-special-midashi-char $B$K$h$j(B + ;; skk-set-henkan-point $B$K:F3d$jIU$1$5$l$k$,!"@_Dj$K$h$j$3$l$i$NJ8;z$r;XDj$7(B + ;; $B$J$$>l9g$O!"(Bskk-self-insert $B$H$7$FF0$/$N$,K>$^$7$$!#(B + (define-key map "<" 'skk-self-insert) + (define-key map "=" 'skk-self-insert) + (define-key map ">" 'skk-self-insert) + (define-key map "?" 'skk-self-insert) + (define-key map "@" 'skk-today) + (define-key map "A" 'skk-set-henkan-point) + (define-key map "B" 'skk-set-henkan-point) + (define-key map "C" 'skk-set-henkan-point) + (define-key map "D" 'skk-set-henkan-point) + (define-key map "E" 'skk-set-henkan-point) + (define-key map "F" 'skk-set-henkan-point) + (define-key map "G" 'skk-set-henkan-point) + (define-key map "H" 'skk-set-henkan-point) + (define-key map "I" 'skk-set-henkan-point) + (define-key map "J" 'skk-set-henkan-point) + (define-key map "K" 'skk-set-henkan-point) + (define-key map "L" 'skk-zenkaku-mode) + (define-key map "M" 'skk-set-henkan-point) + (define-key map "N" 'skk-set-henkan-point) + (define-key map "O" 'skk-set-henkan-point) + (define-key map "P" 'skk-set-henkan-point) + (define-key map "Q" 'skk-set-henkan-point-subr) + (define-key map "R" 'skk-set-henkan-point) + (define-key map "S" 'skk-set-henkan-point) + (define-key map "T" 'skk-set-henkan-point) + (define-key map "U" 'skk-set-henkan-point) + (define-key map "V" 'skk-set-henkan-point) + (define-key map "W" 'skk-set-henkan-point) + (define-key map "X" 'skk-purge-from-jisyo) + (define-key map "Y" 'skk-set-henkan-point) + (define-key map "Z" 'skk-set-henkan-point) + (define-key map "\ " 'skk-start-henkan) + (define-key map "\"" 'skk-self-insert) + (define-key map "\(" 'skk-self-insert) + (define-key map "\)" 'skk-self-insert) + ;;(define-key map "\177" 'skk-delete-backward-char) + ;;(define-key map "\C-g" 'skk-keyboard-quit) + ;;(define-key map "\C-m" 'skk-newline) + (define-key map "\[" 'skk-self-insert) + (define-key map "\\" 'skk-input-by-code-or-menu) + (define-key map "\]" 'skk-self-insert) + (or skk-use-vip + (define-key map "\M-\ " 'skk-start-henkan-with-completion) ) + (or skk-use-vip + (define-key map "\M-Q" 'skk-backward-and-set-henkan-point) ) + (define-key map "\t" 'skk-try-completion) + (define-key map "\{" 'skk-self-insert) + (define-key map "\}" 'skk-self-insert) + (define-key map "^" 'skk-self-insert) + (define-key map "_" 'skk-self-insert) + (define-key map "`" 'skk-self-insert) + (define-key map "a" 'skk-kana-input) + (define-key map "b" 'skk-kana-input) + (define-key map "c" 'skk-kana-input) + (define-key map "d" 'skk-kana-input) + (define-key map "e" 'skk-kana-input) + (define-key map "f" 'skk-kana-input) + (define-key map "g" 'skk-kana-input) + (define-key map "h" 'skk-kana-input) + (define-key map "i" 'skk-kana-input) + (define-key map "j" 'skk-kana-input) + (define-key map "k" 'skk-kana-input) + (define-key map "l" 'skk-ascii-mode) + (define-key map "m" 'skk-kana-input) + (define-key map "n" 'skk-kana-input) + (define-key map "o" 'skk-kana-input) + (define-key map "p" 'skk-kana-input) + (define-key map "q" 'skk-toggle-kana) + (define-key map "r" 'skk-kana-input) + (define-key map "s" 'skk-kana-input) + (define-key map "t" 'skk-kana-input) + (define-key map "u" 'skk-kana-input) + (define-key map "v" 'skk-kana-input) + (define-key map "w" 'skk-kana-input) + (define-key map "x" 'skk-previous-candidate) + (define-key map "y" 'skk-kana-input) + (define-key map "z" 'skk-kana-input) + (define-key map "|" 'skk-self-insert) + (define-key map "~" 'skk-self-insert) + (define-key map skk-kakutei-key 'skk-kakutei) + (skk-define-menu-bar-map map) + (setq skk-j-mode-map map))) + +;;;###skk-autoload +(defvar skk-zenkaku-mode-map nil "*$BA43Q%b!<%I$N%-!<%^%C%W!#(B" ) +(or skk-zenkaku-mode-map + (let ((map (make-sparse-keymap)) + (i 0) ) + (while (< i 128) + (if (aref skk-zenkaku-vector i) + (define-key map (char-to-string i) 'skk-zenkaku-insert) ) + (setq i (1+ i)) ) + (define-key map skk-kakutei-key 'skk-kakutei) + (or skk-use-vip + (define-key map "\M-Q" 'skk-backward-and-set-henkan-point) ) + (define-key map "\C-q" 'skk-ascii-henkan) + (skk-define-menu-bar-map map) + (setq skk-zenkaku-mode-map map))) + +;;;###skk-autoload +(defvar skk-abbrev-mode-map nil "*SKK abbrev $B%b!<%I$N%-!<%^%C%W!#(B" ) +(or skk-abbrev-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "," 'skk-abbrev-comma) + (define-key map "." 'skk-abbrev-period) + (define-key map "\ " 'skk-start-henkan) + ;;(define-key map "\177" 'skk-delete-backward-char) + ;;(define-key map "\C-g" 'skk-keyboard-quit) + ;;(define-key map "\C-m" 'skk-newline) + (define-key map "\C-q" 'skk-zenkaku-henkan) + (or skk-use-vip + (define-key map "\M-\ " 'skk-start-henkan-with-completion) ) + (define-key map "\t" 'skk-try-completion) + (define-key map skk-kakutei-key 'skk-kakutei) + (skk-define-menu-bar-map map) + (setq skk-abbrev-mode-map map))) + +;;;###skk-autoload +(defvar skk-jisyo-save-count 50 + "*$B?tCM$G$"$l$P!"$=$N2s?t<-=q$,99?7$5$l$?$H$-$K<-=q$r<+F0E*$K%;!<%V$9$k!#(B + nil $B$G$"$l$P!"<-=q$N%*!<%H%;!<%V$r9T$J$o$J$$!#(B" ) + +;;;###skk-autoload +(defvar skk-byte-compile-init-file t + "*Non-nil $B$G$"$l$P!"(Bskk-mode $B5/F0;~$K(B skk-init-file $B$r%P%$%H%3%s%Q%$%k$9$k!#(B +$B@53N$K8@$&$H!"(B + + (1)skk-init-file $B$r%P%$%H%3%s%Q%$%k$7$?%U%!%$%k$,$J$$$+!"(B + (2)skk-init-file $B$H$=$N%P%$%H%3%s%Q%$%k:Q%U%!%$%k$rHf3S$7$F!"A0<T$NJ}$,?7$7(B + $B$$$H$-(B + +$B$K(B skk-init-file $B$r%P%$%H%3%s%Q%$%k$9$k!#(B +nil $B$G$"$l$P!"(Bskk-init-file $B$H$=$N%P%$%H%3%s%Q%$%k:Q$_%U%!%$%k$rHf3S$7$F(B +skk-init-file $B$NJ}$,?7$7$$$H$-$O!"$=$N%P%$%H%3%s%Q%$%k:Q%U%!%$%k$r>C$9!#(B" ) + +;;;###skk-autoload +(defvar skk-count-private-jisyo-candidates-exactly nil + "*Non-nil $B$G$"$l$P!"(BEmacs $B$r=*N;$9$k$H$-$K@53N$K8D?M<-=q$N8uJd?t$r?t$($k!#(B +nil $B$G$"$l$P!"(B1 $B9T$KJ#?t$N8uJd$,$"$C$F$b(B 1 $B8uJd$H$7$F?t$($k!#(B +$B7W;;7k2L$O!"(Bskk-record-file $B$KJ]B8$5$l$k!#(B" ) + +;;;###skk-autoload +(defvar skk-compare-jisyo-size-when-saving t + "*Non-nil $B$G$"$l$P!"(Bskk-jisyo $B$N%;!<%V;~$K%U%!%$%k%5%$%:$N%A%'%C%/$r9T$J$&!#(B +$BA02s%;!<%V$7$?(B skk-jisyo $B$H:#2s%;!<%V$7$h$&$H$9$k<-=q$H$N%5%$%:Hf3S$r9T$J$$!"(B +$B8e<T$NJ}$,Bg$-$$$H$-$K%f!<%6!<$K%;!<%V$rB3$1$k$+$I$&$+$N3NG'$r5a$a$k!#(B" ) + +;;;###skk-autoload +(defvar skk-auto-start-henkan t + "$BC18l$dJ8@a$N6h@Z$j$r<($9J8;z$NBG80$K$h$j<+F0E*$KJQ49$r3+;O$9$k!#(B +skk-auto-start-henkan-keyword-list $B$K$h$jC18l$dJ8@a$N6h@Z$j$r<($9J8;z$r;XDj$9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-auto-start-henkan-keyword-list + '("$B$r(B" "$B!"(B" "$B!#(B" "$B!%(B" "$B!$(B" "$B!)(B" "$B!W(B" "$B!*(B" + "$B!((B" "$B!'(B" ")" ";" ":" "$B!K(B" "$B!I(B" "$B![(B" "$B!Y(B" + "$B!U(B" "$B!S(B" "$B!Q(B" "$B!O(B" "$B!M(B" "}" "]" "?" "." + "," "!" ) +;; $B$"$^$j%-!<%o!<%I$,B?$/$J$k$H!"DL>o$NJQ49$r:$Fq$K$9$k!)(B + "$B<+F0JQ49$r3+;O$9$k%-!<%o!<%I!#(B +$B$3$N%j%9%H$NMWAG$NJ8;z$rA^F~$9$k$H!"(BSPC $B$r2!$9$3$H$J$/<+F0E*$KJQ49$r3+;O$9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-search-excluding-word-pattern-function nil + "*$B8D?M<-=q$K<h$j9~$^$J$$J8;zNs$N%Q%?!<%s$r8!:w$9$k4X?t$r;XDj$9$k!#(B +$B3NDj$7$?J8;zNs$r0z?t$KEO$7$F(B funcall $B$5$l$k!#(B + +SKK $B$G$OJQ49!"3NDj$r9T$J$C$?J8;zNs$OA4$F8D?M<-=q$K<h$j9~$^$l$k$,!"$3$NJQ?t$G;X(B +$BDj$5$l$?4X?t$,(B non-nil $B$rJV$9$H$=$NJ8;zNs$O8D?M<-=q$K<h$j9~$^$l$J$$!#Nc$($P!"(B +$B$3$NJQ?t$K2<5-$N$h$&$J;XDj$9$k$H!"(BSKK abbrev mode $B$G$NJQ49$r=|$-!"%+%?%+%J$N$_(B +$B$+$i$J$kJ8;zNs$rJQ49$K$h$jF@$F3NDj$7$F$b!"$=$l$r8D?M<-=q$K<h$j9~$^$J$$!#(B + +$B%+%?%+%J$rJQ49$K$h$j5a$a$?$$$,!"8D?M<-=q$K$O%+%?%+%J$N$_$N8uJd$r<h$j9~$_$?$/$J(B +$B$$!"$J$I!"8D?M<-=q$,I,MW0J>e$KKD$l$k$N$rM^$($kL\E*$K;HMQ$G$-$k!#(B + +$B8D?M<-=q$K<h$j9~$^$J$$J8;zNs$K$D$$$F$OJd40$,8z$+$J$$$N$G!"Cm0U$9$k$3$H!#(B + + \(setq skk-search-excluding-word-pattern-function + \(function + \(lambda \(kakutei-word\) + ;; $B$3$N4X?t$,(B t $B$rJV$7$?$H$-$O!"$=$NJ8;zNs$O8D?M<-=q$K<h$j9~$^$l$J$$!#(B + \(save-match-data + \(and + ;; $BAw$j$J$7JQ49$G!"(B + \(not skk-okuri-char\) + ;; $B3NDj8l$,%+%?%+%J$N$_$+$i9=@.$5$l$F$$$F!"(B + \(string-match \"^[$B!<%!(B-$B%s(B]+$\" kakutei-word\) + ;; SKK abbrev mode $B0J30$G$NJQ49$+!"(B + \(or \(not skk-abbrev-mode\) + ;; $B8+=P$78l$,%+%?%+%J!"$R$i$,$J0J30$N$H$-!#(B + ;; \($B8e$G"&%^!<%/$rIU$1$?$H$-$O!"8+=P$78l$,1QJ8;z$G$b!"(B + ;; skk-abbrev-mode$B$,(B t $B$K$J$C$F$$$J$$(B\)$B!#(B + \(not \(string-match \"^[^$B!<%!(B-$B%s$!(B-$B$s(B]+$\" skk-henkan-key\)\) \)\)\)\)\)\) ") + +;;; -- internal variables +;; ---- global variables +(defconst skk-ml-address "skk-develop@kuis.kyoto-u.ac.jp") + +(defconst skk-coding-system-alist + (if (or skk-mule3 skk-xemacs) + '(("euc" . euc-japan) + ("ujis" . euc-japan) + ("sjis". sjis) + ("jis" . junet) ) + '(("euc" . *euc-japan*) + ("ujis" . *euc-japan*) + ("sjis". *sjis*) + ("jis" . *junet*) )) + "coding-system $B$NJ8;zNsI=8=$H!"%7%s%\%kI=8=$NO"A[%j%9%H!#(B" ) + +(defconst skk-default-zenkaku-vector + ;; note that skk-zenkaku-vector is a user variable. + ;; skk.el $B%m!<%IA0$K(B .emacs $B$J$I$G!"(Bskk-zenkaku-vector $B$NJL$NCM$r%f!<%6!<$,(B + ;; $BD>@\=q$$$?$j!"(Bskk.el $B%m!<%I8e$K$3$NCM$r(B aset $B$GD>@\$$$8$C$?$j$7$J$1$l$P(B + ;; default-value $B$G(B skk-zenkaku-vector $B$K%"%/%;%9$9$k$3$H$G(B + ;; skk-default-zenkaku-vector $B$NCM$rJ];}$9$k$3$H$b$G$-$h$&$,!"$=$l$OK>$a$J(B + ;; $B$$(B...$B!#(B + [nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil + nil nil nil nil nil nil nil nil + "$B!!(B" "$B!*(B" "$B!I(B" "$B!t(B" "$B!p(B" "$B!s(B" "$B!u(B" "$B!G(B" + "$B!J(B" "$B!K(B" "$B!v(B" "$B!\(B" "$B!$(B" "$B!](B" "$B!%(B" "$B!?(B" + "$B#0(B" "$B#1(B" "$B#2(B" "$B#3(B" "$B#4(B" "$B#5(B" "$B#6(B" "$B#7(B" + "$B#8(B" "$B#9(B" "$B!'(B" "$B!((B" "$B!c(B" "$B!a(B" "$B!d(B" "$B!)(B" + "$B!w(B" "$B#A(B" "$B#B(B" "$B#C(B" "$B#D(B" "$B#E(B" "$B#F(B" "$B#G(B" + "$B#H(B" "$B#I(B" "$B#J(B" "$B#K(B" "$B#L(B" "$B#M(B" "$B#N(B" "$B#O(B" + "$B#P(B" "$B#Q(B" "$B#R(B" "$B#S(B" "$B#T(B" "$B#U(B" "$B#V(B" "$B#W(B" + "$B#X(B" "$B#Y(B" "$B#Z(B" "$B!N(B" "$B!@(B" "$B!O(B" "$B!0(B" "$B!2(B" + "$B!F(B" "$B#a(B" "$B#b(B" "$B#c(B" "$B#d(B" "$B#e(B" "$B#f(B" "$B#g(B" + "$B#h(B" "$B#i(B" "$B#j(B" "$B#k(B" "$B#l(B" "$B#m(B" "$B#n(B" "$B#o(B" + "$B#p(B" "$B#q(B" "$B#r(B" "$B#s(B" "$B#t(B" "$B#u(B" "$B#v(B" "$B#w(B" + "$B#x(B" "$B#y(B" "$B#z(B" "$B!P(B" "$B!C(B" "$B!Q(B" "$B!A(B" nil] + "skk-zenkaku-region $B$G;2>H$9$kJ8;z%F!<%V%k!#(B +\"ascii\" -> \"$B#a#s#c#i#i(B\" $B$N$h$&$JA43QJ8;z$X$NJQ49$r9T$&:]$KMxMQ$9$k!#(B" ) + +;;;###skk-autoload +(defconst skk-kanji-len (length "$B$"(B") + "$B4A;z0lJ8;z$ND9$5!#(BMule $B$G$O(B 3 $B$K$J$k!#(BXEmacs $B$G$O(B 1$B!#(B" ) + +(defconst skk-hankaku-alist + '((161 . 32) ; ?\ + (170 . 33) ;?\! + (201 . 34) ;?\" + (244 . 35) ;?\# + (240 . 36) ;?\$ + (243 . 37) ;?\% + (245 . 38) ;?\& + (199 . 39) ;?\' + (202 . 40) ;?\( + (203 . 41) ;?\) + (246 . 42) ;?\* + (220 . 43) ;?\+ + (164 . 44) ;?\, + (221 . 45) ;?\- + (165 . 46) ;?\. + (191 . 47) ;?\/ + (167 . 58) ;?\: + (168 . 59) ;?\; + (227 . 60) ;?\< + (225 . 61) ;?\= + (228 . 62) ;?\> + (169 . 63) ;?\? + (247 . 64) ;?\@ + (206 . 91) ;?\[ + (239 . 92) ;?\\ + (207 . 93) ;?\] + (176 . 94) ;?^ + (178 . 95) ;?\_ + (208 . 123) ;?\{ + (195 . 124) ;?\| + (209 . 125) ;?\} + (177 . 126) ;?\~ + (198 . 96)) ;?` + "$BJ8;z%3!<%I$N(B 2 $BHVL\$N%P%$%H$H$=$NJ8;z$KBP1~$9$k(B ascii $BJ8;z(B \(char\) $B$H$NO"A[%j%9%H!#(B +skk-ascii-region $B$G;2>H$9$k!#(BMule-2.3 $BE:IU$N(B egg.el $B$h$j%3%T!<$7$?!#(B" ) + +;;;###skk-autoload +(defvar skk-insert-new-word-function nil + "$B8uJd$rA^F~$7$?$H$-$K(B funcall $B$5$l$k4X?t$rJ]B8$9$kJQ?t!#(B" ) + +;;;###skk-autoload +(defvar skk-input-mode-string skk-hirakana-mode-string + "SKK $B$NF~NO%b!<%I$r<($9J8;zNs!#(Bskk-mode $B5/F0;~$O!"(Bskk-hirakana-mode-string$B!#(B" ) + +;;;###skk-autoload +(defvar skk-isearch-message nil + "skk-isearch $B4X?t$r%3!<%k$9$k$?$a$N%U%i%0!#(B +Non-nil $B$G$"$l$P!"(Bskk-isearch-message $B4X?t$r%3!<%k$9$k!#(B" ) + +;;;###skk-autoload +(defvar skk-mode-invoked nil + "Non-nil $B$G$"$l$P!"(BEmacs $B$r5/F08e4{$K(B skk-mode $B$r5/F0$7$?$3$H$r<($9!#(B" ) + +(defvar skk-kakutei-count 0 + "$BJQ498uJd$r3NDj$7$?%+%&%s%H$rJ];}$9$kJQ?t!#(B +skk-record-file $B$N(B \"$B3NDj(B:\" $B9`L\$N%+%&%s%?!<!#(B" ) + +(defvar skk-touroku-count 0 + "$B<-=qEPO?$7$?%+%&%s%H$rJ];}$9$kJQ?t!#(B +skk-record-file $B$N(B \"$BEPO?(B:\" $B9`L\$N%+%&%s%?!<!#(B" ) + +(defvar skk-update-jisyo-count 0 + "$B<-=q$r99?7$7$?2s?t!#(B +$B$3$N%+%&%s%?!<$N?t;z$,(B skk-jisyo-save-count $B0J>e$H$J$C$?$H$-$K%f!<%6!<<-=q$N%*!<(B +$B%H%;!<%V$,9T$J$o$l$k!#(B" ) + +(defvar skk-use-relation nil + "*skk-relation $B$r;HMQ$9$k!#$3$l$OD>A0$NJQ49$r21$($F$*$/$3$H$G!"(B +$BJQ498zN($rNI$/$7$h$&$H$$$&;n$_!#(B" ) + +(defvar skk-relation-length (* skk-kanji-len 10) + "skk-relation $B;HMQ;~$K!"2?J8;zA0$NJQ49$^$G21$($F$*$/$+$r;XDj$9$kJQ?t!#(B" ) + +(defvar skk-relation-record-num 100 + "skk-relation $B;HMQ;~$K!"2?%(%s%H%j$^$G%U%!%$%k$K5-21$9$k$+$r<($9!#(B" ) + +;; ---- buffer local variables +;; <$B%U%i%0N`(B> +;;;###skk-autoload +(skk-deflocalvar skk-mode nil + "Non-nil $B$G$"$l$P!"%+%l%s%H%P%C%U%!$G8=:_(B skk-mode $B$r5/F0$7$F$$$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-ascii-mode nil + "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,(B ASCII $B%b!<%I$G$"$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-j-mode nil + "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,$+$J!&%+%J%b!<%I$G$"$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-katakana nil + "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,%+%J%b!<%I$G$"$k$3$H$r<($9!#(B +\"(and (not skk-katakana) skk-j-mode))\" $B$,(B t $B$G$"$l$P!"$+$J%b!<%I$G$"$k$3$H$r(B +$B<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-zenkaku-mode nil + "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,A41Q%b!<%I$G$"$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-abbrev-mode nil + "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,(B SKK abbrev $B%b!<%I$G$"$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-okurigana nil + "Non-nil $B$G$"$l$P!"Aw$j2>L>ItJ,$,F~NOCf$G$"$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-henkan-on nil + "Non-nil $B$G$"$l$P!""&%b!<%I(B ($BJQ49BP>]$NJ8;zNs7hDj$N$?$a$N%b!<%I(B) $B$G$"$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-henkan-active nil + "Non-nil $B$G$"$l$P!""'%b!<%I(B ($BJQ49Cf(B) $B$G$"$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-kakutei-flag nil + "Non-nil $B$J$i3NDj$7$FNI$$8uJd$r8+$D$1$?>uBV$G$"$k$3$H$r;X$9!#(B +skk-henkan, skk-search-kakutei-jisyo-file, skk-henkan-show-candidates, +skk-henkan-in-minibuff $B$H(B skk-kakutei-save-and-init-variables $B$GJQ99!";2>H$5$l(B +$B$k!#(B" ) + +(skk-deflocalvar skk-exit-show-candidates nil + "$B%_%K%P%C%U%!$G8uJd$r<!!9$KI=<($7$F!"8uJd$,?T$-$?$H$-$K(B non-nil $B$H$J$k!#(B +$B$=$NCM$O%j%9%H$G!"(Bcar $B$K(B skk-henkan-show-candidate $B4X?t$G(B while $B%k!<%W$r2s$C(B +$B$?2s?t$r<($90l;~JQ?t(B loop $B$NCM$r!"(Bcdr $BIt$K:G8e$K%_%K%P%C%U%!$KI=<($7$?(B 1 $B$DA0(B +$B$N8uJd72$N:G8e$NMWAG$r;X$9%$%s%G%/%9$,BeF~$5$l$k!#(B +skk-henkan-show-candidates, skk-henkan-in-minibuff $B$H(B +skk-kakutei-save-and-init-variables $B$GJQ99!";2>H$5$l$k!#(B" ) + +(skk-deflocalvar skk-last-henkan-result nil + "" ) + +(skk-deflocalvar skk-last-henkan-point nil + "" ) + +;; <$B%-!<%^%C%W4XO"(B> + +;; <$B<-=q4XO"$NJQ?t(B> +(skk-deflocalvar skk-okuri-ari-min nil + "SKK $B<-=q$NAw$jM-$j%(%s%H%j$N3+;OE@$r<($9%P%C%U%!%]%$%s%H!#(B") + +(skk-deflocalvar skk-okuri-ari-max nil + "SKK $B<-=q$NAw$jM-$j%(%s%H%j$N=*N;E@$r<($9%P%C%U%!%]%$%s%H!#(B +skk-jisyo $B$N%P%C%U%!$G$O<-=q$N99?7$NI,MW$,$"$k$?$a$K%^!<%+!<$,BeF~$5$l$k!#(B" ) + +(skk-deflocalvar skk-okuri-nasi-min nil + "SKK $B<-=q$NAw$j$J$7%(%s%H%j$N3+;OE@$r<($9%P%C%U%!%]%$%s%H!#(B +skk-jisyo $B$N%P%C%U%!$G$O<-=q$N99?7$NI,MW$,$"$k$?$a$K%^!<%+!<$,BeF~$5$l$k!#(B" ) + +;; <$B$=$NB>(B> +(skk-deflocalvar skk-mode-line nil + "SKK $B$N%b!<%I$r<($9%b!<%I%i%$%s$NJ8;zNs!#(B +skk-mode-string, skk-hirakana-mode-string, skk-katakana-mode-string +and skk-zenkaku-mode-string $B$N$$$:$l$+$,BeF~$5$l$k!#(B" ) + +;; "" $B$KBP1~$7$?%(%s%H%j$,(B skk-roma-kana-[aiue] $B$K$"$k$?$a!"(B"" $B$r(B nil $B$GBeMQ(B +;; $B$G$-$J$$!#(B +;;;###skk-autoload +(skk-deflocalvar skk-prefix "" + "$BF~NO$9$k$+$J$r7hDj$9$k$?$a$N%W%l%U%#%C%/%9!#(B +$B8e$GF~NO$5$l$kJl2;$KBP1~$7$?(B skk-roma-kana-[aiue] $BO"A[%j%9%H$G!"$=$N(B +skk-prefix $B$r%-!<$K$7$FF~NO$9$Y$-$+$JJ8;z$,7hDj$5$l$k!#(B +$BNc$($P!"(B\"$B$+(B\" $B$N$h$&$K(B \"k\" $B$+$i;O$^$k;R2;$rF~NO$7$F$$$k$H$-$O!"(Bskk-prefix +$B$O!"(B\"k\" $B$G!"$=$N<!$KF~NO$5$l$?Jl2;(B \"a\" $B$KBP1~$9$k(B skk-roma-kana-a $B$NCf$N(B +\"k\" $B$r%-!<$K;}$DCM!"(B\"$B$+(B\" $B$b$7$/$O(B \"$B%+(B\" $B$,F~NO$9$Y$-$+$JJ8;z$H$J$k!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-henkan-start-point nil + "$BJQ493+;O%]%$%s%H$r<($9%^!<%+!<!#(B" ) + +(skk-deflocalvar skk-henkan-end-point nil + "$BJQ49=*N;%]%$%s%H$r<($9%^!<%+!<!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-kana-start-point nil + "$B$+$JJ8;z$N3+;O%]%$%s%H$r<($9%^!<%+!<!#(B" ) + +(skk-deflocalvar skk-okurigana-start-point nil + "$BAw$j2>L>$N3+;O%]%$%s%H$r<($9%^!<%+!<!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-henkan-key nil + "$BJQ49$9$Y$-8+=P$78l!#(B +$BNc$($P!"(B\"$B"&$+$J(B\" $B$rJQ49$9$l$P!"(Bskk-henkan-key $B$K$O(B \"$B$+$J(B\" $B$,BeF~$5$l$k!#(B +\"$B"&$o$i(B*$B$&(B\" $B$N$h$&$JAw$j$"$j$NJQ49$N>l9g$K$O!"(B\"$B$o$i(Bu\" $B$N$h$&$K!"4A;zItJ,$N(B +$BFI$_$,$J(B + $BAw$j2>L>$N:G=i$NJ8;z$N%m!<%^;z$N%W%l%U%#%C%/%9$,BeF~$5$l$k!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-okuri-char nil + "$BJQ49$9$Y$-8l$NAw$j2>L>$NItJ,$N%W%l%U%#%C%/%9!#(B +$BNc$($P!"(B\"$B$*$/(B*$B$j(B\" $B$rJQ49$9$k$H$-$O!"(Bskk-okuri-char $B$O(B \"r\"$B!#(B +skk-okuri-char $B$,(B non-nil $B$G$"$l$P!"Aw$j$"$j$NJQ49$G$"$k$3$H$r<($9!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-henkan-okurigana nil + "$B8=:_$NJQ49$NAw$j2>L>ItJ,!#(B +$BNc$($P!"(B\"$B"&$&$^$l(B*$B$k(B\" $B$rJQ49$9$l$P!"(Bskk-henkan-okurigana $B$K$O(B \"$B$k(B\" $B$,BeF~(B +$B$5$l$k!#(B" ) + +(skk-deflocalvar skk-last-kakutei-henkan-key nil + "$B3NDj<-=q$K$h$j:G8e$K3NDj$7$?$H$-$N8+=P$78l!#(B +$B3NDj<-=q$K$h$k3NDj$ND>8e$K(B x $B%-!<$r2!$9$H3NDj$,%"%s%I%%$5$l$F!"3NDjA0$N>uBV$G(B +$B$3$N8+=P$78l$,%+%l%s%H%P%C%U%!$KA^F~$5$l$k!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-henkan-list nil + "$BJQ497k2L$N8uJd$N%j%9%H!#(B +$BNc$($P!"(B\"$B"&$J(B*$B$/(B\" $B$H$$$&JQ49$9$l$P!"(Bskk-henkan-list $B$O(B +(\"$BLD(B\" \"$B5c(B\" \"$BL5(B\" \"$BK4(B\") $B$N$h$&$K$J$k!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-henkan-count -1 + "skk-henkan-list $B$N%j%9%H$N%$%s%G%/%9$G8=:_$N8uJd$r:9$9$b$N!#(B" ) + +(skk-deflocalvar skk-self-insert-non-undo-count 1 + "skk-self-insert $B$J$I$GO"B3F~NO$7$?J8;z?t$rI=$o$9%+%&%s%?!<!#(B +Emacs $B$N%*%j%8%J%k$NF0:n$G$O!"(Bself-insert-command $B$K%P%$%s%I$5$l$?%-!<F~NO$O!"(B +$BO"B3(B 20 $B2s$^$G$,(B 1 $B$D$N%"%s%I%%$NBP>]$H$J$k!#$3$NF0:n$r%(%_%e%l!<%H$9$k$?$a$N(B +$B%+%&%s%?!<!#(B +skk-self-insert $B0J30$G$O!"(Bskk-abbrev-comma, skk-abbrev-period, skk-insert-a, +skk-insert-comma, skk-insert-e, skk-insert-i, skk-insert-period, skk-insert-u, +skk-kana-input, skk-set-henkan-point, skk-zenkaku-insert $B$N$$$:$l$+$N%3%^%s%I(B +$B$GF~NO$5$l$?>l9g$bO"B3$7$?F~NO$H$7$F07$o$l$k!#(B +$B$3$N%+%&%s%?!<$,!"(B20 $B0J2<$G$"$k$H$-$O!"F~NO$N$?$S$K(B cancel-undo-boundary $B$,%3!<(B +$B%k$5$l$k!#(B" ) + +;;;###skk-autoload +(skk-deflocalvar skk-current-search-prog-list nil + "skk-search-prog-list $B$N8=:_$NCM$rJ]B8$9$k%j%9%H!#(B +$B:G=i$NJQ49;~$O(B skk-search-prog-list $B$NA4$F$NCM$rJ];}$7!"JQ49$r7+$jJV$9$?$S$K(B 1 +$B$D$E$DC;$/$J$C$F$f$/!#(B" ) + +;; for skk-undo-kakutei +(skk-deflocalvar skk-last-henkan-key nil + "skk-henkan-key $B$N:G8e$NCM!#(Bskk-undo-kakutei $B$G;2>H$5$l$k!#(B" ) + +(skk-deflocalvar skk-last-henkan-okurigana nil + "skk-henkan-okurigana $B$N:G8e$NCM!#(Bskk-undo-kakutei $B$G;2>H$5$l$k!#(B" ) + +(skk-deflocalvar skk-last-henkan-list nil + "skk-henkan-list $B$N:G8e$NCM!#(Bskk-undo-kakutei $B$G;2>H$5$l$k!#(B" ) + +(skk-deflocalvar skk-last-okuri-char nil + "skk-okuri-char $B$N:G8e$NCM!#(Bskk-undo-kakutei $B$G;2>H$5$l$k!#(B" ) + +(skk-deflocalvar skk-henkan-overlay nil + "$B8uJd$rI=<($9$k$H$-$K;HMQ$9$k(B Overlay$B!#(B" ) + +;;;###skk-autoload +(defvar skk-menu-modified-user-option nil + "SKK $B%a%K%e!<%3%^%s%I$GJQ99$5$l$?%f!<%6!<JQ?tJ];}$9$k%j%9%H!#(B" ) + +(or (assq 'skk-mode minor-mode-alist) + (setq minor-mode-alist + (cons '(skk-mode skk-input-mode-string) minor-mode-alist) )) + +;; +----------------------+-------- skk-mode -----+----------------------+ +;; | | | | +;; | | | | +;; skk-j-mode skk-ascii-mode skk-zenkaku-mode skk-abbrev-mode +;; ASCII ZENKAKU EIMOJI ABBREVIATION +;; (C-j wakes up skk-j-mode) +;; +;; skk-j-mode-map skk-ascii-mode-map skk-zenkaku-mode-map skk-abbrev-mode-map +;; skk-katakana: nil +;; HIRAKANA +;; +;; skk-j-mode-map +;; skk-katakana: t +;; KATAKANA + +;; sub minor mode +;;(cond ((and skk-xemacs (local-variable-p 'minor-mode-map-alist nil t))) +;; ((local-variable-p 'minor-mode-map-alist) +;; (setq-default minor-mode-map-alist minor-mode-map-alist) )) + +(or (assq 'skk-ascii-mode minor-mode-map-alist) + (setq minor-mode-map-alist + (cons (cons 'skk-ascii-mode skk-ascii-mode-map) minor-mode-map-alist) )) + +(or (assq 'skk-abbrev-mode minor-mode-map-alist) + (setq minor-mode-map-alist + (cons (cons 'skk-abbrev-mode skk-abbrev-mode-map) minor-mode-map-alist) )) + +(or (assq 'skk-j-mode minor-mode-map-alist) + (setq minor-mode-map-alist + (cons (cons 'skk-j-mode skk-j-mode-map) minor-mode-map-alist) )) + +(or (assq 'skk-zenkaku-mode minor-mode-map-alist) + (setq minor-mode-map-alist + (cons (cons 'skk-zenkaku-mode skk-zenkaku-mode-map) minor-mode-map-alist) )) + +;;;; aliases +(defalias 'skk-backward-char 'backward-char) +(defalias 'skk-eventp 'eventp) +(defalias 'skk-forward-char 'forward-char) +(defalias 'skk-insert-and-inherit 'insert-and-inherit) +(defalias 'skk-skip-chars-backward 'skip-chars-backward) + +;;;; macros + +;; Why I use non-intern temporary variable in the macro --- see comment in +;; save-match-data of subr.el of GNU Emacs. And should we use the same manner +;; in the save-current-buffer, with-temp-buffer and with-temp-file macro +;; definition? +;;;###skk-autoload +(defmacro skk-save-point (&rest body) + (` (let ((skk-save-point (point-marker))) + (unwind-protect + (progn (,@ body)) + (goto-char skk-save-point) + (skk-set-marker skk-save-point nil) )))) + +;;;###skk-autoload +(defmacro skk-message (japanese english &rest arg) + ;; skk-japanese-message-and-error $B$,(B non-nil $B$@$C$?$i(B JAPANESE $B$r(B nil $B$G$"$l(B + ;; $B$P(B ENGLISH $B$r%(%3!<%(%j%"$KI=<($9$k!#(B + ;; ARG $B$O(B message $B4X?t$NBh#20z?t0J9_$N0z?t$H$7$FEO$5$l$k!#(B + (list 'let (list (list 'mc-flag t) (list 'enable-multibyte-characters t)) + (append (list 'message (list 'if 'skk-japanese-message-and-error + japanese english )) + arg ))) + +;;;###skk-autoload +(defmacro skk-error (japanese english &rest arg) + ;; skk-japanese-message-and-error $B$,(B non-nil $B$@$C$?$i(B JAPANESE $B$r(B nil $B$G$"$l(B + ;; $B$P(B ENGLISH $B$r%(%3!<%(%j%"$KI=<($7!"%(%i!<$rH/@8$5$;$k!#(B + ;; ARG $B$O(B error $B4X?t$NBh#20z?t0J9_$N0z?t$H$7$FEO$5$l$k!#(B + (list 'let (list (list 'mc-flag t) (list 'enable-multibyte-characters t)) + (append (list 'error (list 'if 'skk-japanese-message-and-error + japanese english )) + arg ))) + +;;;###skk-autoload +(defmacro skk-yes-or-no-p (japanese english) + ;; skk-japanese-message-and-error $B$,(B non-nil $B$G$"$l$P!"(Bjapanese $B$r(B nil $B$G$"(B + ;; $B$l$P(B english $B$r%W%m%s%W%H$H$7$F(B yes-or-no-p $B$r<B9T$9$k!#(B + ;; yes-or-no-p $B$N0z?t$N%W%m%s%W%H$,J#;($KF~$l9~$s$G$$$k>l9g$O$3$N%^%/%m$r;H(B + ;; $B$&$h$j%*%j%8%J%k$N(B yes-or-no-p $B$r;HMQ$7$?J}$,%3!<%I$,J#;($K$J$i$J$$>l9g$,(B + ;; $B$"$k!#(B + (list 'let (list (list 'mc-flag t) (list 'enable-multibyte-characters t)) + (list 'yes-or-no-p (list 'if 'skk-japanese-message-and-error + japanese english )))) + +;;;###skk-autoload +(defmacro skk-y-or-n-p (japanese english) + ;; skk-japanese-message-and-error $B$,(B non-nil $B$G$"$l$P!"(Bjapanese $B$r(B nil $B$G$"(B + ;; $B$l$P(B english $B$r%W%m%s%W%H$H$7$F(B y-or-n-p $B$r<B9T$9$k!#(B + (list 'let (list (list 'mc-flag t) (list 'enable-multibyte-characters t)) + (list 'y-or-n-p (list 'if 'skk-japanese-message-and-error + japanese english )))) + +;;;###skk-autoload +(defmacro skk-set-marker (marker position &optional buffer) + ;; $B%P%C%U%!%m!<%+%kCM$G$"$k(B skk-henkan-start-point, skk-henkan-end-point, + ;; skk-kana-start-point, $B$"$k$$$O(B skk-okurigana-start-point $B$,(B nil $B$@$C$?$i!"(B + ;; $B?75,%^!<%+!<$r:n$C$FBeF~$9$k!#(B + ;; + ;; skk.el $B$N%P%C%U%!%m!<%+%kCM$N07$$$K$OCm0U$9$Y$-E@$,$"$k!#(B + ;; $BNc$($P!"$"$k%P%C%U%!(B Buffer A $B$G2<5-$N$h$&$J%U%)!<%`$rI>2A$7$?$H$9$k!#(B + ;; ---------- Buffer A ---------------+--------------- Buffer B ---------- + ;; (setq test (make-marker)) | + ;; -> #<marker in no buffer> | + ;; | + ;; (make-variable-buffer-local 'test) | + ;; | + ;; test | test + ;; -> #<marker in no buffer> | -> #<marker in no buffer> + ;; | + ;; (set-marker test (point)) | + ;; | + ;; test | test + ;; -> #<marker at 122 in A> | -> #<marker at 122 in A> + ;; + ;; $B%P%C%U%!%m!<%+%kCM$H$7$F$N@k8@$r$9$kA0$K(B non-nil $BCM$rBeF~$7!"$=$N(B non-nil + ;; $BCM$rD>@\=q$-JQ$($k$h$&$J%U%)!<%`$rI>2A$9$k$H(B Buffer B $B$+$i8+$($k%G%#%U%)%k(B + ;; $B%HCM$^$G=q$-JQ$C$F$7$^$&!#>e5-$NNc$O%^!<%+!<$@$,!"2<5-$N$h$&$K%j%9%H$KBP$7(B + ;; $B$FGK2uE*4X?t$GA`:n$7$?$H$-$bF1MM$N7k2L$H$J$k!#(B + ;; ---------- Buffer A ---------------+--------------- Buffer B ---------- + ;; (setq test '(A B C)) | + ;; -> (A B C) | + ;; | + ;; (make-variable-buffer-local 'test) | + ;; | + ;; test | test + ;; -> (A B C) | -> (A B C) + ;; | + ;; (setcar test 'X) | + ;; | + ;; test | test + ;; -> (X B C) | -> (X B C) + ;; + ;; $B$3$N8=>]$G0lHV:$$k$N$O!"4A;zEPO?$J$I$G%_%K%P%C%U%!$KF~$C$?$H$-(B + ;; (skk-henkan-show-candidate $B$N$h$&$KC1$K!V%(%3!<%(%j%"!W$r;HMQ$9$k4X?t$G$O(B + ;; $B4X78$J$$(B) $B$K!"$b$H$N%P%C%U%!$H%_%K%P%C%U%!$H$G$O$=$l$>$lJL$NJQ49$r9T$J$&(B + ;; $B$N$,IaDL$G$"$k$N$G!">e5-$N$h$&$KB>$N%P%C%U%!$N%P%C%U%!%m!<%+%kCM$^$G=q$-(B + ;; $BJQ$($F$7$^$&$H!"JQ49$r5Y;_$7$F$$$kB>$N%P%C%U%!$G@5>o$JJQ49$,$G$-$J$/$J$k(B + ;; $B>l9g$,$"$k$3$H$G$"$k!#(B + ;; + ;; $B$7$+$b(B SKK $B$G$O%j%+!<%7%V%_%K%P%C%U%!$,;HMQ$G$-$k$N$G!"(B *Minibuf-0* $B$H(B + ;; *Minibuf-1 $B$N4V(B ($B$"$k$$$O$b$C$H?<$$%j%+!<%7%V%_%K%P%C%U%!F1;N$N4V(B) $B$G%P%C(B + ;; $B%U%!%m!<%+%kCM$NGK2uE*=q$-JQ$($,9T$J$o$l$F$7$^$$!">e0L$N%_%K%P%C%U%!$KLa$C(B + ;; $B$?$H$-$K@5>o$JJQ49$,$G$-$J$/$J$k>l9g$,$"$k!#(B + ;; + ;; $B$H$3$m$,2<5-$N$h$&$K=i4|CM$r(B nil $B$K$7$F!"%P%C%U%!%m!<%+%kCM$H$7$F$N@k8@8e!"(B + ;; non-nil $BCM$rBeF~$9$l$P!"0J8e$=$N%P%C%U%!%m!<%+%kCM$KGK2uE*A`:n$r$7$F$b$=$N(B + ;; $B%P%C%U%!$K8GM-$NCM$7$+JQ2=$7$J$$!#(B + ;; ---------- Buffer A ---------------+--------------- Buffer B ---------- + ;; (setq test nil) | + ;; | + ;; (make-variable-buffer-local 'test) | + ;; | + ;; test | test + ;; -> nil | -> nil + ;; | + ;; (setq test (make-marker)) | + ;; -> #<marker in no buffer> | + ;; | + ;; (set-marker test (point)) | + ;; | + ;; test | test + ;; -> #<marker at 122 in A> | -> nil + ;; + ;; skk.el 9.3 $B$N;~E@$G$O!"(Bskk-henkan-start-point, skk-henkan-end-point, + ;; skk-kana-start-point $B5Z$S(B skk-okurigana-start-point $B$N=i4|CM(B + ;; (make-variable-buffer-local $B$,%3!<%k$5$l$kA0$NCM(B) $B$,(B make-marker $B$NJV$jCM(B + ;; $B$G$"$k(B #<marker in no buffer> $B$G$"$C$?$N$G!"%j%+!<%7%V%_%K%P%C%U%!$KF~$C(B + ;; $B$FJQ49$7$?$H$-$K(B "$B"'(B" $B$,>C$($J$$!"$J$I$N%H%i%V%k$,$"$C$?$,!"$3$l$i$N=i4|(B + ;; $BCM$r(B nil $B$K$7$F;HMQ;~$K(B make-marker $B$NJV$jCM$rBeF~$9$k$h$&$K$7!"$3$NLdBj$r(B + ;; $B2r7h$7$?!#(B + (list 'progn + (list 'if (list 'not marker) + (list 'setq marker (list 'make-marker)) ) + (list 'set-marker marker position buffer) )) + +;;;; inline functions +(defsubst skk-mode-off () + (setq skk-mode nil + skk-abbrev-mode nil + skk-ascii-mode nil + skk-j-mode nil + skk-zenkaku-mode nil + ;; j's sub mode. + skk-katakana nil ) + ;; initialize + (setq skk-input-mode-string skk-hirakana-mode-string) + (setq skk-last-henkan-result nil) + (skk-set-marker skk-last-henkan-point nil) + (skk-set-cursor-color skk-default-cursor-color) + (force-mode-line-update) ) + +;;;###skk-autoload +(defsubst skk-j-mode-on (&optional katakana) + (setq skk-mode t + skk-abbrev-mode nil + skk-ascii-mode nil + skk-j-mode t + skk-zenkaku-mode nil + ;; j's sub mode. + skk-katakana katakana ) + ;; mode line + (if katakana + (progn + (setq skk-input-mode-string skk-katakana-mode-string) + (skk-set-cursor-color skk-katakana-cursor-color) ) + (setq skk-input-mode-string skk-hirakana-mode-string) + (skk-set-cursor-color skk-hirakana-cursor-color) ) + (force-mode-line-update) ) + +;;;###skk-autoload +(defsubst skk-ascii-mode-on () + (setq skk-mode t + skk-abbrev-mode nil + skk-ascii-mode t + skk-j-mode nil + skk-zenkaku-mode nil + ;; j's sub mode. + skk-katakana nil + skk-input-mode-string skk-ascii-mode-string ) + (skk-set-cursor-color skk-ascii-cursor-color) + (force-mode-line-update) ) + +;;;###skk-autoload +(defsubst skk-zenkaku-mode-on () + (setq skk-mode t + skk-abbrev-mode nil + skk-ascii-mode nil + skk-j-mode nil + skk-zenkaku-mode t + ;; j's sub mode. + skk-katakana nil + skk-input-mode-string skk-zenkaku-mode-string ) + (skk-set-cursor-color skk-zenkaku-cursor-color) + (force-mode-line-update) ) + +;;;###skk-autoload +(defsubst skk-abbrev-mode-on () + (setq skk-mode t + skk-abbrev-mode t + skk-ascii-mode nil + skk-j-mode nil + skk-zenkaku-mode nil + ;; j's sub mode. + skk-katakana nil + skk-input-mode-string skk-abbrev-mode-string ) + (skk-set-cursor-color skk-abbrev-cursor-color) + (force-mode-line-update) ) + +;;;###skk-autoload +(defsubst skk-in-minibuffer-p () + ;; $B%+%l%s%H%P%C%U%!$,%_%K%P%C%U%!$+$I$&$+$r%A%'%C%/$9$k!#(B + (window-minibuffer-p (selected-window)) ) + +;;;###skk-autoload +(defsubst skk-insert-prefix (&optional char) + ;; skk-echo $B$,(B non-nil $B$G$"$l$P%+%l%s%H%P%C%U%!$K(B skk-prefix $B$rA^F~$9$k!#(B + (if skk-echo + ;; skk-prefix $B$NA^F~$r%"%s%I%%$NBP>]$H$7$J$$!#A^F~$7$?%W%l%U%#%C%/%9$O!"(B + ;; $B$+$JJ8;z$rA^F~$9$kA0$KA4$F>C5n$9$k$N$G!"$=$N4V!"(Bbuffer-undo-list $B$r(B + ;; t $B$K$7$F%"%s%I%%>pJs$rC_$($J$/$H$bLdBj$,$J$$!#(B + (let ((buffer-undo-list t)) + (insert (or char skk-prefix)) ))) + +;;;###skk-autoload +(defsubst skk-erase-prefix () + ;; skk-echo $B$,(B non-nil $B$G$"$l$P%+%l%s%H%P%C%U%!$KA^F~$5$l$?(B skk-prefix $B$r>C(B + ;; $B$9!#(B + (if skk-echo + ;; skk-prefix $B$N>C5n$r%"%s%I%%$NBP>]$H$7$J$$!#(B + (let ((buffer-undo-list t)) + (delete-region skk-kana-start-point (point) )))) + +(defsubst skk-string<= (str1 str2) + ;; str1 $B$,(B str2 $B$HHf3S$7$F!"(Bstring< $B$+(B string= $B$G$"$l$P!"(Bt $B$rJV$9!#(B + (or (string< str1 str2) (string= str1 str2)) ) + +(defsubst skk-jis-char-p (char) + ;; char $B$,(B JIS $BJ8;z$@$C$?$i(B t $B$rJV$9!#(B + (> char 127) ) + +(defsubst skk-alpha-char-p (char) + ;; char $B$,(B ascii $BJ8;z$@$C$?$i(B t $B$rJV$9!#(B + (<= char 127) ) + +(defsubst skk-lower-case-p (char) + ;; char $B$,>.J8;z$N%"%k%U%!%Y%C%H$G$"$l$P!"(Bt $B$rJV$9!#(B + (and (<= ?a char) (>= ?z char) )) + +(defsubst skk-do-auto-fill () + ;; auto-fill-function $B$KCM$,BeF~$5$l$F$*$l$P!"(Bdo-auto-fill $B$r%3!<%k$9$k!#(B + (and auto-fill-function (funcall auto-fill-function)) ) + +;;;; from dabbrev.el. Welcome! +;; $BH=Dj4V0c$$$rHH$9>l9g$"$j!#MW2~NI!#(B +(defsubst skk-minibuffer-origin () + (nth 1 (buffer-list)) ) + +;;;###skk-autoload +(defsubst skk-numeric-p () + (and skk-use-numeric-conversion (require 'skk-num) + skk-num-list )) + +(defsubst skk-substring-head-character (string) + (char-to-string (string-to-char string)) ) + +(defsubst skk-get-simply-current-candidate (&optional noconv) + (if (> skk-henkan-count -1) + ;; (nth -1 '(A B C)) $B$O!"(BA $B$rJV$9$N$G!"Ii$G$J$$$+$I$&$+%A%'%C%/$9$k!#(B + (let ((word (nth skk-henkan-count skk-henkan-list))) + (and word + (if (and (skk-numeric-p) (consp word)) + (if noconv (car word) (cdr word)) + word ))))) + +(eval-after-load "font-lock" + '(mapcar (function + (lambda (pattern) + (add-to-list + 'lisp-font-lock-keywords-2 + (cons pattern + '((1 font-lock-keyword-face) + (2 font-lock-variable-name-face) ))))) + '("^(\\(skk-deflocalvar\\)[ \t'\(]*\\(\\sw+\\)?" + "^(\\(skk-defunsoft\\)[ \t'\(]*\\(\\sw+\\)?" ))) + +(defun skk-submit-bug-report () + "$B%a!<%k$G(B SKK $B$N%P%0%l%]!<%H$rAw$k!#(B +reporter-mailer $B$r@_Dj$9$k$3$H$K$h$j9%$_$N%a!<%k%$%s%?!<%U%'%$%9$r;HMQ$9$k$3$H(B +$B$,$G$-$k!#Nc$($P!"(BMew $B$r;HMQ$7$?$$>l9g$O2<5-$N$h$&$K@_Dj$9$k!#(B + + \(setq reporter-mailer '\(mew-send reporter-mail\)\) + +reporter.el 3.2 $B$G$O!"JQ?t(B reporter-mailer $B$,$J$/$J$C$?!#$3$N%P!<%8%g%s$G$O!"(B + + \(setq mail-user-agent 'mew-user-agent\) + +$B$H;XDj$9$k!#(B" + (interactive) + (require 'reporter) + (if (and (boundp 'mail-user-agent) + (eq mail-user-agent 'mew-user-agent) ) + (define-mail-user-agent 'mew-user-agent + 'mew-send 'mew-draft-send-letter 'mew-draft-kill )) + (and (y-or-n-p "Do you really want to submit a report on SKK? ") + (reporter-submit-bug-report + skk-ml-address + (concat "skk.el " (skk-version) + (if (or (and (boundp 'skk-server-host) skk-server-host) + (and (boundp 'skk-servers-list) skk-servers-list) + (getenv "SKKSERVER") + (getenv "SKKSERV") ) + (progn + (require 'skk-server) + (concat ", skkserv; " (skk-server-version) + (if (getenv "SKKSERVER") + (concat ",\nSKKSERVER; " + (getenv "SKKSERVER") )) + (if (getenv "SKKSERV") + (concat ", SKKSERV; " + (getenv "SKKSERV") )))))) + (let ((base (list 'window-system + 'skk-auto-okuri-process + 'skk-auto-start-henkan + 'skk-egg-like-newline + 'skk-henkan-okuri-strictly + 'skk-henkan-strict-okuri-precedence + 'skk-kakutei-early + 'skk-process-okuri-early + 'skk-search-prog-list + 'skk-use-face + 'skk-use-vip ))) + (if (boundp 'skk-henkan-face) + (nconc base '(skk-henkan-face)) ) + (if (boundp 'skk-server-host) + (nconc base '(skk-server-host)) ) + (if (boundp 'skk-server-prog) + (nconc base '(skk-server-prog)) ) + (if (boundp 'skk-servers-list) + (nconc base '(skk-servers-list)) ) + base )))) + +;;;; defadvices. +;; defadvice $B$GDj5A$9$k$H!"8e$G%f!<%6!<$,?75,$N5!G=$rIU$1$F99$K(B defadvice $B$7$F(B +;; $B$b$A$c$s$HF0$/!#(B + +;; cover to original functions. + +(defadvice keyboard-quit (around skk-ad activate) + "$B"'%b!<%I$G$"$l$P!"8uJd$NI=<($r$d$a$F"&%b!<%I$KLa$9(B ($B8+=P$78l$O;D$9(B)$B!#(B +$B"&%b!<%I$G$"$l$P!"8+=P$78l$r:o=|$9$k!#(B +$B>e5-$N$I$A$i$N%b!<%I$G$b$J$1$l$P(B keyboard-quit $B$HF1$8F0:n$r$9$k!#(B" + (cond ((not skk-henkan-on) + (with-current-buffer (skk-minibuffer-origin) + (skk-set-cursor-properly) ) + ad-do-it ) + (skk-henkan-active + (setq skk-henkan-count 0) + (if (and skk-delete-okuri-when-quit skk-henkan-okurigana) + (let ((count (/ (length skk-henkan-okurigana) skk-kanji-len))) + (skk-previous-candidate) + ;; $B$3$3$G$O(B delete-backward-char $B$KBhFs0z?t$rEO$5$J$$J}$,%Y%?!<!)(B + (delete-backward-char count) ) + (skk-previous-candidate) )) + (t (if (> (point) skk-henkan-start-point) + (delete-region (point) skk-henkan-start-point) ) + (skk-kakutei) ))) + +(defadvice abort-recursive-edit (around skk-ad activate) + "$B"'%b!<%I$G$"$l$P!"8uJd$NI=<($r$d$a$F"&%b!<%I$KLa$9(B ($B8+=P$78l$O;D$9(B)$B!#(B +$B"&%b!<%I$G$"$l$P!"8+=P$78l$r:o=|$9$k!#(B +$B>e5-$N$I$A$i$N%b!<%I$G$b$J$1$l$P(B abort-recursive-edit $B$HF1$8F0:n$r$9$k!#(B" + (cond ((not skk-henkan-on) + (with-current-buffer (skk-minibuffer-origin) + (skk-set-cursor-properly) ) + ad-do-it ) + (skk-henkan-active + (setq skk-henkan-count 0) + (if (and skk-delete-okuri-when-quit skk-henkan-okurigana) + (let ((count (/ (length skk-henkan-okurigana) skk-kanji-len))) + (skk-previous-candidate) + ;; $B$3$3$G$O(B delete-backward-char $B$KBhFs0z?t$rEO$5$J$$J}$,%Y%?!<!)(B + (delete-backward-char count) ) + (skk-previous-candidate) )) + (t (if (> (point) skk-henkan-start-point) + (delete-region (point) skk-henkan-start-point) ) + (skk-kakutei) ))) + +(defadvice newline (around skk-ad activate) + (if (not (or skk-j-mode skk-abbrev-mode)) + ad-do-it + (let ((arg (ad-get-arg 0)) + ;; skk-kakutei $B$r<B9T$9$k$H(B skk-henkan-on $B$NCM$,L5>r7o$K(B nil $B$K$J$k(B + ;; $B$N$G!"J]B8$7$F$*$/I,MW$,$"$k!#(B + (no-newline (and skk-egg-like-newline skk-henkan-on)) + (auto-fill-function auto-fill-function) ) + (if (not (interactive-p)) + (setq auto-fill-function nil) ) + (if (skk-kakutei) + ;; skk-do-auto-fill $B$K$h$C$F9T$,@^$jJV$5$l$?$i(B arg $B$r(B 1 $B$D8:$i$9!#(B + ;; fill $B$5$l$F$b(B nil $B$,5"$C$F$/$k(B :-< + (setq arg (1- arg)) ) + (if (not no-newline) + (progn + (ad-set-arg 0 arg) + ad-do-it ))))) + +(defadvice newline-and-indent (around skk-ad activate) + (if (and skk-egg-like-newline skk-henkan-on) + (newline) + ad-do-it)) + +(defadvice exit-minibuffer (around skk-ad activate) + (if (not (or skk-j-mode skk-abbrev-mode)) + ad-do-it + (let ((no-newline (and skk-egg-like-newline skk-henkan-on))) + (if skk-mode (skk-kakutei)) + (or no-newline ad-do-it) ))) + +(defadvice delete-backward-char (around skk-ad activate) + "$B8=:_$N%]%$%s%H$+$iLa$C$F(B COUNT $BJ8;z$r>C5n$9$k!#(B" + (let ((count (or (prefix-numeric-value (ad-get-arg 0)) 1))) + (cond ((and skk-henkan-on (>= skk-henkan-start-point (point))) + (setq skk-henkan-count 0) + (skk-kakutei) ) + (skk-henkan-active + (if (and (not skk-delete-implies-kakutei) + (= skk-henkan-end-point (point)) ) + (skk-previous-candidate) + ;;(if skk-use-face (skk-henkan-face-off)) + ;; overwrite-mode $B$GA43QJ8;zA43QJ8;z$K0O$^$l!"$+$DD>A0$NJ8;z$,A4(B + ;; $B3QJ8;z$G$"$k%]%$%s%H$G(B delete-backward-char $B$r;H$&$H!"A43QJ8;z(B + ;; $B$O>C$9$,H>3QJ8;zJ,$7$+(B backward $BJ}8~$K%]%$%s%H$,La$i$J$$(B + ;; (Emacs 19.31 $B$K$F3NG'(B)$B!#JQ49Cf$N8uJd$KBP$7$F$O(B + ;; delete-backward-char $B$GI,$:A43QJ8;z(B 1 $BJ8;zJ,(B backward $BJ}8~$KLa$C(B + ;; $B$?J}$,NI$$!#(B + (if overwrite-mode + (progn + (backward-char count) + (delete-char count) ) + ad-do-it ) + (if (>= skk-henkan-end-point (point)) (skk-kakutei)) )) + ;; $BF~NOCf$N8+=P$78l$KBP$7$F$O(B delete-backward-char $B$GI,$:A43QJ8;z(B 1 + ;; $BJ8;zJ,(B backward $BJ}8~$KLa$C$?J}$,NI$$!#(B + ((and skk-henkan-on overwrite-mode) + (backward-char count) + (delete-char count) ) + (t ad-do-it) ))) + +(defadvice save-buffers-kill-emacs (before skk-ad activate) + "SKK $B<-=q$r%;!<%V$7$F!"(BEmacs $B$r=*N;$9$k!#(B +$B%;!<%V8e!"(Bskk-before-kill-emacs-hook $B$r<B9T$7$F$+$i(B Emacs $B$r%-%k$9$k!#(B" + ;; defadvice $B$9$k:]!"Ho(B advice $B4X?t$H$O0c$&J}K!$G0z?tEO$7$r$7$?$$>l9g0J30$O!"(B + ;; interactive + descripter $B$OMW$i$J$$$_$?$$!#(B + ;;(interactive "P") + (skk-save-jisyo) + (run-hooks 'skk-before-kill-emacs-hook) ) + +(defadvice picture-mode-exit (before skk-ad activate) + "SKK $B$N%P%C%U%!%m!<%+%kJQ?t$rL58z$K$7!"(Bpicture-mode-exit $B$r%3!<%k$9$k!#(B +picture-mode $B$+$i=P$?$H$-$K$=$N%P%C%U%!$G(B SKK $B$r@5>o$KF0$+$9$?$a$N=hM}!#(B" + (if skk-mode (skk-kill-local-variables)) ) + +(defadvice undo (before skk-ad activate) + "SKK $B%b!<%I$,(B on $B$J$i(B skk-self-insert-non-undo-count $B$r=i4|2=$9$k!#(B" + (if skk-mode + (setq skk-self-insert-non-undo-count 0) )) + +(defadvice kill-buffer (around skk-ad activate) + "SKK $B$N"'%b!<%I$@$C$?$i!"3NDj$7$F$+$i%P%C%U%!$r%-%k$9$k!#(B + $B%P%C%U%!$N%-%k8e!"(BSKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (if skk-mode + (and skk-henkan-on (skk-kakutei)) ) + ad-do-it + ;; $BJL$N%P%C%U%!$XHt$V%3%^%s%I$O(B skk-mode $B$,(B nil $B$G$b%+!<%=%k?'$rD4@0$9$kI,MW(B + ;; $B$,$"$k!#(B + (skk-set-cursor-properly) ) + +(defadvice overwrite-mode (after skk-ad activate) + (if skk-use-cursor-change + (skk-change-cursor-when-ovwrt) )) + +(defadvice eval-expression (before skk-ad activate) + (if skk-mode (skk-mode-off)) ) + +(defadvice query-replace-regexp (before skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (add-hook 'minibuffer-setup-hook 'skk-setup-minibuffer) ) + +(defadvice query-replace (before skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (add-hook 'minibuffer-setup-hook 'skk-setup-minibuffer) ) + +(defadvice goto-line (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (and skk-mode (skk-set-cursor-properly)) ) + +(defadvice yank (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (and skk-mode (skk-set-cursor-properly)) ) + +(defadvice yank-pop (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (and skk-mode (skk-set-cursor-properly)) ) + +(defadvice recenter (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (and skk-mode (skk-set-cursor-properly)) ) + +;; $BJL$N%P%C%U%!$XHt$V%3%^%s%I$O(B skk-mode $B$,(B nil $B$G$b%+!<%=%k?'$rD4@0$9$kI,MW$,(B +;; $B$"$k!#(B +(defadvice bury-buffer (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (skk-set-cursor-properly) ) + +(defadvice switch-to-buffer (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (skk-set-cursor-properly) ) + +;; cover to hilit19 functions. +;; forward advice $B$H(B automatic advice activation $B5!G=$,$"$k$+$i!"(Bhilit19.el +;; $B$N%m!<%IA0$K(B defadvice $B$7$F$bBg>fIW!#(B +;;(if (not (fboundp 'hilit-add-pattern)) +;; nil +(defadvice hilit-yank (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (and skk-mode (skk-set-cursor-properly)) ) + +(defadvice hilit-yank-pop (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (and skk-mode (skk-set-cursor-properly)) ) + +(defadvice hilit-recenter (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (and skk-mode (skk-set-cursor-properly)) ) + +(defadvice execute-extended-command (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (skk-set-cursor-properly) ) + +(defadvice pop-to-buffer (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (skk-set-cursor-properly) ) + +;; abort-recursive-edit $B$G$O!"(Bafter original command $B$X0\9T$9$kA0$K%"%\!<%H(B +;; $B$7$F$7$^$&!#(B +;;(defadvice abort-recursive-edit (after skk-ad activate) +;; "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" +;; (skk-set-cursor-properly) ) +;; +(defadvice abort-recursive-edit (before skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + ;; $BJ#?t$N(B window $B$r3+$$$F$$$k>l9g$J$I$O!"8mF0:n$N2DG=@-$"$j!#(B + (with-current-buffer (skk-minibuffer-origin) + (skk-set-cursor-properly) )) + +(defadvice other-window (after skk-ad activate) + "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B" + (skk-set-cursor-properly) ) + +(if skk-xemacs + ;; XEmacs has minibuffer-keyboard-quit that has nothing to do with delsel. + (defadvice minibuffer-keyboard-quit (around skk-ad activate) + (cond ((or (string= skk-henkan-key "") (not skk-henkan-on)) + (with-current-buffer (skk-minibuffer-origin) + (skk-set-cursor-properly) ) + ad-do-it ) + (skk-henkan-active + (setq skk-henkan-count 0) + (if (and skk-delete-okuri-when-quit skk-henkan-okurigana) + (let ((count (/ (length skk-henkan-okurigana) skk-kanji-len))) + (skk-previous-candidate) + ;; $B$3$3$G$O(B delete-backward-char $B$KBhFs0z?t$rEO$5$J$$J}$,%Y%?!<!)(B + (delete-backward-char count) ) + (skk-previous-candidate) )) + (t (if (> (point) skk-henkan-start-point) + (delete-region (point) skk-henkan-start-point) ) + (skk-kakutei) ))) + (defadvice minibuffer-keyboard-quit (around skk-ad activate) + ;; for delsel.el + (if (and skk-mode + (not (and + delete-selection-mode transient-mark-mode mark-active ))) + (keyboard-quit) + ad-do-it ))) + +;;;; mode setup + +;;;###skk-autoload +(defun skk-mode (&optional arg) + "$BF|K\8lF~NO%b!<%I!#(B +$B%^%$%J!<%b!<%I$N0l<o$G!"%*%j%8%J%k$N%b!<%I$K$O1F6A$rM?$($J$$!#(B +$BIi$N0z?t$rM?$($k$H(B SKK $B%b!<%I$+$iH4$1$k!#(B + +An input mode for Japanese, converting romanized phonetic strings to kanji. + +A minor mode, it should not affect the use of any major mode or +orthogonal minor modes. + +In the initial SKK mode, hiragana submode, the mode line indicator is +$B!V$+$J!W(B. Lowercase romaji entry is automatically converted to +hiragana where possible. The lowercase characters `q' and `l' change +submodes of SKK, and `x' is used as a prefix indicating a small kana. + +`q' is used to toggle between hiragana and katakana (mode line +indicator $B!V%+%J!W(B) entry submodes. + +`l' is used to enter ASCII submode (mode line indicator \"SKK\"). +Uppercase `L' enters zenkaku (wide) ASCII submode (mode line indicator +$B!VA41Q!W(B). `\C-j' returns to hiragana submode from either ASCII submode. + +Kanji conversion is complex, but the basic principle is that the user +signals the appropriate stem to be matched against dictionary keys by +the use of uppercase letters. Because SKK does not use grammatical +information, both the beginning and the end of the stem must be marked. + +For non-inflected words (eg, nouns) consisting entirely of kanji, the +simplest way to invoke conversion is to enter the reading of the kanji, +the first character only in uppercase. A leading $B!V"&!W(B indicates that +kanji conversion is in progress. After entering the reading, press +space. This invokes dictionary lookup, and the hiragana reading will be +redisplayed in kanji as the first candidate. Pressing space again gives +the next candidate. Further presses of space produce further candidates, +as well as a list of the next few candidates in the minibuffer. Eg, +\"Benri\" => $B!V"&$Y$s$j!W(B, and pressing space produces $B!V"'JXMx!W(B (the solid +triangle indicates that conversion is in progress). Backspace steps +through the candidate list in reverse. + +A candidate can be accepted by pressing `\C-j', or by entering a +self-inserting character. (Unlike other common Japanese input methods, +RET not only accepts the current candidate, but also inserts a line +break.) + +Inflected words (verbs and adjectives), like non-inflected words, begin +entry with a capital letter. However, for these words the end of the +kanji string is signaled by capitalizing the next mora. Eg, \"TuyoI\" +=> $B!V"'6/$$!W(B. If no candidate is available at that point, the inflection +point will be indicated with an asterisk \"*\", and trailing characters +will be displayed until a candidate is recognized. It will be +immediately displayed (pressing space is not necessary). Space and +backspace are used to step forward and backward through the list of +candidates. + +For more information, see the `skk' topic in Info. (Japanese only.) + +A tutorial is available in Japanese or English via \"M-x skk-tutorial\". +Use a prefix argument to be prompted for the language. The default is +system-dependent. +" + + (interactive "P") + (setq skk-mode (cond ((null arg) (not skk-mode)) + ;; - $B$O(B -1 $B$KJQ49$5$l$k!#(B + ((> (prefix-numeric-value arg) 0) t) )) + (if (not skk-mode) + ;; exit skk-mode + (progn + (let ((skk-mode t)) (skk-kakutei)) + (skk-mode-off) ) + ;; enter skk-mode + (if (not skk-mode-invoked) + ;; enter skk-mode for the first time in this session + (progn + (setq skk-mode-invoked t) + (skk-setup-init-file) + (load skk-init-file t) + (if skk-keep-record + (skk-create-file + skk-record-file + (if skk-japanese-message-and-error + "SKK $B$N5-O?MQ%U%!%$%k$r:n$j$^$7$?(B" + "I have created an SKK record file for you" ))) + (skk-create-file + skk-jisyo (if skk-japanese-message-and-error + "SKK $B$N6u<-=q$r:n$j$^$7$?(B" + "I have created an empty SKK Jisyo file for you" )) + (skk-get-jisyo-buffer skk-jisyo 'nomsg) )) + ;;$B0J2<$O(B skk-mode $B$KF~$k$?$S$KKhEY%3!<%k$5$l$k%3!<%I!#(B + ;;(if (boundp 'disable-undo) + ;; (make-local-variable 'disable-undo) ) + (cond (skk-use-vip (skk-vip-mode)) + (skk-use-viper + (require 'skk-viper) + (funcall skk-viper-normalize-map-function) )) + (if (and (not (featurep 'skk-server)) + (or (and (boundp 'skk-server-host) skk-server-host) + (and (boundp 'skk-servers-list) skk-servers-list) + (getenv "SKKSERVER") + (getenv "SKKSERV") )) + (require 'skk-server) ) + ;; $B%f!<%6!<JQ?t$K4X$9$k$b$N$O!"%f!<%6!<$,$$$D!"$=$l$i$NJQ?t$rJQ99$9$k$+M=(B + ;; $BB,$,IU$+$J$$$N$G!"(Bskk-mode $B$KF~$k$?$S$K@_Dj$7$J$*$7$F$$$k!#(B + (if (featurep 'skk-server) + ;; skk-search-server $B$O%5!<%P!<$,Mn$A$F$b;H$($k$N$G!"30$5$J$$!#(B + (skk-adjust-search-prog-list-for-server-search 'non-del) ) + (if skk-auto-okuri-process + (skk-adjust-search-prog-list-for-auto-okuri) ) + (if skk-use-relation + (progn + (require 'skk-attr) + (setq skk-search-prog-list + (cons '(skk-search-relation) skk-search-prog-list) ))) + (skk-setup-delete-selection-mode) + (skk-setup-special-midashi-char) + (skk-setup-auto-paren) + (skk-adjust-user-option) + (define-key minibuffer-local-map skk-kakutei-key 'skk-kakutei) + ;;(define-key minibuffer-local-map "\C-m" 'skk-newline) + (define-key minibuffer-local-completion-map skk-kakutei-key 'skk-kakutei) + ;;(define-key minibuffer-local-completion-map "\C-m" 'skk-newline) + ;; XEmacs doesn't have minibuffer-local-ns-map + (if (boundp 'minibuffer-local-ns-map) + ;;(define-key minibuffer-local-ns-map "\C-m" 'skk-newline) + (define-key minibuffer-local-ns-map skk-kakutei-key 'skk-kakutei) ) + (skk-j-mode-on) + (run-hooks 'skk-mode-hook) )) + +;;;###skk-autoload +(defun skk-auto-fill-mode (&optional arg) + "$BF|K\8lF~NO%b!<%I!#<+F0@^$jJV$75!G=IU$-!#(B +$B%^%$%J!<%b!<%I$N0l<o$G!"%*%j%8%J%k$N%b!<%I$K$O1F6A$rM?$($J$$!#(B +$B@5$N0z?t$rM?$($k$H!"6/@)E*$K(B auto-fill-mode $B5Z$S(B SKK $B%b!<%I$KF~$k!#(B +$BIi$N0z?t$rM?$($k$H(B auto-fill-mode $B5Z$S(B SKK $B%b!<%I$+$iH4$1$k!#(B" + (interactive "P") + (let ((auto-fill + (cond ((null arg) (not auto-fill-function)) + ((> (prefix-numeric-value arg) 0) t) ))) + (auto-fill-mode (if auto-fill 1 -1)) + (skk-mode arg) + (skk-set-cursor-color (if skk-mode + skk-hirakana-cursor-color + skk-default-cursor-color )) + (run-hooks 'skk-auto-fill-mode-hook) )) + +(defun skk-kill-emacs-without-saving-jisyo (&optional query) + "SKK $B<-=q$r%;!<%V$7$J$$$G!"(BEmacs $B$r=*N;$9$k!#(B +skk-before-kill-emacs-hook $B$r<B9T$7$F$+$i(B Emacs $B$r%-%k$9$k!#(B" + (interactive "P") + ;; format $B$r0z?t$K;}$?$;$?>l9g$O!"(Bskk-yes-or-no-p $B$r;H$&$H$+$($C$F>iD9$K$J$k!#(B + (if (yes-or-no-p + (format (if skk-japanese-message-and-error + "$B<-=q$NJ]B8$r$;$:$K(B %s $B$r=*N;$7$^$9!#NI$$$G$9$+!)(B" + "Do you really wish to kill %s without saving Jisyo? " ) + (cond (skk-mule "Mule") + (skk-xemacs "XEmacs") + (t "Emacs") ))) + (let ((buff (skk-get-jisyo-buffer skk-jisyo 'nomsg))) + (if buff + (progn (set-buffer buff) + (set-buffer-modified-p nil) + (kill-buffer buff) )) + (run-hooks 'skk-before-kill-emacs-hook) + (ad-remove-advice 'save-buffers-kill-emacs 'before 'skk-ad) + (ad-activate 'save-buffers-kill-emacs) + (save-buffers-kill-emacs query) ))) + +(defun skk-setup-init-file () + ;; skk-byte-compile-init-file $B$,(B non-nil $B$N>l9g$G!"(Bskk-init-file $B$r%P%$%H%3(B + ;; $B%s%Q%$%k$7$?%U%!%$%k$,B8:_$7$J$$$+!"$=$N%P%$%H%3%s%Q%$%k:Q%U%!%$%k$h$j(B + ;; skk-init-file $B$NJ}$,?7$7$$$H$-$O!"(Bskk-init-file $B$r%P%$%H%3%s%Q%$%k$9$k!#(B + ;; + ;; skk-byte-compile-init-file $B$,(B nil $B$N>l9g$G!"(Bskk-init-file $B$r%P%$%H%3%s%Q(B + ;; $B%$%k$7$?%U%!%$%k$h$j(B skk-init-file $B$NJ}$,?7$7$$$H$-$O!"$=$N%P%$%H%3%s%Q%$(B + ;; $B%k:Q%U%!%$%k$r>C$9!#(B + (save-match-data + (let* ((init-file (expand-file-name skk-init-file)) + (elc (concat init-file + (if (string-match "\\.el$" init-file) + "c" + ".elc" )))) + (if skk-byte-compile-init-file + (if (and (file-exists-p init-file) + (or (not (file-exists-p elc)) + (file-newer-than-file-p init-file elc) )) + (save-window-excursion ;; for keep window configuration. + (skk-message "%s $B$r%P%$%H%3%s%Q%$%k$7$^$9!#(B" + "Byte-compile %s" + skk-init-file ) + (sit-for 2) + (byte-compile-file init-file) )) + (if (and (file-exists-p init-file) + (file-exists-p elc) + (file-newer-than-file-p init-file elc) ) + (delete-file elc) ))))) + +;; +;;(skk-setup-special-midashi-char skk-minibuff-map) + +;;;###skk-autoload +(defun skk-emulate-original-map (arg) + ;; $B%-!<F~NO$KBP$7$F!"(BSKK $B$N%b!<%I$G$O$J$/!"(BEmacs $B$N%*%j%8%J%k$N%-!<3d$jIU$1$G(B + ;; $B%3%^%s%I$r<B9T$9$k!#(B + (let ((prefix-arg arg) + (keys (skk-command-key-sequence (this-command-keys) this-command)) ) + (if (not keys) + ;; no alternative commands. may be invoked by M-x. + nil + (let (skk-mode skk-ascii-mode skk-j-mode skk-abbrev-mode skk-zenkaku-mode + command ) + (setq command (key-binding keys)) + (if (eq command this-command) + ;; avoid recursive calling of skk-emulate-original-map. + nil + ;; if no bindings are found, call `undefined'. it's + ;; original behaviour. + (skk-cancel-undo-boundary) + (command-execute (or command (function undefined)))))))) + +(defun skk-command-key-sequence (key command) + ;; KEY $B$+$i(B universal arguments $B$r<h$j=|$-!"(BCOMMAND $B$r<B9T$9$k%-!<$rJV$9!#(B + ;; `execute-extended-command' $B$K$h$C$F%3%^%s%I$,<B9T$5$l$?>l9g$O!"(Bnil $B$rJV$9!#(B + (while (not (or (zerop (length key)) + (eq command (key-binding key)))) + (setq key (vconcat (cdr (append key nil))))) + (and (not (zerop (length key))) key)) + +(defun skk-setup-special-midashi-char () + ;; skk-special-midashi-char-list $B$K;XDj$5$l$?(B char $B$r(B skk-j-mode-map $B$N(B + ;; skk-set-henkan-point $B$K3d$jIU$1$k!#(Bskk-special-midashi-char-list $B$K;XDj$5(B + ;; $B$l$?(B char $B$G!"@\F,<-!"@\Hx<-$NF~NO$r2DG=$K$9$k$?$a$N=hM}!#(B + (let ((strlist (mapcar 'char-to-string skk-special-midashi-char-list)) + ;; Use default-value for Viper. It localizes minor-mode-map-alist. + (map (cdr (assq 'skk-j-mode (default-value 'minor-mode-map-alist)))) + str ) + (while strlist + (setq str (car strlist)) + (if (not (eq 'skk-set-henkan-point (lookup-key map str))) + (define-key map str 'skk-set-henkan-point) ) + (setq strlist (cdr strlist)) ))) + +(defun skk-setup-delete-selection-mode () + ;; Delete Selection $B%b!<%I$,(B SKK $B$r;H$C$?F|K\8lF~NO$KBP$7$F$b5!G=$9$k$h$&$K(B + ;; $B%;%C%H%"%C%W$9$k!#(B + (if (and (featurep 'delsel) + (not (get 'skk-insert-a 'delete-selection)) ) + (progn + ;;(put 'skk-delete-backward-char 'delete-selection 'supersede) + (mapcar (function (lambda (func) (put func 'delete-selection t))) + '(skk-input-by-code-or-menu + skk-insert-comma + skk-insert-period + skk-kana-input + ;;skk-newline + ;;skk-set-henkan-point-subr + skk-set-henkan-point + skk-self-insert + skk-today ))))) + +(defun skk-setup-auto-paren () + ;; skk-auto-paren-string-alist $B$NCf$+$i!"(Bskk-special-midashi-char-list + ;; $B$NMWAG$K4XO"$9$k$b$N$r<h$j=|$/!#(B + ;; $B$^$?!"(Bskk-auto-paren-string-alist $B$N3FMWAG$N(B car $B$NJ8;z$,(B ascii char $B$G$"(B + ;; $B$k>l9g$O!"(Bskk-input-vector $B$N3:Ev$N>l=j(B ($B$=$N(B ascii char $B$rI>2A$7$??t$,%$(B + ;; $B%s%G%/%9$H$J$k(B) $B$K$=$NJ8;z$r=q$-9~$`(B ($BK\Mh$O(B ascii char $B$O(B + ;; skk-input-vector $B$K=q$/I,MW$,$J$$$,!"(Bskk-auto-paren-string-alist $B$K;XDj$5(B + ;; $B$l$?BP$K$J$kJ8;z$NA^F~$N$?$a$K$O!"%-!<$H$J$kJ8;z$r=q$$$F$*$/I,MW$,$"$k(B)$B!#(B + (if (null skk-auto-paren-string-alist) + nil + (let ((strlist (mapcar 'char-to-string skk-special-midashi-char-list)) + cell str alist ) + (while strlist + (setq cell (assoc (car strlist) skk-auto-paren-string-alist)) + (if cell + ;; assoc $B$GCj=P$7$?(B cell $B$rD>@\;XDj$7$F$$$k$N$G!"(Bdelete $B$G$J$/$H$bBg(B + ;; $B>fIW!#(B + (setq skk-auto-paren-string-alist + (delq cell skk-auto-paren-string-alist) )) + (setq strlist (cdr strlist)) ) + (setq alist skk-auto-paren-string-alist) + (while alist + (setq str (car (car alist))) + (if (and (eq (string-width str) 1) + ;; $B4{$K%f!<%6!<$,;XDj$7$F$$$k>l9g$O!"$I$s$JJ8;z$G$"$C$F$b(B ($B%-!<(B + ;; $B$H$J$kJ8;z$H$O0c$C$F$$$F$b(B)$B!"2?$b$7$J$$!#(B + (not (aref skk-input-vector (string-to-char str))) ) + (aset skk-input-vector (string-to-char str) str) ) + (setq alist (cdr alist)) )))) + +(defun skk-adjust-user-option () + ;; $BN>N)$G$-$J$$%*%W%7%g%s$ND4@0$r9T$J$&!#(B + (if skk-process-okuri-early + ;; skk-process-okuri-early $B$NCM$,(B non-nil $B$G$"$k$H$-$K2<5-$NCM$,(B non-nil + ;; $B$G$"$l$P@5>o$KF0$+$J$$$N$G$3$NJQ?t$NM%@h=g0L$r9b$/$7$?!#(B + (setq skk-kakutei-early nil + skk-auto-okuri-process nil + skk-henkan-okuri-strictly nil + skk-henkan-strict-okuri-precedence nil))) + +(defun skk-try-completion (arg) + "$B"&%b!<%I$G8+=P$78l$NJd40$r9T$&!#(B +$B$=$l0J30$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$N%3%^%s%I$r%(%_%e%l!<%H$9$k!#(B" + (interactive "P") + (if (and skk-henkan-on (not skk-henkan-active)) + (progn + (setq this-command 'skk-completion) + (skk-completion (not (eq last-command 'skk-completion))) ) + (skk-emulate-original-map arg) )) + +(defun skk-ascii-mode () + "SKK $B$N%b!<%I$r(B ascii $B%b!<%I$KJQ99$9$k!#(B" + (interactive) + (skk-kakutei) + (skk-ascii-mode-on) ) + +(defun skk-zenkaku-mode () + "SKK $B$N%b!<%I$rA43Q1Q;zF~NO%b!<%I$KJQ99$9$k!#(B" + (interactive) + (skk-kakutei) + (skk-zenkaku-mode-on) ) + +(defun skk-abbrev-mode () + "ascii $BJ8;z$r%-!<$K$7$?JQ49$r9T$&$?$a$NF~NO%b!<%I!#(B" + (interactive "*") + (if (and skk-henkan-on (not skk-henkan-active)) + (skk-error "$B4{$K"&%b!<%I$KF~$C$F$$$^$9(B" "Already in $B"&(B mode") ) + (skk-kakutei) + (skk-set-henkan-point-subr) + (skk-abbrev-mode-on) ) + +(defun skk-toggle-kana (arg) + "$B$R$i$,$J%b!<%I$H%+%?%+%J%b!<%I$r%H%0%k$G@Z$jBX$($k!#(B +$B%+%?%+%J%b!<%I$GJQ49$r9T$J$&$H$-$K!"Aw$j2>L>$r%+%?%+%J$KJQ49$7$?$/$J$$$H$-$O!"(B +skk-convert-okurigana-into-katakana $B$NCM$r(B non-nil $B$K$9$k!#(B + +$B"&%b!<%I$G$O!"(Bskk-henkan-start-point ($B"&$ND>8e(B) $B$H%+!<%=%k$N4V$NJ8;zNs$r(B + + $B$R$i$,$J(B <=> $B%+%?%+%J(B + $BA43Q1Q?t;z(B <=> ascii + +$B$N$h$&$KJQ49$9$k!#(B" + (interactive "P") + (cond ((and skk-henkan-on (not skk-henkan-active)) + (let (char) + (skk-save-point + (goto-char skk-henkan-start-point) + ;; "$B!<(B" $B$G$OJ8;z<oJL$,H=JL$G$-$J$$$N$G!"%]%$%s%H$r?J$a$k!#(B + (while (looking-at "$B!<(B") + (skk-forward-char 1) ) + (setq char (skk-what-char-type)) ) + (skk-set-marker skk-henkan-end-point (point)) + (cond ((eq char 'hirakana) + (skk-katakana-henkan arg) ) + ((eq char 'katakana) + (skk-hiragana-henkan arg) ) + ((eq char 'ascii) + (skk-zenkaku-henkan arg) ) + ((eq char 'zenkaku) + (skk-ascii-henkan arg) )))) + ((and (skk-in-minibuffer-p) (not skk-j-mode)) + ;; $B%_%K%P%C%U%!$X$N=iFMF~;~!#(B + (skk-j-mode-on) ) + (t (setq skk-katakana (not skk-katakana))) ) + (skk-kakutei) + (if skk-katakana + (progn + (setq skk-input-mode-string skk-katakana-mode-string) + (skk-set-cursor-color skk-katakana-cursor-color) ) + (setq skk-input-mode-string skk-hirakana-mode-string) + (skk-set-cursor-color skk-hirakana-cursor-color) ) + (force-mode-line-update) ) + +(defun skk-misc-for-picture () + ;; picture-mode $B$XF~$C$?$H$-$K(B SKK $B$r@5>o$KF0$+$9$?$a$KI,MW$J=hM}$r9T$J$&!#(B + ;; edit-picture-hook $B$K(B add-hook $B$7$F;HMQ$9$k!#(B + ;; + ;; picture-mode $B$G(B SKK $B$r;HMQ$74A;zF~NO$r$7$?>l9g$K!"(BBS $B$GA43QJ8;z$,>C$;$J$$(B + ;; $B$N$O!"(BSKK $B$NIT6q9g$G$O$J$/!"(Bpicture.el $B$NLdBj(B (move-to-column-force $B4X?t(B + ;; $B$NCf$G;HMQ$7$F$$$k(B move-to-column $B$GA43QJ8;z$rL5;k$7$?%+%i%`?t$,M?$($i$l(B + ;; $B$?$H$-$K%+!<%=%k0\F0$,$G$-$J$$$+$i(B) $B$G$"$k!#>C$7$?$$J8;z$K%]%$%s%H$r9g$o(B + ;; $B$;!"(BC-c C-d $B$G0lJ8;z$E$D>C$9$7$+J}K!$O$J$$!#(B + (if skk-mode + ;; SKK $B5/F0A0$N>uBV$KLa$9!#(B + (skk-kill-local-variables) )) + +(defun skk-kill-local-variables () + ;; SKK $B4XO"$N%P%C%U%!%m!<%+%kJQ?t$rL58z$K$9$k!#(B + ;; $B4{B8$N%P%C%U%!$r(B picture mode $B$K$7$?$H$-!"(Bpicture-mode $B4X?t$O(B + ;; kill-all-local-variables $B4X?t$r8F$P$J$$$N$G!"(BSKK $B4XO"$N%P%C%U%!%m!<%+%k(B + ;; $BJQ?t$,85$N%P%C%U%!$NCM$N$^$^$K$J$C$F$7$^$&!#$=$3$G!"(Bpicture mode $B$KF~$C$?(B + ;; $B$H$-$K%U%C%/$rMxMQ$7$F$3$l$i$N%P%C%U%!%m!<%+%kJQ?t$r(B kill $B$9$k!#(B + ;; RMS $B$O(B picture-mode $B$G(B kill-all-local-variables $B4X?t$r8F$P$J$$$N$O!"%P%0(B + ;; $B$G$O$J$$!"$H8@$C$F$$$?!#(B + (if (eq (nth 1 mode-line-format) 'skk-mode-line) + (setq mode-line-format (delq 'skk-mode-line mode-line-format) )) + (let ((lv (buffer-local-variables)) + v vstr ) + (while lv + (setq v (car (car lv)) + lv (cdr lv) + vstr (prin1-to-string v) ) + (if (and + (> (length vstr) 3) (string= "skk-" (substring vstr 0 4)) ) + (kill-local-variable v) )))) + +;;;; kana inputting functions + +(defun skk-insert (table) + ;; skk-prefix $B$r%-!<$H$7$F!"O"A[%j%9%H(B TABLE $B$+$iJ8;zNs$rC5$7$FF~NO$9$k!#(B + (let ((char (assoc skk-prefix table))) + (if (null char) + (progn + ;; skk-prefix not found in the table + (setq skk-prefix "") + (skk-unread-event (skk-character-to-event last-command-char)) ) + (if (and skk-henkan-active skk-kakutei-early + (not skk-process-okuri-early) ) + (skk-kakutei) ) + (skk-insert-str (if skk-katakana (nthcdr 2 char) (nth 1 char))) + (if skk-okurigana + (skk-set-okurigana) + (setq skk-prefix "") ) + (if (not skk-henkan-on) (skk-do-auto-fill)) ))) + +(defun skk-insert-str (str) + ;; skk-insert $B$N%5%V%k!<%A%s!#(BSTR $B$rA^F~$9$k!#I,MW$G$"$l$P(B + ;; self-insert-after-hook $B$r%3!<%k$9$k!#(Boverwrite-mode $B$G$"$l$P!"E,@Z$K>e=q$-(B + ;; $B$r9T$&!#$3$N4X?t$O!"(Bskk-vip.el $B$G>e=q$-$5$l$k(B + (skk-cancel-undo-boundary) + (skk-insert-and-inherit str) + (if (and skk-henkan-on (not skk-henkan-active)) + (if (and skk-auto-start-henkan (not skk-okurigana)) + (skk-auto-start-henkan str) ) + (if (and (boundp 'self-insert-after-hook) self-insert-after-hook) + (funcall self-insert-after-hook (- (point) (length str)) (point)) ) + (if overwrite-mode + (skk-del-char-with-pad (skk-ovwrt-len (string-width str))) ))) + +(defun skk-auto-start-henkan (str) + ;; skk-auto-start-henkan-keyword-list $B$NMWAG$NJ8;zNs$rA^F~$7$?$H$-$K<+F0E*$K(B + ;; ($B%9%Z!<%9$rBG80$7$J$/$H$b(B) $BJQ49$r3+;O$9$k!#%(!<!_%$%=%U%H<R$N(B MSDOS $BMQ(B $B$N(B + ;; FEP$B!"(BWX2+ $BIw!#(B + (if (member str skk-auto-start-henkan-keyword-list) + (skk-save-point + (skk-backward-char 1) + (if (> (point) skk-henkan-start-point) + (let ((skk-prefix "")) + (skk-start-henkan (prefix-numeric-value current-prefix-arg)) ))))) + +(defun skk-ovwrt-len (len) + ;; $B>e=q$-$7$FNI$$D9$5$rJV$9!#(B + ;; $B$3$N4X?t$O!"(Bskk-vip.el $B$G>e=q$-$5$l$k(B (<(skk-vip.el/skk-ovwrt-len)>)$B!#(B + (min (string-width + (skk-buffer-substring (point) (skk-save-point (end-of-line) (point))) ) + len )) + +(defun skk-del-char-with-pad (length) + ;; $BD9$5(B LENGTH $B$NJ8;z$r>C5n$9$k!#D4@0$N$?$a!"I,MW$G$"$l$P!"KvHx$K%9%Z!<%9$r(B + ;; $BA^F~$9$k!#(B + (let ((p (point)) (len 0)) + (while (< len length) + (forward-char 1) + (setq len (string-width (skk-buffer-substring (point) p)))) + (delete-region p (point)) + (or (eq length len) + (progn + (insert " ") + (backward-char 1))))) + +(defun skk-cancel-undo-boundary () + ;; skk-insert-[aiue], skk-insert-comma, skk-insert-period, skk-kana-input, + ;; skk-self-insert, skk-set-henkan-point, skk-zenkaku-insert $B$GO"B3$7$FF~NO(B + ;; $B$5$l$?(B 20 $BJ8;z$r(B 1 $B2s$N%"%s%I%%$NBP>]$H$9$k!#(B`20' $B$O(B keyboard.c $B$KDj$a$i(B + ;; $B$l$?%^%8%C%/%J%s%P!<!#(BMule-2.3 $BE:IU$N(B egg.el $B$r;29M$K$7$?!#(B + (if (and (< skk-self-insert-non-undo-count 20) + (memq last-command + '( + ;; SKK abbrev $B%b!<%I$G$O!"%"%9%-!<J8;zF~NO$,(B Emacs $B%*%j%8%J(B + ;; $B%k$N(B self-insert-command $B$K$h$j9T$J$o$l$F$$$k$N$G!"(B + ;; skk-self-insert-non-undo-count $B$r%$%s%/%j%a%s%H$9$k$3$H(B + ;; $B$,$G$-$J$$$N$G!"%"%s%I%%$r%(%_%e%l!<%H$G$-$J$$!#(B + ;; $B$7$+$b!"%+%s%^$d%T%j%*%I$rA^F~$7$?;~E@$G!"(B + ;; skk-abbrev-comma $B$d(B skk-abbrev-period $B$r;H$&$3$H$K$J$k$N(B + ;; $B$G!"%*%j%8%J%k$N%"%s%I%%$N5!G=$bB;$J$C$F$7$^$&!#8=<BLdBj(B + ;; $B$H$7$F$O!"(BSKK abbrev $B%b!<%I$O>JN,7A$H$7$F$N8+=P$78l$rA^(B + ;; $BF~$9$k$?$a$N%b!<%I$G$"$k$N$G!"D9$$8+=P$78l$rA^F~$9$k$3$H(B + ;; $B$O$"$^$j$J$/!"LdBj$b>.$5$$$H9M$($i$l$k!#(B + ;;skk-abbrev-comma + ;;skk-abbrev-period + skk-insert-comma + skk-insert-period + skk-kana-input + skk-self-insert + ;;skk-set-henkan-point + skk-zenkaku-insert ))) + (progn + (cancel-undo-boundary) + (setq skk-self-insert-non-undo-count + (1+ skk-self-insert-non-undo-count) )) + (setq skk-self-insert-non-undo-count 1) )) + +(defun skk-get-next-rule (prefix) + (or (if (and (boundp 'skk-rom-kana-rule-tree) + skk-rom-kana-rule-tree ) + (skk-assoc-tree prefix + skk-rom-kana-rule-tree ) + (cdr (assoc prefix skk-rom-kana-rule-list)) ) + (if (and (boundp 'skk-standard-rom-kana-rule-tree) + skk-standard-rom-kana-rule-tree) + (skk-assoc-tree prefix + skk-standard-rom-kana-rule-tree ) + (cdr (assoc prefix skk-standard-rom-kana-rule-list)) ))) + +(defun skk-get-fallback-rule (prefix) + (cdr (assoc prefix skk-fallback-rule-alist)) ) + +(defun skk-check-postfix-rule (last) + (let ((l skk-postfix-rule-alist) + ret) + (while l + (if (eq (string-to-char last) (string-to-char (car (car l)))) + (setq ret (cons (car l) ret)) ) + (setq l (cdr l)) ) + ret )) + +(defun skk-get-postfix-rule (prefix &optional alist) + (let ((alist (or alist skk-postfix-rule-alist))) + (cdr (assoc prefix alist)) )) + +(defun skk-kana-input () + "$B$+$JJ8;z$NF~NO$r9T$&%k!<%A%s!#(B" + (interactive "*") + (combine-after-change-calls + (if (and skk-henkan-active + skk-kakutei-early (not skk-process-okuri-early) ) + (skk-kakutei) ) + (let ((echo-keystrokes 0) + ;; don't echo key strokes in the minibuffer. + last-input + last-kana ) + (if skk-isearch-message (skk-isearch-message)) + (setq skk-prefix "") + (skk-set-marker skk-kana-start-point (point)) + (skk-unread-event (skk-character-to-event last-command-char)) + (condition-case nil + (let ((cont t) + prev ) + (while cont + (let* ((raw-event (skk-read-event)) + ;; ascii equivallence of raw-event or nil. + (r-char (skk-event-to-character raw-event)) + input + prefix + next + low ) + (if skk-debug (message "%S" r-char)) + (if r-char + (progn + (if (and + (or (and + skk-henkan-on (not skk-henkan-active) + (= skk-henkan-start-point + skk-kana-start-point )) + (and + skk-okurigana + (= (1+ skk-okurigana-start-point) + ;; "*" + skk-kana-start-point ))) + (not (eq r-char (skk-downcase r-char))) ) + ;; this case takes care of the rare case where + ;; one types two characters in upper case + ;; consequtively. For example, one sometimes + ;; types "TE" when one should type "Te" + (setq r-char (skk-downcase r-char) + raw-event (skk-character-to-event r-char) )) + (setq input (skk-char-to-string r-char) + last-input input + prefix (concat skk-prefix input) + next (skk-get-next-rule prefix) ))) + (if skk-debug (message "%S" next)) + (if skk-isearch-message (skk-isearch-message)) + (if next + (let ((newprefix (car next)) + (output (nth 1 next)) ) + (setq low (nth 2 next)) + (skk-erase-prefix) + (if output + (progn + (setq last-kana + (if skk-katakana (car output) (cdr output))) + ;; XXX for isearch + (skk-insert-str last-kana) + (if skk-okurigana (skk-set-okurigana)))) + (if newprefix + (progn + (skk-set-marker skk-kana-start-point (point)) + (skk-insert-prefix newprefix) + (setq skk-prefix newprefix)) + (setq cont nil + skk-prefix "" ))) + (let ((type (skk-kana-input-char-type + (or r-char (skk-event-to-character raw-event))))) + (cond ((eq type 5) ; delete prefix + (setq cont nil) + (if skk-okurigana + (progn + (skk-delete-okuri-mark) + (skk-set-marker skk-kana-start-point + skk-okurigana-start-point ))) + (or (string= skk-prefix "") + (if skk-echo + (skk-erase-prefix) + (skk-message "$B%W%l%U%#%C%/%9(B \"%s\" $B$r>C$7$^$7$?(B" + "Deleted prefix \"%s\"" + skk-prefix ))) + (setq skk-prefix "") ) + (t + (if (string= skk-prefix "") + (progn + (skk-message + "$BE,@Z$J%m!<%^;z$+$JJQ49%k!<%k$,$"$j$^$;$s!#(B" + "No suitable rule." ) + (skk-set-marker skk-kana-start-point nil) + (setq cont nil) ) + (skk-erase-prefix) + (let ((output (skk-get-fallback-rule skk-prefix))) + (if output + (progn + (setq last-kana + (if skk-katakana + (car output) (cdr output))) + ;; XXX for isearch + (skk-insert-str last-kana) + (if skk-okurigana (skk-set-okurigana)) )) + (skk-unread-event raw-event) + (skk-set-marker skk-kana-start-point nil) + (setq skk-prefix "") + (setq cont nil) )) + + ))) + ) + ))) + (quit + (setq skk-prefix "") + (skk-erase-prefix) + (skk-set-marker skk-kana-start-point nil) + (keyboard-quit) )) + (let ((postfix-rules (skk-check-postfix-rule last-input))) + (if postfix-rules + (progn + (let ((prefix last-kana)) + (if skk-isearch-message (skk-isearch-message))) + (let* ((raw-event (skk-read-event)) + ;; ascii equivallence of raw-event or nil. + (r-char (skk-event-to-character raw-event)) ) + (if r-char + (let ((new-char + (skk-get-postfix-rule + (concat last-input (skk-char-to-string r-char)) + postfix-rules )) + prefix ) + (if new-char + (progn + (setq skk-prefix (skk-char-to-string r-char)) + (skk-set-marker skk-kana-start-point (point)) + (skk-insert-prefix skk-prefix) + ;; XXX for isearch + (setq prefix (concat last-kana skk-prefix)) + (if skk-isearch-message (skk-isearch-message)) + (condition-case nil + (let* ((raw-event2 (skk-read-event)) + (r-char2 (skk-event-to-character raw-event2)) + (type (skk-kana-input-char-type r-char2)) + (prefix (concat skk-prefix + (skk-char-to-string r-char2))) + (next (skk-get-next-rule prefix) )) + (cond (next + ;; rule $B$,$"$k!#(B + (setq skk-prefix "") + (skk-erase-prefix) + (skk-set-marker skk-kana-start-point nil) + (skk-unread-event raw-event2) + (skk-unread-event raw-event) ) + ((eq type 5) + ;; delete + (setq skk-prefix "") + (skk-erase-prefix) + (skk-set-marker skk-kana-start-point nil) ) + (t + (skk-erase-prefix) + (skk-insert-str + (if skk-katakana + (car new-char) + (cdr new-char))) + (skk-unread-event raw-event2) ))) + (quit + (setq skk-prefix "") + (skk-erase-prefix) + (skk-set-marker skk-kana-start-point nil) + (skk-unread-event raw-event) + (keyboard-quit) ))) + (skk-unread-event raw-event) )) + (skk-unread-event raw-event) ))))) + ))) + +(defun skk-translate-okuri-char (okurigana) + (if skk-okuri-char-alist + (cdr (assoc (skk-substring-head-character okurigana) skk-okuri-char-alist)) )) + +(defun skk-set-okurigana () + ;; $B8+=P$78l$+$i(B skk-henkan-okurigana, skk-henkan-key $B$N3FCM$r%;%C%H$9$k!#(B + (if skk-katakana + (skk-hiragana-region skk-henkan-start-point (point)) ) + (skk-set-marker skk-henkan-end-point skk-okurigana-start-point) + ;; just in case + (skk-save-point + (goto-char skk-okurigana-start-point) + (if (not (eq (following-char) ?*)) ;?* + (insert "*") )) + (setq skk-henkan-okurigana (skk-buffer-substring + (1+ skk-okurigana-start-point) + (point) )) + (setq skk-henkan-key (concat (skk-buffer-substring skk-henkan-start-point + skk-henkan-end-point ) + (or (skk-translate-okuri-char + skk-henkan-okurigana) + skk-okuri-char )) + skk-prefix "" ) + (if skk-debug + (message "%S %S %S" skk-henkan-okurigana skk-henkan-key skk-okuri-char) ) + (delete-region skk-okurigana-start-point (1+ skk-okurigana-start-point)) + (setq skk-henkan-count 0) + (skk-henkan) + (setq skk-okurigana nil) + (cancel-undo-boundary) ) + +;;;; other inputting functions + +(defun skk-insert-period (count) + "$B8+=P$7$NJd40$r9T$C$F$$$k:GCf$G$"$l$P!"<!$N8uJd$rI=<($9$k!#(B +$BJd40$ND>8e$G$J$1$l$P!"(B\".\" $B$rA^F~$9$k!#(B +SKK abbrev $B%b!<%I$G$O!"(Bskk-abbrev-period $B4X?t$r;HMQ$9$k$3$H!#(B" + (interactive "*P") + (if (and (eq last-command 'skk-completion) (not skk-henkan-active)) + (progn + (setq this-command 'skk-completion) + (skk-completion nil) ) + (skk-self-insert count) + (setq skk-last-henkan-result nil) + (skk-set-marker skk-last-henkan-point nil) )) + +(defun skk-insert-comma (count) + "$B8+=P$7$NJd40$r9T$C$F$$$k:GCf$G$"$l$P!"D>A0$N8uJd$rI=<($9$k!#(B +$BJd40$ND>8e$G$J$1$l$P!"(B\",\" $B$rA^F~$9$k!#(B +SKK abbrev $B%b!<%I$G$O!"(Bskk-abbrev-comma $B4X?t$r;HMQ$9$k$3$H!#(B" + (interactive "*P") + (if (and (eq last-command 'skk-completion) (not skk-henkan-active)) + (skk-previous-completion) + (skk-self-insert count) )) + +(defun skk-abbrev-period (arg) + "SKK abbrev $B%b!<%I$G8+=P$7$NJd40$r9T$C$F$$$k:GCf$G$"$l$P!"<!$N8uJd$rI=<($9$k!#(B +$BJd40$ND>8e$G$J$1$l$P!"%*%j%8%J%k$N%-!<3d$jIU$1$N%3%^%s%I$r%(%_%e%l!<%H$9$k!#(B +SKK abbrev $B%b!<%I0J30$G$O!"(Bskk-insert-period $B4X?t$r;HMQ$9$k$3$H!#(B" + (interactive "*P") + (if (eq last-command 'skk-completion) + (progn + (setq this-command 'skk-completion) + (skk-completion nil) ) + (skk-emulate-original-map arg) )) + +(defun skk-abbrev-comma (arg) + "SKK abbrev $B%b!<%I$G8+=P$7$NJd40$r9T$C$F$$$k:GCf$G$"$l$P!"D>A0$N8uJd$rI=<($9$k!#(B +$BJd40$ND>8e$G$J$1$l$P!"%*%j%8%J%k$N%-!<3d$jIU$1$N%3%^%s%I$r%(%_%e%l!<%H$9$k!#(B +SKK abbrev $B%b!<%I0J30$G$O!"(Bskk-insert-comma $B4X?t$r;HMQ$9$k$3$H!#(B" + (interactive "*P") + (if (eq last-command 'skk-completion) + (skk-previous-completion) + (skk-emulate-original-map arg) )) + +(defun skk-self-insert (arg) + "$B$R$i$,$J!"%+%?%+%J!"$b$7$/$O(B ascii $BJ8;z$r%+%l%s%H%P%C%U%!$KA^F~$9$k!#(B +$B$R$i$,$J%b!<%I$b$7$/$O%+%?%+%J%b!<%I$G$O!"(Bskk-input-vector $B$r%F!<%V%k$H$7$F!"(B +$B:G8e$KF~NO$5$l$?%-!<$KBP1~$9$kJ8;z$rA^F~$9$k!#(B +ascii $B%b!<%I$G$O!"%-!<F~NO$r$=$N$^$^A^F~$9$k!#(B +skk-auto-insert-paren $B$NCM$,(B non-nil $B$N>l9g$G!"(Bskk-auto-paren-string-alist $B$K(B +$BBP1~$9$kJ8;zNs$,$"$k$H$-$O!"$=$NBP1~$9$kJ8;zNs(B ($B$+$C$3N`(B) $B$r<+F0E*$KA^F~$9$k!#(B" + (interactive "*P") + (let ((str (aref skk-input-vector last-command-char))) + ;; Overlay $B$r>C$9$?$a$K@h$K3NDj$9$k!#(B + (if skk-henkan-active (skk-kakutei)) + (if (not str) + (skk-emulate-original-map arg) + (let* ((count (prefix-numeric-value arg)) + (count2 count) + (pair-str + (and skk-auto-insert-paren + (cdr (assoc str skk-auto-paren-string-alist)) )) + (pair-str-inserted 0) ) + (while (> count 0) + (skk-insert-str str) + (setq count (1- count)) ) + (if (not pair-str) + nil + (while (> count2 0) + (if (not (string= pair-str (char-to-string (following-char)))) + (progn + (setq pair-str-inserted (1+ pair-str-inserted)) + (skk-insert-str pair-str) )) + (setq count2 (1- count2)) ) + (if (not (eq pair-str-inserted 0)) + (backward-char pair-str-inserted) )))))) + +(defun skk-zenkaku-insert (arg) + "$BA41QJ8;z$r%+%l%s%H%P%C%U%!$KA^F~$9$k!#(B +skk-zenkaku-vector $B$r%F!<%V%k$H$7$F!":G8e$KF~NO$5$l$?%-!<$KBP1~$9$kJ8;z$rA^F~(B +$B$9$k!#(B +skk-auto-insert-paren $B$NCM$,(B non-nil $B$N>l9g$G!"(Bskk-auto-paren-string-alist $B$K(B +$BBP1~$9$kJ8;zNs$,$"$k$H$-$O!"$=$NBP1~$9$kJ8;zNs(B ($B$+$C$3N`(B) $B$r<+F0E*$KA^F~$9$k!#(B" + (interactive "*p") + (let* ((str (aref skk-zenkaku-vector last-command-char)) + (arg2 arg) + (pair-str + (and skk-auto-insert-paren + (cdr (assoc str skk-auto-paren-string-alist)) )) + (pair-str-inserted 0) ) + (while (> arg 0) + (skk-insert-str str) + (setq arg (1- arg)) ) + (if (not pair-str) + nil + (while (> arg2 0) + (if (not (string= pair-str (char-to-string (following-char)))) + (progn + (setq pair-str-inserted (1+ pair-str-inserted)) + (skk-insert-str pair-str) )) + (setq arg2 (1- arg2)) ) + (if (not (eq pair-str-inserted 0)) + (backward-char pair-str-inserted) )))) + +;;;; henkan routines +(defun skk-henkan () + ;; $B%+%J$r4A;zJQ49$9$k%a%$%s%k!<%A%s!#(B + (let (mark new-word kakutei-henkan) + (if (string= skk-henkan-key "") + (skk-kakutei) + (if (not (eobp)) + ;; we use mark to go back to the correct position after henkan + (setq mark (skk-save-point (forward-char 1) (point-marker))) ) + (if (not skk-henkan-active) + (progn + (skk-change-marker) + (setq skk-current-search-prog-list skk-search-prog-list) )) + ;; skk-henkan-1 $B$NCf$+$i%3!<%k$5$l$k(B skk-henkan-show-candidate $B$+$i(B throw + ;; $B$5$l$k!#$3$3$G%-%c%C%A$7$?>l9g$O!"(B?x $B$,%9%H%j!<%`$KLa$5$l$F$$$k$N$G!"(B + ;; $B$3$N4X?t$r=P$F!"(Bskk-previous-candidates $B$X$f$/!#(B + (catch 'unread + (setq new-word (or (skk-henkan-1) (skk-henkan-in-minibuff)) + kakutei-henkan skk-kakutei-flag ) + (if new-word + (skk-insert-new-word new-word) )) + (if mark + (progn + (goto-char mark) + ;; $B;2>H$5$l$F$$$J$$%^!<%+!<$O!"(BGarbage Collection $B$,%3!<%k$5$l$?$H(B + ;; $B$-$K2s<}$5$l$k$,!"$=$l$^$G$N4V!"%F%-%9%H$N$I$3$+$r;X$7$F$$$k$H!"(B + ;; $B%F%-%9%H$N%"%C%W%G!<%H$N:]$K$=$N%^!<%+!<CM$r99?7$9$kI,MW$,$"$k(B + ;; $B$N$G!"$I$3$b;X$5$J$$$h$&$K$9$k!#(B + (skk-set-marker mark nil) + (backward-char 1) ) + (goto-char (point-max)) ) + (if kakutei-henkan + ;; $B3NDj$7$F$bNI$$(B ($B3NDj<-=q$K8uJd$r8+$D$1$?>l9g!"<-(B + ;; $B=qEPO?$r9T$C$?>l9g!"$"$k$$$O%_%K%P%C%U%!$+$i8uJd(B + ;; $B$rA*Br$7$?>l9g(B) $B$N$J$i!"(BOverlay $B$K$h$kI=<(JQ99$;(B + ;; $B$:$K$=$N$^$^3NDj!#(B + (skk-kakutei (if (skk-numeric-p) + (skk-get-simply-current-candidate 'noconv) + new-word ))) + ))) + +(defun skk-henkan-1 () + ;; skk-henkan $B$N%5%V%k!<%A%s!#(B + (let (new-word) + (if (eq skk-henkan-count 0) + (progn + (if (and (eq last-command 'skk-undo-kakutei-henkan) + (eq (car (car skk-current-search-prog-list)) + 'skk-search-kakutei-jisyo-file )) + ;; in this case, we should not search kakutei jisyo. + (setq skk-current-search-prog-list + (cdr skk-current-search-prog-list) )) + (setq skk-henkan-list (skk-search)) + (if (null skk-henkan-list) + nil + (setq new-word (skk-get-current-candidate)) + (if skk-kakutei-flag + ;; found the unique candidate in kakutei jisyo + (setq this-command 'skk-kakutei-henkan + skk-last-kakutei-henkan-key skk-henkan-key )))) + ;; $BJQ492s?t$,(B 1 $B0J>e$N$H$-!#(B + (setq new-word (skk-get-current-candidate)) + (if (not new-word) + ;; $B?7$7$$8uJd$r8+$D$1$k$+!"(Bskk-current-search-prog-list $B$,6u$K$J(B + ;; $B$k$^$G(B skk-search $B$rO"B3$7$F%3!<%k$9$k!#(B + (while (and skk-current-search-prog-list (not new-word)) + (setq skk-henkan-list (skk-nunion skk-henkan-list (skk-search)) + new-word (skk-get-current-candidate) ))) + (if (and new-word (> skk-henkan-count 3)) + ;; show candidates in minibuffer + (setq new-word (skk-henkan-show-candidates) ))) + new-word )) + +;;;###skk-autoload +(defun skk-get-current-candidate () + (if (skk-numeric-p) + (let (val) + (skk-uniq-numerals) + (setq val (skk-numeric-convert (skk-get-simply-current-candidate))) + (if (not skk-recompute-numerals-key) + val + (skk-uniq-numerals) + (skk-numeric-convert (skk-get-simply-current-candidate)) )) + (skk-get-simply-current-candidate) )) + +(defun skk-henkan-show-candidates () + ;; $B%_%K%P%C%U%!$GJQ49$7$?8uJd72$rI=<($9$k!#(B + (skk-save-point + (let* ((candidate-keys ; $BI=<(MQ$N%-!<%j%9%H(B + (mapcar (function (lambda (c) (char-to-string (upcase c)))) + skk-henkan-show-candidates-keys )) + key-num-alist ; $B8uJdA*BrMQ$NO"A[%j%9%H(B + (key-num-alist1 ; key-num-alist $B$rAH$_N)$F$k$?$a$N:n6HMQO"A[%j%9%H!#(B + (let ((count 6)) + (mapcar (function (lambda (key) (prog1 (cons key count) + (setq count (1- count)) ))) + ;; $B5U$5$^$K$7$F$*$$$F!"I=<($9$k8uJd$N?t$,>/$J$+$C$?$i@h(B + ;; $BF,$+$i4v$D$+:o$k!#(B + (reverse skk-henkan-show-candidates-keys) ))) + (loop 0) + inhibit-quit + henkan-list new-one str reverse n ) + ;; $BG0$N$?$a!#(Bskk-previous-candidate $B$r;2>H!#(B + (if skk-use-face (skk-henkan-face-off)) + (delete-region skk-henkan-start-point skk-henkan-end-point) + (while loop + (if str + (let (message-log-max) + (message str) ) + (cond (reverse + (setq loop (1- loop) + henkan-list (nthcdr (+ 4 (* loop 7)) skk-henkan-list) + reverse nil )) + (skk-exit-show-candidates + ;; $B8uJd$,?T$-$F$7$^$C$F!"(Bskk-henkan-show-candidates -> + ;; skk-henkan-in-minibuff -> skk-henkan + ;; -> skk-henkan-show-candidates $B$N=g$G!":F$S$3$N4X?t$,8F$P$l(B + ;; $B$?$H$-$O!"$3$3$G(B henkan-list $B$H(B loop $B$r7W;;$9$k!#(B + (setq henkan-list (nthcdr skk-henkan-count skk-henkan-list) + loop (car skk-exit-show-candidates) + skk-exit-show-candidates nil )) + (t + ;; skk-henkan-show-candidates-keys $B$N:G=*$N%-!<$KBP1~$9$k8uJd(B + ;; $B$,=P$F$/$k$^$G%5!<%A$rB3$1$k!#(B + (if (skk-numeric-p) (skk-uniq-numerals)) + (while (and skk-current-search-prog-list + (null (nthcdr (+ 11 (* loop 7)) skk-henkan-list)) ) + (setq skk-henkan-list + (skk-nunion skk-henkan-list (skk-search)) ) + (if (skk-numeric-p) + (skk-uniq-numerals) )) + (if (skk-numeric-p) + (skk-numeric-convert*7) ) + (setq henkan-list (nthcdr (+ 4 (* loop 7)) + skk-henkan-list )))) + (setq n (skk-henkan-show-candidate-subr candidate-keys henkan-list)) ) + (if (> n 0) + (condition-case nil + (let* ((event (skk-read-event)) + (char (skk-event-to-character event)) + num ) + (if (null char) + (skk-unread-event event) + (setq key-num-alist (nthcdr (- 7 n) key-num-alist1)) + (if (null key-num-alist) + nil + (setq num (cdr (or (assq char key-num-alist) + (if (skk-lower-case-p char) + (assq (upcase char) key-num-alist) + (assq (downcase char) key-num-alist) ))))) + (cond (num + (setq new-one (nth num henkan-list) + skk-henkan-count (+ 4 (* loop 7) num) + skk-kakutei-flag t + loop nil + str nil )) + ((eq char (skk-int-char 32)) ; space + (if (or skk-current-search-prog-list + (nthcdr 7 henkan-list) ) + (setq loop (1+ loop) + str nil ) + ;; $B8uJd$,?T$-$?!#$3$N4X?t$+$iH4$1$k!#(B + (let ((last-showed-index (+ 4 (* loop 7)))) + (setq skk-exit-show-candidates + ;; cdr $BIt$O!"<-=qEPO?$KF~$kA0$K:G8e$KI=<($7(B + ;; $B$?8uJd72$NCf$G:G=i$N8uJd$r;X$9%$%s%G%/%9(B + (cons loop last-showed-index) ) + ;; $B<-=qEPO?$KF~$k!#(Bskk-henkan-count $B$O(B + ;; skk-henkan-list $B$N:G8e$N8uJd$N<!(B ($BB8:_$7$J$$(B + ;; --- nil )$B$r;X$9!#(B + (setq skk-henkan-count (+ last-showed-index n) + loop nil + str nil )))) + ((eq char skk-previous-candidate-char) ; ?x + (if (eq loop 0) + ;; skk-henkan-show-candidates $B$r8F$VA0$N>uBV$KLa(B + ;; $B$9!#(B + (progn + (setq skk-henkan-count 4) + (skk-unread-event (skk-character-to-event + skk-previous-candidate-char)) + ;; skk-henkan $B$^$G0l5$$K(B throw $B$9$k!#(B + (throw 'unread nil) ) + ;; $B0l$DA0$N8uJd72$r%(%3!<%(%j%"$KI=<($9$k!#(B + (setq reverse t + str nil ))) + (t (skk-message "\"%c\" $B$OM-8z$J%-!<$G$O$"$j$^$;$s!*(B" + "\"%c\" is not valid here!" + char ) + (sit-for 1) )))) + (quit + ;; skk-previous-candidate $B$X(B + (setq skk-henkan-count 0) + (skk-unread-event (skk-character-to-event + skk-previous-candidate-char)) + ;; skk-henkan $B$^$G0l5$$K(B throw $B$9$k!#(B + (throw 'unread nil) )))) ; end of while loop + (if (consp new-one) + (cdr new-one) + new-one )))) + +(defun skk-henkan-show-candidate-subr (keys candidates) + ;; key $B$H(B candidates $B$rAH$_9g$o$;$F(B 7 $B$D0J2<$N8uJd72(B ($B8uJd?t$,B-$j$J$+$C$?$i(B + ;; $B$=$3$GBG$A@Z$k(B) $B$NJ8;zNs$r:n$j!"%_%K%P%C%U%!$KI=<($9$k!#(B + (let ((n 0) str cand + message-log-max ) + (if (not (car candidates)) + nil + (setq n 1 + ;; $B:G=i$N8uJd$NA0$K6uGr$r$/$C$D$1$J$$$h$&$K:G=i$N8uJd$@$1@h$K<h$j(B + ;; $B=P$9!#(B + str (concat (car keys) ":" (skk-%-to-%% + (if (consp (car candidates)) + (cdr (car candidates)) + (car candidates) )))) + ;; $B;D$j$N(B 6 $B$D$r<h$j=P$9!#8uJd$H8uJd$N4V$r6uGr$G$D$J$0!#(B + (while (and (< n 7) (setq cand (nth n candidates))) + (setq cand (skk-%-to-%% (if (consp cand) (cdr cand) cand)) + str (concat str " " (nth n keys) ":" cand) + n (1+ n) )) + (message "%s [$B;D$j(B %d%s]" + str (length (nthcdr n candidates)) + (make-string (length skk-current-search-prog-list) ?+) )) + ;; $BI=<($9$k8uJd?t$rJV$9!#(B + n )) + +(defun skk-%-to-%% (str) + ;; STR $BCf$K(B % $B$r4^$`J8;z$,$"$C$?$i!"(B%% $B$K$7$F(B message $B$G%(%i!<$K$J$i$J$$$h$&(B + ;; $B$K$9$k!#(B + (let ((tail str) + temp beg end ) + (save-match-data + (while (string-match "%+" tail) + (setq beg (match-beginning 0) + end (match-end 0) + temp (concat temp (substring tail 0 beg) + (make-string (* 2 (- end beg)) ?%) ) + tail (substring tail end) )) + (concat temp tail) ))) + +(defun skk-henkan-in-minibuff () + ;; $B%_%K%P%C%U%!$G<-=qEPO?$r$7!"EPO?$7$?%(%s%H%j$NJ8;zNs$rJV$9!#(B + (save-match-data + (let ((enable-recursive-minibuffers t) + ;; $BJQ49Cf$K(B isearch message $B$,=P$J$$$h$&$K$9$k!#(B + skk-isearch-message new-one ) + (add-hook 'minibuffer-setup-hook 'skk-setup-minibuffer) + (condition-case nil + (setq new-one + (read-from-minibuffer + (concat (or (if (skk-numeric-p) + (skk-numeric-midasi-word) ) + (if skk-okuri-char + (skk-compute-henkan-key2) + skk-henkan-key )) + " " ))) + (quit + (setq new-one "") )) + (if (string= new-one "") + (if skk-exit-show-candidates + ;; $B%_%K%P%C%U%!$KI=<($7$?8uJd$,?T$-$F<-=qEPO?$KF~$C$?$,!"6uJ8;z(B + ;; $BNs$,EPO?$5$l$?>l9g!#:G8e$K%_%K%P%C%U%!$KI=<($7$?8uJd72$r:FI=(B + ;; $B<($9$k!#(B + (progn + (setq skk-henkan-count (cdr skk-exit-show-candidates)) + (skk-henkan) ) + ;; skk-henkan-show-candidates $B$KF~$kA0$K8uJd$,?T$-$?>l9g(B + (setq skk-henkan-count (1- skk-henkan-count)) + (if (eq skk-henkan-count -1) + (progn + ;; $BAw$j$"$j$NJQ49$G<-=qEPO?$KF~$j!"6uJ8;z$rEPO?$7$?8e!"$=$N(B + ;; $B$^$^:FEYAw$j$J$7$H$7$FJQ49$7$?>l9g$O(B + ;; skk-henkan-okurigana, skk-okuri-char $B$NCM$r(B nil $B$K$7$J$1(B + ;; $B$l$P!"$=$l$>$l$NCM$K8E$$Aw$j2>L>$,F~$C$?$^$^$G8!:w$K<:GT(B + ;; $B$9$k!#(B + (setq skk-henkan-okurigana nil + skk-okurigana nil + skk-okuri-char nil ) + (skk-change-marker-to-white) ) + ;; skk-henkan-count $B$,(B -1 $B$G$J$1$l$P!"%+%l%s%H%P%C%U%!$G$O:G8e$N(B + ;; $B8uJd$rI=<($7$?$^$^$J$N$G(B ($BI=<(4XO"$G$O2?$b$7$J$/$F$b!"$b$&4{(B + ;; $B$KK>$_$N>uBV$K$J$C$F$$$k(B) $B2?$b$7$J$$!#(B + )) + ;; $B%_%K%P%C%U%!$GJQ49$7$?J8;zNs$,$"$k(B ($B6uJ8;zNs$G$J$$(B) $B$H$-!#(B + ;; $BKvHx$N6uGr$r<h$j=|$/!#(B + (if (string-match "[ $B!!(B]+$" new-one) + (setq new-one (substring new-one 0 (match-beginning 0))) ) + (if (skk-numeric-p) + (setq new-one (skk-adjust-numeric-henkan-data new-one)) + ;; $B$9$4$/$?$/$5$s$N8uJd$,$"$k>l9g$K!"$=$N:G8e$K?7$7$$8uJd$r2C$($k$N$O(B + ;; $B$1$C$3$&9|$@$,!#(B + (setq skk-henkan-list (nconc skk-henkan-list (list new-one)) + ;; $B%U%i%0$r%*%s$K$9$k!#(B + skk-kakutei-flag t )) + (setq skk-henkan-in-minibuff-flag t + skk-touroku-count (1+ skk-touroku-count) )) + ;; (nth skk-henkan-count skk-henkan-list) $B$,(B nil $B$@$+$i<-=qEPO?$K(B + ;; $BF~$C$F$$$k!#(Bskk-henkan-count $B$r%$%s%/%j%a%s%H$9$kI,MW$O$J$$!#(B + ;; (setq skk-henkan-count (1+ skk-henkan-count)) + ;; new-one $B$,6uJ8;zNs$@$C$?$i(B nil $B$rJV$9!#(B + (if (not (string= new-one "")) new-one) ))) + +(defun skk-compute-henkan-key2 () + ;; skk-henkan-okurigana $B$,(B non-nil $B$J$i(B skk-henkan-key $B$+$i!"$+$D$F(B + ;; skk-henkan-key2 $B$H8F$P$l$F$$$?$b$N$r:n$k!#(B + ;; skk-henkan-key2 $B$H$O!"!V4A;zItJ,$NFI$_(B + "*" + $BAw$j2>L>!W$N7A<0$NJ8;zNs$r(B + ;; $B8@$&!#(B + (if skk-henkan-okurigana + (save-match-data + (if (string-match "[a-z]+$" skk-henkan-key) + (concat (substring skk-henkan-key 0 (match-beginning 0)) + "*" skk-henkan-okurigana ))))) + +(defun skk-setup-minibuffer () + ;; $B%+%l%s%H%P%C%U%!$NF~NO%b!<%I$K=>$$%_%K%P%C%U%!$NF~NO%b!<%I$r@_Dj$9$k!#(B + (let ((mode (skk-spy-origin-buffer-mode))) + (if (not mode) + nil + (cond ((eq mode 'hirakana) (skk-j-mode-on)) + ((eq mode 'katakana) (skk-j-mode-on t)) + ((eq mode 'abbrev) (skk-abbrev-mode-on)) + ((eq mode 'ascii) (skk-ascii-mode-on)) + ((eq mode 'zenkaku) (skk-zenkaku-mode-on)))))) + +(defun skk-spy-origin-buffer-mode () + ;; $B%_%K%P%C%U%!$K5o$k$H$-$K%*%j%8%J%k$N%+%l%s%H%P%C%U%!$NF~NO%b!<%I$rDe;!$9$k!#(B + (with-current-buffer (skk-minibuffer-origin) + (if skk-mode + (cond (skk-abbrev-mode 'abbrev) + (skk-ascii-mode 'ascii) + (skk-zenkaku-mode 'zenkaku) + (skk-katakana 'katakana) + (t 'hirakana) )))) + +;;;###skk-autoload +(defun skk-previous-candidate () + "$B"'%b!<%I$G$"$l$P!"0l$DA0$N8uJd$rI=<($9$k!#(B +$B"'%b!<%I0J30$G$O%+%l%s%H%P%C%U%!$K(B \"x\" $B$rA^F~$9$k!#(B +$B3NDj<-=q$K$h$k3NDj$ND>8e$K8F$V$H3NDj$,%"%s%I%%$5$l$F!"3NDjA0$N>uBV$G(B +skk-last-kakutei-henkan-key $B$,%+%l%s%H%P%C%U%!$KA^F~$5$l$k!#(B" + (interactive) + (if (not skk-henkan-active) + (if (not (eq last-command 'skk-kakutei-henkan)) + (skk-kana-input) + ;; restore the state just before the last kakutei henkan. + (delete-region skk-henkan-start-point (point)) + (skk-set-henkan-point-subr) + (insert skk-last-kakutei-henkan-key) + (setq this-command 'skk-undo-kakutei-henkan) ) + (if (string= skk-henkan-key "") + nil + ;; $B6uGr$rA^F~$7$F$*$$$F!"8e$G(B delete-backward-char $B$r;H$C$F>C$9J}K!$G$O!"(B + ;; overwrite-mode $B$N$H$-$K$=$N6uGr$r>C$;$J$$!#=>$$(B skk-henkan $B$G9T$J$C$F(B + ;; $B$$$kJ}K!$HF1$8$b$N$r;H$&!#(B + ;;(insert " ") + (let ((mark + (if (not (eobp)) + (skk-save-point (forward-char 1) (point-marker)) ))) + (skk-save-point + (if (eq skk-henkan-count 0) + (progn + (if skk-okuri-char + ;; roman prefix for okurigana should be removed. + (setq skk-henkan-key (substring skk-henkan-key 0 -1)) ) + (setq skk-henkan-count -1 + skk-henkan-list nil + skk-henkan-okurigana nil + skk-okuri-char nil + skk-okurigana nil + skk-prefix "" ) + (if skk-auto-okuri-process + (skk-init-auto-okuri-variables) ) + (if (skk-numeric-p) + (skk-init-numeric-conversion-variables) ) + ;; Emacs 19.28 $B$@$H2?8N$+(B Overlay $B$r>C$7$F$*$+$J$$$H!"<!$K(B + ;; insert $B$5$l$k(B skk-henkan-key Overlay $B$,$+$+$C$F$7$^$&!#(B + (if skk-use-face (skk-henkan-face-off)) + (delete-region skk-henkan-start-point skk-henkan-end-point) + (goto-char skk-henkan-end-point) + (insert skk-henkan-key) + (skk-change-marker-to-white) ) + (setq skk-henkan-count (1- skk-henkan-count)) + (skk-insert-new-word (skk-get-simply-current-candidate)) )) + ;;(if (and (> (point) 1) (eq (char-after (1- (point))) 32)) + ;; delete-backward-char $B$G$O!"(Boverwrite-mode $B$N$H$-$KD>A0$N6uGr$r>C$;(B + ;; $B$J$$!#(B + ;; (delete-backward-char 1) ) + (if mark + (progn + (goto-char mark) + (skk-set-marker mark nil) + (backward-char 1) ) + (goto-char (point-max)) ) + (if (and skk-abbrev-mode (eq skk-henkan-count -1)) + (skk-abbrev-mode-on) ))))) + +(defun skk-insert-new-word (word) + ;; $B8+=P$78l$r>C$7!"$=$N>l=j$XJQ497k2L$NJ8;zNs$rA^F~$9$k!#(B + (let (func) + ;; $BG0$N$?$a!#2?8N$3$l$rF~$l$k$N$+$K$D$$$F$O!"(Bskk-previous-candidate $B$r;2>H(B + (if skk-use-face (skk-henkan-face-off)) + (delete-region skk-henkan-start-point skk-henkan-end-point) + (goto-char skk-henkan-start-point) + ;; (^_^;) $B$N$h$&$J8+=P$78l$KBP$7!"(Bread-from-string $B$r8F$V$H%(%i!<$K$J$k$N(B + ;; $B$G!"(Bcondition-case $B$G$=$N%(%i!<$rJa$^$($k!#(B + (condition-case nil + (setq func (car (read-from-string word))) + (error (setq func word))) + ;; symbolp $B$G(B nil $B$rJV$9$h$&$JC18l$r!"(Bsymbolp $B$G%A%'%C%/$9$k$3$HL5$/$$$-(B + ;; $B$J$j(B fboundp $B$G%A%'%C%/$9$k$H!"%(%i!<$K$J$k!#(B + ;; e.x. "(#0)" + (condition-case nil + (if (and (listp func) (symbolp (car func)) (fboundp (car func))) + (insert (eval func)) + (insert word) ) + ;; $BJ8;zNs$rJV$5$J$$(B Lisp $B%W%m%0%i%`$rI>2A$7$F$b%(%i!<$K$J$i$J$$J}$,JXMx!)(B + (error nil) ) + (skk-set-marker skk-henkan-end-point (point)) + (if skk-use-face (skk-henkan-face-on)) + (if skk-insert-new-word-function + (funcall skk-insert-new-word-function) ))) + +;;;###skk-autoload +(defun skk-kakutei (&optional word) + "$B8=:_I=<($5$l$F$$$k8l$G3NDj$7!"<-=q$N99?7$r9T$&!#(B +$B%*%W%7%g%J%k0z?t$N(B WORD $B$rEO$9$H!"8=:_I=<($5$l$F$$$k8uJd$H$OL54X78$K(B WORD $B$G3N(B +$BDj$9$k!#(B" + ;; read only $B$G%(%i!<$K$J$k$h$&$K$9$k$H(B read only $B%P%C%U%!$G(B SKK $B$,5/F0$G$-(B + ;; $B$J$/$J$k!#(B + (interactive) + (let ((inhibit-quit t) + converted kakutei-word ) + (if skk-mode + (skk-j-mode-on skk-katakana) + ;; $B%+%l%s%H%P%C%U%!$G$^$@(B skk-mode $B$,%3!<%k$5$l$F$$$J$+$C$?$i!"%3!<%k$9(B + ;; $B$k!#(B + (skk-mode 1) ) + (if (not skk-henkan-on) + nil + (if (not skk-henkan-active) + nil + (setq kakutei-word + ;; $B3NDj<-=q$N8l$G3NDj$7$?$H$-$O!"<-=q$K$=$N8l$r=q$-9~$`I,MW$b$J(B + ;; $B$$$7!"99?7$9$kI,MW$b$J$$$H;W$C$F$$$?$,!"Jd40$r9T$J$&$H$-$O!"(B + ;; $B8D?M<-=q$r;2>H$9$k(B ($B3NDj<-=q$O;2>H$7$J$$(B) $B$N$G!"B?>/;q8;$H;~(B + ;; $B4V$rL5BL$K$7$F$b!"8D?M<-=q$K3NDj<-=q$N%(%s%H%j$r=q$-9~$s$G99(B + ;; $B?7$b$7$F$*$/!#(B + (or word (skk-get-simply-current-candidate (skk-numeric-p))) ) + (if (or + (and (not skk-search-excluding-word-pattern-function) kakutei-word) + (and + kakutei-word + skk-search-excluding-word-pattern-function + (not + (funcall skk-search-excluding-word-pattern-function kakutei-word) ))) + (progn + (skk-update-jisyo kakutei-word) + ;; keep this order + (setq skk-last-henkan-result kakutei-word) + (skk-set-marker skk-last-henkan-point (point)) + (if (skk-numeric-p) + (progn + (setq converted (skk-get-simply-current-candidate)) + (skk-update-jisyo-for-numerals kakutei-word converted) ))))) + (skk-kakutei-cleanup-henkan-buffer) ) + (skk-kakutei-save-and-init-variables + (if (skk-numeric-p) + (cons kakutei-word converted) + kakutei-word )) + (skk-do-auto-fill) + (skk-set-cursor-color (if skk-katakana + skk-katakana-cursor-color + skk-hirakana-cursor-color )))) + +(defun skk-kakutei-cleanup-henkan-buffer () + ;; $B3NDjD>8e$N%P%C%U%!$N@07A$r9T$J$&!#(B + ;; $B$3$N4X?t$O!"(Bskk-vip.el $B$G>e=q$-$5$l$k!#(B + (if skk-okurigana + (progn + (skk-delete-okuri-mark) + (if (and skk-katakana skk-convert-okurigana-into-katakana) + (skk-katakana-region skk-henkan-end-point (point)) ))) + (skk-delete-henkan-markers) + (if (and (boundp 'self-insert-after-hook) self-insert-after-hook) + (funcall self-insert-after-hook skk-henkan-start-point (point)) ) + (if overwrite-mode + (skk-del-char-with-pad + (skk-ovwrt-len + (string-width + (skk-buffer-substring skk-henkan-start-point (point)) ))))) + +(defun skk-kakutei-save-and-init-variables (&optional kakutei-word) + ;; $B3NDj;~$KJQ?t$N=i4|2=$H%"%s%I%%$N$?$a$NJQ?t$NJ]B8$r9T$J$&!#(B + (if (and kakutei-word (or (consp kakutei-word) + (not (string= kakutei-word "")) )) + (progn + ;; skk-undo-kakutei $B$N$?$a$K:G8e$NJQ49$N%G!<%?!<$rJ]B8$9$k!#(B + (setq skk-last-henkan-key skk-henkan-key + ;; $B3NDj$7$?8l$r@hF,$K$7$F(B skk-henkan-list $B$NCM$rJ]B8$9$k!#(B + skk-last-henkan-list (cons kakutei-word + (delete kakutei-word skk-henkan-list) ) + skk-last-henkan-okurigana skk-henkan-okurigana + skk-last-okuri-char skk-okuri-char + skk-kakutei-count (1+ skk-kakutei-count) ) + ;;(if (boundp 'disable-undo) + ;; (setq disable-undo nil) + )) + (setq skk-abbrev-mode nil + skk-exit-show-candidates nil + skk-henkan-active nil + skk-henkan-count -1 + skk-henkan-key nil + skk-henkan-list nil + skk-henkan-okurigana nil + skk-henkan-on nil + skk-kakutei-flag nil + skk-okuri-char nil + skk-prefix "" ) + (if skk-auto-okuri-process + (skk-init-auto-okuri-variables) ) + (if (skk-numeric-p) + (skk-init-numeric-conversion-variables) )) + +(defun skk-undo-kakutei () + "$B0lHV:G8e$N3NDj$r%"%s%I%%$7!"8+=P$7$KBP$9$k8uJd$rI=<($9$k!#(B +$B:G8e$K3NDj$7$?$H$-$N8uJd$O%9%-%C%W$5$l$k!#(B +$B8uJd$,B>$K$J$$$H$-$O!"%_%K%P%C%U%!$G$N<-=qEPO?$KF~$k!#(B" + (interactive) + (cond ((eq last-command 'skk-undo-kakutei) + (skk-error "$B3NDj%"%s%I%%$OO"B3;HMQ$G$-$^$;$s(B" + "Cannot undo kakutei repeatedly" )) + (skk-henkan-active + (skk-error "$B"'%b!<%I$G$O3NDj%"%s%I%%$G$-$^$;$s(B" + "Cannot undo kakutei in $B"'(B mode" )) + ((or (not skk-last-henkan-key) (string= skk-last-henkan-key "")) + ;; skk-last-henkan-key may be nil or "". + (skk-error "$B%"%s%I%%%G!<%?!<$,$"$j$^$;$s(B" "Lost undo data") )) + (condition-case nil + (let ((end (if skk-last-henkan-okurigana + (+ (length skk-last-henkan-okurigana) + skk-henkan-end-point ) + skk-henkan-end-point ))) + (setq skk-henkan-active t + skk-henkan-key skk-last-henkan-key + skk-henkan-list skk-last-henkan-list + skk-henkan-on t + skk-henkan-okurigana skk-last-henkan-okurigana + skk-okuri-char skk-last-okuri-char + skk-current-search-prog-list + (if (eq (car (car skk-search-prog-list)) + 'skk-search-kakutei-jisyo-file ) + ;; $B3NDj<-=q$OC5$7$F$bL50UL#!#(B + (cdr skk-search-prog-list) + skk-search-prog-list )) + (if (>= (point-max) end) + ;; $B:G8e$NJQ49ItJ,$N%F%-%9%H$r>C$9!#Aw$j2>L>$rGD0.$7$F$$$k$N$J$i(B + ;; (skk-process-okuri-early $B$,(B non-nil $B$J$iAw$j2>L>$rGD0.$G$-$J$$(B)$B!"(B + ;; $BAw$j2>L>$r4^$a$?ItJ,$^$G$r>C$9!#(B + (delete-region skk-henkan-start-point end) ) + (goto-char skk-henkan-start-point) + (cancel-undo-boundary) + (insert "$B"'(B") + (undo-boundary) + (skk-set-marker skk-henkan-start-point (point)) + (if skk-okuri-char + ;; $BAw$j$"$j(B + (progn + (insert (substring skk-henkan-key 0 + (1- (length skk-henkan-key)) )) + (skk-set-marker skk-henkan-end-point (point)) + (if skk-henkan-okurigana (insert skk-henkan-okurigana)) ) + (insert skk-henkan-key) + (skk-set-marker skk-henkan-end-point (point)) ) + ;; $B$5$!!"=`Hw$,@0$$$^$7$?!*(B + (skk-message "$B3NDj%"%s%I%%!*(B" "Undo kakutei!") + (setq skk-henkan-count 1) + (skk-henkan) ) + ;; skk-kakutei-undo $B$+$iESCf$GH4$1$?>l9g$O!"3F<o%U%i%0$r=i4|2=$7$F$*$+$J$$(B + ;; $B$H<!$NF0:n$r$7$h$&$H$7$?$H$-$K%(%i!<$K$J$k!#(B + (error (skk-kakutei)) + (quit (skk-kakutei)) )) + +(defun skk-downcase (char) + (let ((d (cdr (assq char skk-downcase-alist)))) + (if d + d + (downcase char) ))) + +(defun skk-set-henkan-point (&optional arg) + "$BJQ49$r3+;O$9$k%]%$%s%H$r%^!<%/$7!"BP1~$9$k(B skk-prefix $B$+!"Jl2;$rF~NO$9$k!#(B" + (interactive "*P") + (combine-after-change-calls + (let* ((last-char (skk-downcase last-command-char)) + (normal (not (eq last-char last-command-char))) + (sokuon (and (string= skk-prefix (char-to-string last-char)) + (/= last-char ?o))) + (henkan-active skk-henkan-active)) + (cancel-undo-boundary) + (if (or (not skk-henkan-on) skk-henkan-active) + (if normal + (skk-set-henkan-point-subr) + (if skk-henkan-on + (skk-set-henkan-point-subr) ) + (if henkan-active + (skk-emulate-original-map arg) + (skk-self-insert arg) )) + (if (not normal) + ;; process special char + (progn + (insert last-char) + (skk-set-marker skk-henkan-end-point (point)) + (setq skk-henkan-count 0 + skk-henkan-key (skk-buffer-substring + skk-henkan-start-point (point) ) + skk-prefix "" ) + (skk-henkan) ) + ;; prepare for the processing of okurigana if not skk-okurigana + ;; and the preceding character is not a numeric character. + ;; if the previous char is a special midashi char or a + ;; numeric character, we assume that the user intended to type the + ;; last-command-char in lower case. + (if (and (not skk-okurigana) + (or (= skk-henkan-start-point (point)) + (let ((p (char-after (1- (point))))) + (not + (or + ;; previous char is a special midashi char + (memq p skk-special-midashi-char-list) + ;; previous char is an ascii numeric char + (and (<= 48 p) ; ?0 + (<= p 57) ) ; ?9 + ;; previous char is a jis numeric char + (and (eq (char-after (- (point) 2)) 163) + (<= 176 p) (<= p 185) )))))) + (if skk-process-okuri-early + (progn + (skk-set-marker skk-henkan-end-point (point)) + (setq skk-okuri-char (char-to-string last-char)) + (if sokuon + (progn + (setq skk-henkan-key + (concat (skk-buffer-substring + skk-henkan-start-point + skk-kana-start-point ) + (if skk-katakana "$B%C(B" "$B$C(B") + skk-henkan-okurigana )) + (skk-erase-prefix) + (insert (if skk-katakana "$B%C(B " "$B$C(B ")) + (setq skk-prefix "" + skk-henkan-count 0 ) + (skk-henkan) + ;;(if skk-use-face (skk-henkan-face-off)) + (delete-backward-char 2) + ;;(if skk-use-face (skk-henkan-face-on)) + ) + (setq skk-henkan-key (concat + (skk-buffer-substring + skk-henkan-start-point + (point) ) + skk-okuri-char )) + (insert " ") + (setq skk-prefix "" + skk-henkan-count 0 ) + (skk-henkan) + ;;(if skk-use-face (skk-henkan-face-off)) + (delete-backward-char 1) + ;;(if skk-use-face (skk-henkan-face-on)) + ) + ;; we set skk-kana-start-point here, since the marker may no + ;; longer point at the correct position after skk-henkan. + (skk-set-marker skk-kana-start-point (point)) ) + (if (= skk-henkan-start-point (point)) + nil + (if sokuon + (progn + (skk-erase-prefix) + (insert (if skk-katakana "$B%C(B" "$B$C(B")) + (setq skk-prefix "") )) + (skk-set-marker skk-okurigana-start-point (point)) + (insert "*") + (skk-set-marker skk-kana-start-point (point)) + (setq skk-okuri-char (char-to-string last-char) + skk-okurigana t )))))) + (if normal + (skk-unread-event + (skk-character-to-event last-char)) )))) + +;;;###skk-autoload +(defun skk-start-henkan (arg) + "$B"&%b!<%I$G$OJQ49$r3+;O$9$k!#"'%b!<%I$G$O<!$N8uJd$rI=<($9$k!#(B + $B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$N%3%^%s%I$r%(%_%e%l!<%H$9$k!#(B" + (interactive "*p") + (combine-after-change-calls + (save-match-data + (if (not skk-henkan-on) + (skk-self-insert arg) + (if skk-henkan-active + (progn (setq skk-henkan-count (1+ skk-henkan-count)) + (skk-henkan) ) + (let ((pos (point))) + (or (string= skk-prefix "") + (skk-error "$B%U%#%C%/%9$5$l$F$$$J$$(B skk-prefix $B$,$"$j$^$9(B" + "Have unfixed skk-prefix" )) + (if (< pos skk-henkan-start-point) + (skk-error + "$B%+!<%=%k$,JQ493+;OCOE@$h$jA0$K$"$j$^$9(B" + "Henkan end point must be after henkan start point" )) + ;; $B8+=P$78l$,%+%?%+%J$G$"$l$P$R$i$,$J$KJQ49$9$k!#$b$78+=P$78l$NJQ49(B + ;; $B$;$:$K$=$N$^$^(B skk-henkan $B$KEO$7$?$1$l$P!"(BC-u SPC (arg $B$,(B 4 $B$K$J(B + ;; $B$k(B) $B$H%?%$%W$9$l$P$h$$!#(B + (if (and skk-katakana (eq arg 1)) + (skk-hiragana-region skk-henkan-start-point pos) ) + (setq skk-henkan-key (skk-buffer-substring + skk-henkan-start-point pos )) + (if skk-allow-spaces-newlines-and-tabs + ;; skk-henkan-key $B$NCf$N(B "[ \n\t]+" $B$r40A4$K<h$j=|$/!#(B + (while (string-match "[ \n\t]+" skk-henkan-key) + (setq skk-henkan-key + (concat (substring skk-henkan-key 0 (match-beginning 0)) + (substring skk-henkan-key (match-end 0)) ))) + (skk-save-point + (beginning-of-line) + (if (> (point) skk-henkan-start-point) + (skk-error + "$BJQ49%-!<$K2~9T$,4^$^$l$F$$$^$9(B" + "Henkan key may not contain a new line character" ))) + ;; $B:G=i$N%9%Z!<%9$G(B skk-henkan-key $B$r$A$g$s@Z$k$@$1!#(B + (setq skk-henkan-key (substring skk-henkan-key 0 + (string-match " " + skk-henkan-key )))) + (skk-set-marker skk-henkan-end-point pos) + (setq skk-henkan-count 0) + (skk-henkan) + (if (and skk-abbrev-mode skk-henkan-active) + (progn + (skk-j-mode-on) + (setq skk-abbrev-mode t) )))) ;; XXX + (cancel-undo-boundary) )))) + +(defun skk-backward-and-set-henkan-point (arg) + "$B%]%$%s%H$ND>A0$K$"$kJ8;zNs$N@hF,$KJQ493+;O%]%$%s%H$r<($9(B \"$B"&(B\" $B$rIU$1$k!#(B +$B%+!<%=%k$ND>A0$K$"$kJ8;z(B \($B%9%Z!<%9J8;z!"%?%VJ8;z!"D92;$rI=$o$9!V!<!W(B $B$OL5>r7o(B +$B$K%9%-%C%W$5$l$k(B\) $B$r(B skk-what-char-type $B$K$FH=JL$7!"F1<o$NJ8;zNs$r$R$H$+$?$^(B +$B$j$H$7$F8eJ}$X%9%-%C%W$9$k!#(B +$BC"$7!"$R$i$+$J$N>l9g$O!V$r!W$ND>A0$G!"%+%?%+%J$N>l9g$O!V%r!W$ND>A0$G;_$^$k!#(B +C-u ARG $B$G(B ARG $B$rM?$($k$H!"$=$NJ8;zJ,$@$1La$C$FF1$8F0:n$r9T$J$&!#(B" + (interactive "*P") + (if (not skk-mode) + (skk-emulate-original-map arg) + (catch 'exit1 + (skk-save-point + ;; $B$H$j$"$($::G=i$N(B SPC, TAB, $BA43Q(B SPC $B$@$1%8%c%s%W$9$k!#(B + (skip-chars-backward " \t$B!!(B") + ;; $B0z?t$"$j!#(B + (if arg + (if (not skk-allow-spaces-newlines-and-tabs) + (skk-backward-char (prefix-numeric-value arg)) + (setq arg (prefix-numeric-value arg)) + (while (> arg 0) + (skip-chars-backward " \t$B!!(B") + (if (bolp) + ;; $B9TF,$@$C$?$i0l9TA0$N9TKv$^$GLa$k$,!"(Barg $B$O8:$i$5$J$$!#(B + (skk-backward-char 1) + (skk-backward-char 1) + (setq arg (1- arg)) ))) + ;; $B0z?t$J$7!#(B + (let ((limit + (if (not skk-allow-spaces-newlines-and-tabs) + (skk-save-point (beginning-of-line) (point)) + (point-min) )) + ;; $B!2!1!0!/!.!-!,!+!*!)!(!'!&!%!$!#(B + (unknown-chars-regexp + (if skk-allow-spaces-newlines-and-tabs + "[ $B!!(B\n\t$B!<!7!6!5!4!3(B]" + "[$B!!!<!7!6!5!4!3(B]" )) + char p ) + (save-match-data + (skk-save-point + (skk-backward-char 1) + (while (and (> (point) limit) + ;; unknown-chars-regexp $B$G$OJ8;z<oJL$,H=JL$G$-$J$$$N(B + ;; $B$G!"$=$NJ8;zNs$,B3$/8B$j%]%$%s%H$r%P%C%U%!$N@hF,(B + ;; $BJ}8~$XLa$9!#(B + (looking-at unknown-chars-regexp) ) + (skk-backward-char 1) ) + (setq char (skk-what-char-type)) + (if (eq char 'unknown) + (throw 'exit1 nil) + (skk-backward-and-set-henkan-point-1 char) + (setq p (point)) + (if skk-allow-spaces-newlines-and-tabs + (while (and (> (point) limit) (bolp)) + ;; 1 $B9T>e$N9TKv$X!#(B + (skk-backward-char 1) + ;; $B%]%$%s%H$,H=JL$G$-$J$$J8;z<oJL$N>e$K$"$k4V$O(B + ;; backward $BJ}8~$X%]%$%s%H$rLa$9!#(B + ;;(while (and (> (point) limit) + ;; (looking-at unknown-chars-regexp) ) + ;; (skk-backward-char 1) ) + (if ;;(or + (> 0 (skk-backward-and-set-henkan-point-1 char)) + ;;(eq (skk-what-char-type) char)) + (setq p (point)) )))))) + (goto-char p) + (skip-chars-forward unknown-chars-regexp) )) + (skk-set-henkan-point-subr) )))) + +(defun skk-backward-and-set-henkan-point-1 (char) + ;; skk-backward-and-set-henkan-point $B$N%5%V%k!<%A%s!#(BCHAR $B$N<oN`$K1~$8$?J8;z(B + ;; $B$r%9%-%C%W$7$F%P%C%U%!$N@hF,J}8~$XLa$k!#(B + (cond ((eq char 'hirakana) + ;; "$B$r(B" $B$NA0$G;_$^$C$?J}$,JXMx!)(B + (skip-chars-backward "$B!3!4!5!6!7!<$s$!(B-$B$q(B") ) + ((eq char 'katakana) + ;; "$B%r(B" $B$NA0$G;_$^$C$?J}$,JXMx!)(B + (skip-chars-backward "$B!3!4!5!6!7!<%s%!(B-$B%q(B") ) + ((eq char 'zenkaku) + (skip-chars-backward "$B!!(B-$B#z(B") ) + ((eq char 'ascii) + (skip-chars-backward " -~") ))) + +(defun skk-what-char-type () + ;; $B8=:_$N%]%$%s%H$K$"$kJ8;z$,$I$s$J<oN`$+$rH=JL$9$k!#(B + (save-match-data + (cond ((looking-at "[$B$!(B-$B$s(B]") 'hirakana) + ((looking-at "[$B%!(B-$B%s(B]") 'katakana) + ;; "$B!<(B" $B$r=|30$7$F$$$k(B ("$B!<(B" $B$O(B "$B!;(B" $B$H(B "$B!=(B" $B$N4V$KF~$C$F$$$k(B)$B!#(B + ((looking-at "[$B!!(B-$B!;!=(B-$B#z(B]") 'zenkaku) + ((looking-at "[ -~]") 'ascii) + (t 'unknown) ))) + +(defun skk-set-henkan-point-subr () + "$B$+$J$rF~NO$7$?8e$G!"%]%$%s%H$KJQ493+;O$N%^!<%/(B \($B"&(B\) $B$rIU$1$k!#(B +$B85!9$O$3$N4X?t$O(B skk-set-henkan-point $B$NFbIt4X?t$G$"$k!#(B" + (interactive "*") + (if skk-henkan-on (skk-kakutei)) + ;;(if (boundp 'disable-undo) + ;; (setq disable-undo t) + (cancel-undo-boundary) + ;; ) + (if (string= skk-prefix "") + (insert "$B"&(B") + (skk-erase-prefix) + (insert "$B"&(B") + (skk-set-marker skk-kana-start-point (point)) + (skk-insert-prefix) ) + ;;(or (boundp 'disable-undo) + (undo-boundary) + ;; ) + (setq skk-henkan-on t) + (skk-set-marker skk-henkan-start-point (point)) ) + +(defun skk-change-marker () + ;; "$B"&(B"$B$r(B"$B"'(B"$B$KJQ$($k!#(Bskk-henkan-active $B%U%i%0$r(B t $B$K$9$k!#(B + (combine-after-change-calls + (skk-save-point + (goto-char (- skk-henkan-start-point skk-kanji-len)) + (if (looking-at "$B"&(B") + (progn + (cancel-undo-boundary) + (let ((buffer-undo-list t)) + (insert "$B"'(B") + (delete-char 1) + (setq skk-henkan-active t) ) + (undo-boundary) + ) + (skk-kakutei) + (skk-error "$B"&$,$"$j$^$;$s(B" "It seems that you have deleted $B"&(B") )))) + +(defun skk-change-marker-to-white () + ;; "$B"'(B"$B$r(B"$B"&(B"$B$KJQ$($k!#(Bskk-henkan-active $B%U%i%0$r(B nil $B$K$9$k!#(B + (combine-after-change-calls + (skk-save-point + (goto-char (- skk-henkan-start-point skk-kanji-len)) + (cancel-undo-boundary) + (if (looking-at "$B"'(B") + (let ((buffer-undo-list t)) + (insert "$B"&(B") + (delete-char 1) ) + (goto-char skk-henkan-start-point) + (insert "$B"&(B") + ;;(or (boundp 'disable-undo) + ;;(undo-boundary) + ;; ) + (skk-set-marker skk-henkan-start-point (point)) + (skk-message "$B"'$,$"$j$^$;$s(B" "It seems that you have deleted $B"'(B") ) + (setq skk-henkan-active nil) ))) + +(defun skk-delete-henkan-markers (&optional nomesg) + ;; $BJQ49;~$K%+%l%s%H%P%C%U%!$KI=$o$l$k(B `$B"&(B', `$B"'(B' $B%^!<%/$r>C$9!#(B + (if (not (marker-position skk-henkan-start-point)) + nil + (combine-after-change-calls + (save-match-data + (skk-save-point + (goto-char (- skk-henkan-start-point skk-kanji-len)) + (if skk-henkan-active + (progn + (if skk-use-face (skk-henkan-face-off)) + (if (looking-at "$B"'(B") + (delete-char 1) + (or nomesg + (skk-message "$B"'$,$"$j$^$;$s(B" + "It seems that you have deleted $B"'(B" )))) + (if (looking-at "$B"&(B") + (delete-char 1) + (or nomesg + (skk-message "$B"&$,$"$j$^$;$s(B" + "It seems that you have deleted $B"&(B" ))))))))) + +(defun skk-delete-okuri-mark () + ;; $BAw$j2>L>F~NOCf$K%+%l%s%H%P%C%U%!$KI=$o$l$k(B `*' $B%^!<%/$r>C$7!"Aw$j2>L>4XO"(B + ;; $B%U%i%0$r(B nil $B$K%;%C%H$9$k!#(B + (if (not (marker-position skk-okurigana-start-point)) + nil + (skk-save-point + (if (eq (char-after skk-okurigana-start-point) ?*) ; ?* + (delete-region skk-okurigana-start-point + (1+ skk-okurigana-start-point) )) + (setq skk-okurigana nil + skk-okuri-char nil + skk-henkan-okurigana nil )))) + +;;;; jisyo related functions +(defun skk-purge-from-jisyo () + "$B"'%b!<%I$G8=:_$N8uJd$r<-=q%P%C%U%!$+$i>C5n$9$k!#(B" + (interactive "*") + (if (and skk-henkan-active (not (string= skk-henkan-key ""))) + (if (not + (yes-or-no-p (format + (if skk-japanese-message-and-error + "%s /%s/%s$B$r<-=q$+$i:o=|$7$^$9!#NI$$$G$9$+!)(B" + "Really purge \"%s /%s/%s\"?" ) + skk-henkan-key (skk-get-simply-current-candidate) + (if (and skk-henkan-okurigana + (or skk-henkan-okuri-strictly + skk-henkan-strict-okuri-precedence )) + (concat + (if skk-japanese-message-and-error + " ($BAw$j2>L>(B: " + "(okurigana: " ) + skk-henkan-okurigana + ") " ) + " " )))) + nil + ;; skk-henkan-start-point $B$+$i(B point $B$^$G:o=|$7$F$7$^$C$F$b!"JQ49D>8e(B + ;; $B$K(B ($B%+!<%=%k$rF0$+$9$3$H$J$/(B) skk-purge-from-jisyo $B$r8F$Y$PLdBj$J$$(B + ;; $B$,!"%+!<%=%k$,0c$&>l=j$X0\F0$7$F$$$?>l9g$O!":o=|$9$Y$-$G$J$$$b$N$^(B + ;; $B$G:o=|$7$F$7$^$&2DG=@-$,$"$k!#$=$3$G!"Aw$j2>L>$,$"$l$P$=$ND9$5$r4^(B + ;; $B$a$?(B end $B$r5a$a!":#2s$NJQ49$K4XO"$7$?8D=j$@$1$r@53N$K@Z$j<h$k$h$&$K(B + ;; $B$9$k!#(B + (let ((end (if skk-henkan-okurigana + (+ (length skk-henkan-okurigana) + skk-henkan-end-point ) + skk-henkan-end-point )) + (word (skk-get-simply-current-candidate (skk-numeric-p))) ) + ;;(if skk-use-numeric-conversion + ;; (skk-update-jisyo-for-numerals purge-word 'purge) ) + (skk-update-jisyo word 'purge) + ;; $BG0$N$?$a!#(Bskk-previous-candidate $B$r;2>H!#(B + (if skk-use-face (skk-henkan-face-off)) + (delete-region skk-henkan-start-point end) + (skk-change-marker-to-white) + (skk-kakutei) + (if skk-use-relation + (skk-update-relation + (if skk-use-numeric-conversion + (skk-compute-numeric-henkan-key skk-henkan-key) + skk-henkan-key ) + (or skk-henkan-okurigana skk-okuri-char) + word nil 'purge)) + ;;(if (boundp 'skk-attr-alist) + ;; (skk-attr-purge + ;; (if skk-use-numeric-conversion + ;; (skk-compute-numeric-henkan-key skk-henkan-key) + ;; skk-henkan-key ) + ;; (or skk-henkan-okurigana skk-okuri-char) + ;; word )) + )))) + +;;;###skk-autoload +(defun skk-save-jisyo (&optional quiet) + "SKK $B$N<-=q%P%C%U%!$r%;!<%V$9$k!#(B +$B%*%W%7%g%J%k0z?t$N(B QUIET $B$,(B non-nil $B$G$"$l$P!"<-=q%;!<%V;~$N%a%C%;!<%8$r=P$5$J(B +$B$$!#(B" + (interactive "P") + (let* ((skk-jisyo (expand-file-name skk-jisyo)) + (jisyo-buffer (skk-get-jisyo-buffer skk-jisyo 'nomsg)) ) + (if (or (not jisyo-buffer) (not (buffer-modified-p jisyo-buffer))) + (if (not quiet) + (progn + (skk-message "SKK $B<-=q$rJ]B8$9$kI,MW$O$"$j$^$;$s(B" + "No need to save SKK jisyo" ) + (sit-for 1) )) + (with-current-buffer jisyo-buffer + (let ((inhibit-quit t) + (tempo-file (skk-make-temp-jisyo)) ) + (if (not quiet) + (skk-message "SKK $B<-=q$rJ]B8$7$F$$$^$9(B..." + "Saving SKK jisyo..." )) + (skk-save-jisyo-1 tempo-file) + (skk-check-jisyo-size tempo-file) + ;; $B<-=q$N%;!<%V$K@.8y$7$F=i$a$F(B modified $B%U%i%C%0$r(B nil $B$K$9$k!#(B + (set-buffer-modified-p nil) + (if (not quiet) + (progn + (skk-message "SKK $B<-=q$rJ]B8$7$F$$$^$9(B...$B40N;!*(B" + "Saving SKK jisyo...done" ) + (sit-for 1) )) + (if (eq this-command 'save-buffers-kill-emacs) + (skk-record-jisyo-data jisyo-buffer) ))) + (skk-set-cursor-properly) ))) + +(defun skk-save-jisyo-1 (file) + (save-match-data + (let (mc-flag enable-multibyte-characters buffer-read-only) + (goto-char (point-min)) + (if (re-search-forward "^;; okuri-ari entries.$" nil 'noerror) + nil + (skk-error + "$BAw$j$"$j%(%s%H%j$N%X%C%@!<$,$"$j$^$;$s!*(B SKK $B<-=q$N%;!<%V$rCf;_$7$^$9(B" + "Header line for okuri-ari entries is missing! Stop saving SKK jisyo" )) + ;; $B$*$C!"%3%a%s%H%U%'%$%9$,(B $" $B$G=*$o$i$J$$$>(B > hilit19.el + (if (re-search-forward "^;; okuri-nasi entries.$" nil 'noerror) + nil + (skk-error + "$BAw$j$J$7%(%s%H%j$N%X%C%@!<$,$"$j$^$;$s(B $B!*(B SKK $B<-=q$N%;!<%V$rCf;_$7$^$9(B" + "Header line for okuri-nasi entries is missing! Stop saving SKK jisyo" ))) + (write-region 1 (point-max) file nil 'nomsg) )) + +(defun skk-check-jisyo-size (new-file) + (let ((new-size (nth 7 (file-attributes new-file))) + old-size ) + (if (eq new-size 0) + (progn + (delete-file new-file) + (skk-error "SKK $B<-=q$,6u$K$J$C$F$$$^$9!*(B $B<-=q$N%;!<%V$rCf;_$7$^$9(B" + "Null SKK jisyo! Stop saving jisyo" ))) + (if (or (not skk-compare-jisyo-size-when-saving) + ;; $B5l<-=q$H$N%5%$%:Hf3S$r9T$J$o$J$$!#(B + (progn + ;; (1)skk-jisyo $B$,$J$$$+!"(B + ;; (2)new-file $B$H(B skk-jisyo $B$,F10l$N%5%$%:$+(B + ;; (skk-(aux-)large-jisyo $B$+$i?75,$NC18l$rFI$_9~$^$J$+$C$?$j!"(B + ;; $B?75,C18l$NEPO?$r9T$J$o$J$+$C$?>l9g$O%5%$%:$,F1$8(B)$B!"(B + ;; (3)new-file $B$NJ}$,Bg$-$$(B + ;; $B>l9g(B ($B>e5-$N(B 3 $BDL$j$G$"$l$P$$$:$l$b@5>o(B)$B!#(B + (setq old-size (nth 7 (file-attributes skk-jisyo))) + (or (not old-size) + (>= new-size old-size) ))) + (skk-make-new-jisyo new-file) + ;; yes-or-no-p $B$K2sEz$7!"(Bnewline $B$9$k$H!"(Bthis-command $B$,JQ$C$F$7$^$&!#(B + (let (this-command this-command-char last-command last-command-char) + (if (skk-yes-or-no-p + (format + "skk-jisyo $B$,(B %dbytes $B>.$5$/$J$j$^$9$,!"%;!<%V$7$FNI$$$G$9$+!)(B" + (- old-size new-size) ) + (format + "New %s will be %dbytes smaller. Save anyway?" + skk-jisyo (- old-size new-size) )) + ;; $B$H$K$+$/%;!<%V!#(B + (skk-make-new-jisyo new-file) + ;; $B%;!<%V$H$j;_$a!#(B + (delete-file new-file) + (with-output-to-temp-buffer "*SKK warning*" + (if skk-japanese-message-and-error + (progn + (princ "$B%;!<%V$7$h$&$H$9$k<-=q$N%5%$%:$,85$N$b$N$h$j$b>.$5$J$C$F$7$^$&$N$G!"(B") + (terpri) + (princ "$B%;!<%V$rESCf$GCf;_$7$^$7$?!#<-=q$N%5%$%:$,>.$5$/$J$C$?860x$K$ONc$((B") + (terpri) + (princ "$B$P!"(B") + (terpri) + (terpri) + (princ " $B!&(BM-x skk-purge-from-jisyo $B$r<B9T$7$?!#(B") + (terpri) + (terpri) + (princ " $B!&(B.skk-jisyo $B$N4A;z%3!<%I$H!"(B\" *.skk-jisyo*\" $B%P%C%U%!$N4A;z%3!<%I(B") + (terpri) + (princ " $B$,0[$J$C$F$$$k!#(B") + (terpri) + (terpri) + (princ " $B!&(B\" *.skk-jisyo*\" $B%P%C%U%!$r<+J,$GJT=8$7$?!#(B") + (terpri) + (terpri) + (princ "$B$J$I$,9M$($i$l$^$9(B ($B:G=i$N(B 2 $B$D$,860x$G$"$l$P!"0[>o$G$O$"$j$^$;$s!#(B") + (terpri) + (princ "$B:G8e$N>l9g$O!"$"$J$?$,$I$N$h$&$JJT=8$r$7$?$+$K$h$j$^$9(B)$B!#860x$r3NG'(B") + (terpri) + (princ "$B8e!"?5=E$K<-=q$N%;!<%V$r9T$J$&$3$H$r$*4+$a$7$^$9!#(B") + (terpri) + (terpri) + (princ "$B85$N<-=q$r:FEYFI$_9~$`$K$O!"(B") + (terpri) + (terpri) + (princ " M-x skk-reread-private-jisyo") + (terpri) + (terpri) + (princ "$B$r<B9T$7$F2<$5$$!#(B") ) + (princ "As size of your private JISYO to be saved is smaller than the") + (terpri) + (princ "original, we have stopped saving JISYO. For example, the following") + (terpri) + (princ "condition makes a smaller private JISYO;") + (terpri) + (terpri) + (princ " (a)You executed M-x skk-purge-from-jisyo,") + (terpri) + (terpri) + (princ " (b)Kanji code of .skk-jisyo is different from the one of") + (terpri) + (princ " \" *.skk-jisyo*\" buffer, or") + (terpri) + (terpri) + (princ " (c)You edited \" *.skk-jisyo*\" buffer manually.") + (terpri) + (terpri) + (princ "The first two condition is not strange, but the last one depends on") + (terpri) + (princ "how you edited JISYO. We strongly recommend to save JISYO") + (terpri) + (princ "carefully after checking what causes this.") + (terpri) + (princ "If you want to reread your original private JISYO, type") + (terpri) + (terpri) + (princ " M-x skk-reread-private-jisyo") + (terpri) )) + (skk-error "SKK $B<-=q$N%;!<%V$rCf;_$7$^$7$?!*(B" + "Stop saving SKK jisyo!" )))))) + +(defun skk-make-temp-jisyo () + ;; SKK $B8D?M<-=qJ]B8$N$?$a$N:n6HMQ$N%U%!%$%k$r:n$j!"%U%!%$%k$N%b!<%I$r(B + ;; skk-jisyo $B$N$b$N$HF1$8$K@_Dj$9$k!#:n$C$?:n6HMQ%U%!%$%k$NL>A0$rJV$9!#(B + (let ((tempo-name (skk-make-temp-file "skkdic"))) + (skk-create-file tempo-name) + (set-file-modes tempo-name (file-modes skk-jisyo)) + tempo-name )) + +(defun skk-make-temp-file (prefix) + ;; from call-process-region of mule.el. Welcome! + (make-temp-name + (if (null (memq system-type '(ms-dos windows-nt))) + (concat "/tmp/" prefix) + (let ((tem (or (getenv "TMP") (getenv "TEMP") "/"))) + (concat tem + (if (memq (aref tem (1- (length tem))) '(47 92)) ;?/, ?\\ + "" "/" ) + prefix ))))) + +(defun skk-make-new-jisyo (tempo-file) + ;; TEMPO-FILE $B$r?75,$N(B skk-jisyo $B$K$9$k!#(Bskk-backup-jisyo $B$,(B non-nil $B$@$C$?(B + ;; $B$i%P%C%/%"%C%W<-=q$r:n$k!#(B + (if skk-backup-jisyo + (progn + (if (file-exists-p skk-backup-jisyo) + (delete-file skk-backup-jisyo) ) + (rename-file skk-jisyo skk-backup-jisyo) ) + (delete-file skk-jisyo) ) + (rename-file tempo-file skk-jisyo 'ok-if-already-exists) ) + +(defun skk-reread-private-jisyo () + "$B%P%C%U%!$KFI$_9~$s$@8D?M<-=q$rGK4~$7!"%U%!%$%k$+$i%P%C%U%!$X:FFI$_9~$_$9$k!#(B" + (interactive) + (let ((buf (skk-get-jisyo-buffer skk-jisyo 'nomsg))) + (if (and buf + (skk-yes-or-no-p "$BJT=8Cf$N8D?M<-=q$rGK4~$7$^$9$+!)(B" + "Discard your editing private JISYO?" )) + (progn + (save-excursion + (set-buffer buf) + (set-buffer-modified-p nil) + (kill-buffer buf) ) + (or + (skk-get-jisyo-buffer skk-jisyo 'nomsg) + (skk-error "$B8D?M<-=q$r:FFI$_9~$_$9$k$3$H$,$G$-$^$;$s!*(B" + "Cannot reread private JISYO!" )))))) + +(defun skk-record-jisyo-data (jisyo-buffer) + ;; $B<-=q%G!<%?!<$r<h$j!"(BEmacs $B$N=*N;$N:]$G$"$l$P!"$=$N%G!<%?!<$r(B + ;; skk-record-file $B$KJ]B8$7!"$=$l0J30$G$"$l$P!"$=$l$r%(%3!<$9$k!#(B + (if (or (not skk-keep-record) (> 1 skk-kakutei-count)) + nil + (with-temp-file skk-record-file + (insert-file-contents skk-record-file) + (goto-char (point-min)) + (insert + (format + "%s $BEPO?(B: %3d $B3NDj(B: %4d $B3NDjN((B: %3d%% $B8l?t(B:%6d\n" + (current-time-string) + skk-touroku-count skk-kakutei-count + (/ (* 100 (- skk-kakutei-count skk-touroku-count)) + skk-kakutei-count ) + (if skk-count-private-jisyo-candidates-exactly + (skk-count-jisyo-candidates (expand-file-name skk-jisyo)) + ;; 1 $B9T(B 1 $B8uJd$H$_$J$9!#(B + (with-current-buffer jisyo-buffer + (- (count-lines (point-min) (point-max)) 2) ))))) + (setq skk-touroku-count 0 skk-kakutei-count 0) )) + +(defun skk-count-jisyo-candidates (file) + "SKK $B<-=q$N8uJd?t$r?t$($k!#(B +`[' $B$H(B `]' $B$K0O$^$l$?Aw$j2>L>Kh$N%V%m%C%/Fb$O?t$($J$$!#(B" + (interactive + (list (read-file-name + (format "Jisyo File: (default: %s) " skk-jisyo) + "~/" skk-jisyo 'confirm ))) + ;; mule@emacs19.31 $B$@$H2<5-$N$h$&$K$9$k$H(B (`$B%!(B' $B$,860x$N$h$&(B) $B2?8N$+(B + ;; default-directory $B$NKvHx$K2~9T$,IU$/!#(B + ;; $BDL>o$O5$$,IU$+$J$$$,!"(Brsz-mini.el $B$r;H$C$F(B resize-minibuffer-mode $B$r(B + ;; non-nil $B$K$7$F$$$k$HITMW$J(B 2 $B9TL\$,=P8=$9$k!#(B + ;; (interactive "f$B<-=q%U%!%$%k(B: ") + (with-current-buffer (find-file-noselect file) + (save-match-data + (let ((count 0) + (min (point-min)) + (max (if (interactive-p) (point-max))) + (interactive-p (interactive-p)) + mc-flag enable-multibyte-characters ) + (goto-char min) + (if (or + ;; $B$3$A$i$O(B skk-save-point $B$r;H$o$:!"%]%$%s%H$r0\F0$5$;$k!#(B + (not (re-search-forward "^;; okuri-ari entries.$" nil t nil)) + (not + (skk-save-point + (re-search-forward "^;; okuri-nasi entries.$" nil t nil) ))) + (skk-error "$B$3$N%U%!%$%k$O(B SKK $B<-=q$G$O$"$j$^$;$s(B" + "This file is not a SKK dictionary") ) + (while (search-forward "/" nil t) + (cond ((looking-at "\\[") + (forward-line 1) + (beginning-of-line) ) + ((not (eolp)) + (setq count (1+ count)) )) + (if interactive-p + (message "Counting jisyo candidates...%3d%% done" + (/ (* 100 (- (point) min)) max) ))) + (if (interactive-p) + (message "%d entries" count) + count ))))) + +(defun skk-create-file (file &optional message) + ;; FILE $B$,$J$1$l$P!"(BFILE $B$H$$$&L>A0$N6u%U%!%$%k$r:n$k!#(B + ;; $B%*%W%7%g%J%k0z?t$N(B MESSAGE $B$r;XDj$9$k$H!"%U%!%$%k:n@.8e$=$N%a%C%;!<%8$r(B + ;; $B%_%K%P%C%U%!$KI=<($9$k!#(B + (let ((file (expand-file-name file))) + (or (file-exists-p file) + (progn + (write-region 1 1 file nil 0) + (if message + (progn + (message message) + (sit-for 3) )))))) + +(defun skk-get-jisyo-buffer (file &optional nomsg) + ;; FILE $B$r3+$$$F(B SKK $B<-=q%P%C%U%!$r:n$j!"%P%C%U%!$rJV$9!#(B + ;; $B%*%W%7%g%J%k0z?t$N(B NOMSG $B$r;XDj$9$k$H%U%!%$%kFI$_9~$_$N:]$N%a%C%;!<%8$r(B + ;; $BI=<($7$J$$!#(B + (if file + (let ((inhibit-quit t) + ;; expand-file-name $B$r8F$s$G$*$+$J$$$H!";H$C$F$$$k(B OS $B>e$"$j$($J$$(B + ;; $B%U%!%$%k%M!<%`$G$b!"$=$N$^$^EO$5$l$F$7$^$&!#(B + ;; ($BNc(B) MSDOS $B$N>l9g(B ~/_skk-jisyo $B$N<B:]$N%U%!%$%k%M!<%`$O!"(BOS $B>e(B + ;; $B$N@)8B$+$i(B ~/_skk-jis $B$H$J$k!#(Bexpand-file-name $B$r8F$P$J$$$H!"(B + ;; " *_skk-jisyo*" $B$H$$$&%P%C%U%!$,$G$-$F$7$^$$!"(Bskk-save-jisyo $B$J(B + ;; $B$IB>$N4X?t$K1F6A$,=P$k!#(B + (file (expand-file-name file)) + (jisyo-buf (concat " *" (file-name-nondirectory file) + "*" ))) + ;; $B<-=q%P%C%U%!$H$7$F%*!<%W%s$5$l$F$$$k$J$i!"2?$b$7$J$$!#(B + (or (get-buffer jisyo-buf) + (with-current-buffer (setq jisyo-buf (get-buffer-create jisyo-buf)) + (buffer-disable-undo jisyo-buf) + (auto-save-mode -1) + ;; $B%o!<%-%s%0%P%C%U%!$N%b!<%I%i%$%s$O%"%C%W%G!<%H$5$l$J$$!)(B + ;;(make-local-variable 'line-number-mode) + ;;(make-local-variable 'column-number-mode) + (setq buffer-read-only nil + case-fold-search nil + ;; buffer-file-name $B$r(B nil $B$K$9$k$H!"<-=q%P%C%U%!$KF~$j9~(B + ;; $B$s$G(B C-x C-s $B$7$?$H$-$K%U%!%$%k%M!<%`$r?R$M$F$/$k$h$&$K(B + ;; $B$J$k$,!"(BM-x compile $B$J$IFbIt$G(B save-some-buffers $B$r%3!<(B + ;; $B%k$7$F$$$k%3%^%s%I$r;H$C$?$H$-$G$b%;!<%V$9$k$+$I$&$+$r(B + ;; $B?R$M$F$3$J$/$J$k!#(B + ;;buffer-file-name file + ;;cache-long-line-scans nil + ;;column-number-mode nil + ;;line-number-mode nil + ;; dabbrev $B$N%5!<%A$H$J$k%P%C%U%!$K$J$i$J$$$h$&$KB8:_$7$J(B + ;; $B$$%b!<%IL>$K$7$F$*$/!#<B32$N$"$kI{:nMQ$O$J$$$O$:!#(B + major-mode 'skk-jisyo-mode + mode-name "SKK$B<-=q(B" ) + (or nomsg + (skk-message "SKK $B<-=q(B %s $B$r%P%C%U%!$KFI$_9~$s$G$$$^$9(B..." + "Inserting contents of %s ..." + (file-name-nondirectory file) )) + (let ((coding-system-for-read 'euc-japan); XXX + enable-character-unification) + (insert-file-contents file) ) + (skk-set-jisyo-code) + (or nomsg + (skk-message + "SKK $B<-=q(B %s $B$r%P%C%U%!$KFI$_9~$s$G$$$^$9(B...$B40N;!*(B" + "Inserting contents of %s ...done" + (file-name-nondirectory file) )) + (skk-setup-jisyo-buffer) + (set-buffer-modified-p nil) + jisyo-buf ))))) + +(defun skk-set-jisyo-code () + ;; $BJ8;z%3!<%I$r(B CODE $B$K%;%C%H$9$k!#(B + (if (not skk-jisyo-code) + nil + (if (stringp skk-jisyo-code) + (setq skk-jisyo-code (cdr + (assoc skk-jisyo-code skk-coding-system-alist) ))) + (if (fboundp 'set-buffer-file-coding-system) + (set-buffer-file-coding-system skk-jisyo-code) + (set-file-coding-system skk-jisyo-code) ))) + +(defun skk-setup-jisyo-buffer () + ;; skk-jisyo $B$N<-=q%P%C%U%!$G!"(B + ;; (1)$B6u%P%C%U%!$G$"$l$P!"?7$7$/%X%C%@!<$r:n$j!"(B + ;; (2)$B<-=q%(%s%H%j$,$"$k4{B8$N<-=q%P%C%U%!$J$i$P!"%X%C%@!<$,@5$7$$$+$I$&$+$r(B + ;; $B%A%'%C%/$9$k!#(B + ;; + ;; skk-okuri-ari-min $B$H(B skk-okuri-nasi-min $B$N0LCV$rJQ99$7$?!#(B + ;; $B"-(B $B?7$7$$(B skk-okuri-ari-min + ;; ;; okuri-ari entries. + ;; $B"+(B $B0JA0$N(B skk-okuri-ari-min + ;; + ;; $B"-(B skk-okuri-ari-max $B"-(B $B?7$7$$(B skk-okuri-nasi-min + ;; ;; okuri-nasi entries. + ;; $B"+(B $B0JA0$N(B skk-okuri-nasi-min + ;; + ;; + ;; $BJQ99A0$N0LCV$G$"$l$P!"2<5-$N$h$&$J6u<-=q$N>l9g!"(B + ;; + ;; ;; okuri-ari entries. + ;; ;; okuri-nasi entries. + ;; + ;; skk-okuri-ari-min $B$H(B skk-okuri-ari-max $B$N%^!<%+!<$,=E$J$C$F$7$^$$!"(B + ;; skk-okuri-ari-min $B$N0LCV$KA^F~$7$?%(%s%H%j$,(B skk-okuri-ari-max $B$N%^!<%+!<(B + ;; $B$r8eJ}$K2!$7$d$i$J$$!#(B + ;; + ;; $B$3$N4X?t$N%*%j%8%J%k$NL>>N$O!"(Bj-check-jisyo $B$@$C$?$,!"(Bskk-check-jisyo $B$H(B + ;; $B$$$&L>A0$K$9$k$H(B skk-tools.el $BFb$N4X?tL>$H=EJ#$9$k!#(B + ;; case-fold-search $B$O!"<-=q%P%C%U%!$G$O>o$K(B nil$B!#(B + (let (mc-flag enable-multibyte-characters) + (save-match-data + (if (eq (buffer-size) 0) + ;; $B6u%P%C%U%!$@$C$?$i!"%X%C%@!<$N$_A^F~!#(B + (insert ";; okuri-ari entries.\n" ";; okuri-nasi entries.\n") ) + (goto-char (point-min)) + (if (re-search-forward "^;; okuri-ari entries.$" nil 'noerror) + ;; $B8GDj%]%$%s%H$J$N$G!"(B(point) $B$G==J,!#(B + (setq skk-okuri-ari-min (point)) + (skk-error "$BAw$j$"$j%(%s%H%j$N%X%C%@!<$,$"$j$^$;$s!*(B" + "Header line for okuri-ari entries is missing!" )) + (if (re-search-forward "^;; okuri-nasi entries.$" nil 'noerror) + (progn + (beginning-of-line) + ;; $B6&M-<-=q$J$i8GDj%]%$%s%H$G$bNI$$$N$@$,!"<-=q%P%C%U%!$GJT=8$r9T(B + ;; $B$J$C$?$H$-$N$3$H$rG[N8$7$F%^!<%+!<$K$7$F$*$/!#(B + (setq skk-okuri-ari-max (point-marker)) + (forward-line 1) + (backward-char 1) + (setq skk-okuri-nasi-min (point-marker)) ) + (skk-error "$BAw$j$J$7%(%s%H%j$N%X%C%@!<$,$"$j$^$;$s!*(B" + "Header line for okuri-nasi entries is missing!" ))))) + +;;;###skk-autoload +(defun skk-search () + ;; skk-current-search-prog-list $B$NMWAG$K$J$C$F$$$k%W%m%0%i%`$rI>2A$7$F!"(B + ;; skk-henkan-key$B$r%-!<$K$7$F8!:w$r9T$&!#(B + (let (l) + (while (and (null l) skk-current-search-prog-list) + (setq l (eval (car skk-current-search-prog-list)) + skk-current-search-prog-list (cdr skk-current-search-prog-list) )) + l )) + +(defun skk-search-relation () + (let ((last + (if (not (and + skk-last-henkan-result + (markerp skk-last-henkan-point) + (< skk-last-henkan-point (point)) + (< (- (point) skk-last-henkan-point) skk-relation-length) )) + nil + skk-last-henkan-result ))) + (skk-attr-search-relation + skk-henkan-key + (or skk-henkan-okurigana skk-okuri-char) + last ))) + +(defun skk-attr-search-relation (midasi okuri last) + (if skk-debug (message "%S" midasi okuri last)) + (or skk-attr-alist (skk-attr-read)) + (let ((entries (cdr (skk-attr-get-table-for-midasi midasi okuri))) + ret rest ) + (if skk-debug (message "%S" entries)) + (while entries + (let* ((entry (car entries)) + (rel (assq 'relation (cdr entry)))) + (if (or (null last) (member last (cdr rel))) + (setq ret (nconc ret (list (car entry)))) + (setq rest (nconc rest (list (car entry)))) ) ) + (setq entries (cdr entries)) ) + (nconc ret rest) )) + +(defun skk-update-relation (midasi okuri word last &optional purge) + (skk-attr-update-relation midasi okuri word last purge) ) + +(defun skk-attr-update-relation (midasi okuri word last &optional purge) + (or skk-attr-alist (skk-attr-read)) + (if skk-debug (message "update %S %S %S %S" midasi okuri word last)) + (if purge + (skk-attr-purge midasi okuri word) + (let* ((table (skk-attr-get-table-for-midasi midasi okuri)) + (entry (assoc word (cdr table))) + (oldattr (assq 'relation (cdr entry))) + (listlast (if last (list last) nil)) ) + (cond (oldattr + (if last + (progn + (setcdr oldattr (cons last + (delete last (cdr oldattr)) )) + (let ((tail (nthcdr skk-relation-record-num oldattr))) + (if tail + (setcdr tail nil) ))))) + (entry + (setcdr entry (cons (cons 'relation listlast) + (cdr entry)))) + (table + (setcdr table (cons (list word + (list 'okurigana okuri) + (cons 'relation listlast) ) + (cdr table) ))) + ;; new entry + (t (skk-attr-put-1 midasi okuri word 'relation listlast)) )))) + +(defun skk-search-jisyo-file (file limit &optional nomsg) + ;; SKK $B<-=q%U%)!<%^%C%H$N(B FILE $B$G(B skk-henkan-key $B$r%-!<$K$7$F8!:w$r9T$&!#(B + ;; $B8!:w%j!<%8%g%s$,(B LIMIT $B0J2<$K$J$k$^$G%P%$%J%j%5!<%A$r9T$$!"$=$N8e%j%K%"(B + ;; $B%5!<%A$r9T$&!#(B + ;; LIMIT $B$,(B 0 $B$G$"$l$P!"%j%K%"%5!<%A$N$_$r9T$&!#(B + ;; $B<-=q$,%=!<%H$5$l$F$$$J$$$N$G$"$l$P!"(BLIMIT $B$r(B 0 $B$9$kI,MW$,$"$k!#(B + ;; $B%*%W%7%g%J%k0z?t$N(B NOMSG $B$,(B non-nil $B$G$"$l$P(B skk-get-jisyo-buffer $B$N%a%C(B + ;; $B%;!<%8$r=PNO$7$J$$$h$&$K$9$k!#(B + (let ((jisyo-buffer (skk-get-jisyo-buffer file nomsg))) + (if jisyo-buffer + ;; skk-henkan-key $B$H(B skk-henkan-okurigana $B$O%+%l%s%H%P%C%U%!$N%m!<%+%k(B + ;; $BCM!#(B + (let ((okurigana (or skk-henkan-okurigana skk-okuri-char)) + (midasi + (if skk-use-numeric-conversion + ;; skk-henkan-key $B$,(B nil $B$N$3$H$,$"$k!#2?8N(B? + (skk-compute-numeric-henkan-key skk-henkan-key) + skk-henkan-key )) + entry-list entry ) + (with-current-buffer jisyo-buffer + (setq skk-henkan-key midasi + entry-list (skk-search-jisyo-file-1 okurigana limit) ) + (if entry-list + (progn + (setq entry + (cond ((and okurigana skk-henkan-okuri-strictly) + ;; $BAw$j2>L>$,F10l$N%(%s%H%j$N$_$rJV$9!#(B + (nth 2 entry-list) ) + ((and okurigana skk-henkan-strict-okuri-precedence) + ;; $BAw$j2>L>$,F10l$N%(%s%H%j$N$&$7$m$K!"(B + ;; $B$=$NB>$N%(%s%H%j$r$D$1$F$+$($9!#(B + (skk-nunion (nth 2 entry-list) (car entry-list))) + (t (car entry-list)) )) + (if (and (boundp 'skk-attr-search-function) + skk-attr-search-function ) + (funcall skk-attr-search-function midasi okurigana entry) + entry )))))))) + +(defun skk-search-jisyo-file-1 (okurigana limit &optional delete) + ;; skk-search-jisyo-file $B$N%5%V%k!<%A%s!#(Bskk-compute-henkan-lists $B$r;HMQ$7!"(B + ;; $B8+=P$78l$K$D$$$F$N%(%s%H%j$N>pJs$rJV$9!#(B + ;; DELETE $B$,(B non-nil $B$G$"$l$P!"(BMIDASI $B$K%^%C%A$9$k%(%s%H%j$r:o=|$9$k!#(B + (let ((key (concat "\n" skk-henkan-key " /")) + min max size p ) + (save-match-data + ;; skk-okuri-ari-min $B$H(B skk-okuri-ari-max $B$O<-=q%P%C%U%!$N%m!<%+%kCM!#(B + (if okurigana + (setq min skk-okuri-ari-min + max skk-okuri-ari-max ) + (setq min skk-okuri-nasi-min + max (point-max) )) + (if (> limit 0) + (while (progn (setq size (- max min)) (> size limit)) + (goto-char (+ min (/ size 2))) + (beginning-of-line) + (setq p (point)) + ;; $BAw$j$"$j$J$i5U=g$KHf3S$r9T$J$&!#(B + (if + (if okurigana + (string< (skk-buffer-substring p (1- (search-forward " "))) + skk-henkan-key ) + (string< skk-henkan-key + (skk-buffer-substring p (1- (search-forward " "))) )) + (setq max p) + (setq min p) ))) + (goto-char min) + ;; key $B$,8!:w3+;OCOE@$K$"$C$?>l9g$G$b8!:w2DG=$J$h$&$K0lJ8;zLa$k!#(Bkey $B$,(B + ;; $B$=$N@hF,ItJ,$K(B "\n" $B$r4^$s$G$$$k$3$H$KCm0U!#(B + (or (bobp) (backward-char 1)) + ;; $B8zN($,NI$$$h$&$K(B kanji-flag, mc-flag, enable-multibyte-characters $B$r(B + ;; nil $B$K$7$F$*$/!#(B + ;; case-fold-search $B$O!"<-=q%P%C%U%!$G$O>o$K(B nil$B!#(B + (let (mc-flag) + ;; enable-multibyte-characters) + (if (search-forward key max 'noerror) + (prog1 + (skk-compute-henkan-lists okurigana) + (if delete + (progn + (beginning-of-line) + (delete-region (point) + (progn (forward-line 1) (point)) ))))))))) + + +(defun skk-compute-henkan-lists (okurigana) + ;; $B<-=q%(%s%H%j$r(B 4 $B$D$N%j%9%H$KJ,2r$9$k!#(B + ;; + ;; $BAw$j$J$7(B ($BNc$($P!"<-=q%(%s%H%j(B "$B$F$s$5$$(B /$BE>:\(B/$BE7:R(B/$BE7:M(B/" $B$N=hM}(B) + ;; entry1 := ("$BE>:\(B" "$BE7:R(B" "$BE7:M(B") == $BA4%(%s%H%j(B + ;; entry2 := nil + ;; entry3 := nil + ;; entry4 := nil + ;; + ;; $BAw$j$"$j(B ($BNc$($P!"!V5c$/!W$NJQ49$r9T$C$?>l9g$N!"<-=q%(%s%H%j(B + ;; "$B$J(Bk /$BK4(B/$BL5(B/$BLD(B/$B5c(B/[$B$/(B/$BL5(B/$BLD(B/$B5c(B/]/[$B$-(B/$BK4(B/]/" $B$N=hM}(B) + ;; entry1 := ("$BK4(B" "$BL5(B" "$BLD(B" "$B5c(B") == $B4A;zItJ,$NA4%(%s%H%j(B + ;; entry2 := ("[$B$/(B") == $BB>$NAw$j2>L>$r;H$&4A;z%(%s%H%j(B ($B$"$l(B + ;; $B$P(B) + $B:#2s$NJQ49$NAw$j2>L>ItJ,(B + ;; entry3 := ("$BL5(B" "$BLD(B" "$B5c(B") == $B:#2s$NJQ49$NAw$j2>L>$r;H$&2DG=@-$N(B + ;; $B$"$kA44A;z%(%s%H%j(B + ;; entry4 := ("]" "[$B$-(B" "$BK4(B" "]") == $BB>$NAw$j2>L>$r;H$&4A;z%(%s%H%j(B ($B;D(B + ;; $B$j!#$"$l$P(B) + ;; + ;; * "[" $B$OD>8e$KB3$/$R$i$,$J$rAw$j2>L>$K;}$D4A;z$N%(%s%H%j$N=i$^$j$rI=$7!"(B + ;; "]" $B$O!"3:Ev$NAw$j2>L>%0%k!<%W$N=*$j$r<($9!#(B + ;; + ;; $B$3$N4X?t$O!"JQ49;~$H!"3NDjD>8e$N<-=q$N%"%C%W%G!<%H;~$N(B 2 $BEY8F$P$l$k(B + ;; ($BJQ49;~$K8!:w$r9T$C$?<-=q$,!"(Bskk-jisyo $B$H$O8B$i$J$$$N$G!"(B2 $BEY7W;;$;$6$k(B + ;; $B$rF@$J$$(B)$B!#(B + ;; + ;; $BJQ49;~$O!"(Bskk-henkan-okuri-strictly $B$,(B non-nil $B$G$"$l$P!"(B + ;; $B7W;;7k2L$N(B entry3$B$r!"(Bskk-henkan-okuri-strictly $B$,(B nil $B$G$"$C$F(B + ;; $B$+$D(B skk-henkan-strict-okuri-precedence $B$,(B non-nil $B$"$l$P(B + ;; (skk-uniion entry3 entry1) $B$r<h$j=P$9!#(B + ;; $B$U$?$D$NJQ?t$,$H$b$K(B nil $B$N>l9g$O(B entry1 $B$r<h$j=P$9!#(B + (if (not okurigana) + (list (string-split + "/" + (skk-buffer-substring (point) + (progn (end-of-line) (1- (point))) )) + nil nil nil ) + (save-match-data + (let ((stage 1) (q1 (queue-create)) (q2 (queue-create)) + (q3 (queue-create)) (q4 (queue-create)) + (okuri-key (concat "\[" okurigana)) item headchar ) + (catch 'exit + (while (not (eolp)) + (setq item (skk-buffer-substring (point) (1- (search-forward "/"))) + headchar (if (string= item "") (skk-int-char 0) (aref item 0)) ) + (cond ((and (eq headchar ?\[) ; ?\[ + (<= stage 2) ) + (if (string= item okuri-key) + (progn (queue-enqueue q2 item) + (setq stage 3) ) + (setq stage 2) + (queue-enqueue q2 item) )) + ((eq stage 1) + (queue-enqueue q1 item) ) + ((eq stage 2) + (queue-enqueue q2 item) ) + ((eq stage 3) + (if (eq headchar ?\]) ; ?\] + (progn (setq stage 4) + (queue-enqueue q4 item) ) + (queue-enqueue q3 item) )) + ((eq stage 4) + (queue-enqueue q4 item) )))) + ;; entry1 entry2 entry3 entry4 + (list (queue-all q1) (queue-all q2) (queue-all q3) (queue-all q4)) )))) + +;; $B%-%e!<4XO"$N4X?t$N;HMQ$K:]$7$F$O!"!V%W%m%0%i%`$N9=B$$H<B9T!W(B(H. $B%(!<%Y%k%=(B +;; $B%s!"(BG.J.$B%5%9%^%s!"(BJ.$B%5%9%^%sCx!"855HJ8CKLu!#%^%0%m%&%R%k=PHG(B) $B$H(B Elib (the +;; GNU emacs lisp library version 1.0) $B$r;29M$K$7$?!#>e5-$NJ88%$G2r@b$5$l$F$$(B +;; $B$k%-%e!<$NI=8=$O!"(BElib $B$N(B queue-m.el $B$K$*$$$F<B8=$5$l$F$$$k$b$N$H$[$\F1$8<B(B +;; $BAu$H$J$C$F$$$k!#(B +;; +;; $B%j%9%H$G$N%-%e!<$NI=8=$O!"6qBNE*$K$ONc$($P(B ((A B C D E F) F) $B$N$h$&$J7A$K$J$C(B +;; $B$F$*$j!"(Bcar $B$N%j%9%H(B (A B C D E F) $B$,%-%e!<$NA4BN$rI=$o$7!"%-%e!<$N(B nth 1 +;; $B$r<h$C$?$H$-$N(B F $B$,%-%e!<$N:G8eHx$rI=$o$9!#%-%e!<$N(B cdr $B$r<h$C$?$H$-$N(B (F) +;; $B$H$$$&%j%9%H$O!"%-%e!<$N(B car $B$KBP$7(B nthcdr 5 $B$r<h$C$?$H$-$N%j%9%H(B (F) $B$HF1(B +;; $B$8$b$N$G$"$k!#=>$$!"(Bcdr $B$N%j%9%H$N8e$K?7$7$$MWAG$rDI2C$9$k$3$H$G!"(Bcar $B$GI=(B +;; $B$o$5$l$k%-%e!<$NKvHx$K?7$7$$MWAG$rDI2C$9$k$3$H$,$G$-$k!#(B +;; $B0lJ}!"(Bnconc $B$d(B append $B$G$D$J$0$K$O!"$=$l$i$N4X?t$NBh#10z?t$N%j%9%H$NA4$F$N(B +;; $BMWAG$rAv::$;$M$P$J$i$:!"(BO(n) $B$N;~4V$,$+$+$k$N$G!"D9$$%j%9%H$r$D$J$0$H$-$OHf(B +;; $B3SE*%3%9%H$,$+$+$k!#(B +;; +;; $B$5$F!"6u$N(B queue == (cons nil nil) $B$KBP$7!"?7$7$$MWAG(B A $B$rDI2C$9$kJ}K!$r@b(B +;; $BL@$9$k!#$^$:!"?7$7$$MWAG(B A $B$N$_$r4^$s$@D9$5(B 1 $B$N%j%9%H(B (A) $B$r:n$k(B ($B2>$K(B +;; new-pair $B$H$$$&JQ?t$K<h$k(B)$B!#<!$K!"(B(setcar queue new-pair) $B$r9T$J$&$3$H$K$h(B +;; $B$j!"(Bqueue $B$,(B ((A)) $B$H$J$k(B (setcar, setcdr $B$NJV$jCM$O!"(Bnew-pair $B$G$"$k$3$H$K(B +;; $BCm0U(B)$B!#<!$K(B (setcdr queue new-pair) $B$7$F(B ((A) A) $B$H$J$C$?$H$3$m$r?^<($9$k!#(B +;; front, rear $B$NN>J}$N%]%$%s%?$,(B (A) $B$r;X$9$h$&$K$9$k(B ($B%-%e!<$NMWAG$,(B A $B$7$+(B +;; $B$J$$$N$G!"(Bfront, rear $B%]%$%s%?$H$b$KF1$8$b$N$r;X$7$F$$$k(B)$B!#(B +;; queue +;; +-------+-------+ +;; | Front | Rear | +;; +---|---+---|---+ +;; | +---> +---------------+ +;; +------------>| o | nil | +;; +---|---+-------+ +;; | +-------+ +;; +----> | A | +;; +-------+ +;; +;; $B>e5-$N(B queue, ((A) A) $B$KBP$7!"99$K?7$7$$MWAG(B B $B$rDI2C$9$k!#Nc$K$h$j(B B $B$N$_(B +;; $B$r4^$`D9$5(B 1 $B$N%j%9%H(B (B) $B$r:n$j!"JQ?t(B new-pair $B$K<h$k!#$3$3$G(B +;; (setcdr (cdr queue) new-pair) $B$rI>2A$9$k$H(B ($BCm(B1)$B!"(B* $B$N8D=j$N%]%$%s%?A`:n$,(B +;; $B9T$J$o$l$k!#%-%e!<$N:G8eJ}$K?7$7$$MWAG$G$"$k(B B $B$,DI2C$5$l$k$3$H$K$J$k!#(B +;; queue $B$O(B ((A B) A B) $B$H$J$k!#(B +;; queue +;; +-------+-------+ +;; | Front | Rear | +;; +---|---+---|---+ +;; | +---> +---------------+ * +---------------+ +;; +------------>| o | o --|------->| o | nil | +;; +---|---+-------+ +-------+-------+ +;; | +-------+ | +-------+ +;; +----> | A | +----> | B | +;; +-------+ +-------+ +;; +;; $BCm(B1; $BDI2CA0$N%-%e!<$NMWAG$,(B 1 $B$D$N$H$-$O!"(Bfront $B$b(B rear $B$bF1$8$b$N$r;X$7(B +;; $B$F$$$k$N$G(B (setcdr (car queue) new-pair) $B$G$bEy2A$@$,!"%-%e!<$NMWAG(B +;; $B$,(B 2 $B$D0J>e$N$H$-$O(B (setcdr (cdr queue) new-pair) $B$G$J$$$H$^$:$$!#(B +;; +;; $B:G8e$K(B (setcdr queue new-pair) $B$rI>2A$9$k$3$H$K$h$j!"(Brear $B%]%$%s%?$rD%$jJQ(B +;; $B$($k(B (* $B$N8D=j$N%]%$%s%?A`:n$,9T$J$o$l$k(B)$B!#(Brear $B%]%$%s%?$,%-%e!<$N:G8eJ}$N(B +;; $BMWAG$r;X$9$h$&$K$9$k!#(Bfront $B%]%$%s%?$,;X$9%j%9%H$O%-%e!<$NA4$F$NMWAG$rI=$o(B +;; $B$9!#(B +;; queue +;; +-------+-------+ * +;; | Front | Rear |---------------------+ +;; +---|---+-------+ | +;; | +---------------+ +--> +---------------+ +;; +------------>| o | o --|------->| o | nil | +;; +---|---+-------+ +-------+-------+ +;; | +-------+ | +-------+ +;; +----> | A | +----> | B | +;; +-------+ +-------+ +;; +;; $B$3$N$h$&$K%-%e!<$N:G8eJ}$K?7$7$$MWAG$rDI2C$9$k$3$H(B ($B%j%9%H$N:G8eJ}$KD9$5(B 1 +;; $B$N?7$7$$%j%9%H$r$D$J$2$k$3$H(B) $B$,(B 2 $B2s$N%]%$%s%?A`:n$G2DG=$H$J$k$N$G!"$I$N$h(B +;; $B$&$JD9$$%j%9%H$G$"$C$F$bO"7k$K$+$+$k%3%9%H$O0lDj(B (O(1) $B$N4X?t$G$"$k(B) $B$G$"$k!#(B +;; $B$J$*!"8=>u$G$O!"J?6Q$7$F0B2A$K%j%9%H$N:G8eJ}$KMWAG$r$D$J$2$k!"$H$$$&L\E*$K(B +;; $B$@$1%-%e!<$r;H$C$F$$$k!#%-%e!<K\Mh$NL\E*$G$O;HMQ$7$F$*$i$J$$$N$G!"Nc$($P!"(B +;; $B2<5-$N$h$&$J4X?t$O;HMQ$7$F$$$J$$!#(B +;; queue-last, queue-first, queue-nth, queue-nthcdr, queue-dequeue + +;;;###skk-autoload +(defun skk-nunion (x y) + ;; X $B$H(B Y $B$NOB=89g$r:n$k!#Ey$7$$$+$I$&$+$NHf3S$O!"(Bequal $B$G9T$o$l$k!#(BX $B$K(B Y + ;; $B$rGK2uE*$KO"@\$9$k!#(B + (cond ((null x) y) + ((null y) x) + (t (let ((e x)) + (while e + (setq y (delete (car e) y) + e (cdr e) )) + (if y + ;; $B>e5-$N(B while $B%k!<%W$NCf$N(B delete $B$H2<5-$N(B nconc $B$H$r9g$o$;(B + ;; $B$F!"A4It$G(B X $B$r(B 2 $B2s!"(BY $B$r(B X $B2sAv::$7$?$3$H$K$J$k!#%=!<(B + ;; $B%H$5$l$F$$$J$$=89gF1;N$+$i=89g$r:n$k0J>e(B ($B8uJd$O%=!<%H$7$F(B + ;; $B$O$J$i$J$$(B) $B!"C`<!Av::$K$J$k$N$G$3$l$O;_$`$rF@$J$$$+(B...$B!#(B + (nconc x y) + x ))))) + +(defun skk-search-kakutei-jisyo-file (file limit &optional nomsg) + ;; $B<-=q%U%!%$%k$rC5$7!"8uJd$r%j%9%H$GJV$9!#(B + ;; $B8uJd$r8+$D$1$?>l9g$O!"Bg0hJQ?t(B skk-kakutei-flag $B$K(B non-nil $B$rBeF~$9$k!#(B + ;; $B8uJd$,8+$D$+$i$J$+$C$?>l9g$O!"(Bnil $B$rJV$9!#(B + (setq skk-kakutei-flag (skk-search-jisyo-file file limit nomsg)) ) + +;;;###skk-autoload +(defun skk-update-jisyo (word &optional purge) + ;; WORD $B$,<!$NJQ49;~$K:G=i$N8uJd$K$J$k$h$&$K!"%W%i%$%Y!<%H<-=q$r99?7$9$k!#(B + ;; PURGE $B$,(B non-nil $B$G(B WORD $B$,6&M-<-=q$K$"$k%(%s%H%j$J$i(B skk-ignore-dic-word + ;; $B4X?t$G%/%)!<%H$7$?%(%s%H%j$r%W%i%$%Y!<%H<-=q$K:n$j!"<!$NJQ49$+$i=PNO$7$J(B + ;; $B$$$h$&$K$9$k!#(B + ;; WORD $B$,6&M-<-=q$K$J$1$l$P!"%W%i%$%Y!<%H<-=q$N<-=q%(%s%H%j$+$i:o=|$9$k!#(B + ;; + ;; SKK 9.x $B$h$j!"%W%i%$%Y!<%H<-=q$N%(%s%H%j$NA^F~$NJ}K!$rJQ99$7$?(B (9.3 $B$N$_(B + ;; $B$ONc30(B)$B!#(B + ;; + ;; $B!ZJQ99A0![(B + ;; ;; okuri-ari entries. + ;; $B8+%-(B $B$o$k(Bk /$B0-(B/[$B$+(B/$B0-(B/]/[$B$/(B/$B0-(B/]/ + ;; $B=P!<(B $B$o$k(Bi /$B0-(B/[$B$$(B/$B0-(B/]/ + ;; $B$7$K(B $B$o$?(Bs /$BEO(B/[$B$5(B/$BEO(B/]/[$B$;(B/$BEO(B/]/ + ;; $B8l9_(B $B$o$9(Br /$BK:(B/[$B$l(B/$BK:(B/]/ + ;; $B$r=g(B $B$o$+(Bt /$BJ,(B/$BH=(B/[$B$C$?(B/$BJ,(B/$BH=(B/]/[$B$C$F(B/$BJ,(B/]/ + ;; $B"-(B ..... + ;; $B$"(Bi /$B9g(B/[$B$$(B/$B9g(B/]/ + ;; ;; okuri-nasi entries. + ;; $BJQ$G(B $B$8$g$&$?$$(B /$B>uBV(B/ + ;; $B49>:(B $B$=$&$K$e$&(B /$BA^F~(B/ + ;; $B=g=g(B $B$+$J(B /$B2>L>(B/ + ;; $B"-(B ... + ;; ... + ;; + ;; $B!ZJQ998e![(B + ;; ;; okuri-ari entries. + ;; $BJQ$G(B $B$G(Bt /$B=P(B/[$B$F(B/$B=P(B/]/[$B$?(B/$B=P(B/]/ + ;; $B49>:(B $B$D(Bi /$BIU(B/[$B$$(B/$BIU(B/]/ + ;; $B=g=g(B $B$1(Bs /$B>C(B/[$B$9(B/$B>C(B/]/[$B$7(B/$B>C(B/]/[$B$;(B/$B>C(B/]/[$B$5(B/$B>C(B/]/ + ;; $B"-(B $B$+$((Bs /$BJV(B/[$B$7(B/$BJV(B/]/[$B$9(B/$BJV(B/]/[$B$5(B/$BJV(B/]/[$B$;(B/$BJV(B/]/ + ;; ... + ;; ... + ;; $B$J$,(Bs /$BD9(B/$BN.(B/[$B$7(B/$BN.(B/]/[$B$5(B/$BD9(B/]/[$B$=(B/$BN.(B/]/ + ;; ;; okuri-nasi entries. + ;; $BJQ$G(B $B$8$g$&$?$$(B /$B>uBV(B/ + ;; $B49>:(B $B$=$&$K$e$&(B /$BA^F~(B/ + ;; $B=g=g(B $B$+$J(B /$B2>L>(B/ + ;; $B"-(B ... + ;; ... + ;; + ;; skk-auto-okuri-process $B$,(B non-nil $B$N$H$-$K!"(B(j-okuri-search $B2~$a(B) + ;; skk-okuri-search $B$O8+=P$78l$ND9$$=g$K8uJd$rJV$9I,MW$,$"$k!#(B + ;; SKK 8.6 $B$^$G$O!"(Bskk-okuri-search $B$,(B j-okuri-ari-min $B$+$i(B j-okuri-ari-max + ;; $B$^$G$r=g$KC5$7!"8+$D$1$?$b$N=g$K8uJd$rJV$9$?$a$K%W%i%$%Y!<%H<-=q$,8+=P$7(B + ;; $B8l$r%-!<$H$7$F9_=g$K%=!<%H$5$l$F$$$kI,MW$,$"$C$?!#(B + ;; SKK 9.x $B$G$O!"(Bskk-okuri-search $B$,!"8+IU$1$?8uJd$r8+=P$78l$r%-!<$H$7$F>:=g(B + ;; $B$K%=!<%H$7$FJV$9$?$a!"%W%i%$%Y!<%H<-=q$N%=!<%H$OI,MW$G$J$$!#$h$C$F!":G8e(B + ;; $B$KJQ49$7$?$b$N$r(B (j-okuri-ari-min $B2~$a(B) skk-okuri-ari-min $B$N0LCV$KA^F~$9(B + ;; $B$k!#(B + ;; + (let ((jisyo-buffer (skk-get-jisyo-buffer skk-jisyo 'nomsg)) + (midasi + (if skk-use-numeric-conversion + (skk-compute-numeric-henkan-key skk-henkan-key) + skk-henkan-key )) + (last skk-last-henkan-result) + (last-point skk-last-henkan-point) + (here (point)) ) + (if jisyo-buffer + (let ((inhibit-quit t) buffer-read-only old-entry okurigana) + (if skk-auto-okuri-process + (setq word (skk-remove-common word)) ) + (setq okurigana (or skk-henkan-okurigana skk-okuri-char)) + ;; midasi skk-henkan-key ) + (with-current-buffer jisyo-buffer + ;; $B4{B8%(%s%H%j$r8!:w8e>C5n$9$k!#A^F~$9$Y$-%(%s%H%j$,(B entry1 $B$K(B 1 + ;; $B$D$7$+$J$/!"(Bword $B$HF1$8J8;z$G$"$C$F$b!"$$$C$?$s>C$7$F$=$N%(%s%H(B + ;; $B%j$r(B min $B%]%$%s%H$K0\F0$5$;$J$1$l$P$J$i$J$$(B ($BFI$_$NJd40$r9T$&$H(B + ;; $B$-$O!"(Bmin $B%]%$%s%H$+$i8+=P$7$rC5$9$?$a!"?7$7$$8+=P$7$[$I!"(Bmin + ;; $B%]%$%s%H$K6a$$$H$3$m$K$J$1$l$P$J$i$J$$(B)$B!#(B + (setq skk-henkan-key midasi + old-entry (skk-search-jisyo-file-1 okurigana 0 'delete) ) + (skk-update-jisyo-1 okurigana word old-entry purge) + (if skk-use-relation + (progn + (if (not (and + last + (markerp last-point) + (< last-point here) + (< (- here last-point) skk-relation-length) )) + (setq last nil) ) + (skk-update-relation + midasi okurigana word last purge) )) + (if skk-debug (message "%S %S %S" last last-point here)) + ;;(if (featurep 'skk-attr) + ;; (progn + ;; (and skk-attr-default-update-function + ;; (funcall skk-attr-default-update-function midasi + ;; okurigana word purge )) + ;; (and skk-attr-update-function + ;; (funcall skk-attr-update-function midasi okurigana + ;; word purge )))) + ;; auto save. + (if skk-jisyo-save-count + (if (> skk-jisyo-save-count skk-update-jisyo-count) + (setq skk-update-jisyo-count (1+ skk-update-jisyo-count)) + (setq skk-update-jisyo-count 0) + (skk-save-jisyo 'quiet) )) + ;; $B<-=q%P%C%U%!$r%*!<%W%s$7$?$H$-$K(B auto-save-mode $B$r%*%U$K$7$F$*(B + ;; $B$1$PKhEY2<5-$N$h$&$JA`:n$r$7$J$/$F:Q$`!#(B + ;; + ;; $B$3$&$7$F$*$1$P!"<-=q%P%C%U%!$O%*!<%H%;!<%V$5$l$J$/$F:Q$`!#(B + ;;(set-buffer-modified-p nil) + ))))) + +(defun skk-update-jisyo-1 (okurigana word old-entry-list purge) + ;; $B4{B8%(%s%H%j$+$i7W;;$7$?(B entry[1-4] $B$NCM$H!":#2s$NJQ49$N7k2L(B word $B$H$r%^!<(B + ;; $B%8$7$F!"?7$?$J%(%s%H%j$r7W;;$7!"A^F~$9$k!#(B + (let ((entry1 (car old-entry-list)) (entry2 (nth 1 old-entry-list)) + (entry3 (nth 2 old-entry-list)) (entry4 (nth 3 old-entry-list)) ) + (if (not purge) + ;; entry1 $B$N@hF,$N%(%s%H%j$r(B word $B$K$9$k!#(B + (setq entry1 (cons word (delete word entry1))) + ;; $BAw$j$J$7!"$b$7$/$O(B skk-henkan-okuri-strictly $B$H(B + ;; skk-henkan-strict-okuri-precedence $B$,(B nil $B$N>l9g!#(B + (if (or (not okurigana) (not (or skk-henkan-okuri-strictly + skk-henkan-strict-okuri-precedence ))) + ;; entry1 $B$r(B purge$B!#6&MQ<-=q$K$"$k%(%s%H%j$@$C$?$i!"(B + ;; skk-ignore-dic-word $B$G%/%)!<%H$7$F<!$NJQ49$+$i=PNO$7$J$$$h$&$K$9(B + ;; $B$k!#6&MQ<-=q$K$J$$J8;zNs$O(B word $B$r>C$9!#(B + (if (skk-public-jisyo-contains-p okurigana word) + (setq entry1 (skk-compose-ignore-entry entry1 word)) + (setq entry1 (delete word entry1)) ) + ;; $BAw$j$"$j$G!"$+$D(B skk-henkan-okuri-strictly $B$+(B + ;; skk-henkan-strict-okuri-precedence $B$,(B non-nil $B$N>l9g$G!"$+$D(B + ;; $B$3$N(B word $B$H%Z%"$K$J$kAw$j2>L>$,(B okurigana $B$7$+$J$$$H$-!#(B + (if (and okurigana (or skk-henkan-okuri-strictly + skk-henkan-strict-okuri-precedence ) + (null (member word entry2)) (null (member word entry4)) ) + (setq entry1 (delete word entry1)) + ;; $B$=$NB>$N>l9g$O2?$b$7$J$$!#(B + ))) + (if (null entry1) + ;; entry1 $B$,(B null $B$G$"$l$P!"$b$&2?$b$9$k$3$H$O$J$$!#(B + nil + (goto-char (if okurigana skk-okuri-ari-min skk-okuri-nasi-min)) + (insert "\n" skk-henkan-key " /") + ;; entry1 -- $BA4%(%s%H%j(B ($BAw$j$J$7$N>l9g(B) or $B4A;zItJ,$NA4%(%s%H%j(B ($BAw$j$"(B + ;; $B$j$N>l9g(B) + (insert (mapconcat 'skk-quote-char entry1 "/") "/") + (if (not okurigana) + nil + ;; entry2 $B0J9_$N%(%s%H%j$r=hM}$9$k$N$O!"Aw$j$"$j$N>l9g$N$_!#(B + ;; $B@h$KA^F~$9$Y$-%(%s%H%j$r7W;;!"D4@0$9$k!#(B + (if entry3 + (if (not purge) + (setq entry3 (cons word (delete word entry3))) + (setq entry3 (delete word entry3)) + (if (null entry3) + ;; entry3 $B$H$7$FA^F~$9$k$b$N$,A4$/$J$1$l$P!"(B"/[$B$/(B/]/" $B$N$h(B + ;; $B$&$JAw$j2>L>$N$_$N%(%s%H%j$r:n$i$J$$$h$&$K$9$k(B ($BI,MW$G(B + ;; $B$"$l$P!"(Bentry2 $B$N:G8eJ}$H(B) entry4 $B$N@hF,$N%(%s%H%j(B "]" + ;; $B$r:o=|!#(B + (let ((last2 (nthcdr (- (length entry2) 2) entry2))) + ;; entry2 $B$N:G8eJ}$O>o$K(B "[$BAw$j2>L>(B" $B$H$O8B$i$J$$!#(B + (if (string= (nth 1 last2) (concat "[" okurigana)) + (setcdr last2 nil) ) + ;; entry4 $B$N@hF,$O>o$K(B "]"$B!#(B + (setq entry4 (cdr entry4)) ))) + ;; entry3 $B$,(B null $B$G$"$l$P(B + (if (or skk-process-okuri-early purge) + ;; skk-process-okuri-early $B$,(B non-nil $B$J$iAw$j2>L>$,J,$i$J$$$N$G(B + ;; $B2?$b$7$J$$!#(B-- $B:#2s;HMQ$7$?Aw$j2>L>$,$o$+$i$J$$$^$^JQ49$7$F$$(B + ;; $B$k$N$G!"A4$F$N%(%s%H%j$,(B entry2 $B$KF~$C$F$$$k(B -- entry3, + ;; entry4 $B$O(B null$B!#(B + ;; entry3 $B$H$7$FA^F~$9$k$b$N$,A4$/$J$1$l$P!"2?$b$7$J$$(B -- entry3 + ;; $B$,(B purge $BA0$+$i(B null $B$J$i!"(Bentry2 $B$NKvHx$O(B "[" $B$G$J$$$7!"(B + ;; entry4 $B$O(B null $B$@$+$i(B entry[234] $B$NA`:n$OITMW!#(B + nil + (setq entry2 (nconc entry2 (list (concat "[" okurigana))) + entry3 (list word) + ;; purge $BA0$+$i(B entry3 $B$,(B null $B$@$C$?$N$@$+$i(B entry4 $B$b(B null$B!#(B + entry4 (list "]") )))) + (if entry2 + ;; entry2 -- $B:#2s;HMQ$7$J$+$C$?Aw$j2>L>$r;H$&4A;z$N8uJd72(B + "[" + $B:#(B + ;; $B2s;HMQ$7$?Aw$j2>L>(B ($BAw$j2>L>$N$_!#$=$NAw$j2>L>$r;HMQ$9$k4A;z$N8u(B + ;; $BJd72$O!"(Bentry3 $B$K4^$^$l$k(B)$B!#(B + (progn + (insert (mapconcat 'skk-quote-char entry2 "/" ) "/") + ;; entry2 $B$,(B null $B$J$i(B entry3 $B$b(B null$B!#(B + (if entry3 + ;; entry3 -- $B:#2s;HMQ$7$?Aw$j2>L>$r;H$&A44A;z%(%s%H%j(B + (insert (mapconcat 'skk-quote-char entry3 "/") "/") ) + ;; purge $B$G(B entry3 $B$,(B null $B$K$J$C$?>l9g$O(B entry4 $B$,;D$C$F$$$k$H$-(B + ;; $B$,$"$k!#(B + (if entry4 + ;; entry4 -- "]" + $BB>$NAw$j2>L>$r;H$&A44A;z%(%s%H%j(B (entry2 $B$N(B + ;; $B;D$j(B)$B!#(B + (insert (mapconcat 'skk-quote-char entry4 "/") "/") )))))) + +(defun skk-quote-char (word) + ;; $B<-=q$N@)8B$+$i<-=q%(%s%H%jFb$K4^$a$F$O$J$i$J$$J8;z$,(B WORD $B$NCf$K$"$l$P!"(B + ;; $BI>2A$7$?$H$-$K$=$NJ8;z$H$J$k$h$&$J(B Lisp $B%3!<%I$rJV$9!#(B + (save-match-data + (if (and word + (string-match "[/\n\r\"]" word) + ;; we should not quote WORD if it is a symbolic expression + (not (skk-lisp-prog-p word)) ) + (concat "(concat \"" + (mapconcat (function (lambda (c) + (cond ((eq c ?/) ; ?/ + "\\057" ) + ((eq c ?\n) ; ?\n + "\\n" ) + ((eq c ?\r) ; ?\r + "\\r" ) + ((eq c ?\") ; ?\" + "\\\"" ) + ((eq c ?\\) ; ?\\ + "\\\\" ) + (t (char-to-string c))))) + ;; $BJ8;zNs$rBP1~$9$k(B char $B$N%j%9%H$KJ,2r$9$k!#(B + (append word nil) "") + "\")") + word ))) + +(defun skk-lisp-prog-p (word) + ;; word $B$,(B Lisp $B%W%m%0%i%`$G$"$l$P!"(Bt $B$rJV$9!#(B + (let ((l (length word))) + (and (> l 2) + (eq (aref word 0) ?\() ; ?\( + (< (aref word 1) 128) + (eq (aref word (1- l)) ?\)) ))) ; ?\) + +(defun skk-public-jisyo-contains-p (okurigana word) + ;; $B6&M-<-=q$,(B MIDASHI $B5Z$S$=$l$KBP1~$9$k(B WORDS $B%(%s%H%j$r;}$C$F$$$l$P!"(B + ;; non-nil $B$rJV$9!#%W%i%$%Y!<%H<-=q$N%P%C%U%!$G%3!<%k$5$l$k!#(B + (let (fn skk-henkan-okuri-strictly skk-henkan-strict-okuri-precedence) + (if okurigana + (setq skk-henkan-okurigana okurigana) ) + (if (and (not (featurep 'skk-server)) + (or (and (boundp 'skk-server-host) skk-server-host) + (and (boundp 'skk-servers-list) skk-servers-list) + (getenv "SKKSERVER") + (getenv "SKKSERV") )) + (require 'skk-server) ) + (if (and (featurep 'skk-server) + (or (and skk-server-host skk-server-prog) + skk-servers-list )) + (setq fn (assq 'skk-search-server skk-search-prog-list)) ) + ;; skk-search-server $B$+$i;O$^$k%j%9%H$,$J$1$l$P!"$H$K$+$/Bg$-$$<-=q$r0z?t(B + ;; $B$K$7$F$$$k(B skk-search-jisyo-file $B%W%m%0%i%`$rC5$9!#(B + (if (and (not fn) (or skk-aux-large-jisyo skk-large-jisyo)) + (let ((spl skk-search-prog-list) + cell ) + (while (setq cell (car spl)) + (if (and (eq (car cell) 'skk-search-jisyo-file) + (member (nth 1 cell) + '(skk-aux-large-jisyo skk-large-jisyo) )) + (setq fn cell + spl nil ) + (setq spl (cdr spl)) )))) + (and fn (member word (eval fn))) )) + +(defun skk-compose-ignore-entry (entry &optional add) + ;; ENTRY $B$NCf$K(B skk-ignore-dic-word $B4X?t$G%/%)!<%H$7$?%(%s%H%j$,$"$l(B + ;; $B$P!"0l$D$N%(%s%H%j$K$^$H$a$k!#(B + ;; $B%*%W%7%g%J%k0z?t$N(B ADD $B$,;XDj$5$l$F$$$?$i!"(BADD $B$r4^$a$?(B + ;; skk-ignore-dic-word $B%(%s%H%j$r:n$k!#(B + ;; $B?7$7$$(B skk-ignore-dic-word $B%(%s%H%j$r(B car $B$K!"$=$l0J30$N%(%s%H%j(B cdr $B$K$7(B + ;; $B$?%j%9%H$rJV$9!#(B + (let (l arg e) + (if add (setq entry (delete add entry))) + (setq l entry) + (save-match-data + (while l + (setq e (car l) + l (cdr l) ) + (if (string-match "(skk-ignore-dic-word +\\([^\)]+\\))" e) + (setq arg (concat arg + (substring e (1+ (match-beginning 1)) + (1- (match-end 1)) ) + "\" \"" ) + entry (delq e entry) ))) + (if add + (setq arg (if arg (concat arg add) add)) + ;; $BKvHx$N(B " \"" $B$r@Z$jMn$H$9!#(B + (setq arg (substring arg 0 -2)) ) + (cons (concat "(skk-ignore-dic-word \"" arg "\")") entry) ))) + +(defun skk-katakana-region (start end &optional vcontract) + "$B%j!<%8%g%s$N$R$i$,$J$r%+%?%+%J$KJQ49$9$k!#(B +$B%*%W%7%g%J%k0z?t$N(B VCONTRACT $B$,(B non-nil $B$G$"$l$P!"(B\"$B$&!+(B\" $B$r(B \"$B%t(B\" $B$KJQ49$9(B +$B$k!#(B +$B0z?t$N(B START $B$H(B END $B$O?t;z$G$b%^!<%+!<$G$bNI$$!#(B" + (interactive "*r\nP") + (let ((diff (if skk-mule (- ?$B%"(B ?$B$"(B))) + ch ) + (skk-save-point + (save-match-data + ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-off)) + (goto-char start) + (while (re-search-forward "[$B$!(B-$B$s(B]" end 'noerror) + (setq ch (preceding-char)) + ;; firstly insert a new char, secondly delete an old char to save + ;; the cursor position. + (if skk-mule + (progn + (backward-char 1) + (cancel-undo-boundary) + (insert (+ ch diff)) ) + (backward-char 2) + (cancel-undo-boundary) + (insert ?\245 ch) ) + (cancel-undo-boundary) + (delete-region (+ (match-beginning 0) skk-kanji-len) + (+ (match-end 0) skk-kanji-len) )) + (if vcontract + (progn + (goto-char start) + (while (re-search-forward "$B%&!+(B" end 'noerror) + (if skk-mule + (backward-char 2) + (backward-char 3) ) + (cancel-undo-boundary) + (insert "$B%t(B") + (cancel-undo-boundary) + (delete-region (+ (match-beginning 0) skk-kanji-len) + (+ (match-end 0) skk-kanji-len) )))) + ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-on)) + (skk-set-cursor-properly) + )))) + +(defun skk-hiragana-region (start end &optional vexpand) + "$B%j!<%8%g%s$N%+%?%+%J$r$R$i$,$J$KJQ49$9$k!#(B +$B%*%W%7%g%J%k0z?t$N(B VEXPAND $B$,(B non-nil $B$G$"$l$P!"(B\"$B%t(B\" $B$r(B \"$B$&!+(B\" $B$KJQ49$9$k!#(B +$B0z?t$N(B START $B$H(B END $B$O?t;z$G$b%^!<%+!<$G$bNI$$!#(B +\"$B%u(B\" $B$H(B \"$B%v(B\" $B$OJQ99$5$l$J$$!#$3$N(B 2 $B$D$NJ8;z$OBP1~$9$k$R$i$,$J$,$J$$$N$G!"%+(B +$B%?%+%J$H$7$F$O07$o$l$J$$!#(B" + (interactive "*r\nP") + (let ((diff (if skk-mule (- ?$B%"(B ?$B$"(B))) + ch ) + (skk-save-point + (save-match-data + ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-off)) + (goto-char start) + (while (re-search-forward "[$B%!(B-$B%s(B]" end 'noerror) + (setq ch (preceding-char)) + ;; firstly insert a new char, secondly delete an old char to save + ;; the cursor position. + (if skk-mule + (progn + (backward-char 1) + (cancel-undo-boundary) + (insert (- ch diff)) ) + (backward-char 2) + (cancel-undo-boundary) + (insert ?\244 ch) ) + (cancel-undo-boundary) + (delete-region (+ (match-beginning 0) skk-kanji-len) + (+ (match-end 0) skk-kanji-len) )) + (if vexpand + (progn + (goto-char start) + (while (re-search-forward "$B%t(B" end 'noerror) + (backward-char 1) + (cancel-undo-boundary) + (insert "$B$&!+(B") + (cancel-undo-boundary) + (delete-region (+ (match-beginning 0) (* skk-kanji-len 2)) + (+ (match-end 0) (* skk-kanji-len 2)) )))) + ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-on)) + (skk-set-cursor-properly) + )))) + +(defun skk-zenkaku-region (start end) + "$B%j!<%8%g%s$N(B ascii $BJ8;z$rBP1~$9$kA43QJ8;z$KJQ49$9$k!#(B" + (interactive "*r") + (skk-save-point + (save-match-data + ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-off)) + (goto-char end) + (while (re-search-backward "[ -~]" start 'noerror) + (cancel-undo-boundary) + ;; firstly insert a new char, secondly delete an old char to save + ;; the cursor position. + (insert (aref skk-default-zenkaku-vector (following-char))) + (cancel-undo-boundary) + (delete-region (+ (match-beginning 0) skk-kanji-len) + (+ (match-end 0) skk-kanji-len) )) + ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-on)) + (skk-set-cursor-properly) + ))) + +(defun skk-ascii-region (start end) + ;; $B%j!<%8%g%s$NA43Q1Q?t;z$rBP1~$9$k(B ascii $BJ8;z$KJQ49$9$k!#(B + ;; egg.el 3.09 $B$N(B hankaku-region $B$r;29M$K$7$?!#(B + (interactive "*r") + (skk-save-point + (save-match-data + (let (val) + ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-off)) + (goto-char end) + (while (re-search-backward "\\cS\\|\\cA" start 'noerror) + (setq val (skk-jisx0208-to-ascii (char-to-string (following-char)))) + (if val + (progn + (insert val) + (delete-region (+ (match-beginning 0) 1) + (+ (match-end 0) 1) )))) + ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-on)) + (skk-set-cursor-properly) + )))) + +(defun skk-katakana-henkan (arg) + "$B"&%b!<%I$G$"$l$P!"%j!<%8%g%s$N$R$i$,$J$r%+%?%+%J$KJQ49$9$k!#(B +$B"'%b!<%I$G$O2?$b$7$J$$!#(B +$B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$G%P%$%s%I$5$l$F$$$k%3%^%s%I$r<B9T(B +$B$9$k!#(B" + (interactive "*P") + (if skk-henkan-on + (if (not skk-henkan-active) + (skk-*-henkan-1 'skk-katakana-region skk-henkan-start-point + skk-henkan-end-point 'vcontract )) + (skk-emulate-original-map arg) )) + +(defun skk-hiragana-henkan (arg) + "$B"&%b!<%I$G$"$l$P!"%j!<%8%g%s$N%+%?%+%J$r$R$i$,$J$KJQ49$9$k!#(B +$B"'%b!<%I$G$O2?$b$7$J$$!#(B +$B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$G%P%$%s%I$5$l$F$$$k%3%^%s%I$r<B9T(B +$B$9$k!#(B" + (interactive "*P") + (if skk-henkan-on + (if (not skk-henkan-active) + (skk-*-henkan-1 'skk-hiragana-region skk-henkan-start-point + skk-henkan-end-point 'vexpand )) + (skk-emulate-original-map arg) )) + +(defun skk-zenkaku-henkan (arg) + "$B"&%b!<%I$G$"$l$P!"(Bascii $BJ8;z$rBP1~$9$kA43QJ8;z$KJQ49$9$k!#(B +$B"'%b!<%I$G$O2?$b$7$J$$!#(B +$B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$G%P%$%s%I$5$l$F$$$k%3%^%s%I$r<B9T(B +$B$9$k!#(B" + (interactive "*P") + (if skk-henkan-on + (if (not skk-henkan-active) + (skk-*-henkan-1 'skk-zenkaku-region skk-henkan-start-point + skk-henkan-end-point )) + (skk-emulate-original-map arg) )) + +(defun skk-ascii-henkan (arg) + "$B"&%b!<%I$G$"$l$P!"(Bascii $BJ8;z$rBP1~$9$kA43QJ8;z$KJQ49$9$k!#(B +$B"'%b!<%I$G$O2?$b$7$J$$!#(B +$B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$G%P%$%s%I$5$l$F$$$k%3%^%s%I$r<B9T(B +$B$9$k!#(B" + (interactive "*P") + (if skk-henkan-on + (if (not skk-henkan-active) + (skk-*-henkan-1 'skk-ascii-region skk-henkan-start-point + skk-henkan-end-point )) + (skk-emulate-original-map arg) )) + +(defun skk-*-henkan-1 (func &rest args) + ;; $BJQ492DG=$+$I$&$+$N%A%'%C%/$r$7$?8e$K(B ARGS $B$r0z?t$H$7$F(B FUNC $B$rE,MQ$7!"(B + ;; skk-henkan-start-point $B$H(B skk-henkan-end-point $B$N4V$NJ8;zNs$rJQ49$9$k!#(B + (let ((pos (point))) + (cond ((not (string= skk-prefix "")) + (skk-error "$B%U%#%C%/%9$5$l$F$$$J$$(B skk-prefix $B$,$"$j$^$9(B" + "Have unfixed skk-prefix" )) + ((< pos skk-henkan-start-point) + (skk-error "$B%+!<%=%k$,JQ493+;OCOE@$h$jA0$K$"$j$^$9(B" + "Henkan end point must be after henkan start point" )) + ((and (not skk-allow-spaces-newlines-and-tabs) + (skk-save-point (beginning-of-line) + (> (point) skk-henkan-start-point) )) + (skk-error "$BJQ49%-!<$K2~9T$,4^$^$l$F$$$^$9(B" + "Henkan key may not contain a new line character" ))) + (skk-set-marker skk-henkan-end-point pos) + (apply func args) + (skk-kakutei) )) + +;;;###skk-autoload +(defun skk-jisx0208-to-ascii (string) + (let ((char + (cond (skk-mule3 + (require 'language/japan-util) + (get-char-code-property (string-to-char string) 'ascii) ) + (skk-mule + (let* ((ch (string-to-char string)) + (ch1 (char-component ch 1)) ) + (cond ((eq 161 ch1) ; ?\241 + (cdr (assq (char-component ch 2) skk-hankaku-alist)) ) + ((eq 163 ch1) ; ?\243 + (- (char-component ch 2) 128) ; ?\200 + )))) + (t (- (aref string (1- skk-kanji-len)) 128)) ))) + (if char (char-to-string char)) )) + +;;;###skk-autoload +(defun skk-middle-list (org offset inserted) + ;; ORG := '(A B C), INSERTED := '(X Y), OFFSET := 1 + ;; -> '(A B X Y C) + (let (tmp tail) + (if (>= 0 offset) + (error "Cannot insert!") ) + (setq tmp (nthcdr (1- offset) org) + tail (cdr tmp) ) + (setcdr tmp nil) ;cut off + (setcdr tmp (if tail (nconc inserted tail) inserted)) + org )) + +;;(defun skk-chomp (nth list) +;; (let ((l (nthcdr (1- nth) list))) +;; (setcdr l nil) +;; list )) + +;;(defun skk-cutoff-list (list offset) +;; ;; LIST := '(A B C), OFFSET := 1 +;; ;; -> '(A B) +;; (if (< 0 offset) +;; (setcdr (nthcdr (1- offset) list) nil) ) +;; list ) + +(defun skk-henkan-face-on () + ;; skk-use-face $B$,(B non-nil $B$N>l9g!"(Bskk-henkan-start-point $B$H(B + ;; skk-henkan-end-point $B$N4V$N(B face $BB0@-$r(B skk-henkan-face $B$NCM$KJQ99$9$k!#(B + ;; + ;; SKK 9.4 $B$h$j(B Text Properties $B$r;HMQ$9$k$N$r;_$a$F!"(BOverlays $B$r;HMQ$9$k$h(B + ;; $B$&$K$7$?(B (egg.el, canna.el, wnn-egg.el $B$r;29M$K$7$?(B)$B!#(B + ;; Overlays $B$O!"%F%-%9%H$N0lIt$G$O$J$$$N$G!"%P%C%U%!$+$iJ8;z$r@Z$j=P$7$F$b%3(B + ;; $B%T!<$NBP>]$K$J$i$J$$$7!"%"%s%I%%;~$bL5;k$5$l$k$N$G!"JQ49$5$l$?8uJd$NI=<((B + ;; $B$r0l;~E*$KJQ99$9$k$K$O(B Text Properties $B$h$j$b9%ET9g$G$"$k!#(B + ;; + ;; $BC"$7!"(BOverlays $B$O(B Text Properties $B$h$j07$$$KCm0U$9$Y$-E@$,$"$k!#(B + ;; $B%*!<%P%l%$$NCf$N%^!<%+$rD>@\JQ99$7$F$7$^$&$H!"$[$+$N=EMW$J%G!<%?9=B$$N99(B + ;; $B?7$,9T$o$l$:!"<:$o$l$k%*!<%P%l%$$,=P$k$3$H$K$J$j$+$M$J$$(B (Overlay $B$N(B + ;; Buffer$B$NHO0O$rJQ99$9$k$H$-$O!"I,$:(B move-overlay $B$r;HMQ$7$J$1$l$P$J$i$J$$(B) + ;; $B$H$$$&E@$G$"$k!#(Bskk-henkan-face-on $B$GJQ497k2L$N8uJd$K4X$9$k(B + ;; skk-henkan-overlay $B$r?75,$K:n$C$F$+$i(B ($B$"$k$$$O4{B8$N(B Overlay $B$r3:Ev8D=j(B + ;; $B$K0\F0$7$F$+$i(B) skk-henkan-face-off $B$G>C5n$9$k$^$G$N4V$K(B + ;; skk-henkan-start-point $B$H(B skk-henkan-end-point $BCf$N%F%-%9%H$r:o=|$9$k$H!"(B + ;; $B7k2LE*$K(B move-overlay $B$r;HMQ$;$:$=$l$i$N%^!<%+!<CM$r99?7$9$k$3$H$K$J$C$F(B + ;; $B$7$^$&!#=>$$!"(Bskk-henkan-start-point $B$H(B skk-henkan-end-point $B$N4V$K$"$k%F(B + ;; $B%-%9%H$KJQ99$r2C$($k$H$-$O!"@h$K(B skk-henkan-face-off $B$G0lC6(B + ;; skk-henkan-overlay $B$r>C$9I,MW$,$"$k(B (<(skk-e19.el/kill-region)>)$B!#(B + ;; + ;;From: enami tsugutomo <enami@ba2.so-net.or.jp> + ;;Subject: overlay (was Re: SKK-9.4.15) + ;;Date: 23 Oct 1996 16:35:53 +0900 + ;;Message-ID: <87n2xe5e06.fsf@plants-doll.enami.ba2.so-net.or.jp> + ;; + ;;enami> $B4X?t(B skk-henkan-face-on $B$N(B comment $B$N(B + ;;enami> + ;;enami> ;; $BC"$7!"(BOverlays $B$O(B Text Properties $B$h$j07$$$KCm0U$9$Y$-E@$,$"$k!#(B + ;;enami> ;; $B%*!<%P%l%$$NCf$N%^!<%+$rD>@\JQ99$7$F$7$^$&$H!"$[$+$N=EMW$J%G!<%?9=B$$N99(B + ;;enami> ;; $B?7$,9T$o$l$:!"<:$o$l$k%*!<%P%l%$$,=P$k$3$H$K$J$j$+$M$J$$(B + ;;enami> + ;;enami> ($B5Z$S$=$l0J9_(B) $B$NItJ,$K4X$7$F$G$9$,(B, make-overlay $B$G0LCV$N;XDj$K;H$C(B + ;;enami> $B$?(B marker $B$,$=$N$^$^(B overlay $B$N0lIt$H$7$F;H$o$l$k$H(B, $B8m2r$7$F$$$^$;$s(B + ;;enami> $B$G$7$g$&$+(B? + ;;enami> + ;;enami> $B<B:]$K$O(B overlay $B$N0lIt$r0Y$9(B marker $B$rD>@\0\F0$5$;$k$3$H$O$G$-$^$;$s(B + ;;enami> $B$7(B, text $B$N:o=|DI2C$K$h$k0\F0$K$OBP=h$7$F$$$^$9$+$iLdBj$J$$$H;W$$$^$9(B. + ;;enami> + ;;enami> # $B$=$&$G$J$+$C$?$i(B overlay $B$C$FL5Cc6lCc;H$$$E$i$$$b$N$K$J$C$F$7$^$$$^(B + ;;enami> # $B$9(B. + ;;enami> $B$($J$_(B + (let ((inhibit-quit t) + cbuf ) + (if (and skk-henkan-face + (setq cbuf (current-buffer)) + (eq (marker-buffer skk-henkan-start-point) cbuf) + (eq (marker-buffer skk-henkan-end-point) cbuf) + (marker-position skk-henkan-start-point) + (marker-position skk-henkan-end-point) ) + (progn + (or skk-henkan-overlay + (setq skk-henkan-overlay (skk-make-overlay skk-henkan-start-point + skk-henkan-end-point + cbuf ))) + (skk-move-overlay skk-henkan-overlay skk-henkan-start-point + skk-henkan-end-point cbuf ) + ;; evaporate $BB0@-$rIU$1$k$Y$-$+(B...$B!#$G$bJQ49$r7+$jJV$9$H$-$O!":FMxMQ(B + ;; $B$9$k$N$@$+$i!"$`$7$m!"4{$K:n$C$F$"$kJ}$,NI$$$+$b!#(B + (skk-overlay-put skk-henkan-overlay 'face skk-henkan-face) )))) + +(defun skk-henkan-face-off () + ;; skk-henkan-start-point $B$H(B skk-henkan-end-point $B$N4V$NI=<($rJQ99$7$F$$$k(B + ;; skk-henkan-overlay $B$r>C$9!#(B + (and skk-henkan-face + ;; $B%j%+!<%7%V%_%K%P%C%U%!$KF~$C$?$H$-$O!"(Boverlayp $B$K$h$k8!::$,I,MW!)(B + (skk-overlayp skk-henkan-overlay) + (skk-delete-overlay skk-henkan-overlay) )) + +(defun skk-set-cursor-color (color) + ;; $B%+!<%=%k$N?'$r(B COLOR $B$KJQ99$9$k!#(B + (if skk-use-color-cursor + (condition-case nil + (set-cursor-color color) + (error + (set-cursor-color skk-default-cursor-color) + (if skk-report-set-cursor-error + (skk-message + "$B%+%i!<%^%C%W@Z$l$G$9!#%G%#%U%)%k%H$N%+%i!<$r;H$$$^$9!#(B" + "Color map is exhausting, use default cursor color" )))))) + +;;;###skk-autoload +(defun skk-set-cursor-properly () + ;; $B%+%l%s%H%P%C%U%!$N(B SKK $B$N%b!<%I$K=>$$!"%+!<%=%k$N?'$rJQ99$9$k!#(B + (if skk-use-color-cursor + (if (not skk-mode) + (skk-set-cursor-color skk-default-cursor-color) + (skk-set-cursor-color (cond (skk-zenkaku-mode skk-zenkaku-cursor-color) + (skk-katakana skk-katakana-cursor-color) + (skk-j-mode skk-hirakana-cursor-color) + (t skk-ascii-cursor-color) )))) + (if skk-use-cursor-change + (skk-change-cursor-when-ovwrt) )) + +;;;###skk-autoload +(defun skk-change-cursor-when-ovwrt () + (if skk-xemacs + (setq bar-cursor overwrite-mode) + (if overwrite-mode + (modify-frame-parameters (selected-frame) '((cursor-type bar . 3))) + (modify-frame-parameters (selected-frame) '((cursor-type . box))) ))) + +;;;###skk-autoload +(defun skk-make-face (face) + ;; hilit-lookup-face-create $B$N%5%V%;%C%H!#(Btutorial $B$G?'IU$1$r9T$J$&>l9g$G$b(B + ;; hilit19 $B$K0MB8$;$:$H$j$"$($:(B face $B$r<+A0$G:n$k$3$H$,$G$-$k$h$&$K!"$H$$$&(B + ;; $BL\E*$G:n$C$?$b$N$G!"4JC1$J?'IU$1$7$J$G$-$J$$!#$"$^$j8-$/$O$J$$!#J#;($J(B + ;; face $B$r:n$j$?$$?M$O(B hilit-lookup-face-create $BEy$r;H$C$F2<$5$$!#(B + (or (car (memq face (face-list))) + (let ((face-name (symbol-name face)) + fore back ) + (setq face (make-face face)) + (save-match-data + (if (not (string-match "/" face-name)) + (set-face-foreground face face-name) + (set-face-foreground + face + (substring face-name 0 (match-beginning 0)) ) + (set-face-background + face + (substring face-name (1+ (match-beginning 0))) )) + face )))) + +;;(defun skk-reinvoke () +;; (let ((original-status +;; (cond (skk-katakana 'katakana) +;; (skk-zenkaku-mode 'zenkaku) +;; (skk-j-mode 'hirakana) +;; (skk-mode 'ascii) +;; (t 'unkown) ))) +;; (skk-mode 1) +;; (cond ((eq original-status 'katakana) +;; (setq skk-katakana t) ) +;; ((eq original-status 'zenkaku) +;; (setq skk-zenkaku-mode t) ) +;; ((eq original-status 'ascii) +;; (setq skk-j-mode nil) ) +;; ((eq original-status 'hirakana)) ) +;; (skk-kakutei) )) + +(add-hook 'edit-picture-hook 'skk-misc-for-picture 'append) +(add-hook 'skk-before-kill-emacs-hook + (function (lambda () + (if skk-menu-modified-user-option + (skk-menu-save-modified-user-option) )))) +(add-hook 'after-make-frame-hook 'skk-set-cursor-properly) +(add-hook 'minibuffer-setup-hook + (function (lambda () (skk-set-cursor-properly))) ) + +(add-hook 'minibuffer-exit-hook + (function + (lambda () + (remove-hook 'minibuffer-setup-hook 'skk-setup-minibuffer) + (skk-set-cursor-properly) ))) + +(run-hooks 'skk-load-hook) + +(provide 'skk) +;;; skk.el ends here