+(eval-when-compile
+ (require 'mime-text)
+ (condition-case nil
+ (require 'bbdb)
+ (error (defvar bbdb-buffer-name nil)))
+ )
+
+(defvar mime-acting-situation-example-list nil)
+
+(defvar mime-acting-situation-example-list-max-size 16)
+
+(defun mime-save-acting-situation-examples ()
+ (let* ((file mime-acting-situation-examples-file)
+ (buffer (get-buffer-create " *mime-example*")))
+ (unwind-protect
+ (save-excursion
+ (set-buffer buffer)
+ (setq buffer-file-name file)
+ (erase-buffer)
+ (insert ";;; " (file-name-nondirectory file) "\n")
+ (insert "\n;; This file is generated automatically by "
+ mime-view-version-string "\n\n")
+ (insert ";;; Code:\n\n")
+ (pp `(setq mime-acting-situation-example-list
+ ',mime-acting-situation-example-list)
+ (current-buffer))
+ (insert "\n;;; "
+ (file-name-nondirectory file)
+ " ends here.\n")
+ (save-buffer))
+ (kill-buffer buffer))))
+
+(add-hook 'kill-emacs-hook 'mime-save-acting-situation-examples)
+
+(defun mime-reduce-acting-situation-examples ()
+ (let* ((rest mime-acting-situation-example-list)
+ (min-example (car rest))
+ (min-score (cdr min-example)))
+ (while rest
+ (let* ((example (car rest))
+ (score (cdr example)))
+ (cond ((< score min-score)
+ (setq min-score score
+ min-example example)
+ )
+ ((= score min-score)
+ (if (<= (length (car example))(length (car min-example)))
+ (setq min-example example)
+ ))
+ ))
+ (setq rest (cdr rest)))
+ (setq mime-acting-situation-example-list
+ (delq min-example mime-acting-situation-example-list))
+ (setq min-example (car min-example))
+ (let ((examples mime-acting-situation-example-list)
+ (max-score 0)
+ max-examples)
+ (while examples
+ (let* ((ret (mime-compare-situation-with-example min-example
+ (caar examples)))
+ (ret-score (car ret)))
+ (cond ((> ret-score max-score)
+ (setq max-score ret-score
+ max-examples (list (cdr ret)))
+ )
+ ((= ret-score max-score)
+ (setq max-examples (cons (cdr ret) max-examples))
+ )))
+ (setq examples (cdr examples)))
+ (while max-examples
+ (let* ((example (car max-examples))
+ (cell (assoc example mime-acting-situation-example-list)))
+ (if cell
+ (setcdr cell (1+ (cdr cell)))
+ (setq mime-acting-situation-example-list
+ (cons (cons example 0)
+ mime-acting-situation-example-list))
+ ))
+ (setq max-examples (cdr max-examples))
+ ))))
+
+