From d66c4c7ce6d8a4ee19a7d4faae59fc6dc25fcc1a Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 29 May 2011 14:17:28 -0400 Subject: [PATCH] Doc fixes for imagemagick support code. * lisp/image.el (imagemagick-types-inhibit) (imagemagick-register-types): Doc fix. * src/image.c: Various fixes to ImageMagick code comments. (Fimagemagick_types): Doc fix. --- lisp/ChangeLog | 5 +++ lisp/image.el | 45 ++++++++++++++---------- src/ChangeLog | 5 +++ src/image.c | 94 ++++++++++++++++++++++---------------------------- 4 files changed, 78 insertions(+), 71 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b82b56dd166..6c21786bce8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-05-29 Chong Yidong + + * image.el (imagemagick-types-inhibit) + (imagemagick-register-types): Doc fix. + 2011-05-29 Deniz Dogan * net/rcirc.el (rcirc): Use the user's stored encryption method by diff --git a/lisp/image.el b/lisp/image.el index 3b90ac46bd1..3f44be868ce 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -698,31 +698,38 @@ shall be displayed." (defcustom imagemagick-types-inhibit '(C HTML HTM TXT PDF) - ;; FIXME what are the possible options? - ;; Are these actually file-name extensions? - ;; Why are these upper-case when eg image-types is lower-case? - "Types the ImageMagick loader should not try to handle." - :type '(choice (const :tag "Let ImageMagick handle all the types it can" nil) + "ImageMagick types that Emacs should not use ImageMagick to handle. +This should be a list of symbols, each of which has the same +names as one of the format tags used internally by ImageMagick; +see `imagemagick-types'. Entries in this list are excluded from +being registered by `imagemagick-register-types'. + +If Emacs is compiled without ImageMagick, this variable has no effect." + :type '(choice (const :tag "Let ImageMagick handle all types it can" nil) (repeat symbol)) :version "24.1" :group 'image) ;;;###autoload (defun imagemagick-register-types () - "Register the file types that ImageMagick is able to handle." - (if (fboundp 'imagemagick-types) - (let ((im-types (imagemagick-types))) - (dolist (im-inhibit imagemagick-types-inhibit) - (setq im-types (remove im-inhibit im-types))) - (dolist (im-type im-types) - (let ((extension (downcase (symbol-name im-type)))) - (push - (cons (concat "\\." extension "\\'") 'image-mode) - auto-mode-alist) - (push - (cons (concat "\\." extension "\\'") 'imagemagick) - image-type-file-name-regexps)))) - (error "Emacs was not built with ImageMagick support"))) + "Register file types that can be handled by ImageMagick. +This adds the file types returned by `imagemagick-types' +\(excluding the ones in `imagemagick-types-inhibit') to +`auto-mode-alist' and `image-type-file-name-regexps', so that +Emacs visits them in Image mode. + +If Emacs is compiled without ImageMagick support, do nothing." + (when (fboundp 'imagemagick-types) + (let ((im-types (imagemagick-types))) + (dolist (im-inhibit imagemagick-types-inhibit) + (setq im-types (delq im-inhibit im-types))) + (dolist (im-type im-types) + (let ((extension + (concat "\\." (downcase (symbol-name im-type)) + "\\'"))) + (push (cons extension 'image-mode) auto-mode-alist) + (push (cons extension 'imagemagick) + image-type-file-name-regexps)))))) (provide 'image) diff --git a/src/ChangeLog b/src/ChangeLog index 883f6505e20..b0b80b47689 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-05-29 Chong Yidong + + * image.c: Various fixes to ImageMagick code comments. + (Fimagemagick_types): Doc fix. + 2011-05-29 Paul Eggert Minor fixes prompted by GCC 4.6.0 warnings. diff --git a/src/image.c b/src/image.c index 2562d79a782..3e15ee95758 100644 --- a/src/image.c +++ b/src/image.c @@ -7352,6 +7352,10 @@ gif_load (struct frame *f, struct image *img) Lisp_Object Qimagemagick; +static int imagemagick_image_p (Lisp_Object); +static int imagemagick_load (struct frame *, struct image *); +static void imagemagick_clear_image (struct frame *, struct image *); + /* Indices of image specification fields in imagemagick_format. */ enum imagemagick_keyword_index @@ -7394,6 +7398,18 @@ static struct image_keyword imagemagick_format[IMAGEMAGICK_LAST] = {":crop", IMAGE_DONT_CHECK_VALUE_TYPE, 0} }; +/* Structure describing the image type for any image handled via + ImageMagick. */ + +static struct image_type imagemagick_type = + { + &Qimagemagick, + imagemagick_image_p, + imagemagick_load, + imagemagick_clear_image, + NULL + }; + /* Free X resources of imagemagick image IMG which is used on frame F. */ static void @@ -7425,34 +7441,27 @@ imagemagick_image_p (Lisp_Object object) #define DrawRectangle DrawRectangleGif #include -/* imagemagick_load_image is a helper function for imagemagick_load, - which does the actual loading given contents and size, apart from - frame and image structures, passed from imagemagick_load. +/* Helper function for imagemagick_load, which does the actual loading + given contents and size, apart from frame and image structures, + passed from imagemagick_load. Uses librimagemagick to do most of + the image processing. - Uses librimagemagick to do most of the image processing. + F is a pointer to the Emacs frame; IMG to the image structure to + prepare; CONTENTS is the string containing the IMAGEMAGICK data to + be parsed; SIZE is the number of bytes of data; and FILENAME is + either the file name or the image data. - Return non-zero if successful. -*/ + Return non-zero if successful. */ static int -imagemagick_load_image (/* Pointer to emacs frame structure. */ - struct frame *f, - /* Pointer to emacs image structure. */ - struct image *img, - /* String containing the IMAGEMAGICK data to - be parsed. */ - unsigned char *contents, - /* Size of data in bytes. */ - unsigned int size, - /* Filename, either pass filename or - contents/size. */ - unsigned char *filename) +imagemagick_load_image (struct frame *f, struct image *img, + unsigned char *contents, unsigned int size, + unsigned char *filename) { unsigned long width; unsigned long height; - MagickBooleanType - status; + MagickBooleanType status; XImagePtr ximg; Lisp_Object specified_bg; @@ -7514,8 +7523,8 @@ imagemagick_load_image (/* Pointer to emacs frame structure. */ DestroyMagickWand (ping_wand); - /* Now, after pinging, we know how many images are inside the - file. If it's not a bundle, the number is one. */ + /* Now we know how many images are inside the file. If it's not a + bundle, the number is one. */ if (filename != NULL) { @@ -7628,8 +7637,8 @@ imagemagick_load_image (/* Pointer to emacs frame structure. */ } } - /* Finaly we are done manipulating the image, figure out resulting - width, height, and then transfer ownerwship to Emacs. */ + /* Finally we are done manipulating the image. Figure out the + resulting width/height and transfer ownerwship to Emacs. */ height = MagickGetImageHeight (image_wand); width = MagickGetImageWidth (image_wand); @@ -7784,8 +7793,7 @@ imagemagick_load_image (/* Pointer to emacs frame structure. */ the prototype thus needs to be compatible with that structure. */ static int -imagemagick_load (struct frame *f, - struct image *img) +imagemagick_load (struct frame *f, struct image *img) { int success_p = 0; Lisp_Object file_name; @@ -7823,36 +7831,18 @@ imagemagick_load (struct frame *f, return success_p; } -/* Structure describing the image type `imagemagick'. Its the same - type of structure defined for all image formats, handled by Emacs - image functions. See struct image_type in dispextern.h. */ - -static struct image_type imagemagick_type = - { - /* An identifier showing that this is an image structure for the - IMAGEMAGICK format. */ - &Qimagemagick, - /* Handle to a function that can be used to identify a IMAGEMAGICK - file. */ - imagemagick_image_p, - /* Handle to function used to load a IMAGEMAGICK file. */ - imagemagick_load, - /* Handle to function to free resources for IMAGEMAGICK. */ - imagemagick_clear_image, - /* An internal field to link to the next image type in a list of - image types, will be filled in when registering the format. */ - NULL - }; - - DEFUN ("imagemagick-types", Fimagemagick_types, Simagemagick_types, 0, 0, 0, - doc: /* Return the image types supported by ImageMagick. -Note that ImageMagick recognizes many file-types that Emacs does not recognize -as images, such as .c. */) + doc: /* Return a list of image types supported by ImageMagick. +Each entry in this list is a symbol named after an ImageMagick format +tag. See the ImageMagick manual for a list of ImageMagick formats and +their descriptions (http://www.imagemagick.org/script/formats.php). + +Note that ImageMagick recognizes many file-types that Emacs does not +recognize as images, such as C. See `imagemagick-types-inhibit'. */) (void) { Lisp_Object typelist = Qnil; - unsigned long numf; + unsigned long numf = 0; ExceptionInfo ex; char **imtypes = GetMagickList ("*", &numf, &ex); int i; -- 2.39.2