diff lisp/skk/skk-foreword.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-foreword.el	Mon Aug 13 10:09:35 2007 +0200
@@ -0,0 +1,596 @@
+;;; skk-foreword.el --- $BA0=q$-(B
+;; Copyright (C) 1997 Mikio Nakajima <minakaji@osaka.email.ne.jp>
+
+;; Author: Mikio Nakajima <minakaji@osaka.email.ne.jp>
+;; Maintainer: Murata Shuuichirou  <mrt@mickey.ai.kyutech.ac.jp>
+;;             Mikio Nakajima <minakaji@osaka.email.ne.jp>
+;; Version: $Id: skk-foreword.el,v 1.1 1997/12/02 08:48:37 steve Exp $
+;; Keywords: japanese
+;; Last Modified: $Date: 1997/12/02 08:48:37 $
+
+;; 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:
+
+;; $BA0$KDj5A$7$F$*$+$J$1$l$P$J$j$^$;$s!#$3$N%U%!%$%k$O!"$3$N$h(B
+;; $B$&$K!"JQ?t$N@k8@0JA0$KDj5A$7$F$*$+$J$1$l$P$J$i$J$$$b$N$r$^(B
+;; $B$H$a$?$b$N$G$9!#%f!<%6!<JQ?t$NDj5A$NA0$K!"$4$A$c$4$A$c$H%f(B
+;; $B!<%6!<$K6=L#$,$J$$$b$N$,JB$s$G$$$?$N$G$O!"%f!<%6!<%U%l%s%I(B
+;; $B%j!<$G$O$J$$$H9M$($k$+$i$G$9!#(B
+;; 
+;; Following people contributed modifications to skk-foreword.el (Alphabetical order):
+;;       Hideki Sakurada <sakurada@kuis.kyoto-u.ac.jp>
+;;       Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+
+;;; Change log:
+
+;;; Code:
+(require 'easymenu)
+
+;; necessary macro and functions to be declared before user variable declarations.
+
+;; From viper-util.el.  Welcome!
+(defmacro skk-deflocalvar (var default-value &optional documentation)
+  (` (progn
+       (defvar (, var) (, default-value)
+	       (, (format "%s\n\(buffer local\)" documentation)))
+       (make-variable-buffer-local '(, var))
+     )))
+
+;; From emu.el of tm package.   Welcome!  Its original is defun-maybe.
+(defmacro skk-defunsoft (name &rest everything-else)
+  (or (fboundp name)
+      (` (or (fboundp (quote (, name)))
+             (defun (, name) (,@ everything-else)) ))))
+
+(put 'skk-deflocalvar 'lisp-indent-function 'defun)
+(put 'skk-defunsoft 'lisp-indent-function 'defun)
+
+;;(defun skk-get (symbol property-name &optional default)
+;;  ;; SYMBOL $B$NB0@-%j%9%H$K(B PROPERTY-NAME $B$H$$$&B0@-L>$,$"$l$P$=$NB0@-CM$rJV$9!#(B
+;;  ;; $B$J$1$l$P(B DEFAULT $B$rJV$9(B (DEFAULT $B$,;XDj$5$l$F$$$J$1$l$P(B NIL)$B!#B0@-L>$NHf(B
+;;  ;; $B3S$O!"(Beq $B$G9T$J$&!#(B
+;;  (if default
+;;      (let ((pl (memq property-name (symbol-plist symbol))))
+;;        (if pl (nth 1 pl) default) )
+;;    (get symbol property-name) ))
+
+(defun skk-terminal-face-p ()
+  (and (not window-system)
+       (fboundp 'frame-face-alist) ;; $BJQ?tL>$_$?$$$J4X?t$@$J(B...$B!#(B
+       (fboundp 'selected-frame) ))
+
+;;; skk-defunsofts  Define nothing if it is already there.
+
+;; eval-after-load is not defined in XEmacs but after-load-alist is usable.
+;; See subr.el in XEmacs.
+(skk-defunsoft eval-after-load (file form)
+  (or (assoc file after-load-alist)
+      (setq after-load-alist (cons (list file) after-load-alist)))
+  (let ((elt (assoc file after-load-alist)))
+    (or (member form (cdr elt))
+        (nconc elt (list form))))
+  form )
+
+(skk-defunsoft set-cursor-color (color-name)
+  (set-frame-property (selected-frame) 'cursor-color
+                      (if (color-instance-p color-name)
+                          color-name
+                        (make-color-instance color-name))))
+
+(skk-defunsoft rassoc (key alist)
+  (cond ((null alist) nil)
+        ((and (consp (car alist))
+              (equal key (cdr (car alist))) (car alist)))
+        (t (rassoc key (cdr alist))) ))
+
+(skk-defunsoft add-to-list (list-var element)
+  (or (member element (symbol-value list-var))
+      (set list-var (cons element (symbol-value list-var))) ))
+
+;; mule-3 $B$G$O!"(Bcancel-undo-boundary $B$,$J$$!#(B    
+;; from mule-util.el
+(skk-defunsoft cancel-undo-boundary ()
+  ;; buffer-undo-list $B$N(B car $B$N(B nil $B$r>C$7!"(Bundo $B%3%^%s%I$,D>6a$N%P%C%U%!(B
+  ;; $B$NJQ99$G;_$^$i$J$$$h$&$K$9$k!#(Bbuffer-undo-list $B$K$*$1$k(B nil $B$O!"JQ(B
+  ;; $B9972$HJQ9972$N6-3&$r<($9%G%j%_%?$NF/$-$r$7$F$$$k!#(B
+  (if (and (consp buffer-undo-list)
+           ;; car $B$,(B nil $B$@$C$?$i$=$l$r>C$9!#(B
+           (null (car buffer-undo-list)) )
+      (setq buffer-undo-list (cdr buffer-undo-list)) ))
+
+(skk-defunsoft match-string (n str)
+  (substring str (match-beginning n) (match-end n)) )
+
+;;;; version specific matter.
+(eval-and-compile
+  (defconst skk-xemacs (and (featurep 'mule)
+			    (string-match "XEmacs" emacs-version) )
+    "Non-nil $B$G$"$l$P!"(BXEmacs $B$G(B SKK $B$r;HMQ$7$F$$$k$3$H$r<($9!#(B" )
+  
+  (defconst skk-mule3 (and (featurep 'mule) (boundp 'mule-version)
+                           (string< "3.0" mule-version))
+    "Non-nil $B$G$"$l$P!"(BMule 3 $B$G(B SKK $B$r;HMQ$7$F$$$k$3$H$r<($9!#(B" )
+  
+  (defconst skk-mule (featurep 'mule)
+    "Non-nil $B$G$"$l$P!"(BMule $B$G(B SKK $B$r;HMQ$7$F$$$k$3$H$r<($9!#(B" )
+
+  (defconst skk-20 (or skk-mule3 skk-xemacs)
+    "Non-nil $B$G$"$l$P!"(BEmacs $B$N(B ver. 20 $B$G(B SKK $B$r;HMQ$7$F$$$k$3$H$r<($9!#(B" )
+
+  (cond ((or (and (boundp 'epoch::version) epoch::version)
+             (string< (substring emacs-version 0 2) "18") )
+         (message "THIS SKK requires Emacs 19")
+         (sit-for 2) )
+        ;; for XEmacs
+        (skk-xemacs
+         (defalias 'skk-buffer-substring 'buffer-substring-no-properties)
+         (defalias 'skk-character-to-event 'character-to-event)
+         (defalias 'skk-event-to-character 'event-to-character)
+         (defalias 'skk-int-char 'int-char)
+         (defalias 'skk-read-event 'next-command-event)
+         (defsubst skk-unread-event (event)
+           ;; Unread single EVENT.
+           (setq unread-command-events
+ 		 (nconc unread-command-events (list event))) )
+         (defalias 'skk-make-overlay 'make-extent)
+         (defalias 'skk-move-overlay 'set-extent-endpoints)
+         (defalias 'skk-overlay-put 'set-extent-property)
+         (defalias 'skk-overlayp 'extentp)
+         (defalias 'skk-delete-overlay 'detach-extent)
+	 (defalias 'skk-charsetp 'find-charset)
+	 (defalias 'skk-char-to-string 'char-to-string)
+	 (defun skk-make-char (charset n1 n2)
+	   (make-char charset
+		      (logand (lognot 128) n1)
+		      (logand (lognot 128) n2) ))
+         ;; skk-kana-input-event-type
+         ;; (event $B$G$J$/J8;z$r0z?t$K$H$k$h$&$K$7$?$N$G(B,
+         ;;  skk-kana-input-char-type $B$NL>A0$r;H$$$^$7$?(B)
+         (defun skk-kana-input-char-type (char)
+           ;; "Return type of CHAR for `skk-kana-input'."
+           ;; CHAR is character or nil
+           (cond ((and char
+                       (<= 0 char) (< char (length skk-char-type-vector)))
+                  ;; this is normal ascii char
+                  (aref skk-char-type-vector char))
+                 ;; if you want to perform delete by event other than ascii
+                 ;; keystroke event, following clause should be modified to
+                 ;; return type 5 when apropriciate.
+                 (t nil) ))
+
+         (defmacro with-output-to-temp-buffer (bufname &rest body)
+           (let ((obuf (make-symbol "obuf"))
+                 (buf (make-symbol "buf")) )
+             `(let ((,obuf (current-buffer))
+                    (,buf (get-buffer-create ,bufname))
+                    standard-output  )
+                (set-buffer ,buf)
+                (erase-buffer)
+                (setq standard-output ,buf)
+                ,@body
+                (pop-to-buffer ,buf) )))
+
+	 (defmacro with-current-buffer (buffer &rest body)
+	   "Execute the forms in BODY with BUFFER as the current buffer.
+             The value returned is the value of the last form in BODY.
+             See also `with-temp-buffer'."
+	   (` (save-current-buffer
+	      (set-buffer (, buffer))
+	      (,@ body))))
+	 
+	 (defmacro with-temp-file (file &rest forms)
+	   "Create a new buffer, evaluate FORMS there, and write the buffer to FILE.
+             The value of the last form in FORMS is returned, like `progn'.
+             See also `with-temp-buffer'."
+	   (let ((temp-file (make-symbol "temp-file"))
+		 (temp-buffer (make-symbol "temp-buffer")))
+	     (` (let (((, temp-file) (, file))
+		    ((, temp-buffer)
+		     (get-buffer-create (generate-new-buffer-name " *temp file*"))))
+		(unwind-protect
+		    (prog1
+			(with-current-buffer (, temp-buffer)
+			  (,@ forms))
+		      (with-current-buffer (, temp-buffer)
+			(widen)
+			(write-region (point-min) (point-max) (, temp-file) nil 0)))
+		  (and (buffer-name (, temp-buffer))
+		       (kill-buffer (, temp-buffer))))))))
+	 (defmacro combine-after-change-calls (&rest body)
+	   (` (unwind-protect
+		(let ((combine-after-change-calls t))
+		  . (, body))
+	      (combine-after-change-execute))))
+	 (defmacro combine-after-change-execute (&rest body)
+	   body )
+         )
+        ;; for Emacs 19
+        (t
+         (defmacro skk-character-to-event (char) char);; $B2?$b$7$J$$(B
+         (defmacro skk-int-char (char) char);; $B2?$b$7$J$$(B
+         (defsubst skk-unread-event (event)
+           ;; Unread single EVENT.
+           (setq unread-command-events
+ 		 (nconc unread-command-events (list event))))
+         (defalias 'skk-read-event 'read-event)
+         (defalias 'skk-make-overlay 'make-overlay)
+         (defalias 'skk-move-overlay 'move-overlay)
+         (defalias 'skk-overlay-put 'overlay-put)
+         (defalias 'skk-overlayp 'overlayp)
+         (defalias 'skk-delete-overlay 'delete-overlay)
+         (defun skk-event-to-character (event)
+           ;; Return character of keystroke EVENT.
+           (cond ((symbolp event)
+                  ;; mask is (BASE-TYPE MODIFIER-BITS) or nil.
+                  (let ((mask (get event 'event-symbol-element-mask)))
+                    (if mask
+                        (let ((base (get (car mask) 'ascii-character)))
+                          (if base
+                              (logior base (car (cdr mask))))))))
+                 ((integerp event)
+                  event)
+                 (t nil) ))
+         (defun skk-kana-input-char-type (event)
+           ;; "Return type of EVENT for `skk-kana-input'."
+           (cond ((and (integerp event)
+                       (<= 0 event) (< event (length skk-char-type-vector)))
+                  ;; this is normal ascii keystroke event
+                  (aref skk-char-type-vector event))
+                 ;; if you want to perform delete by event other than ascii
+                 ;; keystroke event, following clause should be modified to
+                 ;; return type 5 when apropriciate.
+                 (t nil) ))
+
+	 ;; overwrite built-in combine-after-change-execute
+	 (defmacro combine-after-change-execute (&rest body)
+	   body )
+	 (defmacro combine-after-change-calls (&rest body)
+	   (` (unwind-protect
+		  (let ((combine-after-change-calls t))
+		    . (, body))
+		(combine-after-change-execute))))
+	 (if skk-mule3
+	     nil
+
+           (defmacro with-output-to-temp-buffer (bufname &rest body)
+             (let ((obuf (make-symbol "obuf"))
+                   (buf (make-symbol "buf")) )
+               `(let ((,obuf (current-buffer))
+                      (,buf (get-buffer-create ,bufname))
+                      standard-output  )
+                  (set-buffer ,buf)
+                  (erase-buffer)
+                  (setq standard-output ,buf)
+                  ,@body
+                  (pop-to-buffer ,buf) )))
+
+	   (defmacro save-current-buffer (&rest body)
+	     (let ((orig-buffer (make-symbol "orig-buffer")))
+	       (` (let (((, orig-buffer) (current-buffer)))
+		    (unwind-protect
+			(progn (,@ body))
+		      (set-buffer (, orig-buffer)) )))))
+	   
+	   (defmacro with-current-buffer (buffer &rest body)
+	     "Execute the forms in BODY with BUFFER as the current buffer.
+	      The value returned is the value of the last form in BODY.
+	      See also `with-temp-buffer'."
+	      (` (save-current-buffer
+		   (set-buffer (, buffer))
+		   (,@ body))))
+	   
+	   (defmacro with-temp-file (file &rest forms)
+	     "Create a new buffer, evaluate FORMS there, and write the buffer to FILE.
+	      The value of the last form in FORMS is returned, like `progn'.
+	      See also `with-temp-buffer'."
+	      (let ((temp-file (make-symbol "temp-file"))
+		    (temp-buffer (make-symbol "temp-buffer")))
+		(` (let (((, temp-file) (, file))
+			 ((, temp-buffer)
+			  (get-buffer-create (generate-new-buffer-name " *temp file*"))))
+		     (unwind-protect
+			 (prog1
+			     (with-current-buffer (, temp-buffer)
+			       (,@ forms))
+			   (with-current-buffer (, temp-buffer)
+			     (widen)
+			     (write-region (point-min) (point-max) (, temp-file) nil 0)))
+		       (and (buffer-name (, temp-buffer))
+			    (kill-buffer (, temp-buffer))))))))
+	   
+	   (defmacro with-temp-buffer (&rest forms)
+	     "Create a temporary buffer, and evaluate FORMS there like `progn'.
+	      See also `with-temp-file' and `with-output-to-string'."
+	      (let ((temp-buffer (make-symbol "temp-buffer")))
+		(` (let (((, temp-buffer)
+			  (get-buffer-create (generate-new-buffer-name " *temp*"))))
+		     (unwind-protect
+			 (with-current-buffer (, temp-buffer)
+			   (,@ forms))
+		       (and (buffer-name (, temp-buffer))
+			    (kill-buffer (, temp-buffer))))))))
+	   
+	   (defmacro with-output-to-string (&rest body)
+	     "Execute BODY, return the text it sent to `standard-output', as a string."
+	      (` (let ((standard-output
+			(get-buffer-create (generate-new-buffer-name " *string-output*"))))
+		   (let ((standard-output standard-output))
+		     (,@ body))
+		   (with-current-buffer standard-output
+		     (prog1
+			 (buffer-string)
+		       (kill-buffer nil)))))))
+	 (cond
+	  ((string< "20" emacs-version)
+	   ;; For emacs 20
+	   (defalias 'skk-charsetp 'charsetp)
+	   (defalias 'skk-make-char 'make-char)
+	   (defalias 'skk-buffer-substring 'buffer-substring-no-properties)
+	   (defun skk-char-to-string (char)
+	     (condition-case nil
+		 (char-to-string char)
+	       (error
+		nil ))))
+	  ((string< "19.29" emacs-version)
+	   ;; For emacs 19.29, 19.30...
+	   (defalias 'skk-charsetp 'character-set)
+	   (defalias 'skk-make-char 'make-character)
+	   (defalias 'skk-buffer-substring 'buffer-substring-no-properties)
+	   (defalias 'skk-char-to-string 'char-to-string) )
+	  (t
+	   ;; For emacs 19...19.28
+	   (defalias 'skk-charsetp 'character-set)
+	   (defalias 'skk-make-char 'make-character)
+	   (defalias 'skk-buffer-substring 'buffer-substring)
+	   (defalias 'skk-char-to-string 'char-to-string) )
+	  ))))
+
+(defconst skk-background-mode
+  ;; from font-lock-make-faces of font-lock.el  Welcome!
+  (cond
+   (skk-xemacs
+    (if (< (apply '+ (color-rgb-components
+                      (face-property 'default 'background)))
+           (/ (apply '+ (color-rgb-components
+                         (make-color-specifier "white"))) 3))
+        'dark
+      'light)
+    )
+   ((and window-system (x-display-color-p))
+    (let ((bg-resource (x-get-resource ".backgroundMode"
+                                       "BackgroundMode"))
+          params )
+      (if bg-resource
+          (intern (downcase bg-resource))
+        (setq params (frame-parameters))
+        ;; Mule for Win32 $B$r(B Windows 95 $B$GF0$+$7$F$$$k$H$-$O!"(Bsystem-type $B$O!)(B
+        ;; -> windows-nt $B$G$7$?(B -- Mikio ($B2q<R$N(B Win 95 $B$K(B Mule for Win32 $B$r(B
+        ;; $BF~$l$?(B)$B!#(B
+        (cond ((and (eq system-type 'windows-nt)
+
+                    (fboundp 'win32-color-values) )
+               (< (apply '+ (win32-color-values
+                             (cdr (assq 'background-color params)) ))
+                  (/ (apply '+ (win32-color-values "white")) 3) )
+               'dark )
+              ((and (memq system-type '(ms-dos windows-nt))
+                    (fboundp 'x-color-values) )
+               (if (string-match "light"
+                                 (cdr (assq 'background-color params)) )
+                   'light
+                 'dark ))
+              ((< (apply '+ (x-color-values
+                             (cdr (assq 'background-color params)) ))
+                  (/ (apply '+ (x-color-values "white")) 3) )
+               'dark )
+              (t 'light) ))))
+   (t 'mono )))
+
+(eval-after-load "hilit19"
+  '(mapcar (function
+            (lambda (pattern)
+              (hilit-add-pattern
+               (car pattern) (cdr pattern)
+               (cond ((eq skk-background-mode 'mono)
+                      'bold )
+                     ((eq skk-background-mode 'light)
+                      'RoyalBlue )
+                     (t 'cyan) )
+               'emacs-lisp-mode )))
+           '(("^\\s *(skk-deflocalvar\\s +\\S +" . "")
+             ("^\\s *(skk-defunsoft\\s +\\S +" . "") )))
+
+(defun skk-define-menu-bar-map (map)
+  ;; SKK $B%a%K%e!<$N%H%C%W$K=P8=$9$k%3%^%s%I$N%a%K%e!<$X$NDj5A$r9T$J$&!#(B
+  (easy-menu-define
+   skk-menu map
+   "Menu used in SKK mode."
+   '("SKK"
+     ("Convert Region and Echo"
+      ("Gyakubiki"
+       ["to Hirakana" skk-gyakubiki-message
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Hirakana, All Candidates"
+        ;; $B$"$l$l!"(Blambda $B4X?t$ODj5A$G$-$J$$$N$+!)!)!)(B  $BF0$+$J$$$>(B...$B!#(B
+        (function (lambda (start end) (interactive "r")
+                    (skk-gyakubiki-message start end 'all-candidates) ))
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Katakana" skk-gyakubiki-katakana-message
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Katakana, All Candidates"
+        (function (lambda (start end) (interactive "r")
+                    (skk-gyakubiki-katakana-message
+                     start end 'all-candidates ) ))
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       )
+      ("Hurigana"
+       ["to Hirakana" skk-hurigana-message
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Hirakana, All Candidates"
+        (function (lambda (start end) (interactive "r")
+                    (skk-hurigana-message start end 'all-candidates) ))
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Katakana" skk-hurigana-katakana-message
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Katakana, All Candidates"
+        (function (lambda (start end) (interactive "r")
+                    (skk-hurigana-katakana-message
+                     start end 'all-candidates) ))
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       )
+      )
+     ("Convert Region and Replace"
+      ["Ascii" skk-ascii-region
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+      ("Gyakubiki"
+       ["to Hirakana" skk-gyakubiki-region
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Hirakana, All Candidates"
+        (function (lambda (start end) (interactive "r")
+                    (skk-gyakubiki-region start end 'all-candidates) ))
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Katakana" skk-gyakubiki-katakana-region
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Katakana, All Candidates"
+        (function (lambda (start end) (interactive "r")
+                    (skk-gyakubiki-katakana-region
+                     start end 'all-candidates ) ))
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       )
+      ["Hiragana" skk-hiragana-region
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+      ("Hurigana"
+       ["to Hirakana" skk-hurigana-region
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Hirakana, All Candidates"
+        (function (lambda (start end) (interactive "r")
+                    (skk-hurigana-region start end 'all-candidates) ))
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Katakana" skk-hurigana-katakana-region
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       ["to Katakana, All Candidates" (function
+                                       (lambda (start end) (interactive "r")
+                                         (skk-hurigana-katakana-region
+                                          start end 'all-candidates) ))
+        (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+       )
+      ["Katakana" skk-katakana-region
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+      ["Romaji" skk-romaji-region
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+      ["Zenkaku" skk-zenkaku-region
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+      )
+     ["Count Jisyo Candidates" skk-count-jisyo-candidates
+      (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+     ["Save Jisyo" skk-save-jisyo
+      (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+     ["Undo Kakutei" skk-undo-kakutei
+      (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+     ("User Options"
+      ["skk-allow-spaces-newlines-and-tabs" skk-menu-allow-spaces-newlines-and-tabs
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0) ) ]
+      ["skk-auto-start-henkan" skk-menu-auto-henkan
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0) ) ]
+      ["skk-auto-insert-paren" skk-menu-auto-insert-paren
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0) ) ]
+      ["skk-auto-okuri-process"
+       (function (lambda ()
+                   (interactive)
+                   (skk-menu-auto-okuri-process)
+                   (skk-adjust-search-prog-list-for-auto-okuri) ))
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0))]
+      ["skk-compare-jisyo-size-when-saving" skk-menu-compare-jisyo-size-when-saving
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0) ) ]
+      ["skk-convert-okurigana-into-katakana" skk-menu-convert-okurigana-into-katakana
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0) ) ]
+      ["skk-count-private-jisyo-candidates-exactly"
+       skk-menu-count-private-jisyo-entries-exactly
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+      ["skk-dabbrev-like-completion" skk-menu-dabbrev-like-completion
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0) ) ]
+      ["skk-date-ad" skk-menu-date-ad
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+      ["skk-delete-implies-kakutei" skk-menu-delete-implies-kakutei
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0) ) ]
+      ["skk-delete-okuri-when-quit" skk-menu-delete-okuri-when-quit
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0) ) ]
+      ["skk-echo" skk-menu-echo
+       (or (not (boundp 'skktut-problem-count)) (eq skktut-problem-count 0)) ]
+      ["skk-egg-like-newline" skk-menu-egg-like-newline
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-henkan-okuri-strictly" skk-menu-henkan-okuri-strictly
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-henkan-strict-okuri-precedence" skk-menu-henkan-strict-okuri-precedence
+       (or (not (boundp 'skktut-problem-count))
+	   (eq skktut-problem-count 0)) ]
+      ["skk-japanese-message-and-error" skk-menu-japanese-message-and-error
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-kakutei-early" skk-menu-kakutei-early
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-numeric-conversion-float-num" skk-menu-numeric-conversion-float-num
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-process-okuri-early" skk-menu-process-okuri-early
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-report-server-response" skk-menu-report-server-response
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-romaji-*-by-hepburn" skk-menu-romaji-*-by-hepburn
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-uniq-numerals" skk-menu-uniq-numerals
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-use-color-cursor" skk-menu-use-color-cursor
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-use-kakasi" skk-menu-use-kakasi
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-use-numeric-conversion" skk-menu-use-numeric-conversion
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0)) ]
+      ["skk-use-face" skk-menu-use-overlay
+       (or (not (boundp 'skktut-problem-count))
+           (eq skktut-problem-count 0))] )
+     ["Version" skk-version
+      (or (not (boundp 'skktut-problem-count))
+          (eq skktut-problem-count 0)) ]
+     )))
+
+(defun skk-update-autoloads (dir)
+  (interactive "DUpdate skk autoloads from directory: ")
+  (require 'autoload)
+  (let ((generated-autoload-file "skk-vars.el"))
+    (update-autoloads-from-directory dir)))
+
+(provide 'skk-foreword)
+;;; skk-forwords.el ends here