mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-26 07:33:47 +00:00
*** empty log message ***
This commit is contained in:
parent
1b33349269
commit
a1a2e38fb9
@ -1,6 +1,6 @@
|
||||
2000-08-25 Kenichi Handa <handa@etl.go.jp>
|
||||
|
||||
* leim-Makefile.in: Rename skkdic to ja-dic through out the file.
|
||||
* leim-Makefile.in: Rename skkdic to ja-dic throughout the file.
|
||||
|
||||
2000-08-24 Gerd Moellmann <gerd@gnu.org>
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
* ja-dic: Directory name changed from skkdic.
|
||||
|
||||
* ja-dic/ja-dic.el[c]: Renamed from skkdic.el[c].
|
||||
* ja-dic/ja-dic.el[c]: Re-generated by the new ja-dic-cnv.el.
|
||||
|
||||
* README: Rename skkdic to ja-dic throughout the file.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
;; skkdic.el -- dictionary for Japanese input method
|
||||
;; ja-dic.el -- dictionary for Japanese input method
|
||||
;; Generated by the command `skkdic-convert'
|
||||
;; Date: Fri Aug 25 09:40:31 2000
|
||||
;; Date: Fri Aug 25 11:06:13 2000
|
||||
;; Original SKK dictionary file: SKK-JISYO.L
|
||||
|
||||
;;; Comment:
|
||||
@ -38,7 +38,7 @@
|
||||
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile (require 'skkdic-cnv))
|
||||
(eval-when-compile (require 'ja-dic-cnv))
|
||||
|
||||
;; Setting okuri-ari entries.
|
||||
(skkdic-set-okuri-ari
|
||||
@ -54597,6 +54597,6 @@
|
||||
)
|
||||
|
||||
;;
|
||||
(provide 'skkdic)
|
||||
(provide 'ja-dic)
|
||||
|
||||
;; skkdic.el ends here
|
||||
;; ja-dic.el ends here
|
||||
|
BIN
leim/ja-dic/ja-dic.elc
Normal file
BIN
leim/ja-dic/ja-dic.elc
Normal file
Binary file not shown.
@ -1,3 +1,22 @@
|
||||
2000-08-25 Kenichi Handa <handa@etl.go.jp>
|
||||
|
||||
* international/kkc.el: Remove SKK from Keywords. Require
|
||||
ja-dic-utl instead of skkdic-utl.
|
||||
|
||||
* international/ja-dic-cnv.el: Renamed from skkdic-cnv.el.
|
||||
Provide ja-dic-cnv instead of skkdic-cnv.
|
||||
(ja-dic-filename): Renamed from skkdic-filename. Referers changed
|
||||
(iso-2022-7bit-short): Add safe-charsets property.
|
||||
(skkdic-convert-postfix): Search Japanese chou-on character in
|
||||
addition to Hiragana character.
|
||||
(skkdic-convert-prefix, skkdic-collect-okuri-nasi): Likewise.
|
||||
(skkdic-convert): Change file names from skkdic.el to ja-dic.el
|
||||
(batch-skkdic-convert): Likewise.
|
||||
|
||||
* international/ja-dic-utl.el: Renamed from skkdic-utl.el.
|
||||
Provide ja-dic-utl instead of skkdic-utl.
|
||||
(skkdic-lookup-key): Load ja-dic/ja-dic, not skkdic/skkdic.
|
||||
|
||||
2000-08-24 Dave Love <fx@gnu.org>
|
||||
|
||||
* disp-table.el (standard-display-default): Make the test of `l'
|
||||
|
@ -1,560 +0,0 @@
|
||||
;;; skkdic-cnv.el --- Convert a SKK dictionary for `skkdic-utl'
|
||||
|
||||
;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
|
||||
;; Licensed to the Free Software Foundation.
|
||||
|
||||
;; Keywords: mule, multilingual, Japanese, SKK
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation; either version 2, or (at your option)
|
||||
;; any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
;; Boston, MA 02111-1307, USA.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; SKK is a Japanese input method running on Mule created by Masahiko
|
||||
;; Sato <masahiko@sato.riec.tohoku.ac.jp>. Here we provide utilities
|
||||
;; to handle a dictionary distributed with SKK so that a different
|
||||
;; input method (e.g. quail-japanese) can utilize the dictionary.
|
||||
|
||||
;; The format of SKK dictionary is quite simple. Each line has the
|
||||
;; form "KANASTRING /CONV1/CONV2/.../" which means KANASTRING ($B2>L>J8(B
|
||||
;; $B;zNs(B) can be converted to one of CONVi. CONVi is a Kanji ($B4A;z(B)
|
||||
;; and Kana ($B2>L>(B) mixed string.
|
||||
;;
|
||||
;; KANASTRING may have a trailing ASCII letter for Okurigana ($BAw$j2>L>(B)
|
||||
;; information. For instance, the trailing letter `k' means that one
|
||||
;; of the following Okurigana is allowed: $B$+$-$/$1$3(B. So, in that
|
||||
;; case, the string "KANASTRING$B$/(B" can be converted to one of "CONV1$B$/(B",
|
||||
;; CONV2$B$/(B, ...
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; Name of a file to generate from SKK dictionary.
|
||||
(defvar skkdic-filename "skkdic.el")
|
||||
|
||||
;; To make a generated skkdic.el smaller.
|
||||
(make-coding-system
|
||||
'iso-2022-7bit-short
|
||||
2 ?J
|
||||
"Like `iso-2022-7bit' but no ASCII designation before SPC."
|
||||
'(ascii nil nil nil t t nil t))
|
||||
|
||||
(defun skkdic-convert-okuri-ari (skkbuf buf)
|
||||
(message "Processing OKURI-ARI entries ...")
|
||||
(goto-char (point-min))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert ";; Setting okuri-ari entries.\n"
|
||||
"(skkdic-set-okuri-ari\n"))
|
||||
(while (not (eobp))
|
||||
(let ((from (point))
|
||||
to)
|
||||
(end-of-line)
|
||||
(setq to (point))
|
||||
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert-buffer-substring skkbuf from to)
|
||||
(beginning-of-line)
|
||||
(insert "\"")
|
||||
(search-forward " ")
|
||||
(delete-char 1) ; delete the first '/'
|
||||
(let ((p (point)))
|
||||
(end-of-line)
|
||||
(delete-char -1) ; delete the last '/'
|
||||
(subst-char-in-region p (point) ?/ ? 'noundo))
|
||||
(insert "\"\n"))
|
||||
|
||||
(forward-line 1)))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert ")\n\n")))
|
||||
|
||||
(defconst skkdic-postfix-list '(skkdic-postfix-list))
|
||||
|
||||
(defconst skkdic-postfix-data
|
||||
'(("$B$$$-(B" "$B9T(B")
|
||||
("$B$,$+$j(B" "$B78(B")
|
||||
("$B$,$/(B" "$B3X(B")
|
||||
("$B$,$o(B" "$B@n(B")
|
||||
("$B$7$c(B" "$B<R(B")
|
||||
("$B$7$e$&(B" "$B=8(B")
|
||||
("$B$7$g$&(B" "$B>^(B" "$B>k(B")
|
||||
("$B$8$g$&(B" "$B>k(B")
|
||||
("$B$;$s(B" "$B@~(B")
|
||||
("$B$@$1(B" "$B3Y(B")
|
||||
("$B$A$c$/(B" "$BCe(B")
|
||||
("$B$F$s(B" "$BE9(B")
|
||||
("$B$H$&$2(B" "$BF=(B")
|
||||
("$B$I$*$j(B" "$BDL$j(B")
|
||||
("$B$d$^(B" "$B;3(B")
|
||||
("$B$P$7(B" "$B66(B")
|
||||
("$B$O$D(B" "$BH/(B")
|
||||
("$B$b$/(B" "$BL\(B")
|
||||
("$B$f$-(B" "$B9T(B")))
|
||||
|
||||
(defun skkdic-convert-postfix (skkbuf buf)
|
||||
(message "Processing POSTFIX entries ...")
|
||||
(goto-char (point-min))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert ";; Setting postfix entries.\n"
|
||||
"(skkdic-set-postfix\n"))
|
||||
|
||||
;; Initialize SKKDIC-POSTFIX-LIST by predefined data
|
||||
;; SKKDIC-POSTFIX-DATA.
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(let ((l skkdic-postfix-data)
|
||||
kana candidates entry)
|
||||
(while l
|
||||
(setq kana (car (car l)) candidates (cdr (car l)))
|
||||
(insert "\"" kana)
|
||||
(while candidates
|
||||
(insert " " (car candidates))
|
||||
(setq entry (lookup-nested-alist (car candidates)
|
||||
skkdic-postfix-list nil nil t))
|
||||
(if (consp (car entry))
|
||||
(setcar entry (cons kana (car entry)))
|
||||
(set-nested-alist (car candidates) (list kana)
|
||||
skkdic-postfix-list))
|
||||
(setq candidates (cdr candidates)))
|
||||
(insert "\"\n")
|
||||
(setq l (cdr l)))))
|
||||
|
||||
;; Search postfix entries.
|
||||
(while (re-search-forward "^[#<>?]\\(\\cH+\\) " nil t)
|
||||
(let ((kana (match-string 1))
|
||||
str candidates)
|
||||
(while (looking-at "/[#0-9 ]*\\([^/\n]*\\)/")
|
||||
(setq str (match-string 1))
|
||||
(if (not (member str candidates))
|
||||
(setq candidates (cons str candidates)))
|
||||
(goto-char (match-end 1)))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert "\"" kana)
|
||||
(while candidates
|
||||
(insert " " (car candidates))
|
||||
(let ((entry (lookup-nested-alist (car candidates)
|
||||
skkdic-postfix-list nil nil t)))
|
||||
(if (consp (car entry))
|
||||
(if (not (member kana (car entry)))
|
||||
(setcar entry (cons kana (car entry))))
|
||||
(set-nested-alist (car candidates) (list kana)
|
||||
skkdic-postfix-list)))
|
||||
(setq candidates (cdr candidates)))
|
||||
(insert "\"\n"))))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert ")\n\n")))
|
||||
|
||||
(defconst skkdic-prefix-list '(skkdic-prefix-list))
|
||||
|
||||
(defun skkdic-convert-prefix (skkbuf buf)
|
||||
(message "Processing PREFIX entries ...")
|
||||
(goto-char (point-min))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert ";; Setting prefix entries.\n"
|
||||
"(skkdic-set-prefix\n"))
|
||||
(save-excursion
|
||||
(while (re-search-forward "^\\(\\cH+\\)[<>?] " nil t)
|
||||
(let ((kana (match-string 1))
|
||||
str candidates)
|
||||
(while (looking-at "/\\([^/\n]+\\)/")
|
||||
(setq str (match-string 1))
|
||||
(if (not (member str candidates))
|
||||
(setq candidates (cons str candidates)))
|
||||
(goto-char (match-end 1)))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert "\"" kana)
|
||||
(while candidates
|
||||
(insert " " (car candidates))
|
||||
(set-nested-alist (car candidates) kana skkdic-prefix-list)
|
||||
(setq candidates (cdr candidates)))
|
||||
(insert "\"\n")))))
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert ")\n\n")))
|
||||
|
||||
;; FROM and TO point the head and tail of "/J../J../.../".
|
||||
(defun skkdic-get-candidate-list (from to)
|
||||
(let (candidates)
|
||||
(goto-char from)
|
||||
(while (re-search-forward "/\\cj+" to t)
|
||||
(setq candidates (cons (buffer-substring (1+ (match-beginning 0))
|
||||
(match-end 0))
|
||||
candidates)))
|
||||
candidates))
|
||||
|
||||
;; Return entry for STR from nested alist ALIST.
|
||||
(defsubst skkdic-get-entry (str alist)
|
||||
(car (lookup-nested-alist str alist nil nil t)))
|
||||
|
||||
|
||||
(defconst skkdic-word-list '(skkdic-word-list))
|
||||
|
||||
;; Return t if substring of STR (between FROM and TO) can be broken up
|
||||
;; to chunks all of which can be derived from another entry in SKK
|
||||
;; dictionary. SKKBUF is the buffer where the original SKK dictionary
|
||||
;; is visited, KANA is the current entry for STR. FIRST is t iff this
|
||||
;; is called at top level.
|
||||
|
||||
(defun skkdic-breakup-string (skkbuf kana str from to &optional first)
|
||||
(let ((len (- to from)))
|
||||
(or (and (>= len 2)
|
||||
(let ((min-idx (+ from 2))
|
||||
(idx (if first (1- to ) to))
|
||||
(found nil))
|
||||
(while (and (not found) (>= idx min-idx))
|
||||
(let ((kana2-list (skkdic-get-entry
|
||||
(substring str from idx)
|
||||
skkdic-word-list)))
|
||||
(if (or (and (consp kana2-list)
|
||||
(let ((kana-len (length kana))
|
||||
kana2)
|
||||
(catch 'skkdic-tag
|
||||
(while kana2-list
|
||||
(setq kana2 (car kana2-list))
|
||||
(if (string-match kana2 kana)
|
||||
(throw 'skkdic-tag t))
|
||||
(setq kana2-list (cdr kana2-list)))))
|
||||
(or (= idx to)
|
||||
(skkdic-breakup-string skkbuf kana str
|
||||
idx to)))
|
||||
(and (stringp kana2-list)
|
||||
(string-match kana2-list kana)))
|
||||
(setq found t)
|
||||
(setq idx (1- idx)))))
|
||||
found))
|
||||
(and first
|
||||
(> len 2)
|
||||
(let ((kana2 (skkdic-get-entry
|
||||
(substring str from (1+ from))
|
||||
skkdic-prefix-list)))
|
||||
(and (stringp kana2)
|
||||
(eq (string-match kana2 kana) 0)))
|
||||
(skkdic-breakup-string skkbuf kana str (1+ from) to))
|
||||
(and (not first)
|
||||
(>= len 1)
|
||||
(let ((kana2-list (skkdic-get-entry
|
||||
(substring str from to)
|
||||
skkdic-postfix-list)))
|
||||
(and (consp kana2-list)
|
||||
(let (kana2)
|
||||
(catch 'skkdic-tag
|
||||
(while kana2-list
|
||||
(setq kana2 (car kana2-list))
|
||||
(if (string= kana2
|
||||
(substring kana (- (length kana2))))
|
||||
(throw 'skkdic-tag t))
|
||||
(setq kana2-list (cdr kana2-list)))))))))))
|
||||
|
||||
;; Return list of candidates which excludes some from CANDIDATES.
|
||||
;; Excluded candidates can be derived from another entry.
|
||||
|
||||
(defun skkdic-reduced-candidates (skkbuf kana candidates)
|
||||
(let (elt l)
|
||||
(while candidates
|
||||
(setq elt (car candidates))
|
||||
(if (or (= (length elt) 1)
|
||||
(and (string-match "^\\cj" elt)
|
||||
(not (skkdic-breakup-string skkbuf kana elt 0 (length elt)
|
||||
'first))))
|
||||
(setq l (cons elt l)))
|
||||
(setq candidates (cdr candidates)))
|
||||
(nreverse l)))
|
||||
|
||||
(defconst skkdic-okuri-nasi-entries (list nil))
|
||||
(defconst skkdic-okuri-nasi-entries-count 0)
|
||||
|
||||
(defun skkdic-collect-okuri-nasi ()
|
||||
(message "Collecting OKURI-NASI entries ...")
|
||||
(save-excursion
|
||||
(let ((prev-ratio 0)
|
||||
ratio)
|
||||
(while (re-search-forward "^\\(\\cH+\\) \\(/\\cj.*\\)/$" nil t)
|
||||
(let ((kana (match-string 1))
|
||||
(candidates (skkdic-get-candidate-list (match-beginning 2)
|
||||
(match-end 2))))
|
||||
(setq skkdic-okuri-nasi-entries
|
||||
(cons (cons kana candidates) skkdic-okuri-nasi-entries)
|
||||
skkdic-okuri-nasi-entries-count
|
||||
(1+ skkdic-okuri-nasi-entries-count))
|
||||
(setq ratio (floor (/ (* (point) 100.0) (point-max))))
|
||||
(if (/= ratio prev-ratio)
|
||||
(progn
|
||||
(message "collected %2d%% %s ..." ratio kana)
|
||||
(setq prev-ratio ratio)))
|
||||
(while candidates
|
||||
(let ((entry (lookup-nested-alist (car candidates)
|
||||
skkdic-word-list nil nil t)))
|
||||
(if (consp (car entry))
|
||||
(setcar entry (cons kana (car entry)))
|
||||
(set-nested-alist (car candidates) (list kana)
|
||||
skkdic-word-list)))
|
||||
(setq candidates (cdr candidates))))))))
|
||||
|
||||
(defun skkdic-convert-okuri-nasi (skkbuf buf)
|
||||
(message "Processing OKURI-NASI entries ...")
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(insert ";; Setting okuri-nasi entries.\n"
|
||||
"(skkdic-set-okuri-nasi\n")
|
||||
(let ((l (nreverse skkdic-okuri-nasi-entries))
|
||||
(count 0)
|
||||
(prev-ratio 0)
|
||||
ratio)
|
||||
(while l
|
||||
(let ((kana (car (car l)))
|
||||
(candidates (cdr (car l))))
|
||||
(setq ratio (/ (* count 1000) skkdic-okuri-nasi-entries-count)
|
||||
count (1+ count))
|
||||
(if (/= prev-ratio (/ ratio 10))
|
||||
(progn
|
||||
(message "processed %2d%% %s ..." (/ ratio 10) kana)
|
||||
(setq prev-ratio (/ ratio 10))))
|
||||
(if (setq candidates
|
||||
(skkdic-reduced-candidates skkbuf kana candidates))
|
||||
(progn
|
||||
(insert "\"" kana)
|
||||
(while candidates
|
||||
(insert " " (car candidates))
|
||||
(setq candidates (cdr candidates)))
|
||||
(insert "\"\n"))))
|
||||
(setq l (cdr l))))
|
||||
(insert ")\n\n")))
|
||||
|
||||
(defun skkdic-convert (filename &optional dirname)
|
||||
"Convert SKK dictionary of FILENAME into the file \"skkdic.el\".
|
||||
Optional argument DIRNAME if specified is the directory name under which
|
||||
the generated \"skkdic.el\" is saved."
|
||||
(interactive "FSKK dictionary file: ")
|
||||
(message "Reading file \"%s\" ..." filename)
|
||||
(let ((skkbuf(find-file-noselect (expand-file-name filename)))
|
||||
(buf (get-buffer-create "*skkdic-work*")))
|
||||
(save-excursion
|
||||
;; Setup and generate the header part of working buffer.
|
||||
(set-buffer buf)
|
||||
(erase-buffer)
|
||||
(buffer-disable-undo)
|
||||
(insert ";; skkdic.el -- dictionary for Japanese input method\n"
|
||||
";;\tGenerated by the command `skkdic-convert'\n"
|
||||
";;\tDate: " (current-time-string) "\n"
|
||||
";;\tOriginal SKK dictionary file: "
|
||||
(file-name-nondirectory filename)
|
||||
"\n\n"
|
||||
";;; Comment:\n\n"
|
||||
";; Do byte-compile this file again after any modification.\n\n"
|
||||
";;; Start of the header of the original SKK dictionary.\n\n")
|
||||
(set-buffer skkbuf)
|
||||
(widen)
|
||||
(goto-char 1)
|
||||
(let (pos)
|
||||
(search-forward ";; okuri-ari")
|
||||
(forward-line 1)
|
||||
(setq pos (point))
|
||||
(set-buffer buf)
|
||||
(insert-buffer-substring skkbuf 1 pos))
|
||||
(insert "\n"
|
||||
";;; Code:\n\n(eval-when-compile (require 'skkdic-cnv))\n\n")
|
||||
|
||||
;; Generate the body part of working buffer.
|
||||
(set-buffer skkbuf)
|
||||
(let ((from (point))
|
||||
to)
|
||||
;; Convert okuri-ari entries.
|
||||
(search-forward ";; okuri-nasi")
|
||||
(beginning-of-line)
|
||||
(setq to (point))
|
||||
(narrow-to-region from to)
|
||||
(skkdic-convert-okuri-ari skkbuf buf)
|
||||
(widen)
|
||||
|
||||
;; Convert okuri-nasi postfix entries.
|
||||
(goto-char to)
|
||||
(forward-line 1)
|
||||
(setq from (point))
|
||||
(re-search-forward "^\\cH")
|
||||
(setq to (match-beginning 0))
|
||||
(narrow-to-region from to)
|
||||
(skkdic-convert-postfix skkbuf buf)
|
||||
(widen)
|
||||
|
||||
;; Convert okuri-nasi prefix entries.
|
||||
(goto-char to)
|
||||
(skkdic-convert-prefix skkbuf buf)
|
||||
|
||||
;;
|
||||
(skkdic-collect-okuri-nasi)
|
||||
|
||||
;; Convert okuri-nasi general entries.
|
||||
(skkdic-convert-okuri-nasi skkbuf buf)
|
||||
|
||||
;; Postfix
|
||||
(save-excursion
|
||||
(set-buffer buf)
|
||||
(goto-char (point-max))
|
||||
(insert ";;\n(provide 'skkdic)\n\n;; skkdic.el ends here\n")))
|
||||
|
||||
;; Save the working buffer.
|
||||
(set-buffer buf)
|
||||
(set-visited-file-name (expand-file-name skkdic-filename dirname) t)
|
||||
(set-buffer-file-coding-system 'iso-2022-7bit-short)
|
||||
(save-buffer 0))
|
||||
(kill-buffer skkbuf)
|
||||
(switch-to-buffer buf)))
|
||||
|
||||
(defun batch-skkdic-convert ()
|
||||
"Run `skkdic-convert' on the files remaining on the command line.
|
||||
Use this from the command line, with `-batch';
|
||||
it won't work in an interactive Emacs.
|
||||
For example, invoke:
|
||||
% emacs -batch -l skkdic-cnv -f batch-skkdic-convert SKK-JISYO.L
|
||||
to generate \"skkdic.el\" from SKK dictionary file \"SKK-JISYO.L\".
|
||||
To get complete usage, invoke:
|
||||
% emacs -batch -l skkdic-cnv -f batch-skkdic-convert -h"
|
||||
(defvar command-line-args-left) ; Avoid compiler warning.
|
||||
(if (not noninteractive)
|
||||
(error "`batch-skkdic-convert' should be used only with -batch"))
|
||||
(if (string= (car command-line-args-left) "-h")
|
||||
(progn
|
||||
(message "To convert SKK-JISYO.L into skkdic.el:")
|
||||
(message " %% emacs -batch -l skkdic-conv -f batch-skkdic-convert SKK-JISYO.L")
|
||||
(message "To convert SKK-JISYO.L into DIR/skkdic.el:")
|
||||
(message " %% emacs -batch -l skkdic-conv -f batch-skkdic-convert -dir DIR SKK-JISYO.L"))
|
||||
(let (targetdir filename)
|
||||
(if (string= (car command-line-args-left) "-dir")
|
||||
(progn
|
||||
(setq command-line-args-left (cdr command-line-args-left))
|
||||
(setq targetdir (expand-file-name (car command-line-args-left)))
|
||||
(setq command-line-args-left (cdr command-line-args-left))))
|
||||
(setq filename (expand-file-name (car command-line-args-left)))
|
||||
(message "Converting %s to skkdic.el ..." filename)
|
||||
(message "It takes around 10 minutes even on Sun SS20.")
|
||||
(skkdic-convert filename targetdir)
|
||||
(message "Do byte-compile the created file by:")
|
||||
(message " %% emacs -batch -f batch-byte-compile skkdic.el")
|
||||
))
|
||||
(kill-emacs 0))
|
||||
|
||||
|
||||
;; The following macros are expanded at byte-compiling time so that
|
||||
;; compiled code can be loaded quickly.
|
||||
|
||||
(defun skkdic-get-kana-compact-codes (kana)
|
||||
(let* ((len (length kana))
|
||||
(vec (make-vector len 0))
|
||||
(i 0)
|
||||
ch)
|
||||
(while (< i len)
|
||||
(setq ch (aref kana i))
|
||||
(aset vec i
|
||||
(if (< ch 128) ; CH is an ASCII letter for OKURIGANA,
|
||||
(- ch) ; represented by a negative code.
|
||||
(if (= ch ?$B!<(B) ; `$B!<(B' is represented by 0.
|
||||
0
|
||||
(- (nth 2 (split-char ch)) 32))))
|
||||
(setq i (1+ i)))
|
||||
vec))
|
||||
|
||||
(defun skkdic-extract-conversion-data (entry)
|
||||
(string-match "^\\cj+[a-z]* " entry)
|
||||
(let ((kana (substring entry (match-beginning 0) (1- (match-end 0))))
|
||||
(i (match-end 0))
|
||||
candidates)
|
||||
(while (string-match "[^ ]+" entry i)
|
||||
(setq candidates (cons (match-string 0 entry) candidates))
|
||||
(setq i (match-end 0)))
|
||||
(cons (skkdic-get-kana-compact-codes kana) candidates)))
|
||||
|
||||
(defmacro skkdic-set-okuri-ari (&rest entries)
|
||||
`(defconst skkdic-okuri-ari
|
||||
',(let ((l entries)
|
||||
(map '(skkdic-okuri-ari))
|
||||
entry)
|
||||
(while l
|
||||
(setq entry (skkdic-extract-conversion-data (car l)))
|
||||
(set-nested-alist (car entry) (cdr entry) map)
|
||||
(setq l (cdr l)))
|
||||
map)))
|
||||
|
||||
(defmacro skkdic-set-postfix (&rest entries)
|
||||
`(defconst skkdic-postfix
|
||||
',(let ((l entries)
|
||||
(map '(nil))
|
||||
(longest 1)
|
||||
len entry)
|
||||
(while l
|
||||
(setq entry (skkdic-extract-conversion-data (car l)))
|
||||
(setq len (length (car entry)))
|
||||
(if (> len longest)
|
||||
(setq longest len))
|
||||
(let ((entry2 (lookup-nested-alist (car entry) map nil nil t)))
|
||||
(if (consp (car entry2))
|
||||
(let ((conversions (cdr entry)))
|
||||
(while conversions
|
||||
(if (not (member (car conversions) (car entry2)))
|
||||
(setcar entry2 (cons (car conversions) (car entry2))))
|
||||
(setq conversions (cdr conversions))))
|
||||
(set-nested-alist (car entry) (cdr entry) map)))
|
||||
(setq l (cdr l)))
|
||||
(setcar map longest)
|
||||
map)))
|
||||
|
||||
(defmacro skkdic-set-prefix (&rest entries)
|
||||
`(defconst skkdic-prefix
|
||||
',(let ((l entries)
|
||||
(map '(nil))
|
||||
(longest 1)
|
||||
len entry)
|
||||
(while l
|
||||
(setq entry (skkdic-extract-conversion-data (car l)))
|
||||
(setq len (length (car entry)))
|
||||
(if (> len longest)
|
||||
(setq longest len))
|
||||
(let ((entry2 (lookup-nested-alist (car entry) map len nil t)))
|
||||
(if (consp (car entry2))
|
||||
(let ((conversions (cdr entry)))
|
||||
(while conversions
|
||||
(if (not (member (car conversions) (car entry2)))
|
||||
(setcar entry2 (cons (car conversions) (car entry2))))
|
||||
(setq conversions (cdr conversions))))
|
||||
(set-nested-alist (car entry) (cdr entry) map len)))
|
||||
(setq l (cdr l)))
|
||||
(setcar map longest)
|
||||
map)))
|
||||
|
||||
(defmacro skkdic-set-okuri-nasi (&rest entries)
|
||||
`(defconst skkdic-okuri-nasi
|
||||
',(let ((l entries)
|
||||
(map '(skdic-okuri-nasi))
|
||||
(count 0)
|
||||
entry)
|
||||
(while l
|
||||
(setq count (1+ count))
|
||||
(if (= (% count 10) 0)
|
||||
(message (format "%d entries" count)))
|
||||
(setq entry (skkdic-extract-conversion-data (car l)))
|
||||
(set-nested-alist (car entry) (cdr entry) map)
|
||||
(setq l (cdr l)))
|
||||
map)))
|
||||
|
||||
(provide 'skkdic-cnv)
|
||||
|
||||
;; skkdic-cnv.el ends here
|
@ -1,214 +0,0 @@
|
||||
;;; skkdic-utl.el --- Utility functions for handling SKK dictionary
|
||||
|
||||
;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
|
||||
;; Licensed to the Free Software Foundation.
|
||||
|
||||
;; Keywords: mule, multilingual, Japanese, SKK
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation; either version 2, or (at your option)
|
||||
;; any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
;; Boston, MA 02111-1307, USA.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; SKK is a free Japanese input method running on Mule created by
|
||||
;; Masahiko Sato <masahiko@sato.riec.tohoku.ac.jp>. The Emacs Lisp
|
||||
;; library kkc.el provides a facility to convert a Japanese kana
|
||||
;; string to a kanji-kana-mixed string by using a SKK dictionary.
|
||||
;;
|
||||
;; This file provides a generic function to look up a SKK dictionary.
|
||||
;;
|
||||
;; The original SKK dictionary SKK-JISYO.L is converted to skkdic.el.
|
||||
;; We get entries of the dictionary in four variables (listed below)
|
||||
;; by loadig this file (or byte-compiled version skkdic.elc).
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; The following four variables are set by loading skkdic.el[c].
|
||||
(defvar skkdic-okuri-ari nil
|
||||
"Nested alist for OKURI-ARI entries of SKK dictionary.")
|
||||
|
||||
(defvar skkdic-postfix nil
|
||||
"Nested alist for SETSUBIJI (postfix) entries of SKK dictionary.")
|
||||
|
||||
(defvar skkdic-prefix nil
|
||||
"Nested alist SETTOUJI (prefix) entries of SKK dictionary.")
|
||||
|
||||
(defvar skkdic-okuri-nasi nil
|
||||
"Nested alist for OKURI-NASI entries of SKK dictionary.")
|
||||
|
||||
(defconst skkdic-okurigana-table
|
||||
'((?$B$!(B . ?a) (?$B$"(B . ?a) (?$B$#(B . ?i) (?$B$$(B . ?i) (?$B$%(B . ?u)
|
||||
(?$B$&(B . ?u) (?$B$'(B . ?e) (?$B$((B . ?e) (?$B$)(B . ?o) (?$B$*(B . ?o)
|
||||
(?$B$+(B . ?k) (?$B$,(B . ?g) (?$B$-(B . ?k) (?$B$.(B . ?g) (?$B$/(B . ?k)
|
||||
(?$B$0(B . ?g) (?$B$1(B . ?k) (?$B$2(B . ?g) (?$B$3(B . ?k) (?$B$4(B . ?g)
|
||||
(?$B$5(B . ?s) (?$B$6(B . ?z) (?$B$7(B . ?s) (?$B$8(B . ?j) (?$B$9(B . ?s)
|
||||
(?$B$:(B . ?z) (?$B$;(B . ?s) (?$B$<(B . ?z) (?$B$=(B . ?s) (?$B$>(B . ?z)
|
||||
(?$B$?(B . ?t) (?$B$@(B . ?d) (?$B$A(B . ?t) (?$B$B(B . ?d) (?$B$C(B . ?t)
|
||||
(?$B$D(B . ?t) (?$B$E(B . ?d) (?$B$F(B . ?t) (?$B$G(B . ?d) (?$B$H(B . ?t) (?$B$I(B . ?d)
|
||||
(?$B$J(B . ?n) (?$B$K(B . ?n) (?$B$L(B . ?n) (?$B$M(B . ?n) (?$B$N(B . ?n)
|
||||
(?$B$O(B . ?h) (?$B$P(B . ?b) (?$B$Q(B . ?p) (?$B$R(B . ?h) (?$B$S(B . ?b)
|
||||
(?$B$T(B . ?p) (?$B$U(B . ?h) (?$B$V(B . ?b) (?$B$W(B . ?p) (?$B$X(B . ?h)
|
||||
(?$B$Y(B . ?b) (?$B$Z(B . ?p) (?$B$[(B . ?h) (?$B$\(B . ?b) (?$B$](B . ?p)
|
||||
(?$B$^(B . ?m) (?$B$_(B . ?m) (?$B$`(B . ?m) (?$B$a(B . ?m) (?$B$b(B . ?m)
|
||||
(?$B$c(B . ?y) (?$B$d(B . ?y) (?$B$e(B . ?y) (?$B$f(B . ?y) (?$B$g(B . ?y) (?$B$h(B . ?y)
|
||||
(?$B$i(B . ?r) (?$B$j(B . ?r) (?$B$k(B . ?r) (?$B$l(B . ?r) (?$B$m(B . ?r)
|
||||
(?$B$o(B . ?w) (?$B$p(B . ?w) (?$B$q(B . ?w) (?$B$r(B . ?w)
|
||||
(?$B$s(B . ?n)
|
||||
)
|
||||
"Alist of Okuriganas vs trailing ASCII letters in OKURI-ARI entry.")
|
||||
|
||||
(defun skkdic-merge-head-and-tail (heads tails postfix)
|
||||
(let ((min-len 2)
|
||||
l)
|
||||
(while heads
|
||||
(if (or (not postfix)
|
||||
(>= (length (car heads)) min-len))
|
||||
(let ((tail tails))
|
||||
(while tail
|
||||
(if (or postfix
|
||||
(>= (length (car tail)) min-len))
|
||||
(setq l (cons (concat (car heads) (car tail)) l)))
|
||||
(setq tail (cdr tail)))))
|
||||
(setq heads (cdr heads)))
|
||||
l))
|
||||
|
||||
(defconst skkdic-jisx0208-hiragana-block (nth 1 (split-char ?$B$"(B)))
|
||||
|
||||
(defun skkdic-lookup-key (seq len &optional postfix prefer-noun)
|
||||
"Return a list of conversion string for sequence SEQ of length LEN.
|
||||
|
||||
SEQ is a vector of Kana characters to be converted by SKK dictionary.
|
||||
If LEN is shorter than the length of KEYSEQ, the first LEN keys in SEQ
|
||||
are took into account.
|
||||
|
||||
Optional 3rd arg POSTFIX non-nil means SETSUBIJI (postfix) are also
|
||||
considered to find conversion strings.
|
||||
|
||||
Optional 4th arg PREFER-NOUN non-nil means that the conversions
|
||||
without okurigana are placed at the head of the returned list."
|
||||
(or skkdic-okuri-nasi
|
||||
(condition-case err
|
||||
(load-library "skk/skkdic")
|
||||
(error (ding)
|
||||
(with-output-to-temp-buffer "*Help*"
|
||||
(princ "The library `skkdic' can't be loaded.
|
||||
|
||||
The most common case is that you have not yet installed the library
|
||||
included in LEIM (Libraries of Emacs Input Method) which is
|
||||
distributed separately from Emacs.
|
||||
|
||||
LEIM is available from the same ftp directory as Emacs."))
|
||||
(signal (car err) (cdr err)))))
|
||||
|
||||
(let ((vec (make-vector len 0))
|
||||
(i 0)
|
||||
entry)
|
||||
;; At first, generate vector VEC from SEQ for looking up SKK
|
||||
;; alists. Nth element in VEC corresponds to Nth element in SEQ.
|
||||
;; The values are decided as follows.
|
||||
;; If SEQ[N] is `$B!<(B', VEC[N] is 0,
|
||||
;; else if SEQ[N] is a Hiragana character, VEC[N] is:
|
||||
;; ((The 2nd position code of SEQ[N]) - 32),
|
||||
;; else VEC[N] is 128.
|
||||
(while (< i len)
|
||||
(let ((ch (aref seq i))
|
||||
elts)
|
||||
(if (= ch ?$B!<(B)
|
||||
(aset vec i 0)
|
||||
(setq elts (split-char ch))
|
||||
(if (and (eq (car elts) 'japanese-jisx0208)
|
||||
(= (nth 1 elts) skkdic-jisx0208-hiragana-block))
|
||||
(aset vec i (- (nth 2 elts) 32))
|
||||
(aset vec i 128))))
|
||||
(setq i (1+ i)))
|
||||
|
||||
;; Search OKURI-NASI entries.
|
||||
(setq entry (lookup-nested-alist vec skkdic-okuri-nasi len 0 t))
|
||||
(if (consp (car entry))
|
||||
(setq entry (copy-sequence (car entry)))
|
||||
(setq entry nil))
|
||||
|
||||
(if postfix
|
||||
;; Search OKURI-NASI entries with postfixes.
|
||||
(let ((break (max (- len (car skkdic-postfix)) 1))
|
||||
entry-head entry-postfix entry2)
|
||||
(while (< break len)
|
||||
(if (and (setq entry-head
|
||||
(lookup-nested-alist vec skkdic-okuri-nasi
|
||||
break 0 t))
|
||||
(consp (car entry-head))
|
||||
(setq entry-postfix
|
||||
(lookup-nested-alist vec skkdic-postfix
|
||||
len break t))
|
||||
(consp (car entry-postfix))
|
||||
(setq entry2 (skkdic-merge-head-and-tail
|
||||
(car entry-head) (car entry-postfix) t)))
|
||||
(if entry
|
||||
(nconc entry entry2)
|
||||
(setq entry entry2)))
|
||||
(setq break (1+ break)))))
|
||||
|
||||
;; Search OKURI-NASI entries with prefixes.
|
||||
(let ((break (min (car skkdic-prefix) (- len 2)))
|
||||
entry-prefix entry-tail entry2)
|
||||
(while (> break 0)
|
||||
(if (and (setq entry-prefix
|
||||
(lookup-nested-alist vec skkdic-prefix break 0 t))
|
||||
(consp (car entry-prefix))
|
||||
(setq entry-tail
|
||||
(lookup-nested-alist vec skkdic-okuri-nasi len break t))
|
||||
(consp (car entry-tail))
|
||||
(setq entry2 (skkdic-merge-head-and-tail
|
||||
(car entry-prefix) (car entry-tail) nil)))
|
||||
(progn
|
||||
(if entry
|
||||
(nconc entry entry2)
|
||||
(setq entry entry2))))
|
||||
(setq break (1- break))))
|
||||
|
||||
;; Search OKURI-ARI entries.
|
||||
(let ((okurigana (assq (aref seq (1- len)) skkdic-okurigana-table))
|
||||
orig-element entry2)
|
||||
(if okurigana
|
||||
(progn
|
||||
(setq orig-element (aref vec (1- len)))
|
||||
(aset vec (1- len) (- (cdr okurigana)))
|
||||
(if (and (setq entry2 (lookup-nested-alist vec skkdic-okuri-ari
|
||||
len 0 t))
|
||||
(consp (car entry2)))
|
||||
(progn
|
||||
(setq entry2 (copy-sequence (car entry2)))
|
||||
(let ((l entry2)
|
||||
(okuri (char-to-string (aref seq (1- len)))))
|
||||
(while l
|
||||
(setcar l (concat (car l) okuri))
|
||||
(setq l (cdr l)))
|
||||
(if entry
|
||||
(if prefer-noun
|
||||
(nconc entry entry2)
|
||||
(setq entry2 (nreverse entry2))
|
||||
(nconc entry2 entry)
|
||||
(setq entry entry2))
|
||||
(setq entry (nreverse entry2))))))
|
||||
(aset vec (1- len) orig-element))))
|
||||
|
||||
entry))
|
||||
|
||||
;;
|
||||
(provide 'skkdic-utl)
|
||||
|
||||
;; skkdic-utl.el ends here
|
Loading…
Reference in New Issue
Block a user