Commit 6642c904 authored by Juanma Barranquero's avatar Juanma Barranquero

(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.
parent f083f9ca
......@@ -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.
......@@ -331,6 +335,20 @@ Image types are symbols like `xbm' or `jpeg'."
(init-image-library type image-library-alist)))
;;;###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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment