diff options
author | Juanma Barranquero <lekktu@gmail.com> | 2006-12-30 01:51:24 +0000 |
---|---|---|
committer | Juanma Barranquero <lekktu@gmail.com> | 2006-12-30 01:51:24 +0000 |
commit | 6642c904c49bd4980d998399ce27735e0c4b4c1d (patch) | |
tree | f02249fc29161324f4113231af1967ac8d799782 /lisp/image.el | |
parent | f083f9caee8c259727e97b84313c27073b955b5d (diff) | |
download | emacs-6642c904c49bd4980d998399ce27735e0c4b4c1d.tar.gz |
(image-type-header-regexps, image-type-from-data, image-type-from-buffer,
image-type-from-file-header): Revert changes from 2006-12-26.
(image-type-auto-detectable): New variable.
(image-type-auto-detected-p): New function.
Diffstat (limited to 'lisp/image.el')
-rw-r--r-- | lisp/image.el | 88 |
1 files changed, 53 insertions, 35 deletions
diff --git a/lisp/image.el b/lisp/image.el index c6d0b031af2..e70b9ec539e 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -34,27 +34,20 @@ (defconst image-type-header-regexps - '(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" xpm) - ("\\`P[1-6][[:space:]]+\\(?:#.*[[:space:]]+\\)*[0-9]+[[:space:]]+[0-9]+" pbm) - ("\\`GIF8" gif) - ("\\`\x89PNG\r\n\x1a\n" png) - ("\\`[\t\n\r ]*#define" xbm) - ("\\`\\(?:MM\0\\*\\|II\\*\0\\)" tiff) - ("\\`[\t\n\r ]*%!PS" postscript t) - ("\\`\xff\xd8" (image-jpeg-p . jpeg))) - "Alist of (REGEXP IMAGE-TYPE) pairs used to auto-detect image types. + '(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm) + ("\\`P[1-6][[:space:]]+\\(?:#.*[[:space:]]+\\)*[0-9]+[[:space:]]+[0-9]+" . pbm) + ("\\`GIF8" . gif) + ("\\`\x89PNG\r\n\x1a\n" . png) + ("\\`[\t\n\r ]*#define" . xbm) + ("\\`\\(?:MM\0\\*\\|II\\*\0\\)" . tiff) + ("\\`[\t\n\r ]*%!PS" . postscript) + ("\\`\xff\xd8" . (image-jpeg-p . jpeg))) + "Alist of (REGEXP . IMAGE-TYPE) pairs used to auto-detect image types. When the first bytes of an image file match REGEXP, it is assumed to -be of image type IMAGE-TYPE if IMAGE-TYPE is a symbol. - -An element can also be (REGEXP IMAGE-TYPE NOT-ALWAYS). If -NOT-ALWAYS is non-nil, that means that REGEXP identifies a -file that _can_ be treated as an image of type IMAGE-TYPE, -but such files should not be spontaneously treated as images. - -IMAGE-TYPE can be a pair (PREDICATE . TYPE) instead of a -symbol. Then PREDICATE is called with one argument, a -string containing the image data. If PREDICATE returns a -non-nil value, TYPE is the image's type.") +be of image type IMAGE-TYPE if IMAGE-TYPE is a symbol. If not a symbol, +IMAGE-TYPE must be a pair (PREDICATE . TYPE). PREDICATE is called +with one argument, a string containing the image data. If PREDICATE returns +a non-nil value, TYPE is the image's type.") (defconst image-type-file-name-regexps '(("\\.png\\'" . png) @@ -70,6 +63,24 @@ non-nil value, TYPE is the image's type.") When the name of an image file match REGEXP, it is assumed to be of image type IMAGE-TYPE.") +(defvar image-type-auto-detectable + '((pbm . t) + (xbm . t) + (bmp . maybe) + (gif . maybe) + (png . maybe) + (xpm . maybe) + (jpeg . maybe) + (tiff . maybe) + (postscript . nil)) + "Alist of (IMAGE-TYPE . AUTODETECT) pairs used to auto-detect image files. +\(See `image-type-auto-detected-p'). + +AUTODETECT can be + - t always auto-detect. + - nil never auto-detect. + - maybe auto-detect only if the image type is available + (see `image-type-available-p').") (defvar image-load-path nil "List of locations in which to search for image files. @@ -212,7 +223,7 @@ be determined." type) (while types (let ((regexp (car (car types))) - (image-type (nth 1 (car types)))) + (image-type (cdr (car types)))) (if (or (and (symbolp image-type) (string-match regexp data)) (and (consp image-type) @@ -225,22 +236,17 @@ be determined." ;;;###autoload -(defun image-type-from-buffer (&optional include-maybes) +(defun image-type-from-buffer () "Determine the image type from data in the current buffer. -Value is a symbol specifying the image type, or nil if none -corresponds to the buffer contents. - -If INCLUDE-MAYBES is nil (the default), we return nil for -file types that should not always be treated as images -even though they can be so treated." +Value is a symbol specifying the image type or nil if type cannot +be determined." (let ((types image-type-header-regexps) type (opoint (point))) (goto-char (point-min)) (while types (let ((regexp (car (car types))) - (image-type (nth 1 (car types))) - (not-always (nth 2 (car types))) + (image-type (cdr (car types))) data) (if (or (and (symbolp image-type) (looking-at regexp)) @@ -253,10 +259,7 @@ even though they can be so treated." (min (point-max) (+ (point-min) 256)))))) (setq image-type (cdr image-type)))) - ;; If this entry says "not always", - ;; treat it as nil, unless INCLUDE-MAYBES is t. - (setq type (if (or include-maybes (not not-always)) - image-type) + (setq type image-type types nil) (setq types (cdr types))))) (goto-char opoint) @@ -276,7 +279,7 @@ be determined." (with-temp-buffer (set-buffer-multibyte nil) (insert-file-contents-literally file nil 0 256) - (image-type-from-buffer t)))) + (image-type-from-buffer)))) ;;;###autoload @@ -323,6 +326,7 @@ Optional DATA-P non-nil means FILE-OR-DATA is a string containing image data." (error "Invalid image type `%s'" type)) type) + ;;;###autoload (defun image-type-available-p (type) "Return non-nil if image type TYPE is available. @@ -332,6 +336,20 @@ Image types are symbols like `xbm' or `jpeg'." ;;;###autoload +(defun image-type-auto-detected-p () + "Return t iff the current buffer contains an auto-detectable image. +Whether image types are auto-detectable or not depends on the setting +of the variable `image-type-auto-detectable'. + +This function is intended to be used from `magic-mode-alist' (which see)." + (let* ((type (image-type-from-buffer)) + (auto (and type (cdr (assq type image-type-auto-detectable))))) + (and auto + (or (eq auto t) + (image-type-available-p type))))) + + +;;;###autoload (defun create-image (file-or-data &optional type data-p &rest props) "Create an image. FILE-OR-DATA is an image file name or image data. |