--- migemo.el.orig Tue Apr 16 13:30:59 2002 +++ migemo.el Wed Apr 17 09:39:40 2002 @@ -29,7 +29,7 @@ ;;; Code: (defvar migemo-ruby "ruby" - "*Name or full path of the perl executable.") + "*Name or full path of the ruby executable.") (defvar migemo-directory "/usr/local/share/migemo" "*Directory where migemo files are placed") @@ -43,13 +43,16 @@ "*Options for migemo command") (defvar migemo-dictionary - (expand-file-name "migemo-dict" migemo-directory)) + (expand-file-name "migemo-dict" migemo-directory) + "*Path of migemo dictionary.") (defvar migemo-user-dictionary - (expand-file-name "user-dict" migemo-directory)) + (expand-file-name "user-dict" migemo-directory) + "*Path of migemo user dictionary.") (defvar migemo-regex-dictionary - (expand-file-name "regex-dict" migemo-directory)) + (expand-file-name "regex-dict" migemo-directory) + "*Path of migemo regex dictionary.") (defvar migemo-coding-system (if (>= emacs-major-version 20) @@ -62,6 +65,15 @@ (and (boundp 'MULE) *euc-japan*unix)) "*Default coding system for migemo.el") +(defvar migemo-use-pattern-alist t + "*If non-nil, use a stored regex in Emacs.") + +(defvar migemo-pattern-alist-length 512 + "*Maximal length of migemo-pattern-alist.") + +(defvar migemo-pattern-alist-file "~/.migemo" + "*Path of migemo alist file. If nil, don't save and restore the file.") + (defconst migemo-mw32-input-method (and (featurep 'meadow) "MW32-IME") "Support \"MW32-IME\" for Meadow.") @@ -70,6 +82,7 @@ (defvar migemo-buffer nil) (defvar migemo-current-input-method nil) (defvar migemo-search-pattern nil) +(defvar migemo-pattern-alist nil "Alist of pattern vs regex.") (defun migemo-toggle-isearch-enable () (interactive) @@ -107,11 +120,22 @@ (process-kill-without-query migemo-process) t)))) - ;; Must be worked with Emacs 19.28 (defun migemo-get-pattern (word) + (when (and migemo-use-pattern-alist + migemo-pattern-alist-file + (null migemo-pattern-alist)) + (migemo-pattern-alist-load)) + (set-text-properties 0 (length word) nil word) + (let* ((pattern (if isearch-case-fold-search (downcase word) word)) + (alst (and migemo-use-pattern-alist + (assoc pattern migemo-pattern-alist))) + regex) + (if alst + (progn + (setq migemo-pattern-alist (cons alst (delq alst migemo-pattern-alist))) + (cdr alst)) (migemo-init) - (let ((orig-buffer (current-buffer))) (save-excursion (set-buffer (process-buffer migemo-process)) (delete-region (point-min) (point-max)) @@ -119,8 +143,58 @@ (while (not (and (> (point-max) 1) (eq (char-after (1- (point-max))) ?\n))) (accept-process-output migemo-process 0 5)) - (buffer-substring (point-min) (1- (point-max)))))) + (prog1 + (setq regex (buffer-substring (point-min) (1- (point-max)))) + (when migemo-use-pattern-alist + (setq migemo-pattern-alist + (cons (cons pattern regex) migemo-pattern-alist)) + (when (and migemo-pattern-alist-length + (> (length migemo-pattern-alist) + (* migemo-pattern-alist-length 2))) + (setcdr (nthcdr (1- (* migemo-pattern-alist-length 2)) + migemo-pattern-alist) nil)))))))) + +(defun migemo-pattern-alist-load () + "Load migemo alist file." + (when (and migemo-use-pattern-alist migemo-pattern-alist-file) + (let ((file (expand-file-name migemo-pattern-alist-file)) + (coding-system-for-read migemo-coding-system) + (file-coding-system-for-read migemo-coding-system)) + (when (and (file-readable-p file) (not (file-directory-p file))) + (setq migemo-pattern-alist + (with-temp-buffer + (insert-file-contents file) + (goto-char (point-min)) + (condition-case err + (read (current-buffer)) + (error + (message "Error while reading %s; %s" + (file-name-nondirectory file) + (error-message-string err)) + nil)))))))) + +(defun migemo-pattern-alist-save () + "Save migemo alist file." + (interactive) + (when (and migemo-use-pattern-alist + migemo-pattern-alist-file + migemo-pattern-alist) + (let ((file (expand-file-name migemo-pattern-alist-file)) + (coding-system-for-write migemo-coding-system) + (file-coding-system migemo-coding-system)) + (when (file-writable-p file) + (when (and migemo-pattern-alist-length + (> (length migemo-pattern-alist) migemo-pattern-alist-length)) + (setcdr (nthcdr (1- migemo-pattern-alist-length) + migemo-pattern-alist) nil)) + (with-temp-buffer + (if (fboundp 'pp) + (pp migemo-pattern-alist (current-buffer)) + (prin1 migemo-pattern-alist (current-buffer))) + (write-region (point-min) (point-max) file nil 'nomsg)) + (setq migemo-pattern-alist nil))))) +(add-hook 'kill-emacs-hook 'migemo-pattern-alist-save) (defun migemo-expand-pattern () "\ Expand the Romaji sequences on the left side of the cursor