]> git.lyx.org Git - lyx.git/commitdiff
Herbert's graphics diff
authorJohn Levon <levon@movementarian.org>
Tue, 18 Jun 2002 20:47:49 +0000 (20:47 +0000)
committerJohn Levon <levon@movementarian.org>
Tue, 18 Jun 2002 20:47:49 +0000 (20:47 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@4423 a592a061-630c-0410-9148-cb99ea01b6c8

15 files changed:
lib/ChangeLog
lib/configure.m4
src/ChangeLog
src/converter.C
src/frontends/FileDialog.h
src/frontends/controllers/ChangeLog
src/frontends/controllers/ControlGraphics.C
src/graphics/ChangeLog
src/graphics/GraphicsCacheItem.C
src/graphics/GraphicsConverter.C
src/insets/ChangeLog
src/insets/insetgraphics.C
src/lyxfunc.C
src/support/ChangeLog
src/support/filetools.C

index d6fbb1b40a5c9434af6f0737ae731ebc8b41a445..9d16f3fee7be6bb66bd5f3e1a1472b0f7f6d81ae 100644 (file)
@@ -1,3 +1,10 @@
+2002-06-17 Herbert Voss  <voss@perce.de>
+       * configure.m4: install only those converters which are different
+       to convert, because this is taken as the default. SO we can get
+       rid of all problems when user do not have installed the right
+       converters.
+
 2002-06-16  Adrien Rebollo  <adrien.rebollo@gmx.fr>
 
        * examples/fr_ExemplesTableaux.lyx: update
index ecbe17841ba48dc573a61bfab3b561718b24a351..7a643bc35a8eb7dd8960d7c8a5b3f793f90aa0f9 100644 (file)
@@ -352,67 +352,6 @@ case $TOHTML in
       hevea) latex_to_html_command="hevea -s \$\$i";;
 esac
 
-#### Search for image conversion ####
-SEARCH_PROG([for an Image -> EPS converter], TOEPS, convert pnmtops)
-case $TOEPS in
-  convert)
-    bmp_to_eps="convert BMP:\$\$i EPS:\$\$o"
-    fits_to_eps="convert FITS:\$\$i EPS:\$\$o"
-    gif_to_eps="convert GIF:\$\$i EPS:\$\$o"
-    jpg_to_eps="convert JPG:\$\$i EPS:\$\$o"
-    pbm_to_eps="convert PBM:\$\$i EPS:\$\$o"
-    pgm_to_eps="convert PGM:\$\$i EPS:\$\$o"
-    png_to_eps="convert PNG:\$\$i EPS:\$\$o"
-    ppm_to_eps="convert PPM:\$\$i EPS:\$\$o"
-    sgi_to_eps="convert SGI:\$\$i EPS:\$\$o"
-    xbm_to_eps="convert XBM:\$\$i EPS:\$\$o"
-    xwd_to_eps="convert XWD:\$\$i EPS:\$\$o"
-    xpm_to_eps="convert XPM:\$\$i EPS:\$\$o" ;;
-  pnmtops) gif_to_eps="giftopnm \$\$i | pnmtops > \$\$o"
-    png_to_eps="pngtopnm \$\$i | pnmtops >\$\$o"
-    jpg_to_eps="jpegtopnm \$\$i | pnmtops >\$\$o";;
-esac
-
-SEARCH_PROG([for an Image -> PNG converter], TOPNG, convert pnmtopng)
-case $TOPNG in
-  convert)
-    gif_to_png="convert GIF:\$\$i PNG:\$\$o"
-    eps_to_png="convert EPS:\$\$i PNG:\$\$o"
-    jpg_to_png="convert JPG:\$\$i PNG:\$\$o";;
-  pnmtopng)
-    gif_to_png="giftopnm \$\$i | pnmtopng >\$\$o"
-    eps_to_png="pstopnm \$\$i| pnmtopng >\$\$o"
-    jpg_to_png="jpegtopnm \$\$i | pnmtopng >\$\$o";;
-esac
-
-SEARCH_PROG([for an Image -> XPM converter], TOXPM, convert)
-if test "$TOXPM" = "convert"; then
-  gif_to_xpm="convert GIF:\$\$i XPM:\$\$o"
-  eps_to_xpm="convert EPS:\$\$i XPM:\$\$o"
-  jpg_to_xpm="convert JPG:\$\$i XPM:\$\$o"
-  png_to_xpm="convert PNG:\$\$i XPM:\$\$o"
-  ps_to_xpm="convert PS:\$\$i XPM:\$\$o"
-  xbm_to_xpm="convert XBM:\$\$i XPM:\$\$o"
-fi
-
-SEARCH_PROG([for an EPS -> PDF converter], EPSTOPDF, epstopdf)
-case $EPSTOPDF in
-  epstopdf) eps_to_pdf="epstopdf --outfile=\$\$o \$\$i";;
-esac
-
-#### Add Grace conversions (xmgrace needs an Xserver, gracebat doesn't.)
-SEARCH_PROG([for a Grace -> Image converter], GRACE, gracebat)
-case $GRACE in
- gracebat) 
-   for device in `gracebat -version 2>/dev/null | grep "^Dummy"` ; do
-     case $device in
-       EPS) agr_to_eps="gracebat -hardcopy -printfile \$\$o -hdevice $device \$\$i 2>/dev/null";;
-       PDF) agr_to_pdf="gracebat -hardcopy -printfile \$\$o -hdevice $device \$\$i 2>/dev/null";;
-       PNG) agr_to_png="gracebat -hardcopy -printfile \$\$o -hdevice $device \$\$i 2>/dev/null";;
-     esac
-   done 
-esac
-
 #### Explore the LaTeX configuration
 MSG_CHECKING(LaTeX configuration)
 # First, remove the files that we want to re-create
@@ -489,13 +428,9 @@ cat >$outfile <<EOF
 \\Format bmp      bmp  BMP             ""
 \\Format dvi     dvi   DVI             D
 \\Format eps     eps   EPS             ""
-\\Format epsi     epsi  EPSI           ""
 \\Format fax     ""    Fax             ""
-\\Format fits     fits FITS            ""
-\\Format gif      gif  GIF             ""
 \\Format agr      agr  GRACE           ""
 \\Format html    html  HTML            H
-\\Format jpg      jpg  JPEG            ""
 \\Format latex   tex   LaTeX           L
 \\Format linuxdoc sgml LinuxDoc        x
 \\Format lyx      lyx  LyX             ""
@@ -503,19 +438,13 @@ cat >$outfile <<EOF
 \\Format pdf     pdf   PDF             P
 \\Format pdf2    pdf  "PDF (pdflatex)" F
 \\Format pdf3    pdf  "PDF (dvipdfm)"  m
-\\Format pbm     pbm   PBM             ""
-\\Format pgm     pgm   PGM             ""
 \\Format png     png   PNG             ""
-\\Format ppm     ppm   PPM             ""
 \\Format ps      ps    Postscript      t
 \\Format program  ""   Program         ""
-\\Format sgi      sgi  SGI             ""
 \\Format tgif     obj  TGIF            ""
 \\Format tiff     tif  TIFF            ""
-\\Format xbm      xbm   XBM             ""
-\\Format xpm      xpm   XPM             ""
-\\Format xwd      xwd  XWD             ""
 \\Format word    doc   Word            W
+\\Format xpm     xpm   XPM             ""
 
 \\converter latex dvi "$latex_to_dvi" "latex"
 \\converter latex pdf2 "$latex_to_pdf" "latex"
@@ -537,45 +466,6 @@ cat >$outfile <<EOF
 \\converter html latex "$html_to_latex_command" ""
 \\converter word latex "$word_to_latex_command" ""
 
-\\converter bmp  eps "$bmp_to_eps" ""
-\\converter fits  eps "$fits_to_eps" ""
-\\converter gif  eps "$gif_to_eps" ""
-\\converter jpg  eps "$jpg_to_eps" ""
-\\converter pbm  eps "$pbm_to_eps" ""
-\\converter pgm  eps "$pgm_to_eps" ""
-\\converter png  eps "$png_to_eps" ""
-\\converter ppm  eps "$ppm_to_eps" ""
-\\converter sgi  eps "$sgi_to_eps" ""
-\\converter tgif eps "tgif -print -eps \$\$i" ""
-\\converter tiff eps "tiff2ps \$\$i > \$\$o" ""
-\\converter xbm  eps "$xbm_to_eps" ""
-\\converter xpm  eps "$xpm_to_eps" ""
-\\converter xwd  eps "$xwd_to_eps" ""
-
-\\converter tgif xpm "tgif -print -stdout -xpm \$\$i > \$\$o" ""
-\\converter tgif png "tgif -print -stdout -png \$\$i > \$\$o" ""
-\\converter tgif pdf "tgif -print -stdout -pdf \$\$i > \$\$o" ""
-
-\\converter gif  png "$gif_to_png" ""
-\\converter eps  png "$eps_to_png" ""
-\\converter epsi png "$eps_to_png" ""
-\\converter jpg  png "$jpg_to_png" ""
-
-\\converter gif  xpm "$gif_to_xpm" ""
-\\converter eps  xpm "$eps_to_xpm" ""
-\\converter epsi xpm "$eps_to_xpm" ""
-\\converter jpg  xpm "$jpg_to_xpm" ""
-\\converter png  xpm "$png_to_xpm" ""
-\\converter ps  xpm "$ps_to_xpm" ""
-\\converter xbm  xpm "$xbm_to_xpm" ""
-
-\\converter eps  pdf "$eps_to_pdf" ""
-\\converter epsi pdf "$eps_to_pdf" ""
-
-\\converter agr  eps "$agr_to_eps" ""
-\\converter agr  pdf "$agr_to_pdf" ""
-\\converter agr  png "$agr_to_png" ""
-
 \\viewer dvi "$DVI_VIEWER"
 \\viewer html "$HTML_VIEWER"
 \\viewer pdf "$PDF_VIEWER"
@@ -586,6 +476,44 @@ $rc_entries
 \\font_encoding "$chk_fontenc"
 EOF
 
+### the graphic converter part with the predefined ones
+#### Search for tne nonstandard converting progs
+#
+SEARCH_PROG([for an TIFF -> PS converter], TIFF2PS, tiff2ps)
+if test "$TIFF2PS" = "tiff2ps"; then
+cat >>$outfile <<EOF
+\\converter tiff eps "tiff2ps \$\$i > \$\$o" ""
+EOF
+fi
+
+SEARCH_PROG([for an TGIF -> EPS/XPM converter], TGIF, tgif)
+if test "$TGIF" = "tgif"; then
+cat >>$outfile <<EOF
+\\converter tgif eps "tgif -print -eps \$\$i" ""
+\\converter tgif pdf "tgif -print -pdf \$\$i" ""
+\\converter tgif png "tgif -print -png \$\$i" ""
+\\converter tgif xpm "tgif -print -stdout -xpm \$\$i > \$\$o" ""
+EOF
+fi
+
+SEARCH_PROG([for an EPS -> PDF converter], EPSTOPDF, epstopdf)
+if test "$EPSTOPDF" = "epstopdf"; then
+cat >>$outfile <<EOF
+\\converter eps pdf "epstopdf --outfile=\$\$o \$\$i" ""
+\\converter epsi pdf "epstopdf --outfile=\$\$o \$\$i" ""
+EOF
+fi
+
+#### Add Grace conversions (xmgrace needs an Xserver, gracebat doesn't.)
+SEARCH_PROG([for a Grace -> Image converter], GRACE, gracebat)
+if test "$GRACE" = "gracebat"; then 
+cat >>$outfile <<EOF
+\\converter agr eps "gracebat -hardcopy -printfile \$\$o -hdevice EPS \$\$i 2>/dev/null" ""
+\\converter agr png "gracebat -hardcopy -printfile \$\$o -hdevice PNG \$\$i 2>/dev/null" ""
+\\converter agr xpm "gracebat -hardcopy -printfile - -hdevice PNG \$\$i 2>/dev/null | convert - \$\$o" ""
+EOF
+fi
+
 ######## X FONTS
 # create a fonts.dir file to make X fonts available to LyX
 echo "checking for TeX fonts"
index 5ae05ba5f007dce7d92bfb40e63f57f38a748d3d..a69e26cd84d3e247ab9c758153cccd6fa333bda6 100644 (file)
@@ -1,3 +1,8 @@
+2002-06-17  Herbert Voss  <voss@lyx.org>
+       * converter.C: (convert) do not post a message, when converting
+       fails, let the calling function decide what to do in this case
 2002-06-18  John Levon  <moz@compsoc.man.ac.uk>
 
        * lyxfunc.C: tidy up a little
index 83a0541b608afe4873091f160536bb1a64618864..0881b06d213aaa9805dda78ec8f3e957f56fa29c 100644 (file)
@@ -580,10 +580,6 @@ bool Converters::convert(Buffer const * buffer,
 
        EdgePath edgepath = getPath(from_format, to_format);
        if (edgepath.empty()) {
-               Alert::alert(_("Cannot convert file"),
-                          _("No information for converting from ")
-                          + formats.prettyName(from_format) + _(" to ")
-                          + formats.prettyName(to_format));
                return false;
        }
 
index 38d6e396b0d1eb3e51ba45ec4fd2a49dc0c9c541..555262117ffb022b5918e8d85140788a9f57e401 100644 (file)
@@ -66,7 +66,7 @@ public:
         * path, with the file selection \param mask. The \param mask
         * string is of the form :
         *
-        * <regular expression to match> | <description>
+        * <glob to match> | <description>
         *
         * for example, "*.ps | PostScript files (*.ps)".
         *
index 9e3a53cd15b849667604e2b0d61f1f96be046841..890addc7d8428e584770e0c44662c252486329fc 100644 (file)
@@ -1,3 +1,7 @@
+2002-06-18  John Levon  <moz@compsoc.man.ac.uk>
+
+       * ControlGraphics.C: just make the mask *.*
 2002-06-16  Lars Gullik Bjønnes  <larsbj@birdstep.com>
 
        * changes to simplify function setup, removal of a lot of includes.
index cb799c2f27517bd66880c1d8e51d37c91ef4b7d2..e8e34ebce3e4e3fd93ac18df36d5910dd8eefa1c 100644 (file)
@@ -44,56 +44,6 @@ using std::pair;
 using std::make_pair;
 using std::vector;
 
-namespace {
-
-// FIXME: currently we need the second '|' to prevent mis-interpretation!
-// All supported graphic formats with their file-extension and the
-// gzip-ext for zipped (e)ps-files.
-// string const grfx_pattern =
-//     "*.(agr|bmp|eps|epsi|fits|gif|jpg|obj|pdf|pbm|pgm|png|"
-//     "ppm|ps|tif|tiff|xbm|xpm|xwd|gz)|";
-vector<string> const grfx_formats()
-{
-       vector<string> native_formats = grfx::GCache::get().loadableFormats();
-       // We can load any format that can be loaded natively together with
-       // those that can be converted to one of these native formats.
-       vector<string> browsable_formats = native_formats;
-
-       grfx::GConverter const & gconverter = grfx::GConverter::get();
-
-       vector<string>::const_iterator to_end = native_formats.end();
-
-       Formats::const_iterator from_it = formats.begin();
-       Formats::const_iterator from_end = formats.end();
-       for (; from_it != from_end; ++from_it) {
-               string const from = from_it->name();
-
-               vector<string>::const_iterator to_it = native_formats.begin();
-               for (; to_it != to_end; ++to_it) {
-                       if (gconverter.isReachable(from, *to_it)) {
-                               browsable_formats.push_back(from);
-                               break;
-                       }
-               }
-       }
-
-       browsable_formats.push_back("gz");
-
-       return browsable_formats;
-}
-
-
-string const xforms_pattern()
-{
-       vector<string> const browsable_formats = grfx_formats();
-       string const answer =
-               "*.(" + getStringFromVector(browsable_formats, "|") +")|";
-       return answer;
-}
-
-}
-
-
 ControlGraphics::ControlGraphics(LyXView & lv, Dialogs & d)
        : ControlInset<InsetGraphics, InsetGraphicsParams>(lv, d)
 {}
@@ -146,7 +96,7 @@ string const ControlGraphics::Browse(string const & in_name)
        pair<string, string> dir2(_("Documents|#o#O"), string(lyxrc.document_path));
        // Show the file browser dialog
        return browseRelFile(&lv_, in_name, lv_.buffer()->filePath(),
-                            title, ::xforms_pattern(), dir1, dir2);
+                            title, "*.*", dir1, dir2);
 }
 
 
index bfb6893f16efbadb97fa7bfdd3f63c12dddd14a6..d06368dcf1af9a32cd8968686aaeb8fcf92e062c 100644 (file)
@@ -1,3 +1,14 @@
+2002-06-17  Herbert Voss  <voss@lyx.org>
+
+       * GraphicsCachItem.C: (findTargetFormat)return xpm-format as a 
+       default when nothing different was found
+       (convertToDisplayFormat): handle zipped files in the right way and 
+       choose always convert as a default converter when no other 
+       userdefined was found
+       
+       * GraphicsConverter.C: add more lyxerr comments and choose
+       convert when no other userdefined converter was found
+               
 2002-06-10  Herbert Voss  <voss@lyx.org>
 
        * GraphicsImageXPM.C (convertTo7chars): get another special color
index 4bc078a838b933b07ec4acd58affe49edb7592cd..020cc1ec2b7501e54e059d62790b1878fbd4cd76 100644 (file)
@@ -441,8 +441,9 @@ string const findTargetFormat(string const & from)
                        return *it2;
        }
 
-       // Failed!
-       return string();
+       // Failed! so we have to try to convert it to XPM format
+       // with the standard converter
+       return string("xpm");
 }
 
 } // anon namespace
@@ -451,58 +452,44 @@ string const findTargetFormat(string const & from)
 void GCacheItem::convertToDisplayFormat()
 {
        setStatus(Converting);
-       string filename = filename_; // Make a local copy in case we unzip it
+       // Make a local copy in case we unzip it
+       string const filename = zippedFile(filename_) ?
+               unzipFile(filename_) : filename_; 
        string const displayed_filename = MakeDisplayPath(filename_);
+       lyxerr[Debug::GRAPHICS] << "[GrahicsCacheItem::convertToDisplayFormat]\n"
+               << "\tAttempting to convert image file: " << filename
+               << "\n\twith displayed filename: " << displayed_filename
+               << endl;
 
        // First, check that the file exists!
        if (!IsFileReadable(filename)) {
                setStatus(ErrorNoFile);
+               lyxerr[Debug::GRAPHICS] << "\tThe file is not readable" << endl;
                return;
        }
 
-// maybe that other zip extensions also be useful, especially the
-// ones that may be declared in texmf/tex/latex/config/graphics.cfg.
-// for example:
-/* -----------snip-------------
-         {\DeclareGraphicsRule{.pz}{eps}{.bb}{}%
-          \DeclareGraphicsRule{.eps.Z}{eps}{.eps.bb}{}%
-          \DeclareGraphicsRule{.ps.Z}{eps}{.ps.bb}{}%
-          \DeclareGraphicsRule{.ps.gz}{eps}{.ps.bb}{}%
-          \DeclareGraphicsRule{.eps.gz}{eps}{.eps.bb}{}}}%
-   -----------snip-------------*/
-
-       lyxerr[Debug::GRAPHICS]
-               << "Attempting to convert image file: " << displayed_filename
-               << "\nwith recognised extension: " << GetExtension(filename)
-               << "." << endl;
-
-       zipped_ = zippedFile(filename);
-       if (zipped_) {
-               filename = unzipFile(filename);
-               unzipped_filename_ = filename;
-       }
-
-       string const from = getExtFromContents(filename);
-       string const to   = grfx::findTargetFormat(from);
-
-       lyxerr[Debug::GRAPHICS]
-               << "The file contains " << from << " format data." << endl;
-
-       if (to.empty()) {
-               setStatus(ErrorConverting);
-               return;
-       }
+       string from = getExtFromContents(filename);
+       // Some old ps-files make problems, so we do not need direct
+       // loading of an ps-file
+       if (from == "ps") {
+               lyxerr[Debug::GRAPHICS] 
+               << "\n\tThe file contains PostScript format data.\n" 
+               << "\tchanging it to eps-format to get it converted to xpm\n";
+               from = "eps";
+       } else
+               lyxerr[Debug::GRAPHICS] 
+                       << "\n\tThe file contains " << from << " format data." << endl;
+       string const to = grfx::findTargetFormat(from);
 
        if (from == to) {
                // No conversion needed!
-               lyxerr[Debug::GRAPHICS] << "No conversion needed!" << endl;
+               lyxerr[Debug::GRAPHICS] << "\tNo conversion needed (from == to)!" << endl;
                file_to_load_ = filename;
                loadImage();
                return;
        }
 
-       lyxerr[Debug::GRAPHICS] << "Converting it to " << to << " format." << endl;
-
+       lyxerr[Debug::GRAPHICS] << "\tConverting it to " << to << " format." << endl;
        // Take only the filename part of the file, without path or extension.
        string const temp = ChangeExtension(OnlyFilename(filename), string());
 
index 583f1bbc684cb03baa9bff7eeb945fa3daab9093..370f26f791e9ee1372d629415e8dd696bc43349c 100644 (file)
@@ -71,48 +71,63 @@ void GConverter::convert(string const & from_file, string const & to_file_base,
                         string const & from_format, string const & to_format,
                         SignalTypePtr on_finish)
 {
+       lyxerr[Debug::GRAPHICS] << "[GraphicsConverter::convert]\n"
+               << "\tfrom_file:    " << from_file
+               << "\n\tto_file_base: " << to_file_base
+               << "\n\tfrom_format:  " << from_format
+               << "\n\tto_format:    " << to_format << endl;
        // The conversion commands are stored in a stringstream
        ostringstream script;
        script << "#!/bin/sh\n";
-
-       bool const success = build_script(from_file, to_file_base,
-                                         from_format, to_format, script);
-
-       if (!success) {
-               lyxerr[Debug::GRAPHICS]
-                       << "Unable to build the conversion script" << std::endl;
-               on_finish->operator()(string());
-               return;
-       }
-
-       lyxerr[Debug::GRAPHICS] << "Conversion script:\n\n"
-                               << script.str().c_str() << "\n" << std::endl;
-
-       // Output the script to file.
-       static int counter = 0;
-       string const script_file = OnlyPath(to_file_base) + "lyxconvert" +
-               tostr(counter++) + ".sh";
-
-       std::ofstream fs(script_file.c_str());
-       if (!fs.good()) {
-               // Unable to output the conversion script to file.
-               on_finish->operator()(string());
-               return;
+       string script_command;
+       string script_file;
+
+       bool success = build_script(from_file, to_file_base,
+                                    from_format, to_format, script);
+
+       if (success) {
+               lyxerr[Debug::GRAPHICS] << "\tConversion script:\n"
+                       << "--------------------------------------\n"
+                       << script.str().c_str() 
+                       << "\n--------------------------------------\n";
+
+               // Output the script to file.
+               static int counter = 0;
+               script_file = OnlyPath(to_file_base) + "lyxconvert" +
+                       tostr(counter++) + ".sh";
+
+               std::ofstream fs(script_file.c_str());
+               if (!fs.good()) {
+                       // Unable to output the conversion script to file.
+                       success = false;
+               } else {
+
+                       fs << script.str().c_str();
+                       fs.close();
+
+                       // Create a dummy command for ease of understanding of the
+                       // list of forked processes.
+                       // Note that 'sh ' is absolutely essential, or execvp will fail.
+                       script_command =
+                               "sh " + script_file + " " +
+                               OnlyFilename(from_file) + " " + to_format;
+               }
        }
 
-       fs << script.str().c_str();
-       fs.close();
-
-       // Create a dummy command for ease of understanding of the
-       // list of forked processes.
-       // Note that 'sh ' is absolutely essential, or execvp will fail.
-       string const script_command =
-               "sh " + script_file + " " +
-               OnlyFilename(from_file) + " " + to_format;
-
        string const to_file =
                ChangeExtension(to_file_base, formats.extension(to_format));
 
+       if (!success) {
+               script_file = string();
+               script_command = 
+                       "convert -depth 8 " +
+                       from_format + ':' + from_file + ' ' +
+                       to_format + ':' + to_file;
+               lyxerr[Debug::GRAPHICS] 
+                       << "\tNo converter defined! I use convert from ImageMagic:\n\t"
+                       << script_command << endl;
+       }       
+
        // Launch the conversion process.
        ConvProcessPtr shared_ptr;
        shared_ptr.reset(new ConvProcess(script_file, script_command,
@@ -161,6 +176,7 @@ bool GConverter::build_script(string const & from_file,
                              string const & to_format,
                              ostringstream & script) const
 {
+       lyxerr[Debug::GRAPHICS] << "[GraphicsConverter::build_script] ... ";
        typedef Converters::EdgePath EdgePath;
 
        string const to_file = ChangeExtension(to_file_base,
@@ -168,12 +184,14 @@ bool GConverter::build_script(string const & from_file,
 
        if (from_format == to_format) {
                script << move_file(QuoteName(from_file), QuoteName(to_file));
+               lyxerr[Debug::GRAPHICS] << "ready (from == to)" << endl;
                return true;
        }
 
        EdgePath edgepath = converters.getPath(from_format, to_format);
 
        if (edgepath.empty()) {
+               lyxerr[Debug::GRAPHICS] << "ready (edgepath.empty())" << endl;
                return false;
        }
 
@@ -244,6 +262,7 @@ bool GConverter::build_script(string const & from_file,
 
        // Move the final outfile to to_file
        script << move_file("${outfile}", QuoteName(to_file));
+       lyxerr[Debug::GRAPHICS] << "ready!" << endl;
 
        return true;
 }
index 6a1e3004e5a7e99a9277ee6d6afa3fc0af9638b4..9ea3845a9d0d6c426f7a4960cd8029d22d8024ad 100644 (file)
@@ -1,3 +1,10 @@
+2002-06-15  Herbert Voss  <voss@perce.de>
+       * insetgraphics.C: (prepareFile) fix bug with zipped eps-files
+       and take always convert when no userdefined converter was
+       found
+       (latex) small changes in the lyxerr output
 2002-06-15  LyX Development team <lyx@rilke>
 
        * inset*.[Ch] (docbook): Added new argument to take the pernicious
index 601d76173619c27d56ceda38de1a8920b0cb5800..e083bc60ff3a36c6e3a76d72bcc9be4de3f13a31 100644 (file)
@@ -101,6 +101,7 @@ TODO Before initial production release:
 #include "support/filetools.h"
 #include "support/lyxalgo.h" // lyx::count
 #include "support/path.h"
+#include "support/systemcall.h"
 
 #include <algorithm> // For the std::max
 
@@ -598,23 +599,63 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
        // LaTeX can cope if the graphics file doesn't exist, so just return the
        // filename.
        string const orig_file = params().filename;
-       string const orig_file_with_path =
+       string orig_file_with_path =
                MakeAbsPath(orig_file, buf->filePath());
-       lyxerr[Debug::GRAPHICS] << "prepareFile: " << orig_file << endl
-                   << "  with path: " << orig_file_with_path << endl;
+       lyxerr[Debug::GRAPHICS] << "[InsetGraphics::prepareFile] orig_file = " 
+                   << orig_file << "\n\twith path: " 
+                   << orig_file_with_path << endl;
 
        if (!IsFileReadable(orig_file_with_path))
                return orig_file;
 
        // If the file is compressed and we have specified that it should not be
        // uncompressed, then just return its name and let LaTeX do the rest!
+
+       // maybe that other zip extensions also be useful, especially the
+       // ones that may be declared in texmf/tex/latex/config/graphics.cfg.
+       // for example:
+       /* -----------snip-------------
+         {\DeclareGraphicsRule{.pz}{eps}{.bb}{}%
+          \DeclareGraphicsRule{.eps.Z}{eps}{.eps.bb}{}%
+          \DeclareGraphicsRule{.ps.Z}{eps}{.ps.bb}{}%
+          \DeclareGraphicsRule{.ps.gz}{eps}{.ps.bb}{}%
+          \DeclareGraphicsRule{.eps.gz}{eps}{.eps.bb}{}}}%
+        -----------snip-------------*/
+
        bool const zipped = zippedFile(orig_file_with_path);
        if (zipped)
-               lyxerr[Debug::GRAPHICS] << "it's a zipped file\n";
-       if (zipped && params().noUnzip) {
-               lyxerr[Debug::GRAPHICS] << "pass file unzipped to LaTeX\n";
-               return orig_file;
+               lyxerr[Debug::GRAPHICS] << "\twe have a zipped file ("
+                       << getExtFromContents(orig_file_with_path) << ")\n";
+       if (params().noUnzip && zipped) {
+               lyxerr[Debug::GRAPHICS] 
+                       << "\tpass file unzipped to LaTeX but with full path.\n";
+               // latex needs an absolue path, otherwise the coresponding
+               // *.eps.bb file isn't found
+               return orig_file_with_path;
        }
+       
+       string temp_file(orig_file);
+       // Uncompress the file if necessary. If it has been uncompressed in
+       // a previous call to prepareFile, do nothing.
+       if (zipped) {
+               temp_file = MakeAbsPath(OnlyFilename(temp_file), buf->tmppath);
+               lyxerr[Debug::GRAPHICS]
+                       << "\ttemp_file: " << temp_file << endl;
+               if (!IsFileReadable(temp_file)) {
+                       bool const success = lyx::copy(orig_file_with_path, temp_file);
+                       lyxerr[Debug::GRAPHICS]
+                               << "\tCopying zipped file from "
+                               << orig_file_with_path << " to " << temp_file
+                               << (success ? " succeeded\n" : " failed\n");
+               } else
+                       lyxerr[Debug::GRAPHICS]
+                               << "\tzipped file " << temp_file 
+                               << " exists! Maybe no tempdir ...\n";
+               orig_file_with_path = unzipFile(temp_file);
+               lyxerr[Debug::GRAPHICS]
+                       << "\tunzipped to " << orig_file_with_path << endl;
+       }
+       string const from = getExtFromContents(orig_file_with_path);
 
        // "nice" means that the buffer is exported to LaTeX format but not
        //        run through the LaTeX compiler.
@@ -635,85 +676,73 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
        // we manipulate the original file "any.dir/file.ext"
        // to "any_dir_file.ext"! changing the dots in the
        // dirname is important for the use of ChangeExtension
-       string temp_file(orig_file);
+       lyxerr[Debug::GRAPHICS]
+               << "\tthe orig file is: " << orig_file_with_path << endl;
+
        if (lyxrc.use_tempdir) {
-               string const ext_tmp = GetExtension(orig_file);
+               string const ext_tmp = GetExtension(orig_file_with_path);
                // without ext and /
                temp_file = subst(
-                       ChangeExtension(temp_file, string()), "/", "_");
-               // without . and again with ext
+                       ChangeExtension(orig_file_with_path, string()), "/", "_");
+               // without dots and again with ext
                temp_file = ChangeExtension(
                        subst(temp_file, ".", "_"), ext_tmp);
                // now we have any_dir_file.ext
                temp_file = MakeAbsPath(temp_file, buf->tmppath);
-       }
-       lyxerr[Debug::GRAPHICS]
-               << "InsetGraphics::prepareFile. The temp file is: "
-               << temp_file << endl;
-
-       // If we are using a temp dir, then copy the file into it.
-       if (lyxrc.use_tempdir && !IsFileReadable(temp_file)) {
-               bool const success = lyx::copy(orig_file_with_path, temp_file);
                lyxerr[Debug::GRAPHICS]
-                       << "InsetGraphics::prepareFile. Copying from "
-                       << orig_file << " to " << temp_file
-                       << (success ? " succeeded\n" : " failed\n");
-               if (!success) {
-                       Alert::alert(_("Cannot copy file"), orig_file,
-                                       _("into tempdir"));
-                       return orig_file;
-               }
-       }
-
-       // Uncompress the file if necessary. If it has been uncompressed in
-       // a previous call to prepareFile, do nothing.
-       if (zipped) {
-               // What we want to end up with:
-               string const temp_file_unzipped =
-                       ChangeExtension(temp_file, string());
-
-               if (!IsFileReadable(temp_file_unzipped)) {
-                       // unzipFile generates a random filename, so move this
-                       // file where we want it to go.
-                       string const tmp = unzipFile(temp_file);
-                       lyx::copy(tmp, temp_file_unzipped);
-                       lyx::unlink(tmp);
-
+                       << "\tchanged to: " << temp_file << endl;
+                       
+               // if the file doen't exists, copy it into the tempdi
+               if (!IsFileReadable(temp_file)) {
+                       bool const success = lyx::copy(orig_file_with_path, temp_file);
                        lyxerr[Debug::GRAPHICS]
-                               << "InsetGraphics::prepareFile. Unzipped to "
-                               << temp_file_unzipped << endl;
+                               << "\tcopying from " << orig_file_with_path << " to " 
+                               << temp_file
+                               << (success ? " succeeded\n" : " failed\n");
+                       if (!success) {
+                               Alert::alert(_("Cannot copy file"), orig_file_with_path,
+                                       _("into tempdir"));
+                               return orig_file;
+                       }
                }
-
-               // We have an uncompressed file where we expect it,
-               // so rename temp_file and continue.
-               temp_file = temp_file_unzipped;
        }
 
-       // Ascertain the graphics format that LaTeX requires.
-       // Make again an absolute path, maybe that we have no
-       // tempdir. Than temp_file=orig_file
-       string const from = lyxrc.use_tempdir ?
-               getExtFromContents(temp_file) :
-               getExtFromContents(MakeAbsPath(temp_file, buf->filePath()));
-       string const to   = findTargetFormat(from);
-
-       // No conversion is needed. LaTeX can handle the graphics file as it is.
-       // This is true even if the orig_file is compressed.
+       string const to = findTargetFormat(from);
+       lyxerr[Debug::GRAPHICS]
+               << "\t we have: from " << from << " to " << to << '\n';
        if (from == to) {
-               return orig_file;
+               // No conversion is needed. LaTeX can handle the graphic file as is.
+               // This is true even if the orig_file is compressed. We have to return
+               // the orig_file_with_path, maybe it is a zipped one
+               return lyxrc.use_tempdir ? temp_file : orig_file_with_path;
        }
-
+       
        string const outfile_base = RemoveExtension(temp_file);
-
        lyxerr[Debug::GRAPHICS]
-               << "InsetGraphics::prepareFile. The original file is "
-               << orig_file << "\n"
-               << "A copy has been made and convert is to be called with:\n"
+               << "\tThe original file is " << orig_file << "\n"
+               << "\tA copy has been made and convert is to be called with:\n"
                << "\tfile to convert = " << temp_file << '\n'
                << "\toutfile_base = " << outfile_base << '\n'
                << "\t from " << from << " to " << to << '\n';
 
-       converters.convert(buf, temp_file, outfile_base, from, to);
+       // if no special converter defined, than we take the default one
+       // from ImageMagic: convert from:inname.from to:outname.to
+       if (!converters.convert(buf, temp_file, outfile_base, from, to)) {
+               string const command = 
+                       "convert " +
+                       from + ':' + temp_file + ' ' +
+                       to + ':' + outfile_base + '.' + to;
+               lyxerr[Debug::GRAPHICS] 
+                       << "No converter defined! I use convert from ImageMagic:\n\t"
+                       << command << endl;
+               Systemcall one;
+               one.startscript(Systemcall::Wait, command);
+               if (!IsFileReadable(ChangeExtension(outfile_base, to)))
+                       Alert::alert(_("Cannot convert Image (not existing file??)"),
+                               _("No information for converting from ")
+                               + from + _(" to ") + to);
+       }
+       
        return RemoveExtension(temp_file);
 }
 
@@ -742,7 +771,7 @@ int InsetGraphics::latex(Buffer const *buf, ostream & os,
        // draws only a rectangle with the above bb and the
        // not found filename in it.
        lyxerr[Debug::GRAPHICS]
-               << "InsetGraphics::latex. Message = \"" << message << '\"' << endl;
+               << "\tMessage = \"" << message << '\"' << endl;
 
        // These variables collect all the latex code that should be before and
        // after the actual includegraphics command.
@@ -758,19 +787,18 @@ int InsetGraphics::latex(Buffer const *buf, ostream & os,
 
        // Write the options if there are any.
        string const opts = createLatexOptions();
-       lyxerr[Debug::GRAPHICS]
-               << "InsetGraphics::latex. Opts = " << opts << endl;
+       lyxerr[Debug::GRAPHICS] << "\tOpts = " << opts << endl;
 
        if (!opts.empty() && !message.empty())
-               before += ("[" + opts + ',' + message);
+               before += ("[%\n" + opts + ',' + message);
        else if (!message.empty())
-               before += ('[' + message);
+               before += ("[%\n" + message);
        else if (!opts.empty())
-               before += ("[" + opts + ']');
+               before += ("[%\n" + opts + ']');
 
        lyxerr[Debug::GRAPHICS]
-               << "InsetGraphics::latex. Before = " << before
-               << "\nafter = " << after << endl;
+               << "\tBefore = " << before
+               << "\n\tafter = " << after << endl;
 
        // Make the filename relative to the lyx file
        // and remove the extension so the LaTeX will use whatever is
index 4408f4725ef2dacbf68a49283b1020d8b1c60ec0..ec2dae20151ad2b47d941a945c8dcdb4c82ec598 100644 (file)
@@ -1774,7 +1774,6 @@ void LyXFunc::menuNew(bool fromTemplate)
                            << disp_fn << "...";
 
                        owner->message(str.str().c_str());
-                       //XFlush(fl_get_display());
                        owner->view()->buffer(bufferlist.loadLyXFile(s));
                        ostringstream str2;
                        str2 << _("Document") << ' '
index b88565dd7f45c2d50944b764378344140ae36bb2..6344f6e3f5f968d22ac10d7da7327a13ac050b50 100644 (file)
@@ -1,3 +1,12 @@
+2002-06-17  Herbert Voss  <voss@perce.de>
+
+       * filetools.[C]: (readBB_from_PSFile) add a helperfunc
+       (readBB_lyxerrMessage) to get better lyxerr messages
+       (getExtFromContents) test epsi files in the right way
+               
+       * DestroxLyXTmpDir.C: changed to true, to delete the
+       temporary unzipped files, too.
+
 2002-06-10  Lars Gullik Bjønnes  <larsbj@birdstep.com>
 
        * putenv.C (putenv): putenv should never be found in std::
index 04acf503ae0affa48780cf10f83d587fb75c931a..9e17a3faab9af1fbc55f963c24ffcd66efc686e6 100644 (file)
@@ -25,6 +25,7 @@
 #include "support/systemcall.h"
 
 #include "filetools.h"
+#include "lstrings.h"
 #include "frontends/Alert.h"
 #include "FileInfo.h"
 #include "support/path.h"        // I know it's OS/2 specific (SMiyata)
@@ -557,9 +558,10 @@ string const CreateLyXTmpDir(string const & deflt)
 }
 
 
+// FIXME: no need for separate method like this ... 
 int DestroyLyXTmpDir(string const & tmpdir)
 {
-       return DestroyTmpDir (tmpdir, false); // Why false?
+       return DestroyTmpDir(tmpdir, true); 
 }
 
 
@@ -991,6 +993,8 @@ string const GetExtension(string const & name)
 // AGR Grace...
 // BMP BM...
 // EPS %!PS-Adobe-3.0 EPSF...
+// EPSI like EPS and with
+//      %%BeginPreview...
 // FITS ...BITPIX...
 // GIF GIF...
 // JPG JFIF
@@ -1021,6 +1025,7 @@ string const getExtFromContents(string const & filename)
        if (filename.empty() || !IsFileReadable(filename))
                return string();
 
+       
        ifstream ifs(filename.c_str());
        if (!ifs)
                // Couldn't open file...
@@ -1138,7 +1143,7 @@ string const getExtFromContents(string const & filename)
                else if (contains(str,"%!PS-Adobe")) {
                        // eps or ps
                        ifs >> str;
-                       if (contains(str,"EPSF"))
+                       if (contains(str,"EPSF")) 
                                format = "eps";
                        else
                            format = "ps";
@@ -1155,9 +1160,25 @@ string const getExtFromContents(string const & filename)
        }
 
        if (!format.empty()) {
-           lyxerr[Debug::GRAPHICS]
-               << "Recognised Fileformat: " << format << endl;
-           return format;
+               // if we have eps than epsi is also possible
+               // we have to check for a preview
+               if (format == "eps") {
+                       lyxerr[Debug::GRAPHICS]
+                               << "\teps detected -> test for an epsi ..."
+                               << endl;
+                       while (count++ < max_count) {
+                               if (ifs.eof())
+                                       break;
+                               getline(ifs, str);
+                               if (contains(str, "BeginPreview")) {
+                                       format = "epsi";
+                                       count = max_count;
+                               }
+                       }
+               }
+               lyxerr[Debug::GRAPHICS]
+                       << "Recognised Fileformat: " << format << endl;
+               return format;
        }
 
        string const ext(GetExtension(filename));
@@ -1362,6 +1383,16 @@ void removeAutosaveFile(string const & filename)
 }
 
 
+void readBB_lyxerrMessage(string const & file, bool & zipped, 
+       string const & message) 
+{
+       lyxerr[Debug::GRAPHICS] << "[readBB_from_PSFile] " 
+               << message << std::endl;
+       if (zipped)
+               lyx::unlink(file);
+}
+
+
 string const readBB_from_PSFile(string const & file)
 {
        // in a (e)ps-file it's an entry like %%BoundingBox:23 45 321 345
@@ -1371,18 +1402,26 @@ string const readBB_from_PSFile(string const & file)
        // end of the file. Than we have in the header:
        // %%BoundingBox: (atend)
        // In this case we must check the end.
-       string const file_ = zippedFile(file) ?
+       bool zipped = zippedFile(file);
+       string const file_ = zipped ?
                string(unzipFile(file)) : string(file);
        string const format = getExtFromContents(file_);
-       if (format != "eps" && format != "ps")
+
+       if (format != "eps" && format != "ps") {
+               readBB_lyxerrMessage(file_, zipped,"no(e)ps-format"); 
                return string();
+       }
 
        std::ifstream is(file_.c_str());
        while (is) {
                string s;
                getline(is,s);
-               if (contains(s,"%%BoundingBox:") && !contains(s,"atend"))
-                       return (frontStrip(s.substr(14)));
+               if (contains(s,"%%BoundingBox:") && !contains(s,"atend")) {
+                       string const bb = frontStrip(s.substr(14));
+                       readBB_lyxerrMessage(file_, zipped, bb);
+                       return bb;
+               }
        }
+       readBB_lyxerrMessage(file_, zipped, "no bb found");
        return string();
 }