Allow using `gnus-parameters' while splitting mail
[gnus] / lisp / smiley.el
index 9caaa22..6a63f63 100644 (file)
 ;;; smiley.el --- displaying smiley faces
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
 
-;; Author: Wes Hardaker <hardaker@ece.ucdavis.edu>
-;; Keywords: fun
+;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
+
+;; Author: Dave Love <fx@gnu.org>
+;; Keywords: news mail multimedia
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; 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.
+;; the Free Software Foundation, either version 3 of the License, 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
+;; 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.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
-;;
-;; comments go here.
-;;
-
-;;; Test smileys:  :-] :-o :-) ;-) :-\ :-| :-d :-P 8-| :-(
-
-;; To use:
-;; (require 'smiley)
-;; (setq gnus-treat-display-smileys t)
-
-;; The smilies were drawn by Joe Reiss <jreiss@vt.edu>.
-
-(require 'annotations)
-(require 'messagexmas)
-(require 'cl)
-(require 'custom)
+;; A re-written, simplified version of Wes Hardaker's XEmacs smiley.el
+;; which might be merged back to smiley.el if we get an assignment for
+;; that.  We don't have assignments for the images smiley.el uses, but
+;; I'm not sure we need that degree of rococoness and defaults like a
+;; yellow background.  Also, using PBM means we can display the images
+;; more generally.  -- fx
+;; `smiley.el' was replaced by `smiley-ems.el' on 2002-01-26 (after fx'
+;; comment).
+
+;; Test smileys:
+;; smile             ^:-) ^:)
+;; blink             ;-)  ;)
+;; forced            :-]
+;; braindamaged      8-)
+;; indifferent       :-|
+;; wry               :-/  :-\
+;; sad               :-(
+;; frown             :-{
+;; evil              >:-)
+;; cry               ;-(
+;; dead              X-)
+;; grin              :-D
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+(require 'nnheader)
+(require 'gnus-art)
 
 (defgroup smiley nil
-  "Turn :-)'s into real images (XEmacs)."
+  "Turn :-)'s into real images."
   :group 'gnus-visual)
 
-(defcustom smiley-data-directory (message-xmas-find-glyph-directory "smilies")
-  "*Location of the smiley faces files."
-  :type 'directory
+(defvar smiley-data-directory)
+
+(defcustom smiley-style
+  (if (or (and (fboundp 'face-attribute)
+              ;; In batch mode, attributes can be unspecified.
+              (condition-case nil
+                  (>= (face-attribute 'default :height) 160)
+                (error nil)))
+         (and (fboundp 'face-height)
+              (>= (face-height 'default) 14)))
+      'medium
+    'low-color)
+  "Smiley style."
+  :type '(choice (const :tag "small, 3 colors" low-color) ;; 13x14
+                (const :tag "medium, ~10 colors" medium) ;; 16x16
+                (const :tag "dull, grayscale" grayscale));; 14x14
+  :set (lambda (symbol value)
+        (set-default symbol value)
+        (setq smiley-data-directory (smiley-directory))
+        (smiley-update-cache))
+  :initialize 'custom-initialize-default
+  :version "23.1" ;; No Gnus
   :group 'smiley)
 
-;; Notice the subtle differences in the regular expressions in the
-;; two alists below.
-
-(defcustom smiley-deformed-regexp-alist
-  '(("\\(\\^_?\\^;;;\\)\\W" 1 "WideFaceAse3.xbm")
-    ("\\(\\^_?\\^;;\\)\\W" 1 "WideFaceAse2.xbm")
-    ("\\(\\^_?\\^;\\)\\W" 1 "WideFaceAse1.xbm")
-    ("\\(\\^_?\\^\\)\\W" 1 "WideFaceSmile.xbm")
-    ("\\(;_;\\)\\W" 1 "WideFaceWeep.xbm")
-    ("\\(T_T\\)\\W" 1 "WideFaceWeep.xbm")
-    ("\\(:-*[<«]+\\)\\W" 1 "FaceAngry.xpm")
-    ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
-    ("\\(:-*D\\)\\W" 1 "FaceGrinning.xpm")
-    ("\\(:-*[)>}»]+\\)\\W" 1 "FaceHappy.xpm")
-    ("\\(=[)»]+\\)\\W" 1 "FaceHappy.xpm")
-    ("\\(:-*[/\\\"]\\)[^/]\\W" 1 "FaceIronic.xpm")
-    ("[^.0-9]\\([8|]-*[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
-    ("\\([:|]-*#+\\)\\W" 1 "FaceNyah.xpm")
-    ("\\(:-*[({]+\\)\\W" 1 "FaceSad.xpm")
-    ("\\(=[({]+\\)\\W" 1 "FaceSad.xpm")
-    ("\\(:-*[Oo\*]\\)\\W" 1 "FaceStartled.xpm")
-    ("\\(:-*|\\)\\W" 1 "FaceStraight.xpm")
-    ("\\(:-*p\\)\\W" 1 "FaceTalking.xpm")
-    ("\\(:-*d\\)\\W" 1 "FaceTasty.xpm")
-    ("\\(;-*[>)}»]+\\)\\W" 1 "FaceWinking.xpm")
-    ("\\(:-*[Vvµ]\\)\\W" 1 "FaceWry.xpm")
-    ("\\([:|]-*P\\)\\W" 1 "FaceYukky.xpm"))
-  "*Normal and deformed faces for smilies."
-  :type '(repeat (list regexp
-                      (integer :tag "Match")
-                      (string :tag "Image")))
+;; For compatibility, honor the variable `smiley-data-directory' if the user
+;; has set it.
+
+(defun smiley-directory (&optional style)
+  "Return a the location of the smiley faces files.
+STYLE specifies which style to use, see `smiley-style'.  If STYLE
+is nil, use `smiley-style'."
+  (unless style (setq style smiley-style))
+  (nnheader-find-etc-directory
+   (concat "images/smilies"
+          (cond ((eq smiley-style 'low-color) "")
+                ((eq smiley-style 'medium) "/medium")
+                ((eq smiley-style 'grayscale) "/grayscale")))))
+
+(defcustom smiley-data-directory (smiley-directory)
+  "*Location of the smiley faces files."
+  :set (lambda (symbol value)
+        (set-default symbol value)
+        (smiley-update-cache))
+  :initialize 'custom-initialize-default
+  :type 'directory
   :group 'smiley)
 
-(defcustom smiley-nosey-regexp-alist
-  '(("\\(:-+[<«]+\\)\\W" 1 "FaceAngry.xpm")
-    ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
-    ("\\(:-+D\\)\\W" 1 "FaceGrinning.xpm")
-    ("\\(:-+[}»]+\\)\\W" 1 "FaceHappy.xpm")
-    ("\\(:-*)+\\)\\W" 1 "FaceHappy.xpm")
-    ("\\(=[)]+\\)\\W" 1 "FaceHappy.xpm")
-    ("\\(:-+[/\\\"]+\\)\\W" 1 "FaceIronic.xpm")
-    ("\\([8|]-+[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
-    ("\\([:|]-+#+\\)\\W" 1 "FaceNyah.xpm")
-    ("\\(:-+[({]+\\)\\W" 1 "FaceSad.xpm")
-    ("\\(=[({]+\\)\\W" 1 "FaceSad.xpm")
-    ("\\(:-+[Oo\*]\\)\\W" 1 "FaceStartled.xpm")
-    ("\\(:-+|\\)\\W" 1 "FaceStraight.xpm")
-    ("\\(:-+p\\)\\W" 1 "FaceTalking.xpm")
-    ("\\(:-+d\\)\\W" 1 "FaceTasty.xpm")
-    ("\\(;-+[>)}»]+\\)\\W" 1 "FaceWinking.xpm")
-    ("\\(:-+[Vvµ]\\)\\W" 1 "FaceWry.xpm")
-    ("\\(][:8B]-[)>]\\)\\W" 1 "FaceDevilish.xpm")
-    ("\\([:|]-+P\\)\\W" 1 "FaceYukky.xpm"))
-  "*Smileys with noses.  These get less false matches."
+;; The XEmacs version has a baroque, if not rococo, set of these.
+(defcustom smiley-regexp-alist
+  '(("\\(;-)\\)\\W" 1 "blink")
+    ("[^;]\\(;)\\)\\W" 1 "blink")
+    ("\\(:-]\\)\\W" 1 "forced")
+    ("\\(8-)\\)\\W" 1 "braindamaged")
+    ("\\(:-|\\)\\W" 1 "indifferent")
+    ("\\(:-[/\\]\\)\\W" 1 "wry")
+    ("\\(:-(\\)\\W"