Remove non-free old and crusty clearcase pkg
[packages] / mule-packages / skk / skk-tut.el
1 ; SKK tutorial for SKK version 10.46 and later versions
2 ;; Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 ;;               1998, 1999, 2000
4 ;; Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>
5
6 ;; Author: Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>
7 ;; Maintainer: Mikio Nakajima <minakaji@osaka.email.ne.jp>
8 ;; Version: $Id: skk-tut.el,v 1.3 2000-11-08 01:51:44 youngs Exp $
9 ;; Keywords: japanese
10 ;; Last Modified: $Date: 2000-11-08 01:51:44 $
11
12 ;; This file is part of SKK.
13
14 ;; SKK is free software; you can redistribute it and/or modify
15 ;; it under the terms of the GNU General Public License as published by
16 ;; the Free Software Foundation; either versions 2, or (at your option)
17 ;; any later version.
18
19 ;; SKK is distributed in the hope that it will be useful
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 ;; GNU General Public License for more details.
23
24 ;; You should have received a copy of the GNU General Public License
25 ;; along with SKK, see the file COPYING.  If not, write to the Free
26 ;; Software Foundation Inc., 59 Temple Place - Suite 330, Boston,
27 ;; MA 02111-1307, USA.
28
29 ;;; Commentary:
30 ;;; Code:
31 (require 'skk)
32
33 ;;;###autoload
34 (defgroup skk-tut nil "SKK tutorial conversion related customization."
35   :prefix "skk-tut-"
36   :group 'skk )
37
38 ;; User variables.  prefix should be `skk-tut-'.
39 (defcustom skk-tut-file 
40   (static-cond ((eq skk-emacs-type 'xemacs) (locate-data-file "SKK.tut"))
41                (t "/usr/local/share/skk/SKK.tut"))
42   "*SKK \e$B%A%e!<%H%j%"%k$N%U%!%$%kL>!#\e(B
43 The English version is SKK.tut.E."
44   :type 'file
45   :group 'skk-tut )
46
47 (defvar skk-tut-file-alist
48   (` (("Japanese" . (, skk-tut-file))
49       ("English" . (, (concat skk-tut-file ".E"))) ))
50   "*Alist of `(LANGUAGE . TUTORIAL-FILE)' pairs." )
51
52 (defcustom skk-tut-use-face t
53   "*Non-nil \e$B$G$"$l$P!"%A%e!<%H%j%"%k$G\e(B face \e$B$rMxMQ$7$?I=<($r9T$J$&!#\e(B" 
54   :type 'boolean
55   :group 'skk-tut )
56
57 (defface skk-tut-section-face
58   '((((class color) (background light))
59      (:foreground "yellow" :background "dodgerblue"))
60     (((class color) (background dark))
61      (:foreground "yellow" :background "slateblue"))
62     (((class grayscale)) (:bold t) (:italic t)) )
63   "*\e$B%A%e!<%H%j%"%kCf$N%;%/%7%g%s$NI=<(ItJ,$N\e(B face\e$B!#\e(B" 
64   :group 'skk-faces )
65
66 (defface skk-tut-do-it-face
67   '((((class color) (background light)) (:foreground "DarkGoldenrod"))
68     (((class color) (background dark)) (:foreground "LightGoldenrod"))
69     (((class grayscale)) (:bold t)) )
70   "*\e$B%A%e!<%H%j%"%kCf$N;X<(9`L\$NI=<(ItJ,$N\e(B face\e$B!#\e(B"
71   :group 'skk-faces )
72
73 (defface skk-tut-question-face
74   '((((class color) (background light)) (:foreground "Blue"))
75     (((class color) (background dark)) (:foreground "LightSkyBlue"))
76     (((class grayscale)) (:underline t)) )
77   "*\e$B%A%e!<%H%j%"%kCf$NLdBj$NI=<(ItJ,$N\e(B face\e$B!#\e(B"
78   :group 'skk-faces )
79
80 (defface skk-tut-key-bind-face
81   '((((class color) (background light)) (:foreground "Firebrick"))
82     (((class color) (background dark)) (:foreground "OrangeRed"))
83     (((class grayscale)) (:bold t)) )
84   "*\e$B%A%e!<%H%j%"%kCf$N%-!<%P%$%s%I$NI=<(ItJ,$N\e(B face\e$B!#\e(B"
85   :group 'skk-faces )
86
87 (defface skk-tut-hint-face
88   '((((class color) (background light)) (:foreground "CadetBlue"))
89     (((class color) (background dark)) (:foreground "Aquamarine"))
90     (((class grayscale)) (:italic t)) )
91   "*\e$B%A%e!<%H%j%"%kCf$N%R%s%H$NI=<(ItJ,$N\e(B face\e$B!#\e(B
92 \e$B8=:_$N$H$3$m!"\e(BSKK.tut.E \e$B$G$7$+;HMQ$5$l$F$$$J$$!#\e(B"
93   :group 'skk-faces )
94
95 ;; internal variables and constants.
96 ;; prefix should be `skktut-'.
97 (defvar skk-tut-section-face 'skk-tut-section-face)
98 (defvar skk-tut-do-it-face 'skk-tut-do-it-face)
99 (defvar skk-tut-question-face 'skk-tut-question-face)
100 (defvar skk-tut-key-bind-face 'skk-tut-key-bind-face)
101 (defvar skk-tut-hint-face 'skk-tut-hint-face)
102
103 (defconst skktut-adviced-alist
104   '((skk-abbrev-mode . before) (skk-insert . before)
105     (skk-kakutei . before) (skk-mode . before)
106     (kill-buffer . around) (other-frame . before)
107     (save-buffers-kill-emacs . around)
108     ;;(select-frame . before)
109     )
110   "SKK \e$B%A%e!<%H%j%"%k$G\e(B advice \e$B$,IU$1$i$l$k4X?t$H\e(B advice class \e$B$N%(!<%j%9%H!#\e(B" )
111
112 (defconst skktut-question-numbers 37 "SKK \e$B%A%e!<%H%j%"%k$NLdBj?t!#\e(B")
113
114 (defconst skktut-tut-jisyo "~/skk-tut-jisyo"
115   "SKK \e$B%A%e!<%H%j%"%kMQ$N%@%_!<<-=q!#\e(B" )
116
117 (defconst skktut-init-variables-alist
118   '((skk-abbrev-cursor-color . "royalblue")
119     (skk-abbrev-mode-string . " a\e$B$"\e(B")
120     (skk-allow-spaces-newlines-and-tabs . t)
121     (skk-auto-fill-mode-hook . nil)
122     (skk-auto-insert-paren . nil)
123     (skk-auto-okuri-process . nil)
124     (skk-auto-start-henkan . nil)
125     (skk-byte-compile-init-file . nil)
126     (skk-comp-load-hook . nil)
127     (skk-compare-jisyo-size-when-saving . nil)
128     (skk-completion-function . 'skk-completion-original)
129     (skk-convert-okurigana-into-katakana . nil)
130     (skk-count-jisyo-candidates-function . 'skk-count-jisyo-candidates-original)
131     (skk-count-private-jisyo-candidates-exactly . nil)
132     (skk-dabbrev-like-completion . nil)
133     (skk-date-ad . 1)
134     (skk-default-cursor-color . (if (eq skk-emacs-type 'xemacs)
135                                     (frame-property (selected-frame) 'cursor-color)
136                                   (cdr (assq 'cursor-color (frame-parameters (selected-frame)))) ))
137     (skk-delete-implies-kakutei . t)
138     (skk-delete-okuri-when-quit . nil)
139     (skk-downcase-alist . nil)
140     (skk-echo . t)
141     (skk-egg-like-newline . nil)
142     (skk-gadget-load-hook . nil)
143     (skk-henkan-face . 'highlight)
144     (skk-henkan-okuri-strictly . nil)
145     (skk-henkan-overlay-priority . 600)
146     (skk-henkan-show-candidates-keys . '(?a ?s ?d ?f ?j ?k ?l))
147     (skk-henkan-strict-okuri-precedence . nil)
148     (skk-hiragana-mode-string . " \e$B$+$J\e(B")
149     (skk-init-file . "")
150     (skk-input-by-code-menu-keys1 . '(?a ?s ?d ?f ?g ?h ?q ?w ?e ?r ?t ?y))
151     (skk-input-by-code-menu-keys2 . '(?a ?s ?d ?f ?g ?h ?j ?k ?l ?q ?w ?e ?r ?t ?y ?u))
152     (skk-japanese-message-and-error . nil)
153     (skk-jisx0208-latin-cursor-color . "gold")
154     (skk-jisx0208-latin-mode-string . " \e$BA41Q\e(B")
155     (skk-jisx0208-latin-vector . skk-default-jisx0208-latin-vector)
156     (skk-jisyo . "~/skk-tut-jisyo")
157     (skk-jisyo-save-count . nil)
158     (skk-kakutei-early . t)
159     (skk-kakutei-key . "\C-j")
160     (skk-kana-input-search-function . (function
161                                        (lambda ()
162                                          (save-match-data
163                                            (and (string-match
164                                                  "^h\\([bcdfghjklmnpqrstvwxz]\\)$"
165                                                  skk-prefix )
166                                                 (member (char-to-string (preceding-char))
167                                                         '("\e$B$*\e(B" "\e$B%*\e(B") )
168                                                 (cons '("\e$B%*\e(B" . "\e$B$*\e(B") (match-string 1 skk-prefix)) )))))
169     (skk-katakana-mode-string . " \e$B%+%J\e(B")
170     (skk-kcode-load-hook . nil)
171     (skk-keep-record . nil)
172     (skk-kuten-touten-alist . '((jp . ("\e$B!#\e(B" . "\e$B!"\e(B"))))
173     (skk-kutouten-type . 'jp)
174     (skk-latin-cursor-color . "ivory4")
175     (skk-latin-mode-string . " SKK")
176     (skk-load-hook . nil)
177     (skk-mode-hook . nil)
178     (skk-next-completion-key . ".")
179     (skk-number-style . 1)
180     (skk-okuri-char-alist . nil)
181     (skk-previous-completion-function . 'skk-previous-completion-original)
182     (skk-previous-completion-key . ",")
183     (skk-process-okuri-early . nil)
184     (skk-public-jisyo-has-entry-p-function . 'skk-public-jisyo-has-entry-p-original)
185     (skk-report-set-cursor-error . t)
186     (skk-rom-kana-base-rule-list .
187                                  '(("a" nil ("\e$B%"\e(B" . "\e$B$"\e(B")) ("bb" "b" ("\e$B%C\e(B" . "\e$B$C\e(B"))
188                                    ("ba" nil ("\e$B%P\e(B" . "\e$B$P\e(B")) ("be" nil ("\e$B%Y\e(B" . "\e$B$Y\e(B"))
189                                    ("bi" nil ("\e$B%S\e(B" . "\e$B$S\e(B")) ("bo" nil ("\e$B%\\e(B" . "\e$B$\\e(B"))
190                                    ("bu" nil ("\e$B%V\e(B" . "\e$B$V\e(B")) ("bya" nil ("\e$B%S%c\e(B" . "\e$B$S$c\e(B"))
191                                    ("bye" nil ("\e$B%S%'\e(B" . "\e$B$S$'\e(B")) ("byi" nil ("\e$B%S%#\e(B" . "\e$B$S$#\e(B"))
192                                    ("byo" nil ("\e$B%S%g\e(B" . "\e$B$S$g\e(B")) ("byu" nil ("\e$B%S%e\e(B" . "\e$B$S$e\e(B"))
193                                    ("cc" "c" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("cha" nil ("\e$B%A%c\e(B" . "\e$B$A$c\e(B"))
194                                    ("che" nil ("\e$B%A%'\e(B" . "\e$B$A$'\e(B")) ("chi" nil ("\e$B%A\e(B" . "\e$B$A\e(B"))
195                                    ("cho" nil ("\e$B%A%g\e(B" . "\e$B$A$g\e(B")) ("chu" nil ("\e$B%A%e\e(B" . "\e$B$A$e\e(B"))
196                                    ("cya" nil ("\e$B%A%c\e(B" . "\e$B$A$c\e(B")) ("cye" nil ("\e$B%A%'\e(B" . "\e$B$A$'\e(B"))
197                                    ("cyi" nil ("\e$B%A%#\e(B" . "\e$B$A$#\e(B")) ("cyo" nil ("\e$B%A%g\e(B" . "\e$B$A$g\e(B"))
198                                    ("cyu" nil ("\e$B%A%e\e(B" . "\e$B$A$e\e(B")) ("dd" "d" ("\e$B%C\e(B" . "\e$B$C\e(B"))
199                                    ("da" nil ("\e$B%@\e(B" . "\e$B$@\e(B")) ("de" nil ("\e$B%G\e(B" . "\e$B$G\e(B"))
200                                    ("dha" nil ("\e$B%G%c\e(B" . "\e$B$G$c\e(B")) ("dhe" nil ("\e$B%G%'\e(B" . "\e$B$G$'\e(B"))
201                                    ("dhi" nil ("\e$B%G%#\e(B" . "\e$B$G$#\e(B")) ("dho" nil ("\e$B%G%g\e(B" . "\e$B$G$g\e(B"))
202                                    ("dhu" nil ("\e$B%G%e\e(B" . "\e$B$G$e\e(B")) ("di" nil ("\e$B%B\e(B" . "\e$B$B\e(B"))
203                                    ("do" nil ("\e$B%I\e(B" . "\e$B$I\e(B")) ("du" nil ("\e$B%E\e(B" . "\e$B$E\e(B"))
204                                    ("dya" nil ("\e$B%B%c\e(B" . "\e$B$B$c\e(B")) ("dye" nil ("\e$B%B%'\e(B" . "\e$B$B$'\e(B"))
205                                    ("dyi" nil ("\e$B%B%#\e(B" . "\e$B$B$#\e(B")) ("dyo" nil ("\e$B%B%g\e(B" . "\e$B$B$g\e(B"))
206                                    ("dyu" nil ("\e$B%B%e\e(B" . "\e$B$B$e\e(B")) ("e" nil ("\e$B%(\e(B" . "\e$B$(\e(B"))
207                                    ("ff" "f" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("fa" nil ("\e$B%U%!\e(B" . "\e$B$U$!\e(B"))
208                                    ("fe" nil ("\e$B%U%'\e(B" . "\e$B$U$'\e(B")) ("fi" nil ("\e$B%U%#\e(B" . "\e$B$U$#\e(B"))
209                                    ("fo" nil ("\e$B%U%)\e(B" . "\e$B$U$)\e(B")) ("fu" nil ("\e$B%U\e(B" . "\e$B$U\e(B"))
210                                    ("fya" nil ("\e$B%U%c\e(B" . "\e$B$U$c\e(B")) ("fye" nil ("\e$B%U%'\e(B" . "\e$B$U$'\e(B"))
211                                    ("fyi" nil ("\e$B%U%#\e(B" . "\e$B$U$#\e(B")) ("fyo" nil ("\e$B%U%g\e(B" . "\e$B$U$g\e(B"))
212                                    ("fyu" nil ("\e$B%U%e\e(B" . "\e$B$U$e\e(B")) ("gg" "g" ("\e$B%C\e(B" . "\e$B$C\e(B"))
213                                    ("ga" nil ("\e$B%,\e(B" . "\e$B$,\e(B")) ("ge" nil ("\e$B%2\e(B" . "\e$B$2\e(B"))
214                                    ("gi" nil ("\e$B%.\e(B" . "\e$B$.\e(B")) ("go" nil ("\e$B%4\e(B" . "\e$B$4\e(B"))
215                                    ("gu" nil ("\e$B%0\e(B" . "\e$B$0\e(B")) ("gya" nil ("\e$B%.%c\e(B" . "\e$B$.$c\e(B"))
216                                    ("gye" nil ("\e$B%.%'\e(B" . "\e$B$.$'\e(B")) ("gyi" nil ("\e$B%.%#\e(B" . "\e$B$.$#\e(B"))
217                                    ("gyo" nil ("\e$B%.%g\e(B" . "\e$B$.$g\e(B")) ("gyu" nil ("\e$B%.%e\e(B" . "\e$B$.$e\e(B"))
218                                    ;;("h" "" ("\e$B%*\e(B" . "\e$B$*\e(B"))
219                                    ("ha" nil ("\e$B%O\e(B" . "\e$B$O\e(B")) ("he" nil ("\e$B%X\e(B" . "\e$B$X\e(B"))
220                                    ("hi" nil ("\e$B%R\e(B" . "\e$B$R\e(B")) ("ho" nil ("\e$B%[\e(B" . "\e$B$[\e(B"))
221                                    ("hu" nil ("\e$B%U\e(B" . "\e$B$U\e(B")) ("hya" nil ("\e$B%R%c\e(B" . "\e$B$R$c\e(B"))
222                                    ("hye" nil ("\e$B%R%'\e(B" . "\e$B$R$'\e(B")) ("hyi" nil ("\e$B%R%#\e(B" . "\e$B$R$#\e(B"))
223                                    ("hyo" nil ("\e$B%R%g\e(B" . "\e$B$R$g\e(B")) ("hyu" nil ("\e$B%R%e\e(B" . "\e$B$R$e\e(B"))
224                                    ("i" nil ("\e$B%$\e(B" . "\e$B$$\e(B")) ("jj" "j" ("\e$B%C\e(B" . "\e$B$C\e(B"))
225                                    ("ja" nil ("\e$B%8%c\e(B" . "\e$B$8$c\e(B")) ("je" nil ("\e$B%8%'\e(B" . "\e$B$8$'\e(B"))
226                                    ("ji" nil ("\e$B%8\e(B" . "\e$B$8\e(B")) ("jo" nil ("\e$B%8%g\e(B" . "\e$B$8$g\e(B"))
227                                    ("ju" nil ("\e$B%8%e\e(B" . "\e$B$8$e\e(B")) ("jya" nil ("\e$B%8%c\e(B" . "\e$B$8$c\e(B"))
228                                    ("jye" nil ("\e$B%8%'\e(B" . "\e$B$8$'\e(B")) ("jyi" nil ("\e$B%8%#\e(B" . "\e$B$8$#\e(B"))
229                                    ("jyo" nil ("\e$B%8%g\e(B" . "\e$B$8$g\e(B")) ("jyu" nil ("\e$B%8%e\e(B" . "\e$B$8$e\e(B"))
230                                    ("kk" "k" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("ka" nil ("\e$B%+\e(B" . "\e$B$+\e(B"))
231                                    ("ke" nil ("\e$B%1\e(B" . "\e$B$1\e(B")) ("ki" nil ("\e$B%-\e(B" . "\e$B$-\e(B"))
232                                    ("ko" nil ("\e$B%3\e(B" . "\e$B$3\e(B")) ("ku" nil ("\e$B%/\e(B" . "\e$B$/\e(B"))
233                                    ("kya" nil ("\e$B%-%c\e(B" . "\e$B$-$c\e(B")) ("kye" nil ("\e$B%-%'\e(B" . "\e$B$-$'\e(B"))
234                                    ("kyi" nil ("\e$B%-%#\e(B" . "\e$B$-$#\e(B")) ("kyo" nil ("\e$B%-%g\e(B" . "\e$B$-$g\e(B"))
235                                    ("kyu" nil ("\e$B%-%e\e(B" . "\e$B$-$e\e(B")) ("mm" "c" ("\e$B%C\e(B" . "\e$B$C\e(B"))
236                                    ("ma" nil ("\e$B%^\e(B" . "\e$B$^\e(B")) ("me" nil ("\e$B%a\e(B" . "\e$B$a\e(B"))
237                                    ("mi" nil ("\e$B%_\e(B" . "\e$B$_\e(B")) ("mo" nil ("\e$B%b\e(B" . "\e$B$b\e(B"))
238                                    ("mu" nil ("\e$B%`\e(B" . "\e$B$`\e(B")) ("mya" nil ("\e$B%_%c\e(B" . "\e$B$_$c\e(B"))
239                                    ("mye" nil ("\e$B%_%'\e(B" . "\e$B$_$'\e(B")) ("myi" nil ("\e$B%_%#\e(B" . "\e$B$_$#\e(B"))
240                                    ("myo" nil ("\e$B%_%g\e(B" . "\e$B$_$g\e(B")) ("myu" nil ("\e$B%_%e\e(B" . "\e$B$_$e\e(B"))
241                                    ("n" nil ("\e$B%s\e(B" . "\e$B$s\e(B")) ("n'" nil ("\e$B%s\e(B" . "\e$B$s\e(B"))
242                                    ("na" nil ("\e$B%J\e(B" . "\e$B$J\e(B")) ("ne" nil ("\e$B%M\e(B" . "\e$B$M\e(B"))
243                                    ("ni" nil ("\e$B%K\e(B" . "\e$B$K\e(B")) ("nn" nil ("\e$B%s\e(B" . "\e$B$s\e(B"))
244                                    ("no" nil ("\e$B%N\e(B" . "\e$B$N\e(B")) ("nu" nil ("\e$B%L\e(B" . "\e$B$L\e(B"))
245                                    ("nya" nil ("\e$B%K%c\e(B" . "\e$B$K$c\e(B")) ("nye" nil ("\e$B%K%'\e(B" . "\e$B$K$'\e(B"))
246                                    ("nyi" nil ("\e$B%K%#\e(B" . "\e$B$K$#\e(B")) ("nyo" nil ("\e$B%K%g\e(B" . "\e$B$K$g\e(B"))
247                                    ("nyu" nil ("\e$B%K%e\e(B" . "\e$B$K$e\e(B")) ("o" nil ("\e$B%*\e(B" . "\e$B$*\e(B"))
248                                    ("pp" "p" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("pa" nil ("\e$B%Q\e(B" . "\e$B$Q\e(B"))
249                                    ("pe" nil ("\e$B%Z\e(B" . "\e$B$Z\e(B")) ("pi" nil ("\e$B%T\e(B" . "\e$B$T\e(B"))
250                                    ("po" nil ("\e$B%]\e(B" . "\e$B$]\e(B")) ("pu" nil ("\e$B%W\e(B" . "\e$B$W\e(B"))
251                                    ("pya" nil ("\e$B%T%c\e(B" . "\e$B$T$c\e(B")) ("pye" nil ("\e$B%T%'\e(B" . "\e$B$T$'\e(B"))
252                                    ("pyi" nil ("\e$B%T%#\e(B" . "\e$B$T$#\e(B")) ("pyo" nil ("\e$B%T%g\e(B" . "\e$B$T$g\e(B"))
253                                    ("pyu" nil ("\e$B%T%e\e(B" . "\e$B$T$e\e(B")) ("rr" "r" ("\e$B%C\e(B" . "\e$B$C\e(B"))
254                                    ("ra" nil ("\e$B%i\e(B" . "\e$B$i\e(B")) ("re" nil ("\e$B%l\e(B" . "\e$B$l\e(B"))
255                                    ("ri" nil ("\e$B%j\e(B" . "\e$B$j\e(B")) ("ro" nil ("\e$B%m\e(B" . "\e$B$m\e(B"))
256                                    ("ru" nil ("\e$B%k\e(B" . "\e$B$k\e(B")) ("rya" nil ("\e$B%j%c\e(B" . "\e$B$j$c\e(B"))
257                                    ("rye" nil ("\e$B%j%'\e(B" . "\e$B$j$'\e(B")) ("ryi" nil ("\e$B%j%#\e(B" . "\e$B$j$#\e(B"))
258                                    ("ryo" nil ("\e$B%j%g\e(B" . "\e$B$j$g\e(B")) ("ryu" nil ("\e$B%j%e\e(B" . "\e$B$j$e\e(B"))
259                                    ("ss" "s" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("sa" nil ("\e$B%5\e(B" . "\e$B$5\e(B"))
260                                    ("se" nil ("\e$B%;\e(B" . "\e$B$;\e(B")) ("sha" nil ("\e$B%7%c\e(B" . "\e$B$7$c\e(B"))
261                                    ("she" nil ("\e$B%7%'\e(B" . "\e$B$7$'\e(B")) ("shi" nil ("\e$B%7\e(B" . "\e$B$7\e(B"))
262                                    ("sho" nil ("\e$B%7%g\e(B" . "\e$B$7$g\e(B")) ("shu" nil ("\e$B%7%e\e(B" . "\e$B$7$e\e(B"))
263                                    ("si" nil ("\e$B%7\e(B" . "\e$B$7\e(B")) ("so" nil ("\e$B%=\e(B" . "\e$B$=\e(B"))
264                                    ("su" nil ("\e$B%9\e(B" . "\e$B$9\e(B")) ("sya" nil ("\e$B%7%c\e(B" . "\e$B$7$c\e(B"))
265                                    ("sye" nil ("\e$B%7%'\e(B" . "\e$B$7$'\e(B")) ("syi" nil ("\e$B%7%#\e(B" . "\e$B$7$#\e(B"))
266                                    ("syo" nil ("\e$B%7%g\e(B" . "\e$B$7$g\e(B")) ("syu" nil ("\e$B%7%e\e(B" . "\e$B$7$e\e(B"))
267                                    ("tt" "t" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("ta" nil ("\e$B%?\e(B" . "\e$B$?\e(B"))
268                                    ("te" nil ("\e$B%F\e(B" . "\e$B$F\e(B")) ("tha" nil ("\e$B%F%!\e(B" . "\e$B$F$!\e(B"))
269                                    ("the" nil ("\e$B%F%'\e(B" . "\e$B$F$'\e(B")) ("thi" nil ("\e$B%F%#\e(B" . "\e$B$F$#\e(B"))
270                                    ("tho" nil ("\e$B%F%g\e(B" . "\e$B$F$g\e(B")) ("thu" nil ("\e$B%F%e\e(B" . "\e$B$F$e\e(B"))
271                                    ("ti" nil ("\e$B%A\e(B" . "\e$B$A\e(B")) ("to" nil ("\e$B%H\e(B" . "\e$B$H\e(B"))
272                                    ("tsu" nil ("\e$B%D\e(B" . "\e$B$D\e(B")) ("tu" nil ("\e$B%D\e(B" . "\e$B$D\e(B"))
273                                    ("tya" nil ("\e$B%A%c\e(B" . "\e$B$A$c\e(B")) ("tye" nil ("\e$B%A%'\e(B" . "\e$B$A$'\e(B"))
274                                    ("tyi" nil ("\e$B%A%#\e(B" . "\e$B$A$#\e(B")) ("tyo" nil ("\e$B%A%g\e(B" . "\e$B$A$g\e(B"))
275                                    ("tyu" nil ("\e$B%A%e\e(B" . "\e$B$A$e\e(B")) ("u" nil ("\e$B%&\e(B" . "\e$B$&\e(B"))
276                                    ("vv" "v" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("va" nil ("\e$B%t%!\e(B" . "\e$B$&!+$!\e(B"))
277                                    ("ve" nil ("\e$B%t%'\e(B" . "\e$B$&!+$'\e(B")) ("vi" nil ("\e$B%t%#\e(B" . "\e$B$&!+$#\e(B"))
278                                    ("vo" nil ("\e$B%t%)\e(B" . "\e$B$&!+$)\e(B")) ("vu" nil ("\e$B%t\e(B" . "\e$B$&!+\e(B"))
279                                    ("ww" "w" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("wa" nil ("\e$B%o\e(B" . "\e$B$o\e(B"))
280                                    ("we" nil ("\e$B%&%'\e(B" . "\e$B$&$'\e(B")) ("wi" nil ("\e$B%&%#\e(B" . "\e$B$&$#\e(B"))
281                                    ("wo" nil ("\e$B%r\e(B" . "\e$B$r\e(B")) ("wu" nil ("\e$B%&\e(B" . "\e$B$&\e(B"))
282                                    ("xx" "x" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("xa" nil ("\e$B%!\e(B" . "\e$B$!\e(B"))
283                                    ("xe" nil ("\e$B%'\e(B" . "\e$B$'\e(B")) ("xi" nil ("\e$B%#\e(B" . "\e$B$#\e(B"))
284                                    ("xka" nil ("\e$B%u\e(B" . "\e$B$+\e(B")) ("xke" nil ("\e$B%v\e(B" . "\e$B$1\e(B"))
285                                    ("xo" nil ("\e$B%)\e(B" . "\e$B$)\e(B")) ("xtsu" nil ("\e$B%C\e(B" . "\e$B$C\e(B"))
286                                    ("xtu" nil ("\e$B%C\e(B" . "\e$B$C\e(B")) ("xu" nil ("\e$B%%\e(B" . "\e$B$%\e(B"))
287                                    ("xwa" nil ("\e$B%n\e(B" . "\e$B$n\e(B")) ("xwe" nil ("\e$B%q\e(B" . "\e$B$q\e(B"))
288                                    ("xwi" nil ("\e$B%p\e(B" . "\e$B$p\e(B")) ("xya" nil ("\e$B%c\e(B" . "\e$B$c\e(B"))
289                                    ("xyo" nil ("\e$B%g\e(B" . "\e$B$g\e(B")) ("xyu" nil ("\e$B%e\e(B" . "\e$B$e\e(B"))
290                                    ("yy" "y" ("\e$B%C\e(B" . "\e$B$C\e(B")) ("ya" nil ("\e$B%d\e(B" . "\e$B$d\e(B"))
291                                    ("ye" nil ("\e$B%$%'\e(B" . "\e$B$$$'\e(B")) ("yo" nil ("\e$B%h\e(B" . "\e$B$h\e(B"))
292                                    ("yu" nil ("\e$B%f\e(B" . "\e$B$f\e(B")) ("zz" "z" ("\e$B%C\e(B" . "\e$B$C\e(B"))
293                                    ("z," nil "\e$B!E\e(B") ("z-" nil "\e$B!A\e(B") ("z." nil "\e$B!D\e(B")
294                                    ("z/" nil "\e$B!&\e(B") ("z[" nil "\e$B!X\e(B") ("z]" nil "\e$B!Y\e(B")
295                                    ("za" nil ("\e$B%6\e(B" . "\e$B$6\e(B")) ("ze" nil ("\e$B%<\e(B" . "\e$B$<\e(B"))
296                                    ("zh" nil "\e$B"+\e(B") ("zi" nil ("\e$B%8\e(B" . "\e$B$8\e(B"))
297                                    ("zj" nil "\e$B"-\e(B") ("zk" nil "\e$B",\e(B") ("zl" nil "\e$B"*\e(B")
298                                    ("zo" nil ("\e$B%>\e(B" . "\e$B$>\e(B")) ("zu" nil ("\e$B%:\e(B" . "\e$B$:\e(B"))
299                                    ("zya" nil ("\e$B%8%c\e(B" . "\e$B$8$c\e(B")) ("zye" nil ("\e$B%8%'\e(B" . "\e$B$8$'\e(B"))
300                                    ("zyi" nil ("\e$B%8%#\e(B" . "\e$B$8$#\e(B")) ("zyo" nil ("\e$B%8%g\e(B" . "\e$B$8$g\e(B"))
301                                    ("zyu" nil ("\e$B%8%e\e(B" . "\e$B$8$e\e(B")) ("." nil skk-current-kuten)
302                                    ("," nil skk-current-touten) ("-" nil "\e$B!<\e(B")
303                                    (":" nil "\e$B!'\e(B") (";" nil "\e$B!(\e(B") ("?" nil "\e$B!)\e(B")
304                                    ("[" nil "\e$B!V\e(B") ("]" nil "\e$B!W\e(B") ("l" nil skk-latin-mode)
305                                    ("q" nil skk-toggle-kana) ("L" nil skk-jisx0208-latin-mode)
306                                    ("Q" nil skk-set-henkan-point-subr)
307                                    ("X" nil skk-purge-from-jisyo) ("/" nil skk-abbrev-mode)
308                                    ("$" nil skk-display-code-for-char-at-point)
309                                    ("@" nil skk-today) ("\\" nil skk-input-by-code-or-menu) ))
310     (skk-rom-kana-rule-list . '(("hh" "h" ("\e$B%C\e(B" . "\e$B$C\e(B"))))
311     (skk-save-jisyo-function . 'skk-save-jisyo-original)
312     (skk-search-excluding-word-pattern-function . nil)
313     (skk-search-prog-list . '((skk-search-jisyo-file skktut-tut-jisyo 0 t)))
314     (skk-set-henkan-point-key . '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?M ?N ?O ?P ?R ?S ?T ?U ?V ?W ?Y ?Z))
315     (skk-special-midashi-char-list . '(?> ?< ??))
316     (skk-start-henkan-key . " ")
317     (skk-try-completion-key . "\t")
318     (skk-update-jisyo-function . 'skk-update-jisyo-original)
319     (skk-use-color-cursor . (and window-system (fboundp 'x-display-color-p) (x-display-color-p)))
320     (skk-use-cursor-change . t)
321     (skk-use-face . (or window-system (skk-terminal-face-p)))
322     (skk-use-look . nil)
323     (skk-use-numeric-conversion . t)
324     (skk-use-rdbms . nil)
325     (skk-use-relation . nil)
326     (skk-use-viper . nil)
327
328     ;; not user variables but to be localized.
329     (skk-insert-new-word-function . nil)
330     (skk-mode-invoked . t)
331     (skk-rule-tree
332      .
333      (skk-compile-rule-list skk-rom-kana-base-rule-list skk-rom-kana-rule-list) ))
334   "skk.el \e$B$N%f!<%6!<JQ?t$N%j%9%H!#\e(B" )
335
336 (defvar skktut-japanese-tut nil
337   "Non-nil \e$B$G$"$l$P!"%A%e!<%H%j%"%k$,F|K\8l$G$"$k$3$H$r<($9!#\e(B" )
338 (defvar skktut-right-answer nil "\e$B@52r$NJ8;zNs!#\e(B")
339 (defvar skktut-question-count 1 "\e$B%A%e!<%H%j%"%k$N8=:_$NLdBjHV9f!#\e(B")
340 (defvar skktut-tutorial-end nil "\e$B%A%e!<%H%j%"%k$N=*N;$r<($9%U%i%0!#\e(B")
341 (defvar skktut-working-buffer " *skk-tutorial*")
342 (defvar skktut-question-buffer "*\e$BLd\e(B*")
343 (defvar skktut-answer-buffer "*\e$BEz\e(B*")
344 (defvar skktut-jisyo-buffer " *skk-tut-jisyo*")
345 (defvar skktut-original-window-configuration nil)
346 (defvar skktut-working-window-configuration nil)
347 (defvar skktut-skk-mode-on nil
348   "Non-nil \e$B$G$"$l$P!"\e(Bskk-tutorial \e$B$r5/F0$7$?$H$-$K\e(B SKK \e$B$,4{$K5/F0$5$l$F$$$?$3$H$r<($9!#\e(B" )
349
350 (defvar skktut-latin-mode-map nil
351   "SKK \e$B%A%e!<%H%j%"%k\e(B ASCII \e$B%b!<%I%-!<%^%C%W!#\e(B" )
352
353 (or skktut-latin-mode-map
354     (let ((map (make-sparse-keymap)))
355       (define-key map "\C-j" 'skk-kakutei)
356       (setq skktut-latin-mode-map map) ))
357
358 (defvar skktut-j-mode-map nil
359   "SKK \e$B%A%e!<%H%j%"%k$+$J\e(B/\e$B%+%J%b!<%I%-!<%^%C%W!#\e(B" )
360
361 (or skktut-j-mode-map
362     (let ((map (make-sparse-keymap)))
363       (substitute-key-definition 'self-insert-command 'skk-insert map
364                                  global-map)
365       (substitute-key-definition 'egg-self-insert-command 'skk-insert map
366                                  global-map)
367       (substitute-key-definition 'canna-self-insert-command 'skk-insert map
368                                  global-map)
369       (substitute-key-definition 'canna-henkan-region-or-self-insert
370                                  'skk-insert map global-map)
371       (substitute-key-definition 'can-n-egg-self-insert-command 'skk-insert map
372                                  global-map)
373       (define-key map "x" 'skk-previous-candidate)
374       (define-key map "\C-j" 'skk-kakutei)
375       (define-key map "\t" 'skk-insert)
376       (setq skktut-j-mode-map map)))
377
378 (defvar skktut-jisx0208-latin-mode-map nil
379   "SKK \e$B%A%e!<%H%j%"%kA43Q1Q?t;z%b!<%I%-!<%^%C%W!#\e(B" )
380
381 (or skktut-jisx0208-latin-mode-map
382     (let ((map (make-sparse-keymap))
383           (i 0))
384       (while (< i 128)
385         (if (aref skk-jisx0208-latin-vector i)
386             (define-key map (char-to-string i) 'skk-jisx0208-latin-insert))
387         (setq i (1+ i)))
388       (define-key map "\C-j" 'skk-kakutei)
389       (setq skktut-jisx0208-latin-mode-map map)))
390
391 (defvar skktut-abbrev-mode-map nil
392   "SKK \e$B%A%e!<%H%j%"%k\e(B Abbrev \e$B%b!<%I%-!<%^%C%W!#\e(B")
393
394 (or skktut-abbrev-mode-map
395     (let ((map (make-sparse-keymap)))
396       (define-key map "," 'skk-abbrev-comma)
397       (define-key map "." 'skk-abbrev-period)
398       (define-key map "\C-q" 'skk-jisx0208-latin-henkan)
399       (define-key map "\C-j" 'skk-kakutei)
400       (define-key map " " 'skk-start-henkan)
401       (define-key map "\t" 'skk-try-completion)
402       (setq skktut-abbrev-mode-map map)))
403
404 ;; -- macros
405 (defmacro skktut-message (japanese english &rest arg)
406   ;; skktut-japanese-tut \e$B$,\e(B non-nil \e$B$@$C$?$i\e(B JAPANESE \e$B$r\e(B nil \e$B$G$"$l$P\e(B ENGLISH
407   ;; \e$B$r%(%3!<%(%j%"$KI=<($9$k!#\e(B
408   ;; ARG \e$B$O\e(B message \e$B4X?t$NBh#20z?t0J9_$N0z?t$H$7$FEO$5$l$k!#\e(B
409   (append (list 'message (list 'if 'skktut-japanese-tut japanese english))
410           arg ))
411
412 (defmacro skktut-error (japanese english &rest arg)
413   ;; skktut-japanese-tut \e$B$,\e(B non-nil \e$B$@$C$?$i\e(B JAPANESE \e$B$r\e(B nil \e$B$G$"$l$P\e(B ENGLISH
414   ;; \e$B$r%(%3!<%(%j%"$KI=<($7!"%(%i!<$rH/@8$5$;$k!#\e(B
415   ;; ARG \e$B$O\e(B error \e$B4X?t$NBh#20z?t0J9_$N0z?t$H$7$FEO$5$l$k!#\e(B
416   (append (list 'error (list 'if 'skktut-japanese-tut japanese english))
417           arg ))
418
419 (defmacro skktut-yes-or-no-p (japanese english)
420   (list 'yes-or-no-p (list 'if 'skktut-japanese-tut japanese english)) )
421
422 ;; advices.
423 (defadvice skk-abbrev-mode (before skktut-ad disable)
424   "SKK \e$B%A%e!<%H%j%"%kMQ%"%I%P%$%9IU!#\e(B"
425   (and (> 12 skktut-question-count)
426        (skktut-error "\e$B$3$N%-!<$O$^$@;H$($^$;$s\e(B" "Cannot use this key yet" ) ))
427
428 (defadvice skk-insert (before skktut-ad disable)
429   "SKK \e$B%A%e!<%H%j%"%kMQ%"%I%P%$%9IU!#\e(B"
430   (and (memq last-command-char skk-set-henkan-point-key)
431        (> 12 skktut-question-count)
432        (skktut-error "\e$B$+$J\e(B/\e$B%+%J%b!<%I$G$O!"1QBgJ8;z$O$^$@;H$($^$;$s\e(B"
433                      "Cannot use upper case character in kana/katakana mode" ) ))
434
435 (defadvice skk-kakutei (before skktut-ad disable)
436   "SKK \e$B%A%e!<%H%j%"%kMQ%"%I%P%$%9IU!#\e(B"
437   (and (interactive-p)
438        (= skktut-question-count 1)
439        (skktut-error "\e$B$3$N%-!<$O$^$@;H$($^$;$s\e(B" "Cannot use this key yet" ) ))
440
441 (defadvice skk-mode (before skktut-ad disable)
442   "SKK \e$B%A%e!<%H%j%"%kMQ%"%I%P%$%9IU!#\e(B"
443   (and (interactive-p)
444        (= skktut-question-count 1)
445        (skktut-error "\e$B$3$N%-!<$O$^$@;H$($^$;$s\e(B" "Cannot use this key yet" ) ))
446
447 ;;; XXX interactive subr with args.
448 (defadvice kill-buffer (around skktut-ad disable)
449   "SKK \e$B%A%e!<%H%j%"%kMQ%"%I%P%$%9IU!#\e(B"
450   (interactive "bKill buffer: ")
451   (cond ((or (not (interactive-p))
452              (null (member (ad-get-arg 0) (list skktut-working-buffer
453                                                 skktut-question-buffer
454                                                 skktut-answer-buffer
455                                                 skktut-jisyo-buffer ))))
456          ad-do-it )
457         ((skktut-yes-or-no-p "\e$B%A%e!<%H%j%"%k$r$d$a$^$9$+\e(B? "
458                              "Quit tutorial? " )
459          (skk-tutorial-quit 'now)
460          ;; already killed.
461          ;;ad-do-it
462          )))
463
464 (defadvice other-frame (before skktut-ad disable)
465   "SKK \e$B%A%e!<%H%j%"%kMQ%"%I%P%$%9IU!#\e(B"
466   (skktut-before-move-to-other-frame) )
467
468 ;;(defadvice select-frame (before skktut-ad disable)
469 ;;(defadvice select-frame (before skktut-ad activate)
470 ;;  "SKK \e$B%A%e!<%H%j%"%kMQ%"%I%P%$%9IU!#\e(B"
471 ;;  (skktut-before-move-to-other-frame) )
472
473 (defadvice save-buffers-kill-emacs (around skktut-ad disable)
474   "SKK \e$B%A%e!<%H%j%"%kMQ%"%I%P%$%9IU!#\e(B"
475   (if (skktut-yes-or-no-p "Tutorial \e$B$b\e(B Emacs \e$B$b=*N;$7$^$9!#$h$m$7$$$G$9$M!)\e(B "
476                           "Quit tutorial and kill emacs? " )
477       (progn (skk-tutorial-quit 'now)
478              ad-do-it )))
479
480 ;; interactive commands. prefix should be `skk-tutorial'.
481 ;;;###autoload
482 (defun skk-tutorial (&optional query-language)
483   "SKK \e$B%A%e!<%H%j%"%k$r5/F0$9$k!#\e(B
484 C-u M-x skk-tutorial \e$B$9$k$H!"%A%e!<%H%j%"%k%U%!%$%k$NA*Br$,2DG=!#\e(B"
485   (interactive "P")
486   (if query-language
487       (let* ((lang (completing-read "Language: " skk-tut-file-alist))
488              (file (cdr (assoc lang skk-tut-file-alist))) )
489         (if (not (file-exists-p (expand-file-name file)))
490             (error "No file found as %s" file)
491           (setq skk-tut-file file)
492           (message "SKK tutorial language set to %s until you exit Emacs"
493                    lang ))))
494   (let ((inhibit-quit t))
495     (if (not (and (boundp 'skk-major-version) (boundp 'skk-minor-version)
496                   (>= skk-major-version 10) (>= skk-minor-version 46) ))
497         (error "skk.el version 10.46 or later is required")
498       (skktut-pre-setup-tutorial)
499       (skktut-setup-jisyo-buffer)
500       (skktut-setup-working-buffer)
501       (skktut-setup-question-buffer)
502       (skktut-setup-answer-buffer)
503       (skktut-enable-advice)
504       (skktut-enable-tutmap)
505       (add-hook 'before-make-frame-hook 'skktut-before-move-to-other-frame)
506       (add-hook 'minibuffer-setup-hook 'skktut-localize-and-init-variables)
507       (skktut-make-windows) )))
508
509 (defun skk-tutorial-again (&optional now)
510   "SKK \e$B%A%e!<%H%j%"%k$r:G=i$+$i$d$jD>$9!#\e(B
511 C-u M-x skk-tutorial-again \e$B$9$k$H!"\e(Byes-or-no-p \e$B$G?R$M$i$l$k$3$H$J$/D>$A$K$d$jD>$9!#\e(B"
512  (interactive "P")
513   (if (or now
514           (skktut-yes-or-no-p "\e$B:G=i$+$i\e(B Tutorial \e$B$r$d$jD>$7$^$9!#$h$m$7$$$G$9$M!)\e(B "
515                               "Quit tutorial and start from question 1 again? " ))
516       (progn (skk-tutorial-quit 'now)
517              (skk-tutorial) )))
518
519 (defun skk-tutorial-quit (&optional now)
520   "SKK \e$B%A%e!<%H%j%"%k$r$d$a$k!#\e(B
521 C-u M-x skk-tutorial-quit \e$B$9$k$H!"\e(Byes-or-no-p \e$B$G?R$M$i$l$k$3$H$J$/D>$A$K$d$a$k!#\e(B"
522   (interactive "P")
523   (if (or now (skktut-yes-or-no-p "\e$BK\Ev$K%A%e!<%H%j%"%k$r$d$a$^$9$+\e(B? "
524                                   "Really quit tutorial? " ))
525       (let ((inhibit-quit t))
526         (delete-other-windows)
527         ;; \e$B:FEY%A%e!<%H%j%"%k$r;H$($k$h$&$K!"FbItJQ?t$r=i4|2=$7$F$*$/!#\e(B
528         (setq skktut-japanese-tut nil
529               skktut-question-count 1
530               skktut-right-answer nil
531               skktut-tutorial-end nil )
532         (remove-hook 'minibuffer-setup-hook 'skktut-localize-and-init-variables)
533         (remove-hook 'before-make-frame-hook 'skktut-before-move-to-other-frame)
534         (skktut-disable-tutmap)
535         (skktut-disable-advice)
536         (save-excursion
537           (set-buffer skktut-jisyo-buffer)
538           (set-buffer-modified-p nil)
539           (kill-buffer skktut-jisyo-buffer) )
540         (kill-buffer skktut-working-buffer)
541         (kill-buffer skktut-answer-buffer)
542         (kill-buffer skktut-question-buffer)
543         (set-window-configuration skktut-original-window-configuration)
544         ;; SKK \e$B$r5/F0$;$:$K$$$-$J$j\e(B
545         ;; skk-tutorial \e$B$r<B9T$7$?$H$-$K\e(B skk-jisyo \e$B%P%C%U%!$,:n$i$l$J$$$N$G\e(B
546         ;; skk-setup-jisyo-buffer \e$B$G%(%i!<$H$J$j!"\e(BEmacs \e$B$N=*N;$,$G$-$J$/\e(B
547         ;; \e$B$J$k$N$G\e(B SKK \e$B%b!<%I$r0lEY5/$3$7$F$*$/!#\e(B
548         (skk-mode 1)
549         ;; \e$B%A%e!<%H%j%"%k5/F0D>A0$K3+$$$F$$$?%P%C%U%!$G!"\e(Bskk-mode \e$B$r5/F0$7$F\e(B
550         ;; \e$B$$$?$i!"$=$N>uBV$K$7$F!"%A%e!<%H%j%"%k$r=*N;$9$k!#\e(B
551         (or skktut-skk-mode-on
552             (skk-mode -1) ))))
553
554 ;; the following commands are also interactive, but users may not call
555 ;; them by name.  So prefix should be `skktut-'.
556 (defun skktut-next-question ()
557   (interactive)
558   (set-window-configuration skktut-working-window-configuration)
559   ;; called in skktut-answer-buffer.
560   (save-match-data
561     (let (user-ans)
562       (goto-char (point-min))
563       (end-of-line)
564       (skip-chars-backward " \t")
565       (setq user-ans (buffer-substring-no-properties (point-min) (point)))
566       (if (string-match "^>* *" user-ans)
567           (setq user-ans (substring user-ans (match-end 0))) )
568       (if (not (string= skktut-right-answer user-ans))
569           (progn
570             (skktut-message "\e$BEz$,0c$$$^$9!#$b$&0lEY$d$C$F$_$F2<$5$$\e(B"
571                             "Wrong.  Try again")
572             (ding) )
573         (setq skktut-question-count (1+ skktut-question-count))
574         ;; buffer independent.
575         (skktut-get-question-page skktut-question-count)
576         (if (>= skktut-question-count (1+ skktut-question-numbers))
577             (skk-tutorial-quit 'now)
578           (skktut-next-answer-buffer) )))))
579
580 (defun skktut-skip-question (arg)
581   (interactive "p")
582   (set-window-configuration skktut-working-window-configuration)
583   ;; called in skktut-answer-buffer.
584   (skktut-erase-buffer)
585   (setq skktut-question-count (+ skktut-question-count arg))
586   (cond ((> 1 skktut-question-count)
587          (setq skktut-question-count 1) )
588         ;; overrun
589         ((> skktut-question-count skktut-question-numbers)
590          (setq skktut-question-count skktut-question-numbers) )
591         ((and (>= skktut-question-count 3) (not skk-j-mode))
592          (skk-mode 1) ))
593   ;; buffer independent.
594   (skktut-get-question-page skktut-question-count)
595   (if skktut-tutorial-end
596       (skk-tutorial-quit 'now)
597     (skktut-next-answer-buffer) ))
598
599 ;; internal functions.  prefix should be `skktut-'.
600 (defun skktut-make-windows ()
601   ;; Make window fill its frame.
602   (delete-other-windows)
603   (split-window-vertically)
604   (other-window 1)
605   ;; make it selected window and current buffer.
606   (switch-to-buffer skktut-answer-buffer)
607   (enlarge-window (- (window-height (selected-window)) 20))
608   ;; not make it current buffer but visible.
609   (display-buffer skktut-question-buffer)
610   (setq skktut-working-window-configuration (current-window-configuration)) )
611
612 (defun skktut-enable-advice ()
613   (let ((alist skktut-adviced-alist)
614          e )
615     (while alist
616       (setq e (car alist) )
617       (ad-enable-advice (car e) (cdr e) 'skktut-ad)
618       (ad-activate (car e))
619       (setq alist (cdr alist)) )))
620
621 (defun skktut-disable-advice ()
622   (let ((alist skktut-adviced-alist)
623          e )
624     (while alist
625       (setq e (car alist) )
626       (ad-disable-advice (car e) (cdr e) 'skktut-ad)
627       (ad-activate (car e))
628       (setq alist (cdr alist)) )))
629
630 (defun skktut-enable-tutmap ()
631   (let ((inhibit-quit t))
632     (set-modified-alist
633      'minor-mode-map-alist
634      ;; tut map
635      (list (cons 'skk-latin-mode skktut-latin-mode-map)
636            (cons 'skk-abbrev-mode skktut-abbrev-mode-map)
637            (cons 'skk-j-mode skktut-j-mode-map)
638            (cons 'skk-jisx0208-latin-mode skktut-jisx0208-latin-mode-map) ))
639     ;; for minor-mode-map-alist localized by Viper.
640     (if (not (featurep 'viper))
641         nil
642       (if (if (eq skk-emacs-type 'xemacs)
643               (local-variable-p 'minor-mode-map-alist nil t)
644             (local-variable-p 'minor-mode-map-alist) )
645           (setq-default minor-mode-map-alist minor-mode-map-alist) ))))
646
647 (defun skktut-disable-tutmap ()
648   (let ((inhibit-quit t)
649         (minor-mode-list
650          '(skk-abbrev-mode skk-latin-mode skk-j-mode skk-jisx0208-latin-mode) )
651         minor-mode e )
652     (while minor-mode-list
653       (setq minor-mode (car minor-mode-list)
654             minor-mode-list (cdr minor-mode-list) )
655       ;; fail safe.
656       (while (setq e (assq minor-mode minor-mode-map-alist))
657         (setq minor-mode-map-alist (delq e minor-mode-map-alist)) ))
658     (set-modified-alist
659      'minor-mode-map-alist
660      (list (cons 'skk-latin-mode skk-latin-mode-map)
661            (cons 'skk-abbrev-mode skk-abbrev-mode-map)
662            (cons 'skk-j-mode skk-j-mode-map)
663            (cons 'skk-jisx0208-latin-mode skk-jisx0208-latin-mode-map) )))
664   ;; for minor-mode-map-alist localized by Viper.
665   (and (default-value skk-use-viper) (skk-viper-normalize-map)) )
666
667 (defun skktut-pre-setup-tutorial ()
668   (setq skktut-original-window-configuration (current-window-configuration)
669         skktut-skk-mode-on skk-mode
670         skktut-question-count 1 ))
671
672 (defun skktut-setup-jisyo-buffer ()
673   ;; setup skktut-tut-jisyo buffer.
674   (save-excursion
675     (set-buffer (get-buffer-create skktut-jisyo-buffer))
676     (buffer-disable-undo (current-buffer))
677     (skktut-localize-and-init-variables)
678     (setq case-fold-search nil
679           buffer-file-name (expand-file-name skktut-tut-jisyo) )
680     (insert (concat ";; okuri-ari entries.\n"
681                     "\e$B$[$C\e(Bs /\e$BM_\e(B/\n"
682                     "\e$B$D$+\e(Bt /\e$B;H\e(B/\n"
683                     "\e$B$?$C\e(Bs /\e$BC#\e(B/\n"
684                     "\e$B$7\e(Bt /\e$BCN\e(B/\n"
685                     "\e$B$&$4\e(Bk /\e$BF0\e(B/\n"
686                     ";; okuri-nasi entries.\n"
687                     "Greek /\e$B&!\e(B/\e$B&"\e(B/\e$B&#\e(B/\e$B&$\e(B/\e$B&%\e(B/\e$B&&\e(B/\e$B&'\e(B/\e$B&(\e(B/\e$B&)\e(B/\e$B&*\e(B/\e$B&+\e(B/\e$B&,\e(B/\e$B&-\e(B/\e$B&.\e(B/\e$B&/\e(B/\e$B&0\e(B/"
688                     "\e$B&1\e(B/\e$B&2\e(B/\e$B&3\e(B/\e$B&4\e(B/\e$B&5\e(B/\e$B&6\e(B/\e$B&7\e(B/\e$B&8\e(B/\n"
689                     "Russia /\e$B'!\e(B/\e$B'"\e(B/\e$B'#\e(B/\e$B'$\e(B/\e$B'%\e(B/\e$B'&\e(B/\e$B''\e(B/\e$B'(\e(B/\e$B')\e(B/\e$B'*\e(B/\e$B'+\e(B/\e$B',\e(B/\e$B'-\e(B/\e$B'.\e(B/\e$B'/\e(B/\e$B'0\e(B/"
690                     "\e$B'1\e(B/\e$B'2\e(B/\e$B'3\e(B/\e$B'4\e(B/\e$B'5\e(B/\e$B'6\e(B/\e$B'7\e(B/\e$B'8\e(B/\e$B'9\e(B/\e$B':\e(B/\e$B';\e(B/\e$B'<\e(B/\e$B'=\e(B/\e$B'>\e(B/\e$B'?\e(B/\e$B'@\e(B/\e$B'A\e(B/\n"
691                     "greek /\e$B&A\e(B/\e$B&B\e(B/\e$B&C\e(B/\e$B&D\e(B/\e$B&E\e(B/\e$B&F\e(B/\e$B&G\e(B/\e$B&H\e(B/\e$B&I\e(B/\e$B&J\e(B/\e$B&K\e(B/\e$B&L\e(B/\e$B&M\e(B/\e$B&N\e(B/\e$B&O\e(B/\e$B&P\e(B/"
692                     "\e$B&Q\e(B/\e$B&R\e(B/\e$B&S\e(B/\e$B&T\e(B/\e$B&U\e(B/\e$B&V\e(B/\e$B&W\e(B/\e$B&X\e(B/\n"
693                     "russia /\e$B'Q\e(B/\e$B'R\e(B/\e$B'S\e(B/\e$B'T\e(B/\e$B'U\e(B/\e$B'V\e(B/\e$B'W\e(B/\e$B'X\e(B/\e$B'Y\e(B/\e$B'Z\e(B/\e$B'[\e(B/\e$B'\\e(B/\e$B']\e(B/\e$B'^\e(B/\e$B'_\e(B/\e$B'`\e(B/"
694                     "\e$B'a\e(B/\e$B'b\e(B/\e$B'c\e(B/\e$B'd\e(B/\e$B'e\e(B/\e$B'f\e(B/\e$B'g\e(B/\e$B'h\e(B/\e$B'i\e(B/\e$B'j\e(B/\e$B'k\e(B/\e$B'l\e(B/\e$B'm\e(B/\e$B'n\e(B/\e$B'o\e(B/\e$B'p\e(B/\e$B'q\e(B/\n"
695                     "\e$B$$$A$*$/\e(B /\e$B0l2/\e(B/\n"
696                     "\e$B$*$*$5$+\e(B /\e$BBg:e\e(B/\n"
697                     "\e$B$+$J\e(B /\e$B2>L>\e(B/\n"
698                     "\e$B$+$s$8\e(B /\e$B4A;z\e(B/\e$B44;v\e(B/\e$B4F;v\e(B/\n"
699                     "\e$B$,$/$7$e$&\e(B /\e$B3X=,\e(B/\n"
700                     "\e$B$-\e(B /\e$B4p\e(B/\e$B5-\e(B/\e$B5$\e(B/\e$BLZ\e(B/\e$B5"\e(B/\n"
701                     "\e$B$-$4$&\e(B /\e$B5-9f\e(B/\e$B!"\e(B/\e$B!#\e(B/\e$B!$\e(B/\e$B!%\e(B/\e$B!&\e(B/\e$B!'\e(B/\e$B!(\e(B/\e$B!)\e(B/\e$B!*\e(B/\e$B!+\e(B/\e$B!,\e(B/\e$B!-\e(B/\e$B!.\e(B/\e$B!/\e(B/"
702                     "\e$B!0\e(B/\e$B!1\e(B/\e$B!2\e(B/\e$B!3\e(B/\e$B!4\e(B/\e$B!5\e(B/\e$B!6\e(B/\e$B!7\e(B/\e$B!8\e(B/\e$B!9\e(B/\e$B!:\e(B/\e$B!;\e(B/\e$B!<\e(B/\e$B!=\e(B/\e$B!>\e(B/\e$B!?\e(B/\e$B!@\e(B/\e$B!A\e(B/"
703                     "\e$B!B\e(B/\e$B!C\e(B/\e$B!D\e(B/\e$B!E\e(B/\e$B!F\e(B/\e$B!G\e(B/\e$B!H\e(B/\e$B!I\e(B/\e$B!J\e(B/\e$B!K\e(B/\e$B!L\e(B/\e$B!M\e(B/\e$B!N\e(B/\e$B!O\e(B/\e$B!P\e(B/\e$B!Q\e(B/\e$B!R\e(B/\e$B!S\e(B/"
704                     "\e$B!T\e(B/\e$B!U\e(B/\e$B!V\e(B/\e$B![\e(B/\e$B!X\e(B/\e$B!Y\e(B/\e$B!Z\e(B/\e$B![\e(B/\e$B!\\e(B/\e$B!]\e(B/\e$B!^\e(B/\e$B!_\e(B/\e$B!`\e(B/\e$B!a\e(B/\e$B!b\e(B/\e$B!c\e(B/\e$B!d\e(B/\e$B!e\e(B/\e$B!f\e(B/"
705                     "\e$B!g\e(B/\e$B!h\e(B/\e$B!i\e(B/\e$B!j\e(B/\e$B!k\e(B/\e$B!l\e(B/\e$B!m\e(B/\e$B!n\e(B/\e$B!o\e(B/\e$B!p\e(B/\e$B!q\e(B/\e$B!r\e(B/\e$B!s\e(B/\e$B!t\e(B/\e$B!u\e(B/\e$B!v\e(B/\e$B!w\e(B/\e$B!x\e(B/\e$B!y\e(B/"
706                     "\e$B!z\e(B/\e$B!{\e(B/\e$B!|\e(B/\e$B!}\e(B/\e$B!~\e(B/\e$B"!\e(B/\e$B""\e(B/\e$B"#\e(B/\e$B"$\e(B/\e$B"%\e(B/\e$B"&\e(B/\e$B"'\e(B/\e$B"(\e(B/\e$B")\e(B/\e$B"*\e(B/\e$B"+\e(B/\e$B",\e(B/\e$B"-\e(B/"
707                     "\e$B".\e(B/\n"
708                     "\e$B$-$g$&$H\e(B /\e$B5~ET\e(B/\n"
709                     "\e$B$3$&$Y\e(B /\e$B?@8M\e(B/\n"
710                     "\e$B$4\e(B /\e$B8^\e(B/\e$B8_\e(B/\e$B8`\e(B/\e$B8a\e(B/\e$B8b\e(B/\e$B8c\e(B/\e$B8d\e(B/\e$B8e\e(B/\e$B8f\e(B/\e$B8g\e(B/\e$B8h\e(B/\e$B8i\e(B/\e$B8j\e(B/\e$B8k\e(B/\e$B8l\e(B/\e$B8m\e(B/\e$B8n\e(B/"
711                     "\e$B8o\e(B/\n"
712                     "\e$B$5$$\e(B /\e$B:Y\e(B/\e$B:G\e(B/\e$B:F\e(B/\n"
713                     "\e$B$5$$$7$g\e(B /\e$B:G=i\e(B/\n"
714                     "\e$B$5$$$H$&\e(B /\e$B:XF#\e(B/\n"
715                     "\e$B$5$H$&\e(B /\e$B:4F#\e(B/\n"
716                     "\e$B$7$e$&$j$g$&\e(B /\e$B=*N;\e(B/\n"
717                     "\e$B$8$7$g\e(B /\e$B<-=q\e(B/\e$BCO=j\e(B/\n"
718                     "\e$B$8$s$3$&\e(B /\e$B?M8}\e(B/\n"
719                     "\e$B$;$s$?$/\e(B /\e$BA*Br\e(B/\e$B@vBu\e(B/\n"
720                     "\e$B$=$&\e(B /\e$BAv\e(B/\n"
721                     "\e$B$@$$\e(B /\e$BBg\e(B/\e$BBh\e(B/\e$BBe\e(B/\n"
722                     "\e$B$F$-\e(B /\e$BE*\e(B/\e$BE(\e(B/\e$BE)\e(B/\e$BE,\e(B/\e$BE&\e(B/\n"
723                     "\e$B$H$&\e(B /\e$BEl\e(B/\n"
724                     "\e$B$H$&$[$/\e(B /\e$BElKL\e(B/\n"
725                     "\e$B$H$&$m$/\e(B /\e$BEPO?\e(B/\n"
726                     "\e$B$H$&$m$/\e(B /\e$BEPO?\e(B/\n"
727                     "\e$B$I$&\e(B /\e$BF0\e(B/\n"
728                     "\e$B$K$e$&$j$g$/\e(B /\e$BF~NO\e(B/\n"
729                     "\e$B$R$3$&$-\e(B /\e$BHt9T5!\e(B/\n"
730                     "\e$B$X$s$+$s\e(B /\e$BJQ49\e(B/\n"
731                     "\e$B$[$/\e(B /\e$BKL\e(B/\n"
732                     "\e$B$_$g$&$8\e(B /\e$BL>;z\e(B/\n"
733                     "\e$B$h$&$$\e(B /\e$BMF0W\e(B/\e$BMQ0U\e(B/\n" ))
734     (skk-setup-jisyo-buffer) ))
735
736 (defun skktut-setup-working-buffer ()
737   (save-match-data
738     (let (sexp)
739       (set-buffer (get-buffer-create skktut-working-buffer))
740       (buffer-disable-undo (current-buffer))
741       (skktut-localize-and-init-variables)
742       (skktut-erase-buffer) ; fail safe.
743       (insert-file-contents skk-tut-file)
744       (goto-char (point-min))
745       (setq skktut-japanese-tut (looking-at ";; SKK Japanese"))
746       (while (re-search-forward "^>> \\((.+)\\)$" nil t nil)
747         (setq sexp (buffer-substring-no-properties (match-beginning 1)
748                                                    (match-end 1) ))
749         (delete-region (match-beginning 1) (match-end 1))
750         ;; insert evaluated string instead of lisp program.
751         (insert (eval (car (read-from-string sexp)))) )
752       (goto-char (point-min))
753       (if skk-tut-use-face (skktut-colored)) )))
754
755 (defun skktut-setup-question-buffer ()
756   (save-excursion
757     (set-buffer (get-buffer-create skktut-question-buffer))
758     (buffer-disable-undo (current-buffer))
759     (skktut-erase-buffer) ; fail safe.
760     (setq buffer-read-only t)
761     (skktut-get-question-page skktut-question-count)
762     (local-set-key "\C-xq" 'skk-tutorial-quit)
763     (local-set-key "\C-xt" 'skk-tutorial-again)
764     (local-set-key "\C-xj" 'skktut-error-command)
765     (local-set-key "\C-xn" 'skktut-next-question)
766     (local-set-key "\C-xs" 'skktut-skip-question) ))
767
768 (defun skktut-setup-answer-buffer ()
769   (save-excursion
770     (set-buffer (get-buffer-create skktut-answer-buffer))
771     ;; users may use undo.
772     ;; (buffer-disable-undo (current-buffer))
773     ;; skktut-answer-buffer \e$B$N\e(B skk.el \e$B$NJQ?t$r%P%C%U%!%m!<%+%k2=$7!"=i4|2=$9$k!#\e(B
774     (skktut-localize-and-init-variables)
775     (local-set-key "\C-xq" 'skk-tutorial-quit)
776     (local-set-key "\C-xt" 'skk-tutorial-again)
777     (local-set-key "\C-xj" 'skktut-error-command)
778     (local-set-key "\C-xn" 'skktut-next-question)
779     (local-set-key "\C-xs" 'skktut-skip-question)
780     (auto-fill-mode -1)
781     (skktut-next-answer-buffer) ))
782
783 (defun skktut-localize-and-init-variables ()
784   ;; \e$B%f!<%6!<$,\e(B skk.el \e$B$NJQ?t$r%+%9%?%^%$%:$7$F$$$k2DG=@-$,$"$k$N$G!"%+%l%s%H\e(B
785   ;; \e$B%P%C%U%!$N\e(B skk.el \e$B$NJQ?t$r%P%C%U%!%m!<%+%k2=$7!"=i4|2=$9$k!#\e(B
786   (let ((alist skktut-init-variables-alist)
787         v )
788     (while alist
789       (setq v (car (car alist)))
790       (make-local-variable v)
791       (set v (eval (cdr (car alist))))
792       (setq alist (cdr alist)) )))
793
794 (defun skktut-erase-buffer ()
795   (let ((inhibit-read-only t)
796         buffer-read-only )
797     (set-text-properties (point-min) (point-max) nil)
798     (erase-buffer) ))
799
800 (defun skktut-before-move-to-other-frame ()
801   (if (skktut-yes-or-no-p "Tutorial \e$B$r=*N;$7$^$9!#$h$m$7$$$G$9$M!)\e(B "
802                           "Quit tutorial?" )
803       (skk-tutorial-quit 'now)
804     (skktut-error "Tutorial \e$B$r=*N;$;$:$KB>$N%U%l!<%`$K0\$k$3$H$O$G$-$^$;$s!#\e(B"
805                   "Quit tutorial or you cannot move to other frame" )))
806
807 (defun skktut-colored ()
808   ;; face \e$B$r\e(B Text Property \e$B$K$7$F$*$/$H%F%-%9%H$r%3%T!<$7$?$H$-$K0l=o$K%3%T!<$G\e(B
809   ;; \e$B$-$k$N$G9%ET9g!#\e(B
810   (while (re-search-forward "\e$B"'\e(B\\([^\e$B![\e(B \e$B$!\e(B-\e$B$s%!\e(B-\e$B%s\e(B]+\\)" nil t nil)
811     (put-text-property (match-beginning 1) (match-end 1) 'face
812                        'highlight ))
813   (goto-char (point-min))
814   (while (re-search-forward "^==.+==$" nil t nil)
815     (put-text-property (match-beginning 0) (match-end 0)
816                        'face skk-tut-section-face ))
817   (goto-char (point-min))
818   (while (re-search-forward "^!!.+" nil t nil)
819     (put-text-property (match-beginning 0) (match-end 0)
820                        'face skk-tut-do-it-face ))
821   (goto-char (point-min))
822   (while (re-search-forward "^>> \\(.+\\)$" nil t nil)
823     (put-text-property (match-beginning 1) (match-end 1)
824                        'face skk-tut-question-face ))
825   (if skktut-japanese-tut
826       nil
827     (goto-char (point-min))
828     (while (re-search-forward "Hint: .*$" nil t nil)
829       (put-text-property (match-beginning 0) (match-end 0)
830                          'face skk-tut-hint-face ))))
831
832 (defun skktut-next-answer-buffer ()
833   (save-match-data
834     (save-excursion
835       ;; first get right answer in `skktut-question-buffer'.
836       (set-buffer skktut-question-buffer)
837       (goto-char (point-max))
838       (search-backward "\n>>")
839       (forward-char 1)
840       (setq skktut-right-answer
841             (buffer-substring-no-properties
842              (+ 3 (point))
843              (skk-save-point (end-of-line) (point)) )))
844     ;; not to save point.
845     (let ((cbuf (current-buffer))
846           p )
847       (unwind-protect
848           (let ((plist (cons (if (eq skk-emacs-type 'xemacs)
849                                  'end-open
850                                'rear-nonsticky )
851                              '(t intangible t read-only t) )))
852             ;; secondary make a new answer buffer.
853             (set-buffer skktut-answer-buffer)
854             (skktut-erase-buffer)
855             (insert ">> \n\n")
856             (add-text-properties (point-min) (- (point) 2) plist)
857             (setq p (point))
858             (insert
859              (if skktut-japanese-tut
860                  (concat "* \e$BEz$,$G$-$?$i\e(B `C-x n'; \e$BESCf$G$d$a$k$K$O\e(B `C-x q'"
861                          (if (= skktut-question-count 37) " *"
862                            "; \e$B%9%-%C%W$9$k$K$O\e(B`C-x s' *" ))
863                (concat "* For next question `C-x n'; to quit `C-x q'"
864                        (if (= skktut-question-count 37) " *"
865                          "; to skip this question `C-x s' *" ))))
866             (if skk-tut-use-face
867                 (put-text-property p (point) 'face skk-tut-key-bind-face) )
868             (add-text-properties p (point) plist)
869             (goto-char (+ (point-min) 3)))
870         (set-buffer cbuf) ))))
871
872 (defun skktut-get-question-page (page)
873   (save-excursion
874     (save-match-data
875       (set-buffer skktut-working-buffer)
876       (let (pos str)
877         (goto-char (point-min))
878         (search-forward "--\n" nil t page)
879         (if (looking-at ";") ; lisp program exists.
880             (progn
881               (forward-char 3)
882               (setq pos (point))
883               (end-of-line)
884               (save-excursion
885                 (eval-region pos (point) nil)
886                 (forward-char 1) )))
887         (if (not skktut-tutorial-end)
888             (progn
889               (setq pos (point))
890               (search-forward "\n>>")
891               (end-of-line)
892               (setq str (buffer-substring pos (point)))
893               (set-buffer skktut-question-buffer)
894               (skktut-erase-buffer)
895               (let (buffer-read-only)
896                 (insert str)
897                 (setq mode-line-buffer-identification
898                       (concat "\e$B#S#K#K%A%e!<%H%j%"%k\e(B: \e$B!NLd\e(B "
899                               (number-to-string page)
900                               "\e$B!O\e(B \e$B!J;D$j\e(B "
901                               (number-to-string (- skktut-question-numbers page))
902                               "\e$BLd!K\e(B"))
903                 (set-buffer-modified-p nil)
904                 (force-mode-line-update 'all) )))))))
905
906 ;; The following two functions are tricky, since they are executed by
907 ;; `eval-region' in skktut-working-buffer.
908 (defun skktut-today ()
909   (save-restriction
910     (save-match-data
911       (let (p)
912         (widen)
913         (search-forward "\n>> ")
914         (if (re-search-forward "\e$B!V\e(B.*\e$B!W\e(B" (skk-save-point (end-of-line) (point)) t)
915             (delete-region (match-beginning 0) (match-end 0)) )
916         (setq p (point))
917         (insert (concat "\e$B!V$-$g$&$O!"\e(B" (skk-current-date) "\e$B$G$9!#!W\e(B"))
918         (narrow-to-region (point-min) (point))
919         (if skk-tut-use-face
920             (put-text-property p (point) 'face skk-tut-question-face) )))))
921
922 (defun skktut-end-tutorial ()
923   (switch-to-buffer skktut-question-buffer)
924   (delete-other-windows)
925   (skktut-erase-buffer)
926   (let (buffer-read-only)
927     (goto-char (point-min))
928     (insert
929      (if skktut-japanese-tut
930          (concat "SKK \e$B%A%e!<%H%j%"%k$O$3$l$G=*$j$G$9!#\e(B\n\n"
931                  "SKK 10.x \e$B$K4X$9$k<ALd!"%3%a%s%H!"\e(Bbug report \e$BEy$O\e(B\n\n"
932                  "\tskk@ring.gr.jp\n\n"
933                  "\e$BKx$*Aw$j2<$5$$!#$J$*!"$3$N%"%I%l%9$O\e(B SKK Ring Server Openlab \e$B%a%$%j%s%0\e(B"
934                  "\e$B%j%9%H$N%"%I%l%9$G$9!#\e(B\n"
935                  "\e$B2sEz$ODL>o$3$N%"%I%l%9$KBP$7$F$J$5$l$k$N$G!"%a%s%P!<$G$J$$\e(B"
936                  "\e$BJ}$O$=$N;]$rL@5-$7$F\e(B\n"
937                  "\e$B%a!<%k$r$*Aw$j$/$@$5$$!#\e(BSKK Ring Server Openlab \e$B%a%$%j%s%0%j%9%H$X;2\e(B"
938                  "\e$B2C4uK>$N>l9g$O\e(B\n\n"
939                  "\tskk-request@ring.gr.jp\n\n"
940                  "\e$B$X%a!<%k$r$*Aw$j$/$@$5$$\e(B\n\n"
941                  "!! \e$B:G8e$K\e(B <return> \e$B%-!<$r2!$7$F$/$@$5$$!#\e(B" )
942        (concat "Now we end the SKK tutorial.\n\n"
943                "Please send comments, questions and bug reports on SKK "
944                "version 10.x to:\n\n"
945                "\tskk@ring.gr.jp\n\n"
946                "This is the address of the SKK Ring Server Openlab mailing list, and "
947                "normally the responces\n"
948                "will be sent only to the ML members.  So, if you are not a ML "
949                "member, please say so \n"
950                "in your mail. If you are interested in joining the SKK Ring Server "
951                "Openlab ML, send a mail to:\n\n"
952                "\tskk-request@ring.gr.jp\n\n"
953                "!! Hit <return> key when you are ready." )))
954     (if skk-tut-use-face
955         (save-match-data
956           (goto-char (point-min))
957           (re-search-forward "^!!.+" nil t nil)
958           (put-text-property (match-beginning 0) (match-end 0)
959                              'face skk-tut-do-it-face )))
960     (while (not skktut-tutorial-end)
961       (condition-case nil
962           (let* ((event (skk-read-event))
963                  (char (event-to-character event)) )
964             (skktut-message "<return> \e$B%-!<$r2!$7$F$/$@$5$$\e(B" "Hit <return> key")
965             (if (and char (eq ?\C-m char))
966                 (setq skktut-tutorial-end t)
967               ;;(skk-unread-event event)
968               ))
969         (error nil) ))))
970
971 (provide 'skk-tut)
972 ;;; skk-tut.el ends here