[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: display word wrapping
From: |
Juanma Barranquero |
Subject: |
Re: display word wrapping |
Date: |
Sat, 05 Jun 2004 03:20:15 +0200 |
On 04 Jun 2004 16:16:32 +0200, address@hidden (Kim F. Storm) wrote:
> Problem is that image.c is not compiled in this env. so the
> init-image-libraries function does not exist!
Ah, OK. I thought it was compiled, but mostly to no-ops.
> This will fix it:
>
> (defun image-type-available-p
> ...
> (and (fboundp 'init-image-libraries)
> (prog1 ...)))
OK, added.
> Using
> CHECK_STRING (dlls);
> is cleaner then.
I should've put more attention while perusing lisp.h.
BTW, this is turning into a great learning experience. Thanks! (And
sorry for taking so much of your time.)
> I don't have time right now, but maybe during the weekend.
Patch attached with newest mods (but still no docs).
/L/e/k/t/u
Index: lisp/image.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/image.el,v
retrieving revision 1.40
diff -u -2 -r1.40 image.el
--- lisp/image.el 26 Apr 2004 22:11:36 -0000 1.40
+++ lisp/image.el 5 Jun 2004 00:47:31 -0000
@@ -49,4 +49,17 @@
a non-nil value, TYPE is the image's type.")
+;;;###autoload
+(defvar image-library-alist t
+ "Alist of image types vs external libraries needed to display them.
+
+Each element is a list (IMAGE-TYPE LIBRARY...), where the car is a symbol
+representing a supported image type, and the rest are strings giving
+alternate filenames for the corresponding external libraries to load.
+They are tried in the order they appear on the list; if none of them can
+be loaded, the running session of Emacs won't display the image type.
+No entries are needed for pbm and xbm images; they're always supported.
+
+This variable is reset to nil each time its entries are processed.")
+;;;###autoload (put 'image-library-alist 'risky-local-variable t)
(defun image-jpeg-p (data)
@@ -112,6 +125,8 @@
"Value is non-nil if image type TYPE is available.
Image types are symbols like `xbm' or `jpeg'."
- (and (boundp 'image-types) (not (null (memq type image-types)))))
-
+ (and (fboundp 'init-image-libraries)
+ (prog1
+ (memq type (init-image-libraries image-library-alist))
+ (setq image-library-alist nil))))
;;;###autoload
Index: lisp/term/w32-win.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/term/w32-win.el,v
retrieving revision 1.62
diff -u -2 -r1.62 w32-win.el
--- lisp/term/w32-win.el 9 May 2004 15:01:17 -0000 1.62
+++ lisp/term/w32-win.el 4 Jun 2004 00:15:48 -0000
@@ -1261,4 +1261,12 @@
(if (null font)
(error "Font not found")))))
+
+;;; Set default known names for image libraries
+(setq image-library-alist
+ '((xpm "libXpm-nox4.dll" "libxpm.dll")
+ (png "libpng13d.dll" "libpng13.dll" "libpng12d.dll" "libpng12.dll"
"libpng.dll")
+ (jpeg "jpeg62.dll" "libjpeg.dll" "jpeg-62.dll" "jpeg.dll")
+ (tiff "libtiff3.dll" "libtiff.dll")
+ (gif "libungif.dll")))
;;; arch-tag: 69fb1701-28c2-4890-b351-3d1fe4b4f166
Index: src/image.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/image.c,v
retrieving revision 1.12
diff -u -2 -r1.12 image.c
--- src/image.c 2 Jun 2004 00:50:09 -0000 1.12
+++ src/image.c 5 Jun 2004 01:10:44 -0000
@@ -646,11 +646,15 @@
struct image_type *type;
{
- /* Make a copy of TYPE to avoid a bus error in a dumped Emacs.
- The initialized data segment is read-only. */
- struct image_type *p = (struct image_type *) xmalloc (sizeof *p);
- bcopy (type, p, sizeof *p);
- p->next = image_types;
- image_types = p;
- Vimage_types = Fcons (*p->type, Vimage_types);
+ /* Protect against accidental redefinion. */
+ if (NILP (Fmemq (*type->type, Vimage_types)))
+ {
+ /* Make a copy of TYPE to avoid a bus error in a dumped Emacs.
+ The initialized data segment is read-only. */
+ struct image_type *p = (struct image_type *) xmalloc (sizeof *p);
+ bcopy (type, p, sizeof *p);
+ p->next = image_types;
+ image_types = p;
+ Vimage_types = Fcons (*p->type, Vimage_types);
+ }
}
@@ -1789,4 +1793,31 @@
}
+/* Load a DLL implementing an image type.
+ The `image-library-alist' variable associates a symbol,
+ identifying an image type, to a list of possible filenames.
+ The function returns NULL if no library could be loaded for
+ the given image type, or if the library was previously loaded;
+ else the handle of the DLL. */
+static HMODULE
+w32_dynaload (Lisp_Object libraries, Lisp_Object library_id)
+{
+ HMODULE library = NULL;
+
+ if (CONSP (libraries) && NILP (Fmemq (library_id, Vimage_types)))
+ {
+ Lisp_Object dlls = Fassq (library_id, libraries);
+
+ if (CONSP (dlls))
+ for (dlls = XCDR (dlls); CONSP (dlls); dlls = XCDR (dlls))
+ {
+ CHECK_STRING_CAR (dlls);
+ if (library = LoadLibrary (SDATA (XCAR (dlls))))
+ break;
+ }
+ }
+
+ return library;
+}
+
#endif /* HAVE_NTGUI */
@@ -3489,11 +3519,10 @@
DEF_IMGLIB_FN (XImageFree);
-
static int
-init_xpm_functions (void)
+init_xpm_functions (Lisp_Object libraries)
{
HMODULE library;
- if (!(library = LoadLibrary ("libXpm.dll")))
+ if (!(library = w32_dynaload (libraries, Qxpm)))
return 0;
@@ -5589,19 +5618,10 @@
static int
-init_png_functions (void)
+init_png_functions (Lisp_Object libraries)
{
HMODULE library;
- /* Ensure zlib is loaded. Try debug version first. */
- if (!LoadLibrary ("zlibd.dll")
- && !LoadLibrary ("zlib.dll"))
- return 0;
-
/* Try loading libpng under probable names. */
- if (!(library = LoadLibrary ("libpng13d.dll"))
- && !(library = LoadLibrary ("libpng13.dll"))
- && !(library = LoadLibrary ("libpng12d.dll"))
- && !(library = LoadLibrary ("libpng12.dll"))
- && !(library = LoadLibrary ("libpng.dll")))
+ if (!(library = w32_dynaload (libraries, Qpng)))
return 0;
@@ -6247,11 +6267,9 @@
static int
-init_jpeg_functions (void)
+init_jpeg_functions (Lisp_Object libraries)
{
HMODULE library;
- if (!(library = LoadLibrary ("libjpeg.dll"))
- && !(library = LoadLibrary ("jpeg-62.dll"))
- && !(library = LoadLibrary ("jpeg.dll")))
+ if (!(library = w32_dynaload (libraries, Qjpeg)))
return 0;
@@ -6684,9 +6702,9 @@
static int
-init_tiff_functions (void)
+init_tiff_functions (Lisp_Object libraries)
{
HMODULE library;
- if (!(library = LoadLibrary ("libtiff.dll")))
+ if (!(library = w32_dynaload (libraries, Qtiff)))
return 0;
@@ -7104,9 +7122,9 @@
static int
-init_gif_functions (void)
+init_gif_functions (Lisp_Object libraries)
{
HMODULE library;
- if (!(library = LoadLibrary ("libungif.dll")))
+ if (!(library = w32_dynaload (libraries, Qgif)))
return 0;
@@ -7881,4 +7899,63 @@
***********************************************************************/
+#ifdef HAVE_NTGUI
+/* Image types that rely on external libraries are loaded dynamically
+ if the library is available. */
+#define IF_LIB_AVAILABLE(init_lib_fn) if (init_lib_fn (libraries))
+#else
+#define IF_LIB_AVAILABLE(init_func) /* Load unconditionally */
+#endif /* HAVE_NTGUI */
+
+DEFUN ("init-image-libraries", Finit_image_libraries, Sinit_image_libraries,
1, 1, 0,
+ doc: /* Initialize image libraries.
+Image types pbm and xbm are prebuilt; other types are loaded here.
+Which libraries are loaded depends on LIBRARIES (usually, the value
+of `image-library-alist'. */)
+ (libraries)
+{
+ if (EQ (libraries, Qt) || !NILP (libraries))
+ {
+
+#if defined (HAVE_XPM) || defined (MAC_OS)
+ IF_LIB_AVAILABLE(init_xpm_functions)
+ define_image_type (&xpm_type);
+#endif
+
+#if defined (HAVE_JPEG) || defined (MAC_OS)
+ IF_LIB_AVAILABLE(init_jpeg_functions)
+ define_image_type (&jpeg_type);
+#endif
+
+#if defined (HAVE_TIFF) || defined (MAC_OS)
+ IF_LIB_AVAILABLE(init_tiff_functions)
+ define_image_type (&tiff_type);
+#endif
+
+#if defined (HAVE_GIF) || defined (MAC_OS)
+ IF_LIB_AVAILABLE(init_gif_functions)
+ define_image_type (&gif_type);
+#endif
+
+#if defined (HAVE_PNG) || defined (MAC_OS)
+ IF_LIB_AVAILABLE(init_png_functions)
+ define_image_type (&png_type);
+#endif
+
+#ifdef HAVE_GHOSTSCRIPT
+ define_image_type (&gs_type);
+#endif
+
+#ifdef MAC_OS
+ /* Animated gifs use QuickTime Movie Toolbox. So initialize it here. */
+ EnterMovies ();
+#ifdef MAC_OSX
+ init_image_func_pointer ();
+#endif
+#endif
+ }
+
+ return Vimage_types;
+}
+
void
syms_of_image ()
@@ -7958,4 +8035,5 @@
#endif
+ defsubr (&Sinit_image_libraries);
defsubr (&Sclear_image_cache);
defsubr (&Simage_size);
@@ -7985,13 +8063,4 @@
}
-
-#ifdef HAVE_NTGUI
-/* Image types that rely on external libraries are loaded dynamically
- if the library is available. */
-#define IF_LIB_AVAILABLE(init_lib_fn) if (init_lib_fn())
-#else
-#define IF_LIB_AVAILABLE(init_func) /* Load unconditionally */
-#endif /* HAVE_NTGUI */
-
void
init_image ()
@@ -8002,41 +8071,4 @@
define_image_type (&xbm_type);
define_image_type (&pbm_type);
-
-#if defined (HAVE_XPM) || defined (MAC_OS)
- IF_LIB_AVAILABLE(init_xpm_functions)
- define_image_type (&xpm_type);
-#endif
-
-#if defined (HAVE_JPEG) || defined (MAC_OS)
- IF_LIB_AVAILABLE(init_jpeg_functions)
- define_image_type (&jpeg_type);
-#endif
-
-#if defined (HAVE_TIFF) || defined (MAC_OS)
- IF_LIB_AVAILABLE(init_tiff_functions)
- define_image_type (&tiff_type);
-#endif
-
-#if defined (HAVE_GIF) || defined (MAC_OS)
- IF_LIB_AVAILABLE(init_gif_functions)
- define_image_type (&gif_type);
-#endif
-
-#if defined (HAVE_PNG) || defined (MAC_OS)
- IF_LIB_AVAILABLE(init_png_functions)
- define_image_type (&png_type);
-#endif
-
-#ifdef HAVE_GHOSTSCRIPT
- define_image_type (&gs_type);
-#endif
-
-#ifdef MAC_OS
- /* Animated gifs use QuickTime Movie Toolbox. So initialize it here. */
- EnterMovies ();
-#ifdef MAC_OSX
- init_image_func_pointer ();
-#endif
-#endif
}
- Re: display word wrapping, (continued)
- Re: display word wrapping, Juanma Barranquero, 2004/06/03
- Re: display word wrapping, Kim F. Storm, 2004/06/03
- Re: display word wrapping, Juanma Barranquero, 2004/06/03
- Re: display word wrapping, Kim F. Storm, 2004/06/04
- Re: display word wrapping, Juanma Barranquero, 2004/06/04
- Re: display word wrapping, Juanma Barranquero, 2004/06/04
- Re: display word wrapping, Kim F. Storm, 2004/06/04
- Re: display word wrapping, Kim F. Storm, 2004/06/04
- Re: display word wrapping, Juanma Barranquero, 2004/06/04
- Re: display word wrapping, Kim F. Storm, 2004/06/04
- Re: display word wrapping,
Juanma Barranquero <=
- Re: display word wrapping, Juanma Barranquero, 2004/06/07
- Re: display word wrapping, Kim F. Storm, 2004/06/07
- Re: display word wrapping, Juanma Barranquero, 2004/06/07
- Re: display word wrapping, Kim F. Storm, 2004/06/07
- Re: display word wrapping, Juanma Barranquero, 2004/06/07
- Re: display word wrapping, David Kastrup, 2004/06/08
- Re: display word wrapping, Kim F. Storm, 2004/06/08
- Re: display word wrapping, David Kastrup, 2004/06/08
- Re: display word wrapping, Kim F. Storm, 2004/06/08
- Re: display word wrapping, David Kastrup, 2004/06/08